Name: series-workflowt7ksm Phase: Succeeded StartedAt: 2026-07-29 00:10:41 +0000 UTC FinishedAt: 2026-07-29 05:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[0] Phase: Succeeded StartedAt: 2026-07-29 00:10:41 +0000 UTC FinishedAt: 2026-07-29 00:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 00:10:41 +0000 UTC FinishedAt: 2026-07-29 00:57:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e095f249e2209674f6366f6db0383a2b96e19239", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e095f249e2209674f6366f6db0383a2b96e19239", "config_name": "upstream-apparmor-kasan.config", "series_id": "ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_fib_metrics_init", "fib_create_info", "ip6_route_add" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfZmliX21ldHJpY3NfaW5pdCYjMzQ7LAogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7aXA2X3JvdXRlX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGVjayB0byBgaXBfbWV0cmljc19jb252ZXJ0YCB0byBlbnN1cmUgdGhhdCB0aGUgYFJUQVhfQURWTVNTYCBtZXRyaWMgaXMgZWl0aGVyIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBUQ1BfTUlOX01TU2AuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBjb25maWd1cmluZyBJUHY0IG9yIElQdjYgcm91dGVzIHdpdGggbWV0cmljcyB2aWEgbmV0bGluayAoZS5nLiwgYFJUTV9ORVdST1VURWApLiBTaW5jZSBpdCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWI2ODNiODNiZDEyYWJhNTJmYjcxNzZjNmE2NGUzZWQ4MDQ1OThiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDAwOjU2OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L21ldHJpY3MuYyBiL25ldC9pcHY0L21ldHJpY3MuY1xuaW5kZXggYWQ0MDc2MmE4YjM4My4uYjliOTdhMGE1MTI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L21ldHJpY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbWV0cmljcy5jXG5AQCAtNDQsNiAmIzQzOzQ0LDEyIEBAIHN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxuIFx0XHRcdH1cbiBcdFx0XHR2YWwgPSBubGFfZ2V0X3UzMihubGEpO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAodHlwZSA9PSBSVEFYX0FEVk1TUyBcdTAwMjZcdTAwMjYgdmFsIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNjIFRDUF9NSU5fTVNTKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFJfRk1UKGV4dGFjaywgbmxhLFxuJiM0MztcdFx0XHRcdFx0XHRcJiMzNDtJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yIFx1MDAzZT0gJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFRDUF9NSU5fTVNTKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNlIDY1NTM1IC0gNDApXG4gXHRcdFx0dmFsID0gNjU1MzUgLSA0MDtcbiBcdFx0aWYgKHR5cGUgPT0gUlRBWF9NVFUgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2UgNjU1MzUgLSAxNSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9maWJfbWV0cmljc19pbml0JiMzNDssCiAgICAmIzM0O2ZpYl9jcmVhdGVfaW5mbyYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoZWNrIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHRvIGVuc3VyZSB0aGF0IHRoZSBgUlRBWF9BRFZNU1NgIG1ldHJpYyBpcyBlaXRoZXIgMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFRDUF9NSU5fTVNTYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIElQdjQgb3IgSVB2NiByb3V0ZXMgd2l0aCBtZXRyaWNzIHZpYSBuZXRsaW5rIChlLmcuLCBgUlRNX05FV1JPVVRFYCkuIFNpbmNlIGl0IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYjY4M2I4M2JkMTJhYmE1MmZiNzE3NmM2YTY0ZTNlZDgwNDU5OGIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDA6NTY6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9tZXRyaWNzLmMgYi9uZXQvaXB2NC9tZXRyaWNzLmMKaW5kZXggYWQ0MDc2MmE4YjM4My4uYjliOTdhMGE1MTI2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbWV0cmljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L21ldHJpY3MuYwpAQCAtNDQsNiAmIzQzOzQ0LDEyIEBAIHN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LAogCQkJfQogCQkJdmFsID0gbmxhX2dldF91MzIobmxhKTsKIAkJfQomIzQzOwkJaWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgJmFtcDsmYW1wOyB2YWwgJmFtcDsmYW1wOyB2YWwgJmx0OyBUQ1BfTUlOX01TUykgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0FUVFJfRk1UKGV4dGFjaywgbmxhLAomIzQzOwkJCQkJCSYjMzQ7SW52YWxpZCBhZHZtc3MsIG11c3QgYmUgMCBvciAmZ3Q7PSAldSYjMzQ7LAomIzQzOwkJCQkJCVRDUF9NSU5fTVNTKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAkJaWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgJmFtcDsmYW1wOyB2YWwgJmd0OyA2NTUzNSAtIDQwKQogCQkJdmFsID0gNjU1MzUgLSA0MDsKIAkJaWYgKHR5cGUgPT0gUlRBWF9NVFUgJmFtcDsmYW1wOyB2YWwgJmd0OyA2NTUzNSAtIDE1KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IElQIE1ldHJpYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gcHJvcG9zZWQgZm9yIGBuZXQvaXB2NC9tZXRyaWNzLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgaXBfbWV0cmljc19jb252ZXJ0YCBmdW5jdGlvbi4gU2VlbXMgbGlrZSBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgdGhleSYjMzk7cmUgYWRkaW5nIGEgdmFsaWRhdGlvbiBjaGVjayBmb3IgdGhlIGBSVEFYX0FEVk1TU2AgbWV0cmljLiBFc3NlbnRpYWxseSwgaWYgc29tZW9uZSB0cmllcyB0byBzZXQgYW4gYGFkdm1zc2AgdmFsdWUgbGVzcyB0aGFuIGBUQ1BfTUlOX01TU2AgKGFuZCBpdCYjMzk7cyBub3QgemVybyksIHRoZSBmdW5jdGlvbiBub3cgdGhyb3dzIGEgYC1FSU5WQUxgIGVycm9yLiBUaGF0JiMzOTtzIGdvb2QsIHByZXZlbnRzIHRob3NlIG91dC1vZi1zcGVjIHZhbHVlcyBmcm9tIHBvdGVudGlhbGx5IGNhdXNpbmcgaXNzdWVzIGRvd24gdGhlIGxpbmUuIFdlIHdvdWxkbiYjMzk7dCB3YW50IHRob3NlIHNldHRpbmcgdGhlaXIgTVRVIGRvd24gdG9vIGxvdy4KClJpZ2h0LCBzbyBgaXBfbWV0cmljc19jb252ZXJ0YCBpcyB1c2VkIHdoZW4gd2UmIzM5O3JlIHNldHRpbmcgSVAgbWV0cmljcyB0aHJvdWdoIG5ldGxpbmsg4oCTIHRoaW5rIHJvdXRpbmcgdGFibGUgdXBkYXRlcywgdGhhdCBzb3J0IG9mIHRoaW5nLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgdmFsaWRhdGlvbiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gcmVncmVzc2lvbnMgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gVGhlIGNvZGUgbG9va3MgY29ycmVjdCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgdGhvcm91Z2guIE5vdywgbGV0IG1lIGRpZyBpbnRvIHdoZXJlIHRoaXMgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWV0cmljc19jb252ZXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L21ldHJpY3MuYy05LVxubmV0L2lwdjQvbWV0cmljcy5jOjEwOnN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxubmV0L2lwdjQvbWV0cmljcy5jLTExLVx0XHRcdCAgICAgIGludCBmY19teF9sZW4sIHUzMiAqbWV0cmljcyxcbi0tXG5uZXQvaXB2NC9tZXRyaWNzLmM9NzI9c3RydWN0IGRzdF9tZXRyaWNzICppcF9maWJfbWV0cmljc19pbml0KHN0cnVjdCBubGF0dHIgKmZjX214LFxuLS1cbm5ldC9pcHY0L21ldHJpY3MuYy04NS1cbm5ldC9pcHY0L21ldHJpY3MuYzo4NjpcdGVyciA9IGlwX21ldHJpY3NfY29udmVydChmY19teCwgZmNfbXhfbGVuLCBmaWJfbWV0cmljcy1cdTAwM2VtZXRyaWNzLFxubmV0L2lwdjQvbWV0cmljcy5jLTg3LVx0XHRcdFx0IGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgbXlzZWxmLCBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgaXBfZmliX21ldHJpY3NfaW5pdGAgRnVuY3Rpb24qKgoKUmlnaHQsIGBpcF9maWJfbWV0cmljc19pbml0YCBoYXMgdG8gYmUgaW5pdGlhbGl6aW5nIHNvbWV0aGluZy4gVGhlIGNvZGUgZGlyZWN0bHkgY2FsbHMgYGlwX21ldHJpY3NfY29udmVydGAsIHdoaWNoIGlzIGEgZGVjZW50IGNsdWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrLiBXaGVyZSYjMzk7cyB0aGlzIGBpcF9maWJfbWV0cmljc19pbml0YCByb3V0aW5lIGJlaW5nIGludm9rZWQ/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgcHVycG9zZSBvZiB0aGF0IGZ1bmN0aW9uIGlzIGtleSB0byBtYWtpbmcgdGhpcyBjb2RlIG1ha2Ugc2Vuc2UsIHNvIEkmIzM5O20gZ29pbmcgdG8gZmluZCBhbGwgY2FsbHMgdG8gdGhpcyByb3V0aW5lIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlIGFuZCBjb250ZXh0LiBUaGF0JiMzOTtsbCBndWlkZSBteSBzdWJzZXF1ZW50IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2ZpYl9tZXRyaWNzX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzNDU9c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTQwMy1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxNDA0Olx0ZmktXHUwMDNlZmliX21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cdTAwM2VmY19teCwgY2ZnLVx1MDAzZWZjX214X2xlbiwgZXh0YWNrKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNDA1LVx0aWYgKElTX0VSUihmaS1cdTAwM2VmaWJfbWV0cmljcykpIHtcbi0tXG5uZXQvaXB2NC9tZXRyaWNzLmM9MTA9c3RhdGljIGludCBpcF9tZXRyaWNzX2NvbnZlcnQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXG4tLVxubmV0L2lwdjQvbWV0cmljcy5jLTcxLVxubmV0L2lwdjQvbWV0cmljcy5jOjcyOnN0cnVjdCBkc3RfbWV0cmljcyAqaXBfZmliX21ldHJpY3NfaW5pdChzdHJ1Y3QgbmxhdHRyICpmY19teCxcbm5ldC9pcHY0L21ldHJpY3MuYy03My1cdFx0XHRcdFx0aW50IGZjX214X2xlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRklCIE1ldHJpYyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgZmliX2NyZWF0ZV9pbmZvYCBjYWxscyBgaXBfZmliX21ldHJpY3NfaW5pdGAuIFRoYXQmIzM5O3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSB0cmlnZ2VyZWQgZHVyaW5nIGEgbmV0bGluayByb3V0ZSBhZGRpdGlvbiwgc3BlY2lmaWNhbGx5IGEgYFJUTV9ORVdST1VURWAgbWVzc2FnZS4gTm93LCB0aGUgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gaXMgc3RhdGljLiBFeGNlbGxlbnQuIFRoYXQgbWVhbnMgSSBjYW4gbmFycm93IG15IGZvY3VzOyBpdCYjMzk7cyBlaXRoZXIgZ29pbmcgdG8gYmUgaW4gYGlwX2ZpYl9tZXRyaWNzX2luaXRgIG9yIGBmaWJfY3JlYXRlX2luZm9gLiBXYWl0Li4uaXMgYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGV4cG9ydGVkIG9yIGp1c3Qgbm90IHN0YXRpYz8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBpdHMgdmlzaWJpbGl0eS4gUmlnaHQsIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY0L21ldHJpY3MuY2Agc291cmNlIGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2ZpYl9tZXRyaWNzX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9tZXRyaWNzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbWV0cmljcy5jPTEwPXN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxuLS1cbm5ldC9pcHY0L21ldHJpY3MuYy03MS1cbm5ldC9pcHY0L21ldHJpY3MuYzo3MjpzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXG5uZXQvaXB2NC9tZXRyaWNzLmMtNzMtXHRcdFx0XHRcdGludCBmY19teF9sZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGNvbnNpZGVyaW5nIEkga25vdyBteSB3YXkgYXJvdW5kIHRoZSBrZXJuZWw6CgoqKkNoZWNraW5nIGZvciBFeHBvcnRlZCBTeW1ib2w6IGBpcF9maWJfbWV0cmljc19pbml0YCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHZlcmlmeSBpZiB0aGlzIGBpcF9maWJfbWV0cmljc19pbml0YCBzeW1ib2wgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEkmIzM5O3ZlIGVuY291bnRlcmVkIHRoaXMga2luZCBvZiBzaXR1YXRpb24gYmVmb3JlLCB3aGVyZSBhIGZ1bmN0aW9uJiMzOTtzIHZpc2liaWxpdHkgY2FuIGltcGFjdCBpdHMgYXZhaWxhYmlsaXR5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1vZHVsZXMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBzb21laG93LiBJcyBpdCBkZWZpbmVkIGluIHRoZSBjb3JyZWN0IGhlYWRlcj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGBncmVwYCB0aHJvdWdoIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgb3IgdXNlIGEgdG9vbCBsaWtlIGBubWAgb3IgYG9iamR1bXBgIG9uIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlIG9iamVjdCBmaWxlcy4gSXTigJlzIGxpa2VseSB0aGF0IGl0IG5lZWRzIHRvIGJlIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBvciBpdCBtYXkgYmUgd2l0aGluIGEgc3RhdGljIGNvbnRleHQuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgKnN1cHBvc2VkKiB0byBiZSB1c2VkIGlzIGFsc28gdXNlZnVsIGNvbnRleHQsIHRoYXQgd291bGQgcmVmaW5lIHRoZSBzZWFyY2guIFRoaXMgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIElmIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgdGhlbiBpdCYjMzk7cyBhIG5vLWdvIGZvciBkaXJlY3QgYWNjZXNzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgYWNjZXNzIG1ldGhvZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qaXBfZmliX21ldHJpY3NfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L21ldHJpY3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgVmFyaWFibGUmIzM5O3MgUHJvcGVydGllcyoqCgpBbHJpZ2h0LCBzbyB0aGUgdmFyaWFibGUgaW4gcXVlc3Rpb24gaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZS4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBzdGF0aWMgaXMgYSBzaWduaWZpY2FudCBwb2ludC4gVGhhdCBpbXBsaWVzIHNvbWUgZm9ybSBvZiBleHRlcm5hbCB2aXNpYmlsaXR5IG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgbGlua2FnZSBwb3RlbnRpYWwgd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlIG9yIHBvdGVudGlhbGx5IGluaGVyaXRlZCBzY29wZXMuIFRoaXMgbGFjayBvZiBzdGF0aWMgZGVzaWduYXRpb24gc3VnZ2VzdHMgaXQgY291bGQgYmUgbW9kaWZpZWQgb3IgYWNjZXNzZWQgaW4gd2F5cyB0aGF0IGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBNeSBuZXh0IHN0ZXA/IExldCYjMzk7cyBpbW1lZGlhdGVseSBkaXZlIGludG8gYGZpYl9jcmVhdGVfaW5mb2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhhdCB2YXJpYWJsZS4gVGhlIGNhbGwgY29udGV4dCBhbmQgcHJvcGVydGllcyBvZiBgZmliX2NyZWF0ZV9pbmZvYCBhcmUgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBpbGx1bWluYXRlIHRoZSB1c2UgY2FzZXMgZm9yIG91ciB1bm5hbWVkIHZhcmlhYmxlLiBJdHMgcHJvYmFibHkgcGFzc2VkIHRoZXJlLCBvciBhZmZlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBzdG9yeSB3aWxsIHJlYWxseSBzdGFydCB0byB1bmZvbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9jcmVhdGVfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfbG9va3VwLmg9Mzg9dm9pZCBmaWJfcmVsZWFzZV9pbmZvKHN0cnVjdCBmaWJfaW5mbyAqKTtcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxubmV0L2lwdjQvZmliX2xvb2t1cC5oLTQwLVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzMjE9c3RhdGljIGJvb2wgZmliX3ZhbGlkX3ByZWZzcmMoc3RydWN0IGZpYl9jb25maWcgKmNmZywgX19iZTMyIGZpYl9wcmVmc3JjKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ0LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzNDU6c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ2LVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9maWJfdHJpZS5jPTExOTQ9aW50IGZpYl90YWJsZV9pbnNlcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3RhYmxlICp0Yixcbi0tXG5uZXQvaXB2NC9maWJfdHJpZS5jLTEyMTEtXG5uZXQvaXB2NC9maWJfdHJpZS5jOjEyMTI6XHRmaSA9IGZpYl9jcmVhdGVfaW5mbyhjZmcsIGV4dGFjayk7XG5uZXQvaXB2NC9maWJfdHJpZS5jLTEyMTMtXHRpZiAoSVNfRVJSKGZpKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjI5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUm91dGUgSW5zZXJ0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHJvdXRpbmcgaW5mb3JtYXRpb24gZ2V0cyBhZGRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGZpYl90YWJsZV9pbnNlcnRgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUuIEl0JiMzOTtzIGNhbGxlZCBieSBgaW5ldF9ydG1fbmV3cm91dGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQmIzM5O3Mgb3VyIGVudHJ5IHBvaW50LiBBbmQgYGZpYl90YWJsZV9pbnNlcnRgIGl0c2VsZiBjYWxscyBgZmliX2NyZWF0ZV9pbmZvYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGNyZWF0aW9uIHByb2Nlc3MuCgpTbywgSSBzaG91bGQgZm9jdXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBpcF9maWJfbWV0cmljc19pbml0YCwgYGZpYl9jcmVhdGVfaW5mb2AsIGBmaWJfdGFibGVfaW5zZXJ0YCwgYW5kIGRlZmluaXRlbHkgYGluZXRfcnRtX25ld3JvdXRlYC4gSSB0aGluayBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGNhbGwgY2hhaW4uIGBpcF9maWJfbWV0cmljc19pbml0YCBhbHNvIHNlZW1zIHByb21pc2luZy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBjaGVjayBgbmV0L2lwdjQvbWV0cmljcy5jYCB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBpcF9maWJfbWV0cmljc19pbml0YC4gR29vZCwgaXQmIzM5O3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgbW9kdWxlLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIHByZXNlbmNlLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgKm5vdCogY29udGluZ2VudCBvbiBgQ09ORklHX0lQX1JPVVRFX0NMQVNTSURgLiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHByb2JhYmx5IGNvbXBpbGVkIGluIGZvciBJUHY0IHJlZ2FyZGxlc3MuIEp1c3QgdG8gYmUgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXRyaWNzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTEwLVx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTE6XHQgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIHRjcF9tZXRyaWNzLm8gdGNwX2Zhc3RvcGVuLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTEyLVx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNi1cdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE3Olx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xubmV0L2lwdjQvTWFrZWZpbGUtMTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluY2x1c2lvbiBvZiBtZXRyaWNzLm8qKgoKT2theSwgc28gYG1ldHJpY3Mub2AgaXMgZGVmaW5pdGVseSBnZXR0aW5nIGNvbXBpbGVkIGJlY2F1c2UgaXQmIzM5O3MgbGlzdGVkIHVuZGVyIGBvYmoteWAuIFRoYXQgbWVhbnMgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGluY2x1ZGVkIGFzIGxvbmcgYXMgdGhlIHBhcmVudCBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZS4gTm93LCB0aGUgcGFyZW50IG9mIGBtZXRyaWNzLm9gIGlzIElQdjQuCgpSaWdodCwgSVB2NCBpcyBicm91Z2h0IGluIGJ5IGBDT05GSUdfSU5FVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQ09ORklHX0lORVRgIGFmZmVjdHMgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGluY2x1c2lvbiBvZiBgbWV0cmljcy5vYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0lORVRgLiBTbywgbm93IEkgc2hvdWxkIGxvb2sgYXQgYFRDUF9NSU5fTVNTYCB0byBmaWd1cmUgb3V0IHRoZSBsYXJnZXIgaW1wbGljYXRpb25zIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9NSU5fTVNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9Njg9dm9pZCB0Y3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTgxLS8qIE1pbmltYWwgYWNjZXB0ZWQgTVNTLiBJdCBpcyAoNjAmIzQzOzYwJiM0Mzs4KSAtICgyMCYjNDM7MjApLiAqL1xuaW5jbHVkZS9uZXQvdGNwLmg6ODI6I2RlZmluZSBUQ1BfTUlOX01TU1x0XHQ4OFVcbmluY2x1ZGUvbmV0L3RjcC5oLTgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzI5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSVAgTWV0cmljIFVwZGF0ZTogQSBRdWljayBSZXZpZXcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIHRoZSBgUlRBWF9BRFZNU1NgIHZhbHVlIHdoZW4gSVAgbWV0cmljcyBhcmUgYmVpbmcgc2V0LiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2Ug4oCTIHdlIHdhbnQgdG8gYmUgcm9idXN0IGluIGhhbmRsaW5nIHBvdGVudGlhbCB2YXJpYXRpb25zLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgZGVmaW5pdGVseSBkb2luZyBzb21ldGhpbmcgYW5kIEkgY2FuIHNlZSB3aGVyZSB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGVkLiBMZXQmIzM5O3Mgc2VlIHRoZSBjb250ZXh0LgoKSSBzZWUgdGhlIGtleSBzeW1ib2xzIGFyZSBgaXBfZmliX21ldHJpY3NfaW5pdGAgYW5kIGBmaWJfY3JlYXRlX2luZm9gLiBJIGRvbiYjMzk7dCBzZWUgYW55IHdlaXJkIGRlcGVuZGVuY2llcyBoZXJlOyBsb29rcyBsaWtlIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGVuYWJsZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYmV5b25kIGBJTkVUYCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggYXNzdW1lZCB0aGVzZSBkYXlzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgYGlwX21ldHJpY3NfY29udmVydGAgaW4gYG5ldC9pcHY0L21ldHJpY3MuY2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGFkZGl0aW9uIGlzIHBsYXlpbmcgbmljZWx5IHdpdGggZXZlcnl0aGluZyBlbHNlIGluIHRoYXQgZmlsZS4gVGhhdCYjMzk7cyB0aGUgaW1wb3J0YW50IGJpdCBmb3IgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbWV0cmljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3NwZWMuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdHN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxuICAxMTpcdFx0XHRcdCAgICAgIGludCBmY19teF9sZW4sIHUzMiAqbWV0cmljcyxcbiAgMTI6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gIDEzOlx0e1xuICAxNDpcdFx0Ym9vbCBlY25fY2EgPSBmYWxzZTtcbiAgMTU6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbiAgMTY6XHRcdGludCByZW1haW5pbmc7XG4gIDE3Olx0XG4gIDE4Olx0XHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGZjX214LCBmY19teF9sZW4sIHJlbWFpbmluZykge1xuICAxOTpcdFx0XHRpbnQgdHlwZSA9IG5sYV90eXBlKG5sYSk7XG4gIDIwOlx0XHRcdHUzMiB2YWw7XG4gIDIxOlx0XG4gIDIyOlx0XHRcdGlmICghdHlwZSlcbiAgMjM6XHRcdFx0XHRjb250aW51ZTtcbiAgMjQ6XHRcdFx0aWYgKHR5cGUgXHUwMDNlIFJUQVhfTUFYKSB7XG4gIDI1Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIG1ldHJpYyB0eXBlXCYjMzQ7KTtcbiAgMjY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgMjc6XHRcdFx0fVxuICAyODpcdFxuICAyOTpcdFx0XHR0eXBlID0gYXJyYXlfaW5kZXhfbm9zcGVjKHR5cGUsIFJUQVhfTUFYICYjNDM7IDEpO1xuICAzMDpcdFx0XHRpZiAodHlwZSA9PSBSVEFYX0NDX0FMR08pIHtcbiAgMzE6XHRcdFx0XHRjaGFyIHRtcFtUQ1BfQ0FfTkFNRV9NQVhdO1xuICAzMjpcdFxuICAzMzpcdFx0XHRcdG5sYV9zdHJzY3B5KHRtcCwgbmxhLCBzaXplb2YodG1wKSk7XG4gIDM0Olx0XHRcdFx0dmFsID0gdGNwX2NhX2dldF9rZXlfYnlfbmFtZSh0bXAsIFx1MDAyNmVjbl9jYSk7XG4gIDM1Olx0XHRcdFx0aWYgKHZhbCA9PSBUQ1BfQ0FfVU5TUEVDKSB7XG4gIDM2Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1Vua25vd24gdGNwIGNvbmdlc3Rpb24gYWxnb3JpdGhtXCYjMzQ7KTtcbiAgMzc6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICAzODpcdFx0XHRcdH1cbiAgMzk6XHRcdFx0fSBlbHNlIHtcbiAgNDA6XHRcdFx0XHRpZiAobmxhX2xlbihubGEpICE9IHNpemVvZih1MzIpKSB7XG4gIDQxOlx0XHRcdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGV4dGFjaywgbmxhLFxuICA0MjpcdFx0XHRcdFx0XHRcdCAgICBcJiMzNDtJbnZhbGlkIGF0dHJpYnV0ZSBpbiBtZXRyaWNzXCYjMzQ7KTtcbiAgNDM6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA0NDpcdFx0XHRcdH1cbiAgNDU6XHRcdFx0XHR2YWwgPSBubGFfZ2V0X3UzMihubGEpO1xuICA0NjpcdFx0XHR9XG4gIDQ3Olx0XHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2MgVENQX01JTl9NU1MpIHtcbiAgNDg6XHRcdFx0XHROTF9TRVRfRVJSX01TR19BVFRSX0ZNVChleHRhY2ssIG5sYSxcbiAgNDk6XHRcdFx0XHRcdFx0XHRcJiMzNDtJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yIFx1MDAzZT0gJXVcJiMzNDssXG4gIDUwOlx0XHRcdFx0XHRcdFx0VENQX01JTl9NU1MpO1xuICA1MTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA1MjpcdFx0XHR9XG4gIDUzOlx0XHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNlIDY1NTM1IC0gNDApXG4gIDU0Olx0XHRcdFx0dmFsID0gNjU1MzUgLSA0MDtcbiAgNTU6XHRcdFx0aWYgKHR5cGUgPT0gUlRBWF9NVFUgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2UgNjU1MzUgLSAxNSlcbiAgNTY6XHRcdFx0XHR2YWwgPSA2NTUzNSAtIDE1O1xuICA1NzpcdFx0XHRpZiAodHlwZSA9PSBSVEFYX0hPUExJTUlUIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNlIDI1NSlcbiAgNTg6XHRcdFx0XHR2YWwgPSAyNTU7XG4gIDU5Olx0XHRcdGlmICh0eXBlID09IFJUQVhfRkVBVFVSRVMgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IH5SVEFYX0ZFQVRVUkVfTUFTSykpIHtcbiAgNjA6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1Vua25vd24gZmxhZyBzZXQgaW4gZmVhdHVyZSBtYXNrIGluIG1ldHJpY3MgYXR0cmlidXRlXCYjMzQ7KTtcbiAgNjE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNjI6XHRcdFx0fVxuICA2MzpcdFx0XHRtZXRyaWNzW3R5cGUgLSAxXSA9IHZhbDtcbiAgNjQ6XHRcdH1cbiAgNjU6XHRcbiAgNjY6XHRcdGlmIChlY25fY2EpXG4gIDY3Olx0XHRcdG1ldHJpY3NbUlRBWF9GRUFUVVJFUyAtIDFdIHw9IERTVF9GRUFUVVJFX0VDTl9DQTtcbiAgNjg6XHRcbiAgNjk6XHRcdHJldHVybiAwO1xuICA3MDpcdH1cbiAgNzE6XHRcbiAgNzI6XHRzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXG4gIDczOlx0XHRcdFx0XHRcdGludCBmY19teF9sZW4sXG4gIDc0Olx0XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgNzU6XHR7XG4gIDc2Olx0XHRzdHJ1Y3QgZHN0X21ldHJpY3MgKmZpYl9tZXRyaWNzO1xuICA3NzpcdFx0aW50IGVycjtcbiAgNzg6XHRcbiAgNzk6XHRcdGlmICghZmNfbXgpXG4gIDgwOlx0XHRcdHJldHVybiAoc3RydWN0IGRzdF9tZXRyaWNzICopXHUwMDI2ZHN0X2RlZmF1bHRfbWV0cmljcztcbiAgODE6XHRcbiAgODI6XHRcdGZpYl9tZXRyaWNzID0ga3phbGxvY19vYmooKmZpYl9tZXRyaWNzKTtcbiAgODM6XHRcdGlmICh1bmxpa2VseSghZmliX21ldHJpY3MpKVxuICA4NDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiAgODU6XHRcbiAgODY6XHRcdGVyciA9IGlwX21ldHJpY3NfY29udmVydChmY19teCwgZmNfbXhfbGVuLCBmaWJfbWV0cmljcy1cdTAwM2VtZXRyaWNzLFxuICA4NzpcdFx0XHRcdFx0IGV4dGFjayk7XG4gIDg4Olx0XHRpZiAoIWVycikge1xuICA4OTpcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2ZmliX21ldHJpY3MtXHUwMDNlcmVmY250LCAxKTtcbiAgOTA6XHRcdH0gZWxzZSB7XG4gIDkxOlx0XHRcdGtmcmVlKGZpYl9tZXRyaWNzKTtcbiAgOTI6XHRcdFx0ZmliX21ldHJpY3MgPSBFUlJfUFRSKGVycik7XG4gIDkzOlx0XHR9XG4gIDk0Olx0XG4gIDk1Olx0XHRyZXR1cm4gZmliX21ldHJpY3M7XG4gIDk2Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSVAgRklCIE1ldHJpY3MgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIG5vbi1zdGF0aWMgb25lLiBUaGF0IGZlZWxzIHJpZ2h0LiBBbmQsIHllYWgsIGBmaWJfY3JlYXRlX2luZm9gIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgIGxvb2tzIGxpa2UgYSBrZXkgc3ltYm9sIHRvIGRpZyBpbnRvLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGBpcF9maWJfbWV0cmljc19pbml0YCBpcyBleHBvcnRlZC4gTm9wZSwgbm90IGV4cG9ydGVkLCBidXQgaXQgKmlzbiYjMzk7dCogc3RhdGljLiBUaGF0JiMzOTtzIGEgcG9pbnQgdG8gbWFrZSwgaXQgbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZS4KCk9rYXksIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgY2FsbGluZyBgaXBfbWV0cmljc19jb252ZXJ0YD8gTm9wZSwgbm90aGluZy4gSW50ZXJlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2ltaWxhciBjaGFuZ2VzIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gTmVlZCB0byBzZWUgaWYgSVB2NiBpcyBoYW5kbGVkIHNpbWlsYXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVEFYX0FEVk1TUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MjAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBYnNlbmNlIG9mIFJUQVhfQURWTVNTIGluIG5ldC9pcHY2L3JvdXRlLmMqKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBJUHY2IHJvdXRpbmcgaW1wbGVtZW50YXRpb24gaW4gYG5ldC9pcHY2L3JvdXRlLmNgIHdvdWxkIHV0aWxpemUgYFJUQVhfQURWTVNTYCwgYnV0IHRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0aGUgY2FzZS4gVGhhdCYjMzk7cyBhIGJpdCB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIFBlcmhhcHMgaXQmIzM5O3MgaGFuZGxlZCBkaWZmZXJlbnRseSBvciBub3Qgc3VwcG9ydGVkIGF0IGFsbCBpbiB0aGlzIHBhcnRpY3VsYXIgYXJlYT8gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vay4gTXkgZmlyc3Qgc3RlcCBpcyB0byBzZWFyY2ggd2l0aGluIHRoZSBgbmV0L2lwdjYvcm91dGUuY2AgZmlsZSBpdHNlbGYgZm9yIGEgZnVuY3Rpb24gbGlrZSBgaXBfbWV0cmljc19jb252ZXJ0YCBvciBhbnl0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiB0aGF0IG1pZ2h0IGJlIGludm9sdmVkIGluIGhhbmRsaW5nIG9yIHRyYW5zbGF0aW5nIHJvdXRpbmcgbWV0cmljcy4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSBob3cgdGhlIGNvZGUgbWFuYWdlcyB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24sIG9yIHBvdGVudGlhbGx5IHdoeSBpdCYjMzk7cyBpZ25vcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX21ldHJpY3NfY29udmVydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBkZWFsaW5nIHdpdGggc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhlc2UgbmV0d29ya2luZyBkZXRhaWxzOgoKKipEaWdnaW5nIGludG8gSVB2NiBSb3V0aW5nIGFuZCBNZXRyaWNzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IElQdjYsIHNwZWNpZmljYWxseSB0aGUgcm91dGluZyBzaWRlIG9mIHRoaW5ncy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgb3IgcGVyaGFwcyBhIHN5c3RlbSBJJiMzOTttIGFuYWx5emluZywgdXNlcyBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGxvb2tzIGZhbWlsaWFyLi4uYW5kIHRoZSB0aG91Z2h0IHRoZW4gdHJpZ2dlcnM6IGNvdWxkIHRoaXMgYmUgd2hlcmUgcm91dGluZyBtZXRyaWNzIG1pZ2h0IGJlIHBhcnNlZCBvciBldmVuIGNvbmZpZ3VyZWQ/IEl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyByb3V0ZSBwcmlvcml0aXphdGlvbiBhbmQgc2VsZWN0aW9uIGJhc2VkIG9uIHRob3NlIG1ldHJpY3MsIGJlIHRoZXkgY29zdCwgaG9wIGNvdW50LCBvciB3aGF0ZXZlciB0aGUgaW1wbGVtZW50YXRpb24gdXNlcy4gSSYjMzk7bGwgbmVlZCB0byBnbyBsb29rIGludG8gdGhlIGNvZGUsIGFuZCB0aGlzIGZ1bmN0aW9uIG5hbWUgaXMgYSB1c2VmdWwgcG9pbnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRBWF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jPTEwODk9c3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTE1Ni1cdFx0XHRcdGlmIChydC1cdTAwM2VmaWI2X3BtdHUpXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTE1NzpcdFx0XHRcdFx0ZmliNl9tZXRyaWNfc2V0KGl0ZXIsIFJUQVhfTVRVLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTExNTgtXHRcdFx0XHRcdFx0XHRydC1cdTAwM2VmaWI2X3BtdHUpO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0yNjI9aW50IGlwNl9kc3RfaG9wbGltaXQoc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTI2My17XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MjY0Olx0aW50IGhvcGxpbWl0ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX0hPUExJTUlUKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yNjUtXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xMjMxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xNDE2LVx0XHRcdFx0ICAgcmFfbXNnLVx1MDAzZWljbXBoLmljbXA2X2hvcF9saW1pdCk7XG5uZXQvaXB2Ni9uZGlzYy5jOjE0MTc6XHRcdFx0ZmliNl9tZXRyaWNfc2V0KHJ0LCBSVEFYX0hPUExJTUlULFxubmV0L2lwdjYvbmRpc2MuYy0xNDE4LVx0XHRcdFx0XHRyYV9tc2ctXHUwMDNlaWNtcGguaWNtcDZfaG9wX2xpbWl0KTtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE1NjgtXHRcdFx0V1JJVEVfT05DRShpbjZfZGV2LVx1MDAzZWNuZi5tdHU2LCBtdHUpO1xubmV0L2lwdjYvbmRpc2MuYzoxNTY5Olx0XHRcdGZpYjZfbWV0cmljX3NldChydCwgUlRBWF9NVFUsIG10dSk7XG5uZXQvaXB2Ni9uZGlzYy5jLTE1NzAtXHRcdFx0cnQ2X210dV9jaGFuZ2Uoc2tiLVx1MDAzZWRldiwgbXR1KTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMjc5LVxubmV0L2lwdjYvcm91dGUuYzoyODA6c3RhdGljIGNvbnN0IHUzMiBpcDZfdGVtcGxhdGVfbWV0cmljc1tSVEFYX01BWF0gPSB7XG5uZXQvaXB2Ni9yb3V0ZS5jOjI4MTpcdFtSVEFYX0hPUExJTUlUIC0gMV0gPSAwLFxubmV0L2lwdjYvcm91dGUuYy0yODItfTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTE3MTg9c3RhdGljIGludCBydDZfaW5zZXJ0X2V4Y2VwdGlvbihzdHJ1Y3QgcnQ2X2luZm8gKm5ydCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTE3NjAtXHQgKi9cbm5ldC9pcHY2L3JvdXRlLmM6MTc2MTpcdGlmIChkc3RfbWV0cmljX3JhdyhcdTAwMjZucnQtXHUwMDNlZHN0LCBSVEFYX01UVSkgXHUwMDNlPSBmaWI2X210dShyZXMpKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jLTE3NjItXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0yMDgyPXN0YXRpYyB2b2lkIHJ0Nl9leGNlcHRpb25zX3VwZGF0ZV9wbXR1KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yMTAwLVx0XHRcdCAqL1xubmV0L2lwdjYvcm91dGUuYzoyMTAxOlx0XHRcdGlmIChkc3RfbWV0cmljX3JhdyhcdTAwMjZlbnRyeS1cdTAwM2Vkc3QsIFJUQVhfTVRVKSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L3JvdXRlLmMtMjEwMi1cdFx0XHQgICAgcnQ2X210dV9jaGFuZ2Vfcm91dGVfYWxsb3dlZChpZGV2LCBlbnRyeSwgbXR1KSlcbm5ldC9pcHY2L3JvdXRlLmM6MjEwMzpcdFx0XHRcdGRzdF9tZXRyaWNfc2V0KFx1MDAyNmVudHJ5LVx1MDAzZWRzdCwgUlRBWF9NVFUsIG10dSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTIxMDQtXHRcdH1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI5MDc9c3RhdGljIHZvaWQgcnQ2X2RvX3VwZGF0ZV9wbXR1KHN0cnVjdCBydDZfaW5mbyAqcnQsIHUzMiBtdHUpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yOTEwLVxubmV0L2lwdjYvcm91dGUuYzoyOTExOlx0ZHN0X21ldHJpY19zZXQoXHUwMDI2cnQtXHUwMDNlZHN0LCBSVEFYX01UVSwgbXR1KTtcbm5ldC9pcHY2L3JvdXRlLmMtMjkxMi1cdHJ0LVx1MDAzZXJ0NmlfZmxhZ3MgfD0gUlRGX01PRElGSUVEO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjkyMj1zdGF0aWMgdm9pZCBfX2lwNl9ydF91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTI5MjgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjI5Mjk6XHQvKiBOb3RlOiBkbyAqTk9UKiBjaGVjayBkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKVxubmV0L2lwdjYvcm91dGUuYy0yOTMwLVx0ICogSVB2NiBwbXR1IGRpc2NvdmVyeSBpc24mIzM5O3Qgb3B0aW9uYWwsIHNvICYjMzk7bXR1IGxvY2smIzM5OyBjYW5ub3QgZGlzYWJsZSBpdC5cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzMDI9dTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzMxMS1cbm5ldC9pcHY2L3JvdXRlLmM6MzMxMjpcdGlmICh1bmxpa2VseShmaWI2X21ldHJpY19sb2NrZWQoZjZpLCBSVEFYX01UVSkpKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jLTMzMTMtXHRcdG10dSA9IGY2aS1cdTAwM2VmaWI2X3BtdHU7XG4tLVxubmV0L2lwdjYvcm91dGUuYy0zMzE5LVx0aWYgKHVubGlrZWx5KHJ0KSkge1xubmV0L2lwdjYvcm91dGUuYzozMzIwOlx0XHRtdHUgPSBkc3RfbWV0cmljX3JhdyhcdTAwMjZydC1cdTAwM2Vkc3QsIFJUQVhfTVRVKTtcbm5ldC9pcHY2L3JvdXRlLmMtMzMyMS1cdH0gZWxzZSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMzM1PXN0cnVjdCBkc3RfZW50cnkgKmljbXA2X2RzdF9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzM1OC1cdHJ0LVx1MDAzZXJ0NmlfaWRldiAgICAgPSBpZGV2O1xubmV0L2lwdjYvcm91dGUuYzozMzU5Olx0ZHN0X21ldHJpY19zZXQoXHUwMDI2cnQtXHUwMDNlZHN0LCBSVEFYX0hPUExJTUlULCAwKTtcbm5ldC9pcHY2L3JvdXRlLmMtMzM2MC1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTUwNDQ9c3RhdGljIGludCBmaWI2X25oX210dV9jaGFuZ2Uoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICpfYXJnKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTA2Mi1cdFx0ICAgIChtdHUgXHUwMDNjIGFyZy1cdTAwM2VtdHUgXHUwMDI2XHUwMDI2IG10dSA9PSBpZGV2LVx1MDAzZWNuZi5tdHU2KSlcbm5ldC9pcHY2L3JvdXRlLmM6NTA2MzpcdFx0XHRmaWI2X21ldHJpY19zZXQoZjZpLCBSVEFYX01UVSwgYXJnLVx1MDAzZW10dSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNjQtXG4tLVxubmV0L2lwdjYvcm91dGUuYz01MDczPXN0YXRpYyBpbnQgcnQ2X210dV9jaGFuZ2Vfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqZjZpLCB2b2lkICpwX2FyZylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzgtXHQvKiBJbiBJUHY2IHBtdHUgZGlzY292ZXJ5IGlzIG5vdCBvcHRpb25hbCxcbm5ldC9pcHY2L3JvdXRlLmM6NTA3OTpcdCAgIHNvIHRoYXQgUlRBWF9NVFUgbG9jayBjYW5ub3QgZGlzYWJsZSBpdC5cbm5ldC9pcHY2L3JvdXRlLmMtNTA4MC1cdCAgIFdlIHN0aWxsIHVzZSB0aGlzIGxvY2sgdG8gYmxvY2sgY2hhbmdlc1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTA4Ny1cbm5ldC9pcHY2L3JvdXRlLmM6NTA4ODpcdGlmIChmaWI2X21ldHJpY19sb2NrZWQoZjZpLCBSVEFYX01UVSkpXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwODktXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTY5OT1zdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3MzctXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX1BSSU9SSVRZICovXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3Mzg6XHQgICAgICAgJiM0MzsgUlRBWF9NQVggKiBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfTUVUUklDUyAqL1xubmV0L2lwdjYvcm91dGUuYy01NzM5LVx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3NDA6XHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cbm5ldC9pcHY2L3JvdXRlLmMtNTc0MS1cdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTI1Ni1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoyNTc6XHRyZXEtXHUwMDNlcnNrX3dpbmRvd19jbGFtcCA9IFJFQURfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXApID8gOmRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVyk7XG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjU4LVx0LyogbGltaXQgdGhlIHdpbmRvdyBzZWxlY3Rpb24gaWYgdGhlIHVzZXIgZW5mb3JjZSBhIHNtYWxsZXIgcnggYnVmZmVyICovXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTI2Ni1cdFx0XHRcdCAgaXJlcS1cdTAwM2V3c2NhbGVfb2ssIFx1MDAyNnJjdl93c2NhbGUsXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MjY3Olx0XHRcdFx0ICBkc3RfbWV0cmljKGRzdCwgUlRBWF9JTklUUldORCkpO1xubmV0L2lwdjYvc3luY29va2llcy5jLTI2OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUHY2IFJvdXRpbmcgTWV0cmljcyBDb251bmRydW0qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgc3RhbmRhcmQgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gd2FzIHVuaXZlcnNhbGx5IHVzZWQgZm9yIGhhbmRsaW5nIHJvdXRlIG1ldHJpY3MgYWNyb3NzIGJvdGggSVB2NCBhbmQgSVB2Ni4gQnV0IHRoZSBjb2RlIGZvciBgbmV0L2lwdjYvcm91dGUuY2AgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBjYWxsaW5nIGl0LiBUaGF04oCZcyB1bmV4cGVjdGVkLiBJdCB0aHJvd3MgYSB3cmVuY2ggaW4gbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBjb21tb25hbGl0aWVzIGJldHdlZW4gdGhlIHR3byBpbXBsZW1lbnRhdGlvbnMuCgpTbywgaG93IGV4YWN0bHkgZG9lcyB0aGUgSVB2NiByb3V0ZSBwYXJzaW5nIGRlYWwgd2l0aCB0aGVzZSBtZXRyaWNzPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29udmVyc2lvbiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBtZXRyaWNzIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBjb250ZXh0LiBBbHJpZ2h0LCBsZXTigJlzIGdvIGRpcmVjdGx5IHRvIGBuZXQvaXB2Ni9yb3V0ZS5jYCBhbmQgc3BlY2lmaWNhbGx5IHNlYXJjaCBmb3IgaG93IHRoZSBjb2RlIGhhbmRsZXMgYFJUQV9NRVRSSUNTYCB0byBjbGFyaWZ5IHRoaW5ncy4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgbG9naWMgdGhhdCBpcyBiZWluZyB1c2VkLCBvciBleHBsYWluICp3aHkqIHNvbWV0aGluZyBlbHNlIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JUQV9NRVRSSUNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9NTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX2lwdjZfcG9saWN5W1JUQV9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTExNy1cdFtSVEFfUFJJT1JJVFldICAgICAgICAgID0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9pcHY2L3JvdXRlLmM6NTExODpcdFtSVEFfTUVUUklDU10gICAgICAgICAgID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9pcHY2L3JvdXRlLmMtNTExOS1cdFtSVEFfTVVMVElQQVRIXVx0XHQ9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSB9LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTE4MT1zdGF0aWMgaW50IHJ0bV90b19maWI2X2NvbmZpZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUyODMtXG5uZXQvaXB2Ni9yb3V0ZS5jOjUyODQ6XHRpZiAodGJbUlRBX01FVFJJQ1NdKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jOjUyODU6XHRcdGNmZy1cdTAwM2VmY19teCA9IG5sYV9kYXRhKHRiW1JUQV9NRVRSSUNTXSk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjUyODY6XHRcdGNmZy1cdTAwM2VmY19teF9sZW4gPSBubGFfbGVuKHRiW1JUQV9NRVRSSUNTXSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUyODctXHR9XG4tLVxubmV0L2lwdjYvcm91dGUuYz01Njk5PXN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTczNy1cdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfUFJJT1JJVFkgKi9cbm5ldC9pcHY2L3JvdXRlLmM6NTczODpcdCAgICAgICAmIzQzOyBSVEFYX01BWCAqIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9NRVRSSUNTICovXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3MzktXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIGFuIGV4cGVydCB3b3VsZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBJUHY2IFJvdXRlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYHJ0bV90b19maWI2X2NvbmZpZ2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3Mgc2V0dGluZyB0aGUgYGNmZy0mZ3Q7ZmNfbXhgIGZpZWxkLCBodWg/IFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgc3RlcC4gTm93LCBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCYjMzk7cyBpbnZvbHZlZCB3aXRoIHRoYXQgcGFydGljdWxhciBzdHJ1Y3R1cmUsIGFuZCB3aGF0IGl0IHJlbGF0ZXMgdG8gaW4gdGhlIHJvdXRpbmcgcHJvY2Vzcy4KCkFoLCByaWdodCwgc28gYGNmZy0mZ3Q7ZmNfbXhgIGlzIG9idmlvdXNseSBzb21ldGhpbmcgdGhhdCBnZXRzIGZlZCB0byB0aGUgY29uZmlndXJhdGlvbiByb3V0aW5lcy4gVGhlbiwgYGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZWAgcGFyc2VzIGFsbCBvZiB0aGlzLiBJIGJldCBpdCB0YWtlcyBgY2ZnLSZndDtmY19teGAgYW5kIGV4dHJhY3RzIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHJvdXRlLCBtYXliZSBzZXR0aW5nIHRoZSB2YXJpb3VzIGZpYiBlbnRyeSBmbGFncyBvciByb3V0ZSBhdHRyaWJ1dGVzLiBJIHNob3VsZCBsb29rIGludG8gdGhlIHNvdXJjZSBmb3IgYGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZWAgYW5kIGRvdWJsZSBjaGVjay4gS25vd2luZyB3aGVyZSB0aGF0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gb3JpZ2luYXRlcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugcm91dGVzIGdldCBpbnN0YWxsZWQuIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nIHRvIHZlcmlmeSBhZ2FpbnN0IHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZjX214JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTM4MDk9c3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKmlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4MzgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4Mzk6XHRydC1cdTAwM2VmaWI2X21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cdTAwM2VmY19teCwgY2ZnLVx1MDAzZWZjX214X2xlbixcbm5ldC9pcHY2L3JvdXRlLmMtMzg0MC1cdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz01MTgxPXN0YXRpYyBpbnQgcnRtX3RvX2ZpYjZfY29uZmlnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTI4NC1cdGlmICh0YltSVEFfTUVUUklDU10pIHtcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NTpcdFx0Y2ZnLVx1MDAzZWZjX214ID0gbmxhX2RhdGEodGJbUlRBX01FVFJJQ1NdKTtcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NjpcdFx0Y2ZnLVx1MDAzZWZjX214X2xlbiA9IG5sYV9sZW4odGJbUlRBX01FVFJJQ1NdKTtcbm5ldC9pcHY2L3JvdXRlLmMtNTI4Ny1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IFJvdXRpbmcgU2V0dXAqKgoKUmlnaHQsIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGNhbGxzIGBpcF9maWJfbWV0cmljc19pbml0YC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgbWV0cmljcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIElQdjYgcm91dGVzLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGEgZ2xvYmFsbHkgYWNjZXNzaWJsZSBmdW5jdGlvbiwgb3IgaXMgaXQgZGVjbGFyZWQgc29tZXdoZXJlIGludGVybmFsPyBJcyBpdCBleHBvcnRlZCBvciB2aXNpYmxlIHZpYSBhIGhlYWRlciBmaWxlPwoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgaW4gdGhlIHN0YW5kYXJkIHBsYWNlcywgcHJvYmFibHkgd2l0aGluIGBpbmNsdWRlL25ldC9pcC5oYCBvciBzb21ld2hlcmUgZXF1YWxseSBvYnZpb3VzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayYjMzk7cyBpbmNsdWRlIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGxpdmUuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBhIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24gaW4gdGhlcmUgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfZmliX21ldHJpY3NfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwLmg9NTA5PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL25ldC9pcC5oLTUyNC1cbmluY2x1ZGUvbmV0L2lwLmg6NTI1OnN0cnVjdCBkc3RfbWV0cmljcyAqaXBfZmliX21ldHJpY3NfaW5pdChzdHJ1Y3QgbmxhdHRyICpmY19teCwgaW50IGZjX214X2xlbixcbmluY2x1ZGUvbmV0L2lwLmgtNTI2LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0LCBhbmQgaXQmIzM5O3MgbmVhdGx5IGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L2lwLmhgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBib3RoIElQdjQgYW5kIElQdjYgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEV4Y2VsbGVudCEKCkxldCYjMzk7cyBicm9hZGVuIHRoZSBzY29wZS4gQmV5b25kIGBpcF9maWJfbWV0cmljc19pbml0YCwgSSBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmluZyBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyB0byBmdXp6LiBCYXNlZCBvbiBteSBxdWljayByZXZpZXcsIGBmaWJfY3JlYXRlX2luZm9gIChmb3IgSVB2NCkgYW5kIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIChmb3IgSVB2NikgbG9vayBsaWtlIHdvcnRod2hpbGUgdGFyZ2V0cyBhcyB3ZWxsLCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgYXJlIHJlbGF0ZWQgdG8gdGhlIEZJQiBzZXR1cC4KCk9rYXksIGxldCBtZSByZXZpc2l0IGBpcF9maWJfbWV0cmljc19pbml0YCBhbmQgZ2V0IGEgZmluZXIgZ3JhaW5lZCB2aWV3LiBJdCB0YWtlcyBgZmNfbXhgIGFuZCBgZmNfbXhfbGVuYCBhcyBpbnB1dHMgYW5kLCBpbXBvcnRhbnRseSwgY2FsbHMgYGlwX21ldHJpY3NfY29udmVydGAuIFRoZSBwYXRjaCBkb2N1bWVudGF0aW9uIGNsZWFybHkgaW5kaWNhdGVzIGEgbW9kaWZpY2F0aW9uIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHdpdGhpbiBgbmV0L2lwdjQvbWV0cmljcy5jYC4gVGhpcyBpcyBrZXkuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB3aWxsIGJlOgoqICAgYGlwX2ZpYl9tZXRyaWNzX2luaXRgCiogICBgZmliX2NyZWF0ZV9pbmZvYAoqICAgYGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZWAKCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIHdvcnJ5IGFib3V0PyBOb3BlLCBgQ09ORklHX0lORVRgIGlzIHN1ZmZpY2llbnQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpUaW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuCgpgYGBjCgkJaWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgJmFtcDsmYW1wOyB2YWwgJmFtcDsmYW1wOyB2YWwgJmx0OyBUQ1BfTUlOX01TUykgewoJCQlOTF9TRVRfRVJSX01TR19BVFRSX0ZNVChleHRhY2ssIG5sYSwKCQkJCQkJJiMzNDtJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yICZndDs9ICV1JiMzNDssCgkJCQkJCVRDUF9NSU5fTVNTKTsKCQkJcmV0dXJuIC1FSU5WQUw7CgkJfQpgYGAKClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW4gaW1wb3J0YW50IGNoZWNrISBJdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBhZHZtc3NgIHRvIGludmFsaWQgdmFsdWVzIGJldHdlZW4gMSBhbmQgYFRDUF9NSU5fTVNTIC0gMWAsIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBhIG5ldyBjb25zdHJhaW50LCBzbyBJIG5lZWQgdG8gZXhwbG9yZSB0aGUgYm91bmRhcmllcyBvZiB0aGlzIGNoZWNrIHRob3JvdWdobHkuIFRoZSBmdXp6aW5nIHNob3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBgUlRBWF9BRFZNU1NgIGhhbmRsaW5nLgoKVG8gYmUgY2xlYXIgb24gdGhlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcsIGFnYWluIHRoZSBmaW5hbCBsaXN0IGlzOgoqICAgYGlwX2ZpYl9tZXRyaWNzX2luaXRgCiogICBgZmliX2NyZWF0ZV9pbmZvYAoqICAgYGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZWAKCkkgc2hvdWxkIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3JvdXRlX2luZm9fY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTM3NjI9c3RhdGljIGludCBmaWI2X2NvbmZpZ192YWxpZGF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4MDgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4MDk6c3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKmlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbm5ldC9pcHY2L3JvdXRlLmMtMzgxMC1cdFx0XHRcdFx0ICAgICAgIGdmcF90IGdmcF9mbGFncyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4NzUtXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4NzY6c3RhdGljIGludCBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgoc3RydWN0IGZpYjZfaW5mbyAqcnQsXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4NzctXHRcdFx0XHQgICAgc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4tLVxubmV0L2lwdjYvcm91dGUuYz0zOTUyPWludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0zOTYxLVxubmV0L2lwdjYvcm91dGUuYzozOTYyOlx0cnQgPSBpcDZfcm91dGVfaW5mb19jcmVhdGUoY2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NjMtXHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NjUtXG5uZXQvaXB2Ni9yb3V0ZS5jOjM5NjY6XHRlcnIgPSBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgocnQsIGNmZywgZ2ZwX2ZsYWdzLCBleHRhY2spO1xubmV0L2lwdjYvcm91dGUuYy0zOTY3LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTQ2NzU9c3RydWN0IGZpYjZfaW5mbyAqYWRkcmNvbmZfZjZpX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3MDEtXG5uZXQvaXB2Ni9yb3V0ZS5jOjQ3MDI6XHRmNmkgPSBpcDZfcm91dGVfaW5mb19jcmVhdGUoXHUwMDI2Y2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3MDMtXHRpZiAoSVNfRVJSKGY2aSkpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00NzA1LVxubmV0L2lwdjYvcm91dGUuYzo0NzA2Olx0ZXJyID0gaXA2X3JvdXRlX2luZm9fY3JlYXRlX25oKGY2aSwgXHUwMDI2Y2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3MDctXHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTQxNT1zdGF0aWMgaW50IGlwNl9yb3V0ZV9tdWx0aXBhdGhfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTQ3MS1cdFx0cl9jZmcuZmNfZmxhZ3MgfD0gKHJ0bmgtXHUwMDNlcnRuaF9mbGFncyBcdTAwMjYgUlROSF9GX09OTElOSyk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjU0NzI6XHRcdHJ0ID0gaXA2X3JvdXRlX2luZm9fY3JlYXRlKFx1MDAyNnJfY2ZnLCBHRlBfS0VSTkVMLCBleHRhY2spO1xubmV0L2lwdjYvcm91dGUuYy01NDczLVx0XHRpZiAoSVNfRVJSKHJ0KSkge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTQ3OC1cbm5ldC9pcHY2L3JvdXRlLmM6NTQ3OTpcdFx0ZXJyID0gaXA2X3JvdXRlX2luZm9fY3JlYXRlX25oKHJ0LCBcdTAwMjZyX2NmZywgR0ZQX0tFUk5FTCwgZXh0YWNrKTtcbm5ldC9pcHY2L3JvdXRlLmMtNTQ4MC1cdFx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBJUHY2IFJvdXRpbmcgVGFibGUgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGNvdXBsZSBvZiB0aGluZ3MgaGVyZS4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYCBmdW5jdGlvbiBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gaXRzIHVzdWFsIHJvbGUuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBtZW1vcnkgb24gYGlwNl9yb3V0ZV9hZGRgLiBJICp0aGluayogdGhhdCYjMzk7cyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIGFuZCB0aGF0IGl0JiMzOTtzIGV4cG9ydGVkIGZvciBleHRlcm5hbCB1c2UuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3QgY29uZmlybSB0aGF0IG5vdyB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZCByZWNlbnRseS4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBpbiBvcmRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3JvdXRlX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz0zODc2PXN0YXRpYyBpbnQgaXA2X3JvdXRlX2luZm9fY3JlYXRlX25oKHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzk1MS1cbm5ldC9pcHY2L3JvdXRlLmM6Mzk1MjppbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubmV0L2lwdjYvcm91dGUuYy0zOTUzLVx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTQ0MTM9c3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKnJ0Nl9hZGRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvcm91dGUuYy00NDM5LVxubmV0L2lwdjYvcm91dGUuYzo0NDQwOlx0aXA2X3JvdXRlX2FkZChcdTAwMjZjZmcsIEdGUF9BVE9NSUMsIE5VTEwpO1xubmV0L2lwdjYvcm91dGUuYy00NDQxLVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NDQ3OD1zdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX2RmbHRfcm91dGVyKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ1MDAtXG5uZXQvaXB2Ni9yb3V0ZS5jOjQ1MDE6XHRpZiAoIWlwNl9yb3V0ZV9hZGQoXHUwMDI2Y2ZnLCBHRlBfQVRPTUlDLCBOVUxMKSkge1xubmV0L2lwdjYvcm91dGUuYy00NTAyLVx0XHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG4tLVxubmV0L2lwdjYvcm91dGUuYz00NTc4PWludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGluNl9ydG1zZyAqcnRtc2cpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00NTk0LVx0XHRcdGNmZy5mY19tZXRyaWMgPSBJUDZfUlRfUFJJT19VU0VSO1xubmV0L2lwdjYvcm91dGUuYzo0NTk1Olx0XHRlcnIgPSBpcDZfcm91dGVfYWRkKFx1MDAyNmNmZywgR0ZQX0tFUk5FTCwgTlVMTCk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTQ1OTYtXHRcdGJyZWFrO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTY2MT1zdGF0aWMgaW50IGluZXQ2X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTU2NzYtXHRlbHNlXG5uZXQvaXB2Ni9yb3V0ZS5jOjU2Nzc6XHRcdHJldHVybiBpcDZfcm91dGVfYWRkKFx1MDAyNmNmZywgR0ZQX0tFUk5FTCwgZXh0YWNrKTtcbm5ldC9pcHY2L3JvdXRlLmMtNTY3OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDA4CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiBgaXA2X3JvdXRlX2FkZGAgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgYWxzbyBsaWtlIHdoYXQgSSBzZWUgd2l0aCBgaW5ldDZfcnRtX25ld3JvdXRlYDsgdGhhdCYjMzk7cyByZWxldmFudCB0byB0aGUgdG9waWMgYXMgd2VsbC4gVG8gZnVydGhlciBteSBpbnZlc3RpZ2F0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBwZWVrIGF0IGBmaWJfY3JlYXRlX2luZm9gIHdpdGhpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gQWgsIHllcywgY29uZmlybWVkOiBpdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMuIEV4Y2VsbGVudCwgdGhpcyBpcyBzb2xpZC4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBpcF9maWJfbWV0cmljc19pbml0YCwgYGZpYl9jcmVhdGVfaW5mb2AsIGFuZCBgaXA2X3JvdXRlX2FkZGAuIFRoaXMgc2V0IGFwcGVhcnMgdG8gYmUgdGhlIHJpZ2h0IHdheSB0byBhY2hpZXZlIG15IGdvYWwuIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcywgc28gSSYjMzk7bGwgc2V0IHRoZXNlIGZpbmRpbmdzIGFzaWRlIGZvciBub3cgYW5kIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2ZpYl9tZXRyaWNzX2luaXQmIzM0OywKICAgICYjMzQ7ZmliX2NyZWF0ZV9pbmZvJiMzNDssCiAgICAmIzM0O2lwNl9yb3V0ZV9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgdG8gYGlwX21ldHJpY3NfY29udmVydGAgdG8gZW5zdXJlIHRoYXQgdGhlIGBSVEFYX0FEVk1TU2AgbWV0cmljIGlzIGVpdGhlciAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgVENQX01JTl9NU1NgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gY29uZmlndXJpbmcgSVB2NCBvciBJUHY2IHJvdXRlcyB3aXRoIG1ldHJpY3MgdmlhIG5ldGxpbmsgKGUuZy4sIGBSVE1fTkVXUk9VVEVgKS4gU2luY2UgaXQgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9maWJfbWV0cmljc19pbml0JiMzNDssCiAgICAmIzM0O2ZpYl9jcmVhdGVfaW5mbyYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoZWNrIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHRvIGVuc3VyZSB0aGF0IHRoZSBgUlRBWF9BRFZNU1NgIG1ldHJpYyBpcyBlaXRoZXIgMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFRDUF9NSU5fTVNTYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIElQdjQgb3IgSVB2NiByb3V0ZXMgd2l0aCBtZXRyaWNzIHZpYSBuZXRsaW5rIChlLmcuLCBgUlRNX05FV1JPVVRFYCkuIFNpbmNlIGl0IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjowMi4wOTI3ODYyMjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTUwNTY0MDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9maWJfbWV0cmljc19pbml0XCIsXG4gICAgXCJmaWJfY3JlYXRlX2luZm9cIixcbiAgICBcImlwNl9yb3V0ZV9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGVjayB0byBgaXBfbWV0cmljc19jb252ZXJ0YCB0byBlbnN1cmUgdGhhdCB0aGUgYFJUQVhfQURWTVNTYCBtZXRyaWMgaXMgZWl0aGVyIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBUQ1BfTUlOX01TU2AuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBjb25maWd1cmluZyBJUHY0IG9yIElQdjYgcm91dGVzIHdpdGggbWV0cmljcyB2aWEgbmV0bGluayAoZS5nLiwgYFJUTV9ORVdST1VURWApLiBTaW5jZSBpdCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjowMi4wOTI4MDAxMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4Mjk0ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWI2ODNiODNiZDEyYWJhNTJmYjcxNzZjNmE2NGUzZWQ4MDQ1OThiMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAwMDo1NjowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9tZXRyaWNzLmMgYi9uZXQvaXB2NC9tZXRyaWNzLmNcXG5pbmRleCBhZDQwNzYyYThiMzgzLi5iOWI5N2EwYTUxMjZiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L21ldHJpY3MuY1xcbisrKyBiL25ldC9pcHY0L21ldHJpY3MuY1xcbkBAIC00NCw2ICs0NCwxMiBAQCBzdGF0aWMgaW50IGlwX21ldHJpY3NfY29udmVydChzdHJ1Y3QgbmxhdHRyICpmY19teCxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR2YWwgPSBubGFfZ2V0X3UzMihubGEpO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDI2XFx1MDAyNiB2YWwgXFx1MDAzYyBUQ1BfTUlOX01TUykge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSX0ZNVChleHRhY2ssIG5sYSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcIkludmFsaWQgYWR2bXNzLCBtdXN0IGJlIDAgb3IgXFx1MDAzZT0gJXVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRUQ1BfTUlOX01TUyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDNlIDY1NTM1IC0gNDApXFxuIFxcdFxcdFxcdHZhbCA9IDY1NTM1IC0gNDA7XFxuIFxcdFxcdGlmICh0eXBlID09IFJUQVhfTVRVIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDNlIDY1NTM1IC0gMTUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjAyLjc2MjAxMTI5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0ODM2NDA1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2ZpYl9tZXRyaWNzX2luaXRcIixcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiaXA2X3JvdXRlX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoZWNrIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHRvIGVuc3VyZSB0aGF0IHRoZSBgUlRBWF9BRFZNU1NgIG1ldHJpYyBpcyBlaXRoZXIgMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFRDUF9NSU5fTVNTYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIElQdjQgb3IgSVB2NiByb3V0ZXMgd2l0aCBtZXRyaWNzIHZpYSBuZXRsaW5rIChlLmcuLCBgUlRNX05FV1JPVVRFYCkuIFNpbmNlIGl0IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGViNjgzYjgzYmQxMmFiYTUyZmI3MTc2YzZhNjRlM2VkODA0NTk4YjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAwMDo1NjowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L21ldHJpY3MuYyBiL25ldC9pcHY0L21ldHJpY3MuY1xuaW5kZXggYWQ0MDc2MmE4YjM4My4uYjliOTdhMGE1MTI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L21ldHJpY3MuY1xuKysrIGIvbmV0L2lwdjQvbWV0cmljcy5jXG5AQCAtNDQsNiArNDQsMTIgQEAgc3RhdGljIGludCBpcF9tZXRyaWNzX2NvbnZlcnQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXG4gXHRcdFx0fVxuIFx0XHRcdHZhbCA9IG5sYV9nZXRfdTMyKG5sYSk7XG4gXHRcdH1cbitcdFx0aWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgXHUwMDI2XHUwMDI2IHZhbCBcdTAwMjZcdTAwMjYgdmFsIFx1MDAzYyBUQ1BfTUlOX01TUykge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFJfRk1UKGV4dGFjaywgbmxhLFxuK1x0XHRcdFx0XHRcdFwiSW52YWxpZCBhZHZtc3MsIG11c3QgYmUgMCBvciBcdTAwM2U9ICV1XCIsXG4rXHRcdFx0XHRcdFx0VENQX01JTl9NU1MpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNlIDY1NTM1IC0gNDApXG4gXHRcdFx0dmFsID0gNjU1MzUgLSA0MDtcbiBcdFx0aWYgKHR5cGUgPT0gUlRBWF9NVFUgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2UgNjU1MzUgLSAxNSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjAyLjc2MjAxMjY1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDAzNDUzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgSVAgTWV0cmljIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBwcm9wb3NlZCBmb3IgYG5ldC9pcHY0L21ldHJpY3MuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpcF9tZXRyaWNzX2NvbnZlcnRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHRoZXkncmUgYWRkaW5nIGEgdmFsaWRhdGlvbiBjaGVjayBmb3IgdGhlIGBSVEFYX0FEVk1TU2AgbWV0cmljLiBFc3NlbnRpYWxseSwgaWYgc29tZW9uZSB0cmllcyB0byBzZXQgYW4gYGFkdm1zc2AgdmFsdWUgbGVzcyB0aGFuIGBUQ1BfTUlOX01TU2AgKGFuZCBpdCdzIG5vdCB6ZXJvKSwgdGhlIGZ1bmN0aW9uIG5vdyB0aHJvd3MgYSBgLUVJTlZBTGAgZXJyb3IuIFRoYXQncyBnb29kLCBwcmV2ZW50cyB0aG9zZSBvdXQtb2Ytc3BlYyB2YWx1ZXMgZnJvbSBwb3RlbnRpYWxseSBjYXVzaW5nIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBXZSB3b3VsZG4ndCB3YW50IHRob3NlIHNldHRpbmcgdGhlaXIgTVRVIGRvd24gdG9vIGxvdy5cblxuUmlnaHQsIHNvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIGlzIHVzZWQgd2hlbiB3ZSdyZSBzZXR0aW5nIElQIG1ldHJpY3MgdGhyb3VnaCBuZXRsaW5rIOKAkyB0aGluayByb3V0aW5nIHRhYmxlIHVwZGF0ZXMsIHRoYXQgc29ydCBvZiB0aGluZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIHZhbGlkYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gcmVncmVzc2lvbnMgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gVGhlIGNvZGUgbG9va3MgY29ycmVjdCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgdGhvcm91Z2guIE5vdywgbGV0IG1lIGRpZyBpbnRvIHdoZXJlIHRoaXMgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjowNi44NjIzNjE3MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTYwNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21ldHJpY3NfY29udmVydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbWV0cmljcy5jLTktXFxubmV0L2lwdjQvbWV0cmljcy5jOjEwOnN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxcbm5ldC9pcHY0L21ldHJpY3MuYy0xMS1cXHRcXHRcXHQgICAgICBpbnQgZmNfbXhfbGVuLCB1MzIgKm1ldHJpY3MsXFxuLS1cXG5uZXQvaXB2NC9tZXRyaWNzLmM9NzI9c3RydWN0IGRzdF9tZXRyaWNzICppcF9maWJfbWV0cmljc19pbml0KHN0cnVjdCBubGF0dHIgKmZjX214LFxcbi0tXFxubmV0L2lwdjQvbWV0cmljcy5jLTg1LVxcbm5ldC9pcHY0L21ldHJpY3MuYzo4NjpcXHRlcnIgPSBpcF9tZXRyaWNzX2NvbnZlcnQoZmNfbXgsIGZjX214X2xlbiwgZmliX21ldHJpY3MtXFx1MDAzZW1ldHJpY3MsXFxubmV0L2lwdjQvbWV0cmljcy5jLTg3LVxcdFxcdFxcdFxcdCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjowNy4wNTUzMzYwMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzNDQ3NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCBteXNlbGYsIGFuZCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwX2ZpYl9tZXRyaWNzX2luaXRgIEZ1bmN0aW9uKipcblxuUmlnaHQsIGBpcF9maWJfbWV0cmljc19pbml0YCBoYXMgdG8gYmUgaW5pdGlhbGl6aW5nIHNvbWV0aGluZy4gVGhlIGNvZGUgZGlyZWN0bHkgY2FsbHMgYGlwX21ldHJpY3NfY29udmVydGAsIHdoaWNoIGlzIGEgZGVjZW50IGNsdWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyB0cmFjZSB0aGlzIGJhY2suIFdoZXJlJ3MgdGhpcyBgaXBfZmliX21ldHJpY3NfaW5pdGAgcm91dGluZSBiZWluZyBpbnZva2VkPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2Ugb2YgdGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gbWFraW5nIHRoaXMgY29kZSBtYWtlIHNlbnNlLCBzbyBJJ20gZ29pbmcgdG8gZmluZCBhbGwgY2FsbHMgdG8gdGhpcyByb3V0aW5lIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlIGFuZCBjb250ZXh0LiBUaGF0J2xsIGd1aWRlIG15IHN1YnNlcXVlbnQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjoxMC4wNzg3ODY0NjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTE0NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2ZpYl9tZXRyaWNzX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzQ1PXN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTQwMy1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTQwNDpcXHRmaS1cXHUwMDNlZmliX21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cXHUwMDNlZmNfbXgsIGNmZy1cXHUwMDNlZmNfbXhfbGVuLCBleHRhY2spO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNDA1LVxcdGlmIChJU19FUlIoZmktXFx1MDAzZWZpYl9tZXRyaWNzKSkge1xcbi0tXFxubmV0L2lwdjQvbWV0cmljcy5jPTEwPXN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxcbi0tXFxubmV0L2lwdjQvbWV0cmljcy5jLTcxLVxcbm5ldC9pcHY0L21ldHJpY3MuYzo3MjpzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXFxubmV0L2lwdjQvbWV0cmljcy5jLTczLVxcdFxcdFxcdFxcdFxcdGludCBmY19teF9sZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjEwLjE4NzcxMDU0MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Nzc2NjczMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGSUIgTWV0cmljIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYGZpYl9jcmVhdGVfaW5mb2AgY2FsbHMgYGlwX2ZpYl9tZXRyaWNzX2luaXRgLiBUaGF0J3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSB0cmlnZ2VyZWQgZHVyaW5nIGEgbmV0bGluayByb3V0ZSBhZGRpdGlvbiwgc3BlY2lmaWNhbGx5IGEgYFJUTV9ORVdST1VURWAgbWVzc2FnZS4gTm93LCB0aGUgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gaXMgc3RhdGljLiBFeGNlbGxlbnQuIFRoYXQgbWVhbnMgSSBjYW4gbmFycm93IG15IGZvY3VzOyBpdCdzIGVpdGhlciBnb2luZyB0byBiZSBpbiBgaXBfZmliX21ldHJpY3NfaW5pdGAgb3IgYGZpYl9jcmVhdGVfaW5mb2AuIFdhaXQuLi5pcyBgaXBfZmliX21ldHJpY3NfaW5pdGAgZXhwb3J0ZWQgb3IganVzdCBub3Qgc3RhdGljPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIGl0cyB2aXNpYmlsaXR5LiBSaWdodCwgbGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvaXB2NC9tZXRyaWNzLmNgIHNvdXJjZSBmaWxlIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjEzLjY2NTM4MjA2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDgyMjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9maWJfbWV0cmljc19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L21ldHJpY3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9tZXRyaWNzLmM9MTA9c3RhdGljIGludCBpcF9tZXRyaWNzX2NvbnZlcnQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXFxuLS1cXG5uZXQvaXB2NC9tZXRyaWNzLmMtNzEtXFxubmV0L2lwdjQvbWV0cmljcy5jOjcyOnN0cnVjdCBkc3RfbWV0cmljcyAqaXBfZmliX21ldHJpY3NfaW5pdChzdHJ1Y3QgbmxhdHRyICpmY19teCxcXG5uZXQvaXB2NC9tZXRyaWNzLmMtNzMtXFx0XFx0XFx0XFx0XFx0aW50IGZjX214X2xlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MTMuNzU2MjEyMDA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMDYwNjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCBjb25zaWRlcmluZyBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsOlxuXG4qKkNoZWNraW5nIGZvciBFeHBvcnRlZCBTeW1ib2w6IGBpcF9maWJfbWV0cmljc19pbml0YCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdmVyaWZ5IGlmIHRoaXMgYGlwX2ZpYl9tZXRyaWNzX2luaXRgIHN5bWJvbCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSd2ZSBlbmNvdW50ZXJlZCB0aGlzIGtpbmQgb2Ygc2l0dWF0aW9uIGJlZm9yZSwgd2hlcmUgYSBmdW5jdGlvbidzIHZpc2liaWxpdHkgY2FuIGltcGFjdCBpdHMgYXZhaWxhYmlsaXR5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1vZHVsZXMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBzb21laG93LiBJcyBpdCBkZWZpbmVkIGluIHRoZSBjb3JyZWN0IGhlYWRlcj8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYGdyZXBgIHRocm91Z2ggdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBvciB1c2UgYSB0b29sIGxpa2UgYG5tYCBvciBgb2JqZHVtcGAgb24gdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGUgb2JqZWN0IGZpbGVzLiBJdOKAmXMgbGlrZWx5IHRoYXQgaXQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIG9yIGl0IG1heSBiZSB3aXRoaW4gYSBzdGF0aWMgY29udGV4dC4gS25vd2luZyB3aGVyZSBpdCdzICpzdXBwb3NlZCogdG8gYmUgdXNlZCBpcyBhbHNvIHVzZWZ1bCBjb250ZXh0LCB0aGF0IHdvdWxkIHJlZmluZSB0aGUgc2VhcmNoLiBUaGlzIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJZiBpdCdzIG5vdCBleHBvcnRlZCwgdGhlbiBpdCdzIGEgbm8tZ28gZm9yIGRpcmVjdCBhY2Nlc3MuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGFjY2VzcyBtZXRob2RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MTcuMDU2ODIxMjE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM4MzE1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qaXBfZmliX21ldHJpY3NfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9tZXRyaWNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjE3LjEzMDIxNzg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjU0OTczNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBWYXJpYWJsZSdzIFByb3BlcnRpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdmFyaWFibGUgaW4gcXVlc3Rpb24gaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgd2hpY2ggaXMgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlLiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogc3RhdGljIGlzIGEgc2lnbmlmaWNhbnQgcG9pbnQuIFRoYXQgaW1wbGllcyBzb21lIGZvcm0gb2YgZXh0ZXJuYWwgdmlzaWJpbGl0eSBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGxpbmthZ2UgcG90ZW50aWFsIHdpdGhpbiB0aGUgY3VycmVudCBzY29wZSBvciBwb3RlbnRpYWxseSBpbmhlcml0ZWQgc2NvcGVzLiBUaGlzIGxhY2sgb2Ygc3RhdGljIGRlc2lnbmF0aW9uIHN1Z2dlc3RzIGl0IGNvdWxkIGJlIG1vZGlmaWVkIG9yIGFjY2Vzc2VkIGluIHdheXMgdGhhdCBhcmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTXkgbmV4dCBzdGVwPyBMZXQncyBpbW1lZGlhdGVseSBkaXZlIGludG8gYGZpYl9jcmVhdGVfaW5mb2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhhdCB2YXJpYWJsZS4gVGhlIGNhbGwgY29udGV4dCBhbmQgcHJvcGVydGllcyBvZiBgZmliX2NyZWF0ZV9pbmZvYCBhcmUgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBpbGx1bWluYXRlIHRoZSB1c2UgY2FzZXMgZm9yIG91ciB1bm5hbWVkIHZhcmlhYmxlLiBJdHMgcHJvYmFibHkgcGFzc2VkIHRoZXJlLCBvciBhZmZlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBzdG9yeSB3aWxsIHJlYWxseSBzdGFydCB0byB1bmZvbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjoyMC4xNTU3MTgwMzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTY3OTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfY3JlYXRlX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9sb29rdXAuaD0zOD12b2lkIGZpYl9yZWxlYXNlX2luZm8oc3RydWN0IGZpYl9pbmZvICopO1xcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC00MC1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzIxPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ0LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzQ1OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNDYtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2ZpYl90cmllLmM9MTE5ND1pbnQgZmliX3RhYmxlX2luc2VydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfdGFibGUgKnRiLFxcbi0tXFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjExLVxcbm5ldC9pcHY0L2ZpYl90cmllLmM6MTIxMjpcXHRmaSA9IGZpYl9jcmVhdGVfaW5mbyhjZmcsIGV4dGFjayk7XFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjEzLVxcdGlmIChJU19FUlIoZmkpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjIwLjI4MTQwNTQ0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM4ODIyMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUm91dGUgSW5zZXJ0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyByb3V0aW5nIGluZm9ybWF0aW9uIGdldHMgYWRkZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBmaWJfdGFibGVfaW5zZXJ0YCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBJdCdzIGNhbGxlZCBieSBgaW5ldF9ydG1fbmV3cm91dGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQncyBvdXIgZW50cnkgcG9pbnQuIEFuZCBgZmliX3RhYmxlX2luc2VydGAgaXRzZWxmIGNhbGxzIGBmaWJfY3JlYXRlX2luZm9gLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgY3JlYXRpb24gcHJvY2Vzcy5cblxuU28sIEkgc2hvdWxkIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgaXBfZmliX21ldHJpY3NfaW5pdGAsIGBmaWJfY3JlYXRlX2luZm9gLCBgZmliX3RhYmxlX2luc2VydGAsIGFuZCBkZWZpbml0ZWx5IGBpbmV0X3J0bV9uZXdyb3V0ZWAuIEkgdGhpbmsgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBgaXBfZmliX21ldHJpY3NfaW5pdGAgYWxzbyBzZWVtcyBwcm9taXNpbmcuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGNoZWNrIGBuZXQvaXB2NC9tZXRyaWNzLmNgIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aCBgaXBfZmliX21ldHJpY3NfaW5pdGAuIEdvb2QsIGl0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBtb2R1bGUuXG5cbkknbGwgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIHByZXNlbmNlLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBpdCdzICpub3QqIGNvbnRpbmdlbnQgb24gYENPTkZJR19JUF9ST1VURV9DTEFTU0lEYC4gSSdtIGd1ZXNzaW5nIGl0J3MgcHJvYmFibHkgY29tcGlsZWQgaW4gZm9yIElQdjQgcmVnYXJkbGVzcy4gSnVzdCB0byBiZSBzdXJlLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYyOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjoyNC44MjAyMzIxNTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0OTAzMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ldHJpY3Mub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS0xMC1cXHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxMTpcXHQgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIHRjcF9tZXRyaWNzLm8gdGNwX2Zhc3RvcGVuLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTEyLVxcdCAgICAgdGNwX3JlY292ZXJ5Lm8gdGNwX3VscC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTE2LVxcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE3OlxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0xOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MjQuOTE1MTQ0MzY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjAyMDA0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbmNsdXNpb24gb2YgbWV0cmljcy5vKipcblxuT2theSwgc28gYG1ldHJpY3Mub2AgaXMgZGVmaW5pdGVseSBnZXR0aW5nIGNvbXBpbGVkIGJlY2F1c2UgaXQncyBsaXN0ZWQgdW5kZXIgYG9iai15YC4gVGhhdCBtZWFucyBpdCdzIHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZCBhcyBsb25nIGFzIHRoZSBwYXJlbnQgY29uZmlndXJhdGlvbiBpcyBhY3RpdmUuIE5vdywgdGhlIHBhcmVudCBvZiBgbWV0cmljcy5vYCBpcyBJUHY0LlxuXG5SaWdodCwgSVB2NCBpcyBicm91Z2h0IGluIGJ5IGBDT05GSUdfSU5FVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQ09ORklHX0lORVRgIGFmZmVjdHMgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGluY2x1c2lvbiBvZiBgbWV0cmljcy5vYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0lORVRgLiBTbywgbm93IEkgc2hvdWxkIGxvb2sgYXQgYFRDUF9NSU5fTVNTYCB0byBmaWd1cmUgb3V0IHRoZSBsYXJnZXIgaW1wbGljYXRpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjoyNy42MzUzNDkyNjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTI5ODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJUQ1BfTUlOX01TU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD02OD12b2lkIHRjcF90aW1lX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUsIGludCB0aW1lbyk7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC04MS0vKiBNaW5pbWFsIGFjY2VwdGVkIE1TUy4gSXQgaXMgKDYwKzYwKzgpIC0gKDIwKzIwKS4gKi9cXG5pbmNsdWRlL25ldC90Y3AuaDo4MjojZGVmaW5lIFRDUF9NSU5fTVNTXFx0XFx0ODhVXFxuaW5jbHVkZS9uZXQvdGNwLmgtODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjI3Ljk2NDY1NDY3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ4MzY3NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklQIE1ldHJpYyBVcGRhdGU6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIHRoZSBgUlRBWF9BRFZNU1NgIHZhbHVlIHdoZW4gSVAgbWV0cmljcyBhcmUgYmVpbmcgc2V0LiBUaGF0J3MgZ29vZCBwcmFjdGljZSDigJMgd2Ugd2FudCB0byBiZSByb2J1c3QgaW4gaGFuZGxpbmcgcG90ZW50aWFsIHZhcmlhdGlvbnMuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBkZWZpbml0ZWx5IGRvaW5nIHNvbWV0aGluZyBhbmQgSSBjYW4gc2VlIHdoZXJlIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoZWQuIExldCdzIHNlZSB0aGUgY29udGV4dC5cblxuSSBzZWUgdGhlIGtleSBzeW1ib2xzIGFyZSBgaXBfZmliX21ldHJpY3NfaW5pdGAgYW5kIGBmaWJfY3JlYXRlX2luZm9gLiBJIGRvbid0IHNlZSBhbnkgd2VpcmQgZGVwZW5kZW5jaWVzIGhlcmU7IGxvb2tzIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byBlbmFibGUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGJleW9uZCBgSU5FVGAsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFzc3VtZWQgdGhlc2UgZGF5cy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBgaXBfbWV0cmljc19jb252ZXJ0YCBpbiBgbmV0L2lwdjQvbWV0cmljcy5jYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gR290dGEgbWFrZSBzdXJlIHRoaXMgYWRkaXRpb24gaXMgcGxheWluZyBuaWNlbHkgd2l0aCBldmVyeXRoaW5nIGVsc2UgaW4gdGhhdCBmaWxlLiBUaGF0J3MgdGhlIGltcG9ydGFudCBiaXQgZm9yIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MzEuNTEzMDI3MDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9tZXRyaWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3NwZWMuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHRzdGF0aWMgaW50IGlwX21ldHJpY3NfY29udmVydChzdHJ1Y3QgbmxhdHRyICpmY19teCxcXG4gIDExOlxcdFxcdFxcdFxcdCAgICAgIGludCBmY19teF9sZW4sIHUzMiAqbWV0cmljcyxcXG4gIDEyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gIDEzOlxcdHtcXG4gIDE0OlxcdFxcdGJvb2wgZWNuX2NhID0gZmFsc2U7XFxuICAxNTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuICAxNjpcXHRcXHRpbnQgcmVtYWluaW5nO1xcbiAgMTc6XFx0XFxuICAxODpcXHRcXHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGZjX214LCBmY19teF9sZW4sIHJlbWFpbmluZykge1xcbiAgMTk6XFx0XFx0XFx0aW50IHR5cGUgPSBubGFfdHlwZShubGEpO1xcbiAgMjA6XFx0XFx0XFx0dTMyIHZhbDtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0XFx0aWYgKCF0eXBlKVxcbiAgMjM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICAyNDpcXHRcXHRcXHRpZiAodHlwZSBcXHUwMDNlIFJUQVhfTUFYKSB7XFxuICAyNTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIG1ldHJpYyB0eXBlXFxcIik7XFxuICAyNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDI3OlxcdFxcdFxcdH1cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0XFx0dHlwZSA9IGFycmF5X2luZGV4X25vc3BlYyh0eXBlLCBSVEFYX01BWCArIDEpO1xcbiAgMzA6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUlRBWF9DQ19BTEdPKSB7XFxuICAzMTpcXHRcXHRcXHRcXHRjaGFyIHRtcFtUQ1BfQ0FfTkFNRV9NQVhdO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHRcXHRcXHRubGFfc3Ryc2NweSh0bXAsIG5sYSwgc2l6ZW9mKHRtcCkpO1xcbiAgMzQ6XFx0XFx0XFx0XFx0dmFsID0gdGNwX2NhX2dldF9rZXlfYnlfbmFtZSh0bXAsIFxcdTAwMjZlY25fY2EpO1xcbiAgMzU6XFx0XFx0XFx0XFx0aWYgKHZhbCA9PSBUQ1BfQ0FfVU5TUEVDKSB7XFxuICAzNjpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJVbmtub3duIHRjcCBjb25nZXN0aW9uIGFsZ29yaXRobVxcXCIpO1xcbiAgMzc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICAzODpcXHRcXHRcXHRcXHR9XFxuICAzOTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAgNDA6XFx0XFx0XFx0XFx0aWYgKG5sYV9sZW4obmxhKSAhPSBzaXplb2YodTMyKSkge1xcbiAgNDE6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIG5sYSxcXG4gIDQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiSW52YWxpZCBhdHRyaWJ1dGUgaW4gbWV0cmljc1xcXCIpO1xcbiAgNDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA0NDpcXHRcXHRcXHRcXHR9XFxuICA0NTpcXHRcXHRcXHRcXHR2YWwgPSBubGFfZ2V0X3UzMihubGEpO1xcbiAgNDY6XFx0XFx0XFx0fVxcbiAgNDc6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgXFx1MDAyNlxcdTAwMjYgdmFsIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDNjIFRDUF9NSU5fTVNTKSB7XFxuICA0ODpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSX0ZNVChleHRhY2ssIG5sYSxcXG4gIDQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yIFxcdTAwM2U9ICV1XFxcIixcXG4gIDUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFRDUF9NSU5fTVNTKTtcXG4gIDUxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNTI6XFx0XFx0XFx0fVxcbiAgNTM6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgXFx1MDAyNlxcdTAwMjYgdmFsIFxcdTAwM2UgNjU1MzUgLSA0MClcXG4gIDU0OlxcdFxcdFxcdFxcdHZhbCA9IDY1NTM1IC0gNDA7XFxuICA1NTpcXHRcXHRcXHRpZiAodHlwZSA9PSBSVEFYX01UVSBcXHUwMDI2XFx1MDAyNiB2YWwgXFx1MDAzZSA2NTUzNSAtIDE1KVxcbiAgNTY6XFx0XFx0XFx0XFx0dmFsID0gNjU1MzUgLSAxNTtcXG4gIDU3OlxcdFxcdFxcdGlmICh0eXBlID09IFJUQVhfSE9QTElNSVQgXFx1MDAyNlxcdTAwMjYgdmFsIFxcdTAwM2UgMjU1KVxcbiAgNTg6XFx0XFx0XFx0XFx0dmFsID0gMjU1O1xcbiAgNTk6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUlRBWF9GRUFUVVJFUyBcXHUwMDI2XFx1MDAyNiAodmFsIFxcdTAwMjYgflJUQVhfRkVBVFVSRV9NQVNLKSkge1xcbiAgNjA6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5rbm93biBmbGFnIHNldCBpbiBmZWF0dXJlIG1hc2sgaW4gbWV0cmljcyBhdHRyaWJ1dGVcXFwiKTtcXG4gIDYxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjI6XFx0XFx0XFx0fVxcbiAgNjM6XFx0XFx0XFx0bWV0cmljc1t0eXBlIC0gMV0gPSB2YWw7XFxuICA2NDpcXHRcXHR9XFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdGlmIChlY25fY2EpXFxuICA2NzpcXHRcXHRcXHRtZXRyaWNzW1JUQVhfRkVBVFVSRVMgLSAxXSB8PSBEU1RfRkVBVFVSRV9FQ05fQ0E7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdHJldHVybiAwO1xcbiAgNzA6XFx0fVxcbiAgNzE6XFx0XFxuICA3MjpcXHRzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXFxuICA3MzpcXHRcXHRcXHRcXHRcXHRcXHRpbnQgZmNfbXhfbGVuLFxcbiAgNzQ6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0c3RydWN0IGRzdF9tZXRyaWNzICpmaWJfbWV0cmljcztcXG4gIDc3OlxcdFxcdGludCBlcnI7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdGlmICghZmNfbXgpXFxuICA4MDpcXHRcXHRcXHRyZXR1cm4gKHN0cnVjdCBkc3RfbWV0cmljcyAqKVxcdTAwMjZkc3RfZGVmYXVsdF9tZXRyaWNzO1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRmaWJfbWV0cmljcyA9IGt6YWxsb2Nfb2JqKCpmaWJfbWV0cmljcyk7XFxuICA4MzpcXHRcXHRpZiAodW5saWtlbHkoIWZpYl9tZXRyaWNzKSlcXG4gIDg0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRlcnIgPSBpcF9tZXRyaWNzX2NvbnZlcnQoZmNfbXgsIGZjX214X2xlbiwgZmliX21ldHJpY3MtXFx1MDAzZW1ldHJpY3MsXFxuICA4NzpcXHRcXHRcXHRcXHRcXHQgZXh0YWNrKTtcXG4gIDg4OlxcdFxcdGlmICghZXJyKSB7XFxuICA4OTpcXHRcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmZpYl9tZXRyaWNzLVxcdTAwM2VyZWZjbnQsIDEpO1xcbiAgOTA6XFx0XFx0fSBlbHNlIHtcXG4gIDkxOlxcdFxcdFxcdGtmcmVlKGZpYl9tZXRyaWNzKTtcXG4gIDkyOlxcdFxcdFxcdGZpYl9tZXRyaWNzID0gRVJSX1BUUihlcnIpO1xcbiAgOTM6XFx0XFx0fVxcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRyZXR1cm4gZmliX21ldHJpY3M7XFxuICA5NjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjMxLjUxMzE4OTYxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAyMDQyMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgSVAgRklCIE1ldHJpY3MgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgaXBfZmliX21ldHJpY3NfaW5pdGAgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgbm9uLXN0YXRpYyBvbmUuIFRoYXQgZmVlbHMgcmlnaHQuIEFuZCwgeWVhaCwgYGZpYl9jcmVhdGVfaW5mb2AgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AgbG9va3MgbGlrZSBhIGtleSBzeW1ib2wgdG8gZGlnIGludG8uXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBpcF9maWJfbWV0cmljc19pbml0YCBpcyBleHBvcnRlZC4gTm9wZSwgbm90IGV4cG9ydGVkLCBidXQgaXQgKmlzbid0KiBzdGF0aWMuIFRoYXQncyBhIHBvaW50IHRvIG1ha2UsIGl0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZS5cblxuT2theSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBjYWxsaW5nIGBpcF9tZXRyaWNzX2NvbnZlcnRgPyBOb3BlLCBub3RoaW5nLiBJbnRlcmVzdGluZy5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2ltaWxhciBjaGFuZ2VzIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gTmVlZCB0byBzZWUgaWYgSVB2NiBpcyBoYW5kbGVkIHNpbWlsYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ3NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjM1LjExNTIzNjMxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyOTIzNDIzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSVEFYX0FEVk1TU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjM1LjI0ODE3MzQ5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA1NTExODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBYnNlbmNlIG9mIFJUQVhfQURWTVNTIGluIG5ldC9pcHY2L3JvdXRlLmMqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIElQdjYgcm91dGluZyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2lwdjYvcm91dGUuY2Agd291bGQgdXRpbGl6ZSBgUlRBWF9BRFZNU1NgLCBidXQgdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgdGhlIGNhc2UuIFRoYXQncyBhIGJpdCB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIFBlcmhhcHMgaXQncyBoYW5kbGVkIGRpZmZlcmVudGx5IG9yIG5vdCBzdXBwb3J0ZWQgYXQgYWxsIGluIHRoaXMgcGFydGljdWxhciBhcmVhPyBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2suIE15IGZpcnN0IHN0ZXAgaXMgdG8gc2VhcmNoIHdpdGhpbiB0aGUgYG5ldC9pcHY2L3JvdXRlLmNgIGZpbGUgaXRzZWxmIGZvciBhIGZ1bmN0aW9uIGxpa2UgYGlwX21ldHJpY3NfY29udmVydGAgb3IgYW55dGhpbmcgd2l0aCBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb24gdGhhdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBoYW5kbGluZyBvciB0cmFuc2xhdGluZyByb3V0aW5nIG1ldHJpY3MuIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSBjb2RlIG1hbmFnZXMgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLCBvciBwb3RlbnRpYWxseSB3aHkgaXQncyBpZ25vcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODIwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MzguMzUzNjg5ODg2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM5ODEzMDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21ldHJpY3NfY29udmVydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjM4LjQ1NzY4MjI1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUxMzEzOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBkZWFsaW5nIHdpdGggc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhlc2UgbmV0d29ya2luZyBkZXRhaWxzOlxuXG4qKkRpZ2dpbmcgaW50byBJUHY2IFJvdXRpbmcgYW5kIE1ldHJpY3MqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IElQdjYsIHNwZWNpZmljYWxseSB0aGUgcm91dGluZyBzaWRlIG9mIHRoaW5ncy4gSSdtIHdvbmRlcmluZyBpZiB0aGUgc3lzdGVtIEknbSB3b3JraW5nIHdpdGgsIG9yIHBlcmhhcHMgYSBzeXN0ZW0gSSdtIGFuYWx5emluZywgdXNlcyBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGxvb2tzIGZhbWlsaWFyLi4uYW5kIHRoZSB0aG91Z2h0IHRoZW4gdHJpZ2dlcnM6IGNvdWxkIHRoaXMgYmUgd2hlcmUgcm91dGluZyBtZXRyaWNzIG1pZ2h0IGJlIHBhcnNlZCBvciBldmVuIGNvbmZpZ3VyZWQ/IEl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyByb3V0ZSBwcmlvcml0aXphdGlvbiBhbmQgc2VsZWN0aW9uIGJhc2VkIG9uIHRob3NlIG1ldHJpY3MsIGJlIHRoZXkgY29zdCwgaG9wIGNvdW50LCBvciB3aGF0ZXZlciB0aGUgaW1wbGVtZW50YXRpb24gdXNlcy4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgY29kZSwgYW5kIHRoaXMgZnVuY3Rpb24gbmFtZSBpcyBhIHVzZWZ1bCBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTAyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6NDEuNDA5MDAxMzAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQxNTIzOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRBWF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuYz0xMDg5PXN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTE1Ni1cXHRcXHRcXHRcXHRpZiAocnQtXFx1MDAzZWZpYjZfcG10dSlcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTE1NzpcXHRcXHRcXHRcXHRcXHRmaWI2X21ldHJpY19zZXQoaXRlciwgUlRBWF9NVFUsXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTExNTgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0cnQtXFx1MDAzZWZpYjZfcG10dSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MjYyPWludCBpcDZfZHN0X2hvcGxpbWl0KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjYzLXtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MjY0OlxcdGludCBob3BsaW1pdCA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9IT1BMSU1JVCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTI2NS1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xNDE2LVxcdFxcdFxcdFxcdCAgIHJhX21zZy1cXHUwMDNlaWNtcGguaWNtcDZfaG9wX2xpbWl0KTtcXG5uZXQvaXB2Ni9uZGlzYy5jOjE0MTc6XFx0XFx0XFx0ZmliNl9tZXRyaWNfc2V0KHJ0LCBSVEFYX0hPUExJTUlULFxcbm5ldC9pcHY2L25kaXNjLmMtMTQxOC1cXHRcXHRcXHRcXHRcXHRyYV9tc2ctXFx1MDAzZWljbXBoLmljbXA2X2hvcF9saW1pdCk7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTE1NjgtXFx0XFx0XFx0V1JJVEVfT05DRShpbjZfZGV2LVxcdTAwM2VjbmYubXR1NiwgbXR1KTtcXG5uZXQvaXB2Ni9uZGlzYy5jOjE1Njk6XFx0XFx0XFx0ZmliNl9tZXRyaWNfc2V0KHJ0LCBSVEFYX01UVSwgbXR1KTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTE1NzAtXFx0XFx0XFx0cnQ2X210dV9jaGFuZ2Uoc2tiLVxcdTAwM2VkZXYsIG10dSk7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yNzktXFxubmV0L2lwdjYvcm91dGUuYzoyODA6c3RhdGljIGNvbnN0IHUzMiBpcDZfdGVtcGxhdGVfbWV0cmljc1tSVEFYX01BWF0gPSB7XFxubmV0L2lwdjYvcm91dGUuYzoyODE6XFx0W1JUQVhfSE9QTElNSVQgLSAxXSA9IDAsXFxubmV0L2lwdjYvcm91dGUuYy0yODItfTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MTcxOD1zdGF0aWMgaW50IHJ0Nl9pbnNlcnRfZXhjZXB0aW9uKHN0cnVjdCBydDZfaW5mbyAqbnJ0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0xNzYwLVxcdCAqL1xcbm5ldC9pcHY2L3JvdXRlLmM6MTc2MTpcXHRpZiAoZHN0X21ldHJpY19yYXcoXFx1MDAyNm5ydC1cXHUwMDNlZHN0LCBSVEFYX01UVSkgXFx1MDAzZT0gZmliNl9tdHUocmVzKSkge1xcbm5ldC9pcHY2L3JvdXRlLmMtMTc2Mi1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0yMDgyPXN0YXRpYyB2b2lkIHJ0Nl9leGNlcHRpb25zX3VwZGF0ZV9wbXR1KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTIxMDAtXFx0XFx0XFx0ICovXFxubmV0L2lwdjYvcm91dGUuYzoyMTAxOlxcdFxcdFxcdGlmIChkc3RfbWV0cmljX3JhdyhcXHUwMDI2ZW50cnktXFx1MDAzZWRzdCwgUlRBWF9NVFUpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvcm91dGUuYy0yMTAyLVxcdFxcdFxcdCAgICBydDZfbXR1X2NoYW5nZV9yb3V0ZV9hbGxvd2VkKGlkZXYsIGVudHJ5LCBtdHUpKVxcbm5ldC9pcHY2L3JvdXRlLmM6MjEwMzpcXHRcXHRcXHRcXHRkc3RfbWV0cmljX3NldChcXHUwMDI2ZW50cnktXFx1MDAzZWRzdCwgUlRBWF9NVFUsIG10dSk7XFxubmV0L2lwdjYvcm91dGUuYy0yMTA0LVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjkwNz1zdGF0aWMgdm9pZCBydDZfZG9fdXBkYXRlX3BtdHUoc3RydWN0IHJ0Nl9pbmZvICpydCwgdTMyIG10dSlcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjkxMC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjI5MTE6XFx0ZHN0X21ldHJpY19zZXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QsIFJUQVhfTVRVLCBtdHUpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMjkxMi1cXHRydC1cXHUwMDNlcnQ2aV9mbGFncyB8PSBSVEZfTU9ESUZJRUQ7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI5MjI9c3RhdGljIHZvaWQgX19pcDZfcnRfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTI5MjgtXFxubmV0L2lwdjYvcm91dGUuYzoyOTI5OlxcdC8qIE5vdGU6IGRvICpOT1QqIGNoZWNrIGRzdF9tZXRyaWNfbG9ja2VkKGRzdCwgUlRBWF9NVFUpXFxubmV0L2lwdjYvcm91dGUuYy0yOTMwLVxcdCAqIElQdjYgcG10dSBkaXNjb3ZlcnkgaXNuJ3Qgb3B0aW9uYWwsIHNvICdtdHUgbG9jaycgY2Fubm90IGRpc2FibGUgaXQuXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzMDI9dTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zMzExLVxcbm5ldC9pcHY2L3JvdXRlLmM6MzMxMjpcXHRpZiAodW5saWtlbHkoZmliNl9tZXRyaWNfbG9ja2VkKGY2aSwgUlRBWF9NVFUpKSkge1xcbm5ldC9pcHY2L3JvdXRlLmMtMzMxMy1cXHRcXHRtdHUgPSBmNmktXFx1MDAzZWZpYjZfcG10dTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzMxOS1cXHRpZiAodW5saWtlbHkocnQpKSB7XFxubmV0L2lwdjYvcm91dGUuYzozMzIwOlxcdFxcdG10dSA9IGRzdF9tZXRyaWNfcmF3KFxcdTAwMjZydC1cXHUwMDNlZHN0LCBSVEFYX01UVSk7XFxubmV0L2lwdjYvcm91dGUuYy0zMzIxLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzMzU9c3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzNTgtXFx0cnQtXFx1MDAzZXJ0NmlfaWRldiAgICAgPSBpZGV2O1xcbm5ldC9pcHY2L3JvdXRlLmM6MzM1OTpcXHRkc3RfbWV0cmljX3NldChcXHUwMDI2cnQtXFx1MDAzZWRzdCwgUlRBWF9IT1BMSU1JVCwgMCk7XFxubmV0L2lwdjYvcm91dGUuYy0zMzYwLVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDQ0PXN0YXRpYyBpbnQgZmliNl9uaF9tdHVfY2hhbmdlKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqX2FyZylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA2Mi1cXHRcXHQgICAgKG10dSBcXHUwMDNjIGFyZy1cXHUwMDNlbXR1IFxcdTAwMjZcXHUwMDI2IG10dSA9PSBpZGV2LVxcdTAwM2VjbmYubXR1NikpXFxubmV0L2lwdjYvcm91dGUuYzo1MDYzOlxcdFxcdFxcdGZpYjZfbWV0cmljX3NldChmNmksIFJUQVhfTVRVLCBhcmctXFx1MDAzZW10dSk7XFxubmV0L2lwdjYvcm91dGUuYy01MDY0LVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDczPXN0YXRpYyBpbnQgcnQ2X210dV9jaGFuZ2Vfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqZjZpLCB2b2lkICpwX2FyZylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3OC1cXHQvKiBJbiBJUHY2IHBtdHUgZGlzY292ZXJ5IGlzIG5vdCBvcHRpb25hbCxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzk6XFx0ICAgc28gdGhhdCBSVEFYX01UVSBsb2NrIGNhbm5vdCBkaXNhYmxlIGl0Llxcbm5ldC9pcHY2L3JvdXRlLmMtNTA4MC1cXHQgICBXZSBzdGlsbCB1c2UgdGhpcyBsb2NrIHRvIGJsb2NrIGNoYW5nZXNcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA4Ny1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwODg6XFx0aWYgKGZpYjZfbWV0cmljX2xvY2tlZChmNmksIFJUQVhfTVRVKSlcXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwODktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTU2OTk9c3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3MzctXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX1BSSU9SSVRZICovXFxubmV0L2lwdjYvcm91dGUuYzo1NzM4OlxcdCAgICAgICArIFJUQVhfTUFYICogbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX01FVFJJQ1MgKi9cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3MzktXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3NDA6XFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3NDEtXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjU2LVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoyNTc6XFx0cmVxLVxcdTAwM2Vyc2tfd2luZG93X2NsYW1wID0gUkVBRF9PTkNFKHRwLVxcdTAwM2V3aW5kb3dfY2xhbXApID8gOmRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVyk7XFxubmV0L2lwdjYvc3luY29va2llcy5jLTI1OC1cXHQvKiBsaW1pdCB0aGUgd2luZG93IHNlbGVjdGlvbiBpZiB0aGUgdXNlciBlbmZvcmNlIGEgc21hbGxlciByeCBidWZmZXIgKi9cXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yNjYtXFx0XFx0XFx0XFx0ICBpcmVxLVxcdTAwM2V3c2NhbGVfb2ssIFxcdTAwMjZyY3Zfd3NjYWxlLFxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoyNjc6XFx0XFx0XFx0XFx0ICBkc3RfbWV0cmljKGRzdCwgUlRBWF9JTklUUldORCkpO1xcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjQxLjU0MzE2MjExNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3MjQwNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklQdjYgUm91dGluZyBNZXRyaWNzIENvbnVuZHJ1bSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIHN0YW5kYXJkIGBpcF9tZXRyaWNzX2NvbnZlcnRgIGZ1bmN0aW9uIHdhcyB1bml2ZXJzYWxseSB1c2VkIGZvciBoYW5kbGluZyByb3V0ZSBtZXRyaWNzIGFjcm9zcyBib3RoIElQdjQgYW5kIElQdjYuIEJ1dCB0aGUgY29kZSBmb3IgYG5ldC9pcHY2L3JvdXRlLmNgIGRvZXNuJ3Qgc2VlbSB0byBiZSBjYWxsaW5nIGl0LiBUaGF04oCZcyB1bmV4cGVjdGVkLiBJdCB0aHJvd3MgYSB3cmVuY2ggaW4gbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBjb21tb25hbGl0aWVzIGJldHdlZW4gdGhlIHR3byBpbXBsZW1lbnRhdGlvbnMuXG5cblNvLCBob3cgZXhhY3RseSBkb2VzIHRoZSBJUHY2IHJvdXRlIHBhcnNpbmcgZGVhbCB3aXRoIHRoZXNlIG1ldHJpY3M/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjb252ZXJzaW9uIG9yIGludGVycHJldGF0aW9uIG9mIHRob3NlIG1ldHJpY3MgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgSVB2NiByb3V0aW5nIGNvbnRleHQuIEFscmlnaHQsIGxldOKAmXMgZ28gZGlyZWN0bHkgdG8gYG5ldC9pcHY2L3JvdXRlLmNgIGFuZCBzcGVjaWZpY2FsbHkgc2VhcmNoIGZvciBob3cgdGhlIGNvZGUgaGFuZGxlcyBgUlRBX01FVFJJQ1NgIHRvIGNsYXJpZnkgdGhpbmdzLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSBsb2dpYyB0aGF0IGlzIGJlaW5nIHVzZWQsIG9yIGV4cGxhaW4gKndoeSogc29tZXRoaW5nIGVsc2UgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Njo0NS4xMzA0MDg3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNzA5MDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJUQV9NRVRSSUNTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTUxMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bV9pcHY2X3BvbGljeVtSVEFfTUFYKzFdID0ge1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01MTE3LVxcdFtSVEFfUFJJT1JJVFldICAgICAgICAgID0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUxMTg6XFx0W1JUQV9NRVRSSUNTXSAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9pcHY2L3JvdXRlLmMtNTExOS1cXHRbUlRBX01VTFRJUEFUSF1cXHRcXHQ9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSB9LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MTgxPXN0YXRpYyBpbnQgcnRtX3RvX2ZpYjZfY29uZmlnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01MjgzLVxcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NDpcXHRpZiAodGJbUlRBX01FVFJJQ1NdKSB7XFxubmV0L2lwdjYvcm91dGUuYzo1Mjg1OlxcdFxcdGNmZy1cXHUwMDNlZmNfbXggPSBubGFfZGF0YSh0YltSVEFfTUVUUklDU10pO1xcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NjpcXHRcXHRjZmctXFx1MDAzZWZjX214X2xlbiA9IG5sYV9sZW4odGJbUlRBX01FVFJJQ1NdKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTUyODctXFx0fVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01Njk5PXN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01NzM3LVxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9QUklPUklUWSAqL1xcbm5ldC9pcHY2L3JvdXRlLmM6NTczODpcXHQgICAgICAgKyBSVEFYX01BWCAqIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9NRVRSSUNTICovXFxubmV0L2lwdjYvcm91dGUuYy01NzM5LVxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjQ1LjI1MTEyNjUzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE5MzQ5MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBhbiBleHBlcnQgd291bGQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBJUHY2IFJvdXRlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgcnRtX3RvX2ZpYjZfY29uZmlnYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHNldHRpbmcgdGhlIGBjZmctXHUwMDNlZmNfbXhgIGZpZWxkLCBodWg/IFRoYXQncyB0aGUgY3J1Y2lhbCBzdGVwLiBOb3csIEkgbmVlZCB0byByZW1lbWJlciB3aGF0J3MgaW52b2x2ZWQgd2l0aCB0aGF0IHBhcnRpY3VsYXIgc3RydWN0dXJlLCBhbmQgd2hhdCBpdCByZWxhdGVzIHRvIGluIHRoZSByb3V0aW5nIHByb2Nlc3MuXG5cbkFoLCByaWdodCwgc28gYGNmZy1cdTAwM2VmY19teGAgaXMgb2J2aW91c2x5IHNvbWV0aGluZyB0aGF0IGdldHMgZmVkIHRvIHRoZSBjb25maWd1cmF0aW9uIHJvdXRpbmVzLiBUaGVuLCBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYCBwYXJzZXMgYWxsIG9mIHRoaXMuIEkgYmV0IGl0IHRha2VzIGBjZmctXHUwMDNlZmNfbXhgIGFuZCBleHRyYWN0cyB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIHRoZSByb3V0ZSwgbWF5YmUgc2V0dGluZyB0aGUgdmFyaW91cyBmaWIgZW50cnkgZmxhZ3Mgb3Igcm91dGUgYXR0cmlidXRlcy4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBzb3VyY2UgZm9yIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGFuZCBkb3VibGUgY2hlY2suIEtub3dpbmcgd2hlcmUgdGhhdCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIG9yaWdpbmF0ZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHJvdXRlcyBnZXQgaW5zdGFsbGVkLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZyB0byB2ZXJpZnkgYWdhaW5zdCB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYW55IHBvdGVudGlhbCBjYXZlYXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM2MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjQ4LjU3MDQ3OTM2NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTI3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZjX214XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3JvdXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz0zODA5PXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICppcDZfcm91dGVfaW5mb19jcmVhdGUoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4MzgtXFxubmV0L2lwdjYvcm91dGUuYzozODM5OlxcdHJ0LVxcdTAwM2VmaWI2X21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cXHUwMDNlZmNfbXgsIGNmZy1cXHUwMDNlZmNfbXhfbGVuLFxcbm5ldC9pcHY2L3JvdXRlLmMtMzg0MC1cXHRcXHRcXHRcXHRcXHQgICAgICAgZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NTE4MT1zdGF0aWMgaW50IHJ0bV90b19maWI2X2NvbmZpZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTI4NC1cXHRpZiAodGJbUlRBX01FVFJJQ1NdKSB7XFxubmV0L2lwdjYvcm91dGUuYzo1Mjg1OlxcdFxcdGNmZy1cXHUwMDNlZmNfbXggPSBubGFfZGF0YSh0YltSVEFfTUVUUklDU10pO1xcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NjpcXHRcXHRjZmctXFx1MDAzZWZjX214X2xlbiA9IG5sYV9sZW4odGJbUlRBX01FVFJJQ1NdKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTUyODctXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Njo0OC42NzQ2MjA5NjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3ODk4ODA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBSb3V0aW5nIFNldHVwKipcblxuUmlnaHQsIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGNhbGxzIGBpcF9maWJfbWV0cmljc19pbml0YC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBtZXRyaWNzIGFyZSBiZWluZyBpbml0aWFsaXplZCBmb3IgSVB2NiByb3V0ZXMuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyBgaXBfZmliX21ldHJpY3NfaW5pdGAgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCBvciBpcyBpdCBkZWNsYXJlZCBzb21ld2hlcmUgaW50ZXJuYWw/IElzIGl0IGV4cG9ydGVkIG9yIHZpc2libGUgdmlhIGEgaGVhZGVyIGZpbGU/XG5cbk15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGluIHRoZSBzdGFuZGFyZCBwbGFjZXMsIHByb2JhYmx5IHdpdGhpbiBgaW5jbHVkZS9uZXQvaXAuaGAgb3Igc29tZXdoZXJlIGVxdWFsbHkgb2J2aW91cyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2sncyBpbmNsdWRlIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgbGl2ZS4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgYSBkZWZpbml0aW9uIG9yIGRlY2xhcmF0aW9uIGluIHRoZXJlIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6NTIuMTUzNjE0NzY3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc0OTMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfZmliX21ldHJpY3NfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcC5oPTUwOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTUyNC1cXG5pbmNsdWRlL25ldC9pcC5oOjUyNTpzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsIGludCBmY19teF9sZW4sXFxuaW5jbHVkZS9uZXQvaXAuaC01MjYtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6NTIuNDcxMTE1NzE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjU3NzE1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHdlJ3JlIGxvb2tpbmcgYXQsIGFuZCBpdCdzIG5lYXRseSBkZWZpbmVkIGluIGBpbmNsdWRlL25ldC9pcC5oYC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBieSBib3RoIElQdjQgYW5kIElQdjYgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEV4Y2VsbGVudCFcblxuTGV0J3MgYnJvYWRlbiB0aGUgc2NvcGUuIEJleW9uZCBgaXBfZmliX21ldHJpY3NfaW5pdGAsIEkgc2hvdWxkIGFsc28gYmUgY29uc2lkZXJpbmcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZnV6ei4gQmFzZWQgb24gbXkgcXVpY2sgcmV2aWV3LCBgZmliX2NyZWF0ZV9pbmZvYCAoZm9yIElQdjQpIGFuZCBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYCAoZm9yIElQdjYpIGxvb2sgbGlrZSB3b3J0aHdoaWxlIHRhcmdldHMgYXMgd2VsbCwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IGFyZSByZWxhdGVkIHRvIHRoZSBGSUIgc2V0dXAuXG5cbk9rYXksIGxldCBtZSByZXZpc2l0IGBpcF9maWJfbWV0cmljc19pbml0YCBhbmQgZ2V0IGEgZmluZXIgZ3JhaW5lZCB2aWV3LiBJdCB0YWtlcyBgZmNfbXhgIGFuZCBgZmNfbXhfbGVuYCBhcyBpbnB1dHMgYW5kLCBpbXBvcnRhbnRseSwgY2FsbHMgYGlwX21ldHJpY3NfY29udmVydGAuIFRoZSBwYXRjaCBkb2N1bWVudGF0aW9uIGNsZWFybHkgaW5kaWNhdGVzIGEgbW9kaWZpY2F0aW9uIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHdpdGhpbiBgbmV0L2lwdjQvbWV0cmljcy5jYC4gVGhpcyBpcyBrZXkuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHdpbGwgYmU6XG4qICAgYGlwX2ZpYl9tZXRyaWNzX2luaXRgXG4qICAgYGZpYl9jcmVhdGVfaW5mb2BcbiogICBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYFxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIHdvcnJ5IGFib3V0PyBOb3BlLCBgQ09ORklHX0lORVRgIGlzIHN1ZmZpY2llbnQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuXG5cblRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIHBhdGNoIGl0c2VsZi5cblxuYGBgY1xuXHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2MgVENQX01JTl9NU1MpIHtcblx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFJfRk1UKGV4dGFjaywgbmxhLFxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yIFx1MDAzZT0gJXVcIixcblx0XHRcdFx0XHRcdFRDUF9NSU5fTVNTKTtcblx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdH1cbmBgYFxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuIGltcG9ydGFudCBjaGVjayEgSXQncyBwcmV2ZW50aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBhZHZtc3NgIHRvIGludmFsaWQgdmFsdWVzIGJldHdlZW4gMSBhbmQgYFRDUF9NSU5fTVNTIC0gMWAsIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBhIG5ldyBjb25zdHJhaW50LCBzbyBJIG5lZWQgdG8gZXhwbG9yZSB0aGUgYm91bmRhcmllcyBvZiB0aGlzIGNoZWNrIHRob3JvdWdobHkuIFRoZSBmdXp6aW5nIHNob3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBgUlRBWF9BRFZNU1NgIGhhbmRsaW5nLlxuXG5UbyBiZSBjbGVhciBvbiB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZywgYWdhaW4gdGhlIGZpbmFsIGxpc3QgaXM6XG4qICAgYGlwX2ZpYl9tZXRyaWNzX2luaXRgXG4qICAgYGZpYl9jcmVhdGVfaW5mb2BcbiogICBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYFxuXG5JIHNob3VsZCBqdXN0IGRvdWJsZSBjaGVjayBpZiBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjU5LjM5Njg5MjM5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQwMTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfcm91dGVfaW5mb19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTM3NjI9c3RhdGljIGludCBmaWI2X2NvbmZpZ192YWxpZGF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzgwOC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4MDk6c3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKmlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4MTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzg3NS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4NzY6c3RhdGljIGludCBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgoc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxubmV0L2lwdjYvcm91dGUuYy0zODc3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Mzk1Mj1pbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zOTYxLVxcbm5ldC9pcHY2L3JvdXRlLmM6Mzk2MjpcXHRydCA9IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShjZmcsIGdmcF9mbGFncywgZXh0YWNrKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NjMtXFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NjUtXFxubmV0L2lwdjYvcm91dGUuYzozOTY2OlxcdGVyciA9IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZV9uaChydCwgY2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XFxubmV0L2lwdjYvcm91dGUuYy0zOTY3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTQ2NzU9c3RydWN0IGZpYjZfaW5mbyAqYWRkcmNvbmZfZjZpX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDcwMS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjQ3MDI6XFx0ZjZpID0gaXA2X3JvdXRlX2luZm9fY3JlYXRlKFxcdTAwMjZjZmcsIGdmcF9mbGFncywgZXh0YWNrKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3MDMtXFx0aWYgKElTX0VSUihmNmkpKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00NzA1LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDcwNjpcXHRlcnIgPSBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgoZjZpLCBcXHUwMDI2Y2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XFxubmV0L2lwdjYvcm91dGUuYy00NzA3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTU0MTU9c3RhdGljIGludCBpcDZfcm91dGVfbXVsdGlwYXRoX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTQ3MS1cXHRcXHRyX2NmZy5mY19mbGFncyB8PSAocnRuaC1cXHUwMDNlcnRuaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9PTkxJTkspO1xcbm5ldC9pcHY2L3JvdXRlLmM6NTQ3MjpcXHRcXHRydCA9IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShcXHUwMDI2cl9jZmcsIEdGUF9LRVJORUwsIGV4dGFjayk7XFxubmV0L2lwdjYvcm91dGUuYy01NDczLVxcdFxcdGlmIChJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU0NzgtXFxubmV0L2lwdjYvcm91dGUuYzo1NDc5OlxcdFxcdGVyciA9IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZV9uaChydCwgXFx1MDAyNnJfY2ZnLCBHRlBfS0VSTkVMLCBleHRhY2spO1xcbm5ldC9pcHY2L3JvdXRlLmMtNTQ4MC1cXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjU5LjQ3ODMwMjkwOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAzODc1MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBJUHY2IFJvdXRpbmcgVGFibGUgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGEgY291cGxlIG9mIHRoaW5ncyBoZXJlLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGZ1bmN0aW9uIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBpdHMgdXN1YWwgcm9sZS4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IG1lbW9yeSBvbiBgaXA2X3JvdXRlX2FkZGAuIEkgKnRoaW5rKiB0aGF0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBhbmQgdGhhdCBpdCdzIGV4cG9ydGVkIGZvciBleHRlcm5hbCB1c2UuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3QgY29uZmlybSB0aGF0IG5vdyB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZCByZWNlbnRseS4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgdmVyaWZpY2F0aW9uIGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU3OjAyLjQ4MjE4MzUwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNzEwNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9yb3V0ZV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTM4NzY9c3RhdGljIGludCBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgoc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NTEtXFxubmV0L2lwdjYvcm91dGUuYzozOTUyOmludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXFxubmV0L2lwdjYvcm91dGUuYy0zOTUzLVxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz00NDEzPXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00NDM5LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDQ0MDpcXHRpcDZfcm91dGVfYWRkKFxcdTAwMjZjZmcsIEdGUF9BVE9NSUMsIE5VTEwpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNDQ0MS1cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NDQ3OD1zdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX2RmbHRfcm91dGVyKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDUwMC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjQ1MDE6XFx0aWYgKCFpcDZfcm91dGVfYWRkKFxcdTAwMjZjZmcsIEdGUF9BVE9NSUMsIE5VTEwpKSB7XFxubmV0L2lwdjYvcm91dGUuYy00NTAyLVxcdFxcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NDU3OD1pbnQgaXB2Nl9yb3V0ZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBpbjZfcnRtc2cgKnJ0bXNnKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00NTk0LVxcdFxcdFxcdGNmZy5mY19tZXRyaWMgPSBJUDZfUlRfUFJJT19VU0VSO1xcbm5ldC9pcHY2L3JvdXRlLmM6NDU5NTpcXHRcXHRlcnIgPSBpcDZfcm91dGVfYWRkKFxcdTAwMjZjZmcsIEdGUF9LRVJORUwsIE5VTEwpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNDU5Ni1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NTY2MT1zdGF0aWMgaW50IGluZXQ2X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTY3Ni1cXHRlbHNlXFxubmV0L2lwdjYvcm91dGUuYzo1Njc3OlxcdFxcdHJldHVybiBpcDZfcm91dGVfYWRkKFxcdTAwMjZjZmcsIEdGUF9LRVJORUwsIGV4dGFjayk7XFxubmV0L2lwdjYvcm91dGUuYy01Njc4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTc6MDIuNzI0OTA3Mzc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzM0NDQ3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIGBpcDZfcm91dGVfYWRkYCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGFsc28gbGlrZSB3aGF0IEkgc2VlIHdpdGggYGluZXQ2X3J0bV9uZXdyb3V0ZWA7IHRoYXQncyByZWxldmFudCB0byB0aGUgdG9waWMgYXMgd2VsbC4gVG8gZnVydGhlciBteSBpbnZlc3RpZ2F0aW9uLCBJJ20gZ29pbmcgdG8gdGFrZSBhIHBlZWsgYXQgYGZpYl9jcmVhdGVfaW5mb2Agd2l0aGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBBaCwgeWVzLCBjb25maXJtZWQ6IGl0J3MgYWxzbyBub24tc3RhdGljLiBFeGNlbGxlbnQsIHRoaXMgaXMgc29saWQuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBpcF9maWJfbWV0cmljc19pbml0YCwgYGZpYl9jcmVhdGVfaW5mb2AsIGFuZCBgaXA2X3JvdXRlX2FkZGAuIFRoaXMgc2V0IGFwcGVhcnMgdG8gYmUgdGhlIHJpZ2h0IHdheSB0byBhY2hpZXZlIG15IGdvYWwuIEknbSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLCBzbyBJJ2xsIHNldCB0aGVzZSBmaW5kaW5ncyBhc2lkZSBmb3Igbm93IGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDA4LCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NzowNy41OTgzNTc1NjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2ZpYl9tZXRyaWNzX2luaXRcIixcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiaXA2X3JvdXRlX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoZWNrIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHRvIGVuc3VyZSB0aGF0IHRoZSBgUlRBWF9BRFZNU1NgIG1ldHJpYyBpcyBlaXRoZXIgMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFRDUF9NSU5fTVNTYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIElQdjQgb3IgSVB2NiByb3V0ZXMgd2l0aCBtZXRyaWNzIHZpYSBuZXRsaW5rIChlLmcuLCBgUlRNX05FV1JPVVRFYCkuIFNpbmNlIGl0IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfZmliX21ldHJpY3NfaW5pdFwiLFxuICAgIFwiZmliX2NyZWF0ZV9pbmZvXCIsXG4gICAgXCJpcDZfcm91dGVfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgdG8gYGlwX21ldHJpY3NfY29udmVydGAgdG8gZW5zdXJlIHRoYXQgdGhlIGBSVEFYX0FEVk1TU2AgbWV0cmljIGlzIGVpdGhlciAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgVENQX01JTl9NU1NgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gY29uZmlndXJpbmcgSVB2NCBvciBJUHY2IHJvdXRlcyB3aXRoIG1ldHJpY3MgdmlhIG5ldGxpbmsgKGUuZy4sIGBSVE1fTkVXUk9VVEVgKS4gU2luY2UgaXQgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 00:10:41 +0000 UTC FinishedAt: 2026-07-29 00:57:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e095f249e2209674f6366f6db0383a2b96e19239", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e095f249e2209674f6366f6db0383a2b96e19239", "config_name": "upstream-apparmor-kasan.config", "series_id": "ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_fib_metrics_init", "fib_create_info", "ip6_route_add" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfZmliX21ldHJpY3NfaW5pdCYjMzQ7LAogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7aXA2X3JvdXRlX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGVjayB0byBgaXBfbWV0cmljc19jb252ZXJ0YCB0byBlbnN1cmUgdGhhdCB0aGUgYFJUQVhfQURWTVNTYCBtZXRyaWMgaXMgZWl0aGVyIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBUQ1BfTUlOX01TU2AuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBjb25maWd1cmluZyBJUHY0IG9yIElQdjYgcm91dGVzIHdpdGggbWV0cmljcyB2aWEgbmV0bGluayAoZS5nLiwgYFJUTV9ORVdST1VURWApLiBTaW5jZSBpdCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWI2ODNiODNiZDEyYWJhNTJmYjcxNzZjNmE2NGUzZWQ4MDQ1OThiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDAwOjU2OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L21ldHJpY3MuYyBiL25ldC9pcHY0L21ldHJpY3MuY1xuaW5kZXggYWQ0MDc2MmE4YjM4My4uYjliOTdhMGE1MTI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L21ldHJpY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbWV0cmljcy5jXG5AQCAtNDQsNiAmIzQzOzQ0LDEyIEBAIHN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxuIFx0XHRcdH1cbiBcdFx0XHR2YWwgPSBubGFfZ2V0X3UzMihubGEpO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAodHlwZSA9PSBSVEFYX0FEVk1TUyBcdTAwMjZcdTAwMjYgdmFsIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNjIFRDUF9NSU5fTVNTKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFJfRk1UKGV4dGFjaywgbmxhLFxuJiM0MztcdFx0XHRcdFx0XHRcJiMzNDtJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yIFx1MDAzZT0gJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFRDUF9NSU5fTVNTKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNlIDY1NTM1IC0gNDApXG4gXHRcdFx0dmFsID0gNjU1MzUgLSA0MDtcbiBcdFx0aWYgKHR5cGUgPT0gUlRBWF9NVFUgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2UgNjU1MzUgLSAxNSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9maWJfbWV0cmljc19pbml0JiMzNDssCiAgICAmIzM0O2ZpYl9jcmVhdGVfaW5mbyYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoZWNrIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHRvIGVuc3VyZSB0aGF0IHRoZSBgUlRBWF9BRFZNU1NgIG1ldHJpYyBpcyBlaXRoZXIgMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFRDUF9NSU5fTVNTYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIElQdjQgb3IgSVB2NiByb3V0ZXMgd2l0aCBtZXRyaWNzIHZpYSBuZXRsaW5rIChlLmcuLCBgUlRNX05FV1JPVVRFYCkuIFNpbmNlIGl0IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYjY4M2I4M2JkMTJhYmE1MmZiNzE3NmM2YTY0ZTNlZDgwNDU5OGIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDA6NTY6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9tZXRyaWNzLmMgYi9uZXQvaXB2NC9tZXRyaWNzLmMKaW5kZXggYWQ0MDc2MmE4YjM4My4uYjliOTdhMGE1MTI2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbWV0cmljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L21ldHJpY3MuYwpAQCAtNDQsNiAmIzQzOzQ0LDEyIEBAIHN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LAogCQkJfQogCQkJdmFsID0gbmxhX2dldF91MzIobmxhKTsKIAkJfQomIzQzOwkJaWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgJmFtcDsmYW1wOyB2YWwgJmFtcDsmYW1wOyB2YWwgJmx0OyBUQ1BfTUlOX01TUykgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0FUVFJfRk1UKGV4dGFjaywgbmxhLAomIzQzOwkJCQkJCSYjMzQ7SW52YWxpZCBhZHZtc3MsIG11c3QgYmUgMCBvciAmZ3Q7PSAldSYjMzQ7LAomIzQzOwkJCQkJCVRDUF9NSU5fTVNTKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAkJaWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgJmFtcDsmYW1wOyB2YWwgJmd0OyA2NTUzNSAtIDQwKQogCQkJdmFsID0gNjU1MzUgLSA0MDsKIAkJaWYgKHR5cGUgPT0gUlRBWF9NVFUgJmFtcDsmYW1wOyB2YWwgJmd0OyA2NTUzNSAtIDE1KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IElQIE1ldHJpYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gcHJvcG9zZWQgZm9yIGBuZXQvaXB2NC9tZXRyaWNzLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgaXBfbWV0cmljc19jb252ZXJ0YCBmdW5jdGlvbi4gU2VlbXMgbGlrZSBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgdGhleSYjMzk7cmUgYWRkaW5nIGEgdmFsaWRhdGlvbiBjaGVjayBmb3IgdGhlIGBSVEFYX0FEVk1TU2AgbWV0cmljLiBFc3NlbnRpYWxseSwgaWYgc29tZW9uZSB0cmllcyB0byBzZXQgYW4gYGFkdm1zc2AgdmFsdWUgbGVzcyB0aGFuIGBUQ1BfTUlOX01TU2AgKGFuZCBpdCYjMzk7cyBub3QgemVybyksIHRoZSBmdW5jdGlvbiBub3cgdGhyb3dzIGEgYC1FSU5WQUxgIGVycm9yLiBUaGF0JiMzOTtzIGdvb2QsIHByZXZlbnRzIHRob3NlIG91dC1vZi1zcGVjIHZhbHVlcyBmcm9tIHBvdGVudGlhbGx5IGNhdXNpbmcgaXNzdWVzIGRvd24gdGhlIGxpbmUuIFdlIHdvdWxkbiYjMzk7dCB3YW50IHRob3NlIHNldHRpbmcgdGhlaXIgTVRVIGRvd24gdG9vIGxvdy4KClJpZ2h0LCBzbyBgaXBfbWV0cmljc19jb252ZXJ0YCBpcyB1c2VkIHdoZW4gd2UmIzM5O3JlIHNldHRpbmcgSVAgbWV0cmljcyB0aHJvdWdoIG5ldGxpbmsg4oCTIHRoaW5rIHJvdXRpbmcgdGFibGUgdXBkYXRlcywgdGhhdCBzb3J0IG9mIHRoaW5nLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgdmFsaWRhdGlvbiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gcmVncmVzc2lvbnMgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gVGhlIGNvZGUgbG9va3MgY29ycmVjdCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgdGhvcm91Z2guIE5vdywgbGV0IG1lIGRpZyBpbnRvIHdoZXJlIHRoaXMgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWV0cmljc19jb252ZXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L21ldHJpY3MuYy05LVxubmV0L2lwdjQvbWV0cmljcy5jOjEwOnN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxubmV0L2lwdjQvbWV0cmljcy5jLTExLVx0XHRcdCAgICAgIGludCBmY19teF9sZW4sIHUzMiAqbWV0cmljcyxcbi0tXG5uZXQvaXB2NC9tZXRyaWNzLmM9NzI9c3RydWN0IGRzdF9tZXRyaWNzICppcF9maWJfbWV0cmljc19pbml0KHN0cnVjdCBubGF0dHIgKmZjX214LFxuLS1cbm5ldC9pcHY0L21ldHJpY3MuYy04NS1cbm5ldC9pcHY0L21ldHJpY3MuYzo4NjpcdGVyciA9IGlwX21ldHJpY3NfY29udmVydChmY19teCwgZmNfbXhfbGVuLCBmaWJfbWV0cmljcy1cdTAwM2VtZXRyaWNzLFxubmV0L2lwdjQvbWV0cmljcy5jLTg3LVx0XHRcdFx0IGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgbXlzZWxmLCBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgaXBfZmliX21ldHJpY3NfaW5pdGAgRnVuY3Rpb24qKgoKUmlnaHQsIGBpcF9maWJfbWV0cmljc19pbml0YCBoYXMgdG8gYmUgaW5pdGlhbGl6aW5nIHNvbWV0aGluZy4gVGhlIGNvZGUgZGlyZWN0bHkgY2FsbHMgYGlwX21ldHJpY3NfY29udmVydGAsIHdoaWNoIGlzIGEgZGVjZW50IGNsdWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrLiBXaGVyZSYjMzk7cyB0aGlzIGBpcF9maWJfbWV0cmljc19pbml0YCByb3V0aW5lIGJlaW5nIGludm9rZWQ/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgcHVycG9zZSBvZiB0aGF0IGZ1bmN0aW9uIGlzIGtleSB0byBtYWtpbmcgdGhpcyBjb2RlIG1ha2Ugc2Vuc2UsIHNvIEkmIzM5O20gZ29pbmcgdG8gZmluZCBhbGwgY2FsbHMgdG8gdGhpcyByb3V0aW5lIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlIGFuZCBjb250ZXh0LiBUaGF0JiMzOTtsbCBndWlkZSBteSBzdWJzZXF1ZW50IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2ZpYl9tZXRyaWNzX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzNDU9c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTQwMy1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxNDA0Olx0ZmktXHUwMDNlZmliX21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cdTAwM2VmY19teCwgY2ZnLVx1MDAzZWZjX214X2xlbiwgZXh0YWNrKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNDA1LVx0aWYgKElTX0VSUihmaS1cdTAwM2VmaWJfbWV0cmljcykpIHtcbi0tXG5uZXQvaXB2NC9tZXRyaWNzLmM9MTA9c3RhdGljIGludCBpcF9tZXRyaWNzX2NvbnZlcnQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXG4tLVxubmV0L2lwdjQvbWV0cmljcy5jLTcxLVxubmV0L2lwdjQvbWV0cmljcy5jOjcyOnN0cnVjdCBkc3RfbWV0cmljcyAqaXBfZmliX21ldHJpY3NfaW5pdChzdHJ1Y3QgbmxhdHRyICpmY19teCxcbm5ldC9pcHY0L21ldHJpY3MuYy03My1cdFx0XHRcdFx0aW50IGZjX214X2xlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRklCIE1ldHJpYyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgZmliX2NyZWF0ZV9pbmZvYCBjYWxscyBgaXBfZmliX21ldHJpY3NfaW5pdGAuIFRoYXQmIzM5O3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSB0cmlnZ2VyZWQgZHVyaW5nIGEgbmV0bGluayByb3V0ZSBhZGRpdGlvbiwgc3BlY2lmaWNhbGx5IGEgYFJUTV9ORVdST1VURWAgbWVzc2FnZS4gTm93LCB0aGUgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gaXMgc3RhdGljLiBFeGNlbGxlbnQuIFRoYXQgbWVhbnMgSSBjYW4gbmFycm93IG15IGZvY3VzOyBpdCYjMzk7cyBlaXRoZXIgZ29pbmcgdG8gYmUgaW4gYGlwX2ZpYl9tZXRyaWNzX2luaXRgIG9yIGBmaWJfY3JlYXRlX2luZm9gLiBXYWl0Li4uaXMgYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGV4cG9ydGVkIG9yIGp1c3Qgbm90IHN0YXRpYz8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBpdHMgdmlzaWJpbGl0eS4gUmlnaHQsIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY0L21ldHJpY3MuY2Agc291cmNlIGZpbGUgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2ZpYl9tZXRyaWNzX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9tZXRyaWNzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbWV0cmljcy5jPTEwPXN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxuLS1cbm5ldC9pcHY0L21ldHJpY3MuYy03MS1cbm5ldC9pcHY0L21ldHJpY3MuYzo3MjpzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXG5uZXQvaXB2NC9tZXRyaWNzLmMtNzMtXHRcdFx0XHRcdGludCBmY19teF9sZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGNvbnNpZGVyaW5nIEkga25vdyBteSB3YXkgYXJvdW5kIHRoZSBrZXJuZWw6CgoqKkNoZWNraW5nIGZvciBFeHBvcnRlZCBTeW1ib2w6IGBpcF9maWJfbWV0cmljc19pbml0YCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHZlcmlmeSBpZiB0aGlzIGBpcF9maWJfbWV0cmljc19pbml0YCBzeW1ib2wgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEkmIzM5O3ZlIGVuY291bnRlcmVkIHRoaXMga2luZCBvZiBzaXR1YXRpb24gYmVmb3JlLCB3aGVyZSBhIGZ1bmN0aW9uJiMzOTtzIHZpc2liaWxpdHkgY2FuIGltcGFjdCBpdHMgYXZhaWxhYmlsaXR5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1vZHVsZXMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBzb21laG93LiBJcyBpdCBkZWZpbmVkIGluIHRoZSBjb3JyZWN0IGhlYWRlcj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGBncmVwYCB0aHJvdWdoIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgb3IgdXNlIGEgdG9vbCBsaWtlIGBubWAgb3IgYG9iamR1bXBgIG9uIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlIG9iamVjdCBmaWxlcy4gSXTigJlzIGxpa2VseSB0aGF0IGl0IG5lZWRzIHRvIGJlIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBvciBpdCBtYXkgYmUgd2l0aGluIGEgc3RhdGljIGNvbnRleHQuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgKnN1cHBvc2VkKiB0byBiZSB1c2VkIGlzIGFsc28gdXNlZnVsIGNvbnRleHQsIHRoYXQgd291bGQgcmVmaW5lIHRoZSBzZWFyY2guIFRoaXMgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIElmIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgdGhlbiBpdCYjMzk7cyBhIG5vLWdvIGZvciBkaXJlY3QgYWNjZXNzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgYWNjZXNzIG1ldGhvZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qaXBfZmliX21ldHJpY3NfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L21ldHJpY3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgVmFyaWFibGUmIzM5O3MgUHJvcGVydGllcyoqCgpBbHJpZ2h0LCBzbyB0aGUgdmFyaWFibGUgaW4gcXVlc3Rpb24gaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZS4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBzdGF0aWMgaXMgYSBzaWduaWZpY2FudCBwb2ludC4gVGhhdCBpbXBsaWVzIHNvbWUgZm9ybSBvZiBleHRlcm5hbCB2aXNpYmlsaXR5IG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgbGlua2FnZSBwb3RlbnRpYWwgd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlIG9yIHBvdGVudGlhbGx5IGluaGVyaXRlZCBzY29wZXMuIFRoaXMgbGFjayBvZiBzdGF0aWMgZGVzaWduYXRpb24gc3VnZ2VzdHMgaXQgY291bGQgYmUgbW9kaWZpZWQgb3IgYWNjZXNzZWQgaW4gd2F5cyB0aGF0IGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBNeSBuZXh0IHN0ZXA/IExldCYjMzk7cyBpbW1lZGlhdGVseSBkaXZlIGludG8gYGZpYl9jcmVhdGVfaW5mb2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhhdCB2YXJpYWJsZS4gVGhlIGNhbGwgY29udGV4dCBhbmQgcHJvcGVydGllcyBvZiBgZmliX2NyZWF0ZV9pbmZvYCBhcmUgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBpbGx1bWluYXRlIHRoZSB1c2UgY2FzZXMgZm9yIG91ciB1bm5hbWVkIHZhcmlhYmxlLiBJdHMgcHJvYmFibHkgcGFzc2VkIHRoZXJlLCBvciBhZmZlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBzdG9yeSB3aWxsIHJlYWxseSBzdGFydCB0byB1bmZvbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9jcmVhdGVfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfbG9va3VwLmg9Mzg9dm9pZCBmaWJfcmVsZWFzZV9pbmZvKHN0cnVjdCBmaWJfaW5mbyAqKTtcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxubmV0L2lwdjQvZmliX2xvb2t1cC5oLTQwLVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzMjE9c3RhdGljIGJvb2wgZmliX3ZhbGlkX3ByZWZzcmMoc3RydWN0IGZpYl9jb25maWcgKmNmZywgX19iZTMyIGZpYl9wcmVmc3JjKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ0LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzNDU6c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ2LVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9maWJfdHJpZS5jPTExOTQ9aW50IGZpYl90YWJsZV9pbnNlcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3RhYmxlICp0Yixcbi0tXG5uZXQvaXB2NC9maWJfdHJpZS5jLTEyMTEtXG5uZXQvaXB2NC9maWJfdHJpZS5jOjEyMTI6XHRmaSA9IGZpYl9jcmVhdGVfaW5mbyhjZmcsIGV4dGFjayk7XG5uZXQvaXB2NC9maWJfdHJpZS5jLTEyMTMtXHRpZiAoSVNfRVJSKGZpKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjI5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUm91dGUgSW5zZXJ0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHJvdXRpbmcgaW5mb3JtYXRpb24gZ2V0cyBhZGRlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGZpYl90YWJsZV9pbnNlcnRgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUuIEl0JiMzOTtzIGNhbGxlZCBieSBgaW5ldF9ydG1fbmV3cm91dGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQmIzM5O3Mgb3VyIGVudHJ5IHBvaW50LiBBbmQgYGZpYl90YWJsZV9pbnNlcnRgIGl0c2VsZiBjYWxscyBgZmliX2NyZWF0ZV9pbmZvYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGNyZWF0aW9uIHByb2Nlc3MuCgpTbywgSSBzaG91bGQgZm9jdXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBpcF9maWJfbWV0cmljc19pbml0YCwgYGZpYl9jcmVhdGVfaW5mb2AsIGBmaWJfdGFibGVfaW5zZXJ0YCwgYW5kIGRlZmluaXRlbHkgYGluZXRfcnRtX25ld3JvdXRlYC4gSSB0aGluayBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGNhbGwgY2hhaW4uIGBpcF9maWJfbWV0cmljc19pbml0YCBhbHNvIHNlZW1zIHByb21pc2luZy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBjaGVjayBgbmV0L2lwdjQvbWV0cmljcy5jYCB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBpcF9maWJfbWV0cmljc19pbml0YC4gR29vZCwgaXQmIzM5O3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgbW9kdWxlLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIHByZXNlbmNlLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgKm5vdCogY29udGluZ2VudCBvbiBgQ09ORklHX0lQX1JPVVRFX0NMQVNTSURgLiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHByb2JhYmx5IGNvbXBpbGVkIGluIGZvciBJUHY0IHJlZ2FyZGxlc3MuIEp1c3QgdG8gYmUgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXRyaWNzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTEwLVx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTE6XHQgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIHRjcF9tZXRyaWNzLm8gdGNwX2Zhc3RvcGVuLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTEyLVx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNi1cdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE3Olx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xubmV0L2lwdjQvTWFrZWZpbGUtMTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluY2x1c2lvbiBvZiBtZXRyaWNzLm8qKgoKT2theSwgc28gYG1ldHJpY3Mub2AgaXMgZGVmaW5pdGVseSBnZXR0aW5nIGNvbXBpbGVkIGJlY2F1c2UgaXQmIzM5O3MgbGlzdGVkIHVuZGVyIGBvYmoteWAuIFRoYXQgbWVhbnMgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGluY2x1ZGVkIGFzIGxvbmcgYXMgdGhlIHBhcmVudCBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZS4gTm93LCB0aGUgcGFyZW50IG9mIGBtZXRyaWNzLm9gIGlzIElQdjQuCgpSaWdodCwgSVB2NCBpcyBicm91Z2h0IGluIGJ5IGBDT05GSUdfSU5FVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQ09ORklHX0lORVRgIGFmZmVjdHMgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGluY2x1c2lvbiBvZiBgbWV0cmljcy5vYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0lORVRgLiBTbywgbm93IEkgc2hvdWxkIGxvb2sgYXQgYFRDUF9NSU5fTVNTYCB0byBmaWd1cmUgb3V0IHRoZSBsYXJnZXIgaW1wbGljYXRpb25zIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9NSU5fTVNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9Njg9dm9pZCB0Y3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTgxLS8qIE1pbmltYWwgYWNjZXB0ZWQgTVNTLiBJdCBpcyAoNjAmIzQzOzYwJiM0Mzs4KSAtICgyMCYjNDM7MjApLiAqL1xuaW5jbHVkZS9uZXQvdGNwLmg6ODI6I2RlZmluZSBUQ1BfTUlOX01TU1x0XHQ4OFVcbmluY2x1ZGUvbmV0L3RjcC5oLTgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzI5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSVAgTWV0cmljIFVwZGF0ZTogQSBRdWljayBSZXZpZXcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIHRoZSBgUlRBWF9BRFZNU1NgIHZhbHVlIHdoZW4gSVAgbWV0cmljcyBhcmUgYmVpbmcgc2V0LiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2Ug4oCTIHdlIHdhbnQgdG8gYmUgcm9idXN0IGluIGhhbmRsaW5nIHBvdGVudGlhbCB2YXJpYXRpb25zLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgZGVmaW5pdGVseSBkb2luZyBzb21ldGhpbmcgYW5kIEkgY2FuIHNlZSB3aGVyZSB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGVkLiBMZXQmIzM5O3Mgc2VlIHRoZSBjb250ZXh0LgoKSSBzZWUgdGhlIGtleSBzeW1ib2xzIGFyZSBgaXBfZmliX21ldHJpY3NfaW5pdGAgYW5kIGBmaWJfY3JlYXRlX2luZm9gLiBJIGRvbiYjMzk7dCBzZWUgYW55IHdlaXJkIGRlcGVuZGVuY2llcyBoZXJlOyBsb29rcyBsaWtlIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGVuYWJsZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYmV5b25kIGBJTkVUYCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggYXNzdW1lZCB0aGVzZSBkYXlzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgYGlwX21ldHJpY3NfY29udmVydGAgaW4gYG5ldC9pcHY0L21ldHJpY3MuY2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGFkZGl0aW9uIGlzIHBsYXlpbmcgbmljZWx5IHdpdGggZXZlcnl0aGluZyBlbHNlIGluIHRoYXQgZmlsZS4gVGhhdCYjMzk7cyB0aGUgaW1wb3J0YW50IGJpdCBmb3IgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbWV0cmljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3NwZWMuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdHN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxuICAxMTpcdFx0XHRcdCAgICAgIGludCBmY19teF9sZW4sIHUzMiAqbWV0cmljcyxcbiAgMTI6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gIDEzOlx0e1xuICAxNDpcdFx0Ym9vbCBlY25fY2EgPSBmYWxzZTtcbiAgMTU6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbiAgMTY6XHRcdGludCByZW1haW5pbmc7XG4gIDE3Olx0XG4gIDE4Olx0XHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGZjX214LCBmY19teF9sZW4sIHJlbWFpbmluZykge1xuICAxOTpcdFx0XHRpbnQgdHlwZSA9IG5sYV90eXBlKG5sYSk7XG4gIDIwOlx0XHRcdHUzMiB2YWw7XG4gIDIxOlx0XG4gIDIyOlx0XHRcdGlmICghdHlwZSlcbiAgMjM6XHRcdFx0XHRjb250aW51ZTtcbiAgMjQ6XHRcdFx0aWYgKHR5cGUgXHUwMDNlIFJUQVhfTUFYKSB7XG4gIDI1Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIG1ldHJpYyB0eXBlXCYjMzQ7KTtcbiAgMjY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgMjc6XHRcdFx0fVxuICAyODpcdFxuICAyOTpcdFx0XHR0eXBlID0gYXJyYXlfaW5kZXhfbm9zcGVjKHR5cGUsIFJUQVhfTUFYICYjNDM7IDEpO1xuICAzMDpcdFx0XHRpZiAodHlwZSA9PSBSVEFYX0NDX0FMR08pIHtcbiAgMzE6XHRcdFx0XHRjaGFyIHRtcFtUQ1BfQ0FfTkFNRV9NQVhdO1xuICAzMjpcdFxuICAzMzpcdFx0XHRcdG5sYV9zdHJzY3B5KHRtcCwgbmxhLCBzaXplb2YodG1wKSk7XG4gIDM0Olx0XHRcdFx0dmFsID0gdGNwX2NhX2dldF9rZXlfYnlfbmFtZSh0bXAsIFx1MDAyNmVjbl9jYSk7XG4gIDM1Olx0XHRcdFx0aWYgKHZhbCA9PSBUQ1BfQ0FfVU5TUEVDKSB7XG4gIDM2Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1Vua25vd24gdGNwIGNvbmdlc3Rpb24gYWxnb3JpdGhtXCYjMzQ7KTtcbiAgMzc6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICAzODpcdFx0XHRcdH1cbiAgMzk6XHRcdFx0fSBlbHNlIHtcbiAgNDA6XHRcdFx0XHRpZiAobmxhX2xlbihubGEpICE9IHNpemVvZih1MzIpKSB7XG4gIDQxOlx0XHRcdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGV4dGFjaywgbmxhLFxuICA0MjpcdFx0XHRcdFx0XHRcdCAgICBcJiMzNDtJbnZhbGlkIGF0dHJpYnV0ZSBpbiBtZXRyaWNzXCYjMzQ7KTtcbiAgNDM6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA0NDpcdFx0XHRcdH1cbiAgNDU6XHRcdFx0XHR2YWwgPSBubGFfZ2V0X3UzMihubGEpO1xuICA0NjpcdFx0XHR9XG4gIDQ3Olx0XHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2MgVENQX01JTl9NU1MpIHtcbiAgNDg6XHRcdFx0XHROTF9TRVRfRVJSX01TR19BVFRSX0ZNVChleHRhY2ssIG5sYSxcbiAgNDk6XHRcdFx0XHRcdFx0XHRcJiMzNDtJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yIFx1MDAzZT0gJXVcJiMzNDssXG4gIDUwOlx0XHRcdFx0XHRcdFx0VENQX01JTl9NU1MpO1xuICA1MTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA1MjpcdFx0XHR9XG4gIDUzOlx0XHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNlIDY1NTM1IC0gNDApXG4gIDU0Olx0XHRcdFx0dmFsID0gNjU1MzUgLSA0MDtcbiAgNTU6XHRcdFx0aWYgKHR5cGUgPT0gUlRBWF9NVFUgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2UgNjU1MzUgLSAxNSlcbiAgNTY6XHRcdFx0XHR2YWwgPSA2NTUzNSAtIDE1O1xuICA1NzpcdFx0XHRpZiAodHlwZSA9PSBSVEFYX0hPUExJTUlUIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNlIDI1NSlcbiAgNTg6XHRcdFx0XHR2YWwgPSAyNTU7XG4gIDU5Olx0XHRcdGlmICh0eXBlID09IFJUQVhfRkVBVFVSRVMgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IH5SVEFYX0ZFQVRVUkVfTUFTSykpIHtcbiAgNjA6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1Vua25vd24gZmxhZyBzZXQgaW4gZmVhdHVyZSBtYXNrIGluIG1ldHJpY3MgYXR0cmlidXRlXCYjMzQ7KTtcbiAgNjE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNjI6XHRcdFx0fVxuICA2MzpcdFx0XHRtZXRyaWNzW3R5cGUgLSAxXSA9IHZhbDtcbiAgNjQ6XHRcdH1cbiAgNjU6XHRcbiAgNjY6XHRcdGlmIChlY25fY2EpXG4gIDY3Olx0XHRcdG1ldHJpY3NbUlRBWF9GRUFUVVJFUyAtIDFdIHw9IERTVF9GRUFUVVJFX0VDTl9DQTtcbiAgNjg6XHRcbiAgNjk6XHRcdHJldHVybiAwO1xuICA3MDpcdH1cbiAgNzE6XHRcbiAgNzI6XHRzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXG4gIDczOlx0XHRcdFx0XHRcdGludCBmY19teF9sZW4sXG4gIDc0Olx0XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgNzU6XHR7XG4gIDc2Olx0XHRzdHJ1Y3QgZHN0X21ldHJpY3MgKmZpYl9tZXRyaWNzO1xuICA3NzpcdFx0aW50IGVycjtcbiAgNzg6XHRcbiAgNzk6XHRcdGlmICghZmNfbXgpXG4gIDgwOlx0XHRcdHJldHVybiAoc3RydWN0IGRzdF9tZXRyaWNzICopXHUwMDI2ZHN0X2RlZmF1bHRfbWV0cmljcztcbiAgODE6XHRcbiAgODI6XHRcdGZpYl9tZXRyaWNzID0ga3phbGxvY19vYmooKmZpYl9tZXRyaWNzKTtcbiAgODM6XHRcdGlmICh1bmxpa2VseSghZmliX21ldHJpY3MpKVxuICA4NDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiAgODU6XHRcbiAgODY6XHRcdGVyciA9IGlwX21ldHJpY3NfY29udmVydChmY19teCwgZmNfbXhfbGVuLCBmaWJfbWV0cmljcy1cdTAwM2VtZXRyaWNzLFxuICA4NzpcdFx0XHRcdFx0IGV4dGFjayk7XG4gIDg4Olx0XHRpZiAoIWVycikge1xuICA4OTpcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2ZmliX21ldHJpY3MtXHUwMDNlcmVmY250LCAxKTtcbiAgOTA6XHRcdH0gZWxzZSB7XG4gIDkxOlx0XHRcdGtmcmVlKGZpYl9tZXRyaWNzKTtcbiAgOTI6XHRcdFx0ZmliX21ldHJpY3MgPSBFUlJfUFRSKGVycik7XG4gIDkzOlx0XHR9XG4gIDk0Olx0XG4gIDk1Olx0XHRyZXR1cm4gZmliX21ldHJpY3M7XG4gIDk2Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSVAgRklCIE1ldHJpY3MgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIG5vbi1zdGF0aWMgb25lLiBUaGF0IGZlZWxzIHJpZ2h0LiBBbmQsIHllYWgsIGBmaWJfY3JlYXRlX2luZm9gIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgIGxvb2tzIGxpa2UgYSBrZXkgc3ltYm9sIHRvIGRpZyBpbnRvLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGBpcF9maWJfbWV0cmljc19pbml0YCBpcyBleHBvcnRlZC4gTm9wZSwgbm90IGV4cG9ydGVkLCBidXQgaXQgKmlzbiYjMzk7dCogc3RhdGljLiBUaGF0JiMzOTtzIGEgcG9pbnQgdG8gbWFrZSwgaXQgbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZS4KCk9rYXksIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgY2FsbGluZyBgaXBfbWV0cmljc19jb252ZXJ0YD8gTm9wZSwgbm90aGluZy4gSW50ZXJlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2ltaWxhciBjaGFuZ2VzIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gTmVlZCB0byBzZWUgaWYgSVB2NiBpcyBoYW5kbGVkIHNpbWlsYXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVEFYX0FEVk1TUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MjAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBYnNlbmNlIG9mIFJUQVhfQURWTVNTIGluIG5ldC9pcHY2L3JvdXRlLmMqKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBJUHY2IHJvdXRpbmcgaW1wbGVtZW50YXRpb24gaW4gYG5ldC9pcHY2L3JvdXRlLmNgIHdvdWxkIHV0aWxpemUgYFJUQVhfQURWTVNTYCwgYnV0IHRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0aGUgY2FzZS4gVGhhdCYjMzk7cyBhIGJpdCB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIFBlcmhhcHMgaXQmIzM5O3MgaGFuZGxlZCBkaWZmZXJlbnRseSBvciBub3Qgc3VwcG9ydGVkIGF0IGFsbCBpbiB0aGlzIHBhcnRpY3VsYXIgYXJlYT8gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vay4gTXkgZmlyc3Qgc3RlcCBpcyB0byBzZWFyY2ggd2l0aGluIHRoZSBgbmV0L2lwdjYvcm91dGUuY2AgZmlsZSBpdHNlbGYgZm9yIGEgZnVuY3Rpb24gbGlrZSBgaXBfbWV0cmljc19jb252ZXJ0YCBvciBhbnl0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiB0aGF0IG1pZ2h0IGJlIGludm9sdmVkIGluIGhhbmRsaW5nIG9yIHRyYW5zbGF0aW5nIHJvdXRpbmcgbWV0cmljcy4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSBob3cgdGhlIGNvZGUgbWFuYWdlcyB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24sIG9yIHBvdGVudGlhbGx5IHdoeSBpdCYjMzk7cyBpZ25vcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX21ldHJpY3NfY29udmVydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBkZWFsaW5nIHdpdGggc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhlc2UgbmV0d29ya2luZyBkZXRhaWxzOgoKKipEaWdnaW5nIGludG8gSVB2NiBSb3V0aW5nIGFuZCBNZXRyaWNzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IElQdjYsIHNwZWNpZmljYWxseSB0aGUgcm91dGluZyBzaWRlIG9mIHRoaW5ncy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgb3IgcGVyaGFwcyBhIHN5c3RlbSBJJiMzOTttIGFuYWx5emluZywgdXNlcyBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGxvb2tzIGZhbWlsaWFyLi4uYW5kIHRoZSB0aG91Z2h0IHRoZW4gdHJpZ2dlcnM6IGNvdWxkIHRoaXMgYmUgd2hlcmUgcm91dGluZyBtZXRyaWNzIG1pZ2h0IGJlIHBhcnNlZCBvciBldmVuIGNvbmZpZ3VyZWQ/IEl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyByb3V0ZSBwcmlvcml0aXphdGlvbiBhbmQgc2VsZWN0aW9uIGJhc2VkIG9uIHRob3NlIG1ldHJpY3MsIGJlIHRoZXkgY29zdCwgaG9wIGNvdW50LCBvciB3aGF0ZXZlciB0aGUgaW1wbGVtZW50YXRpb24gdXNlcy4gSSYjMzk7bGwgbmVlZCB0byBnbyBsb29rIGludG8gdGhlIGNvZGUsIGFuZCB0aGlzIGZ1bmN0aW9uIG5hbWUgaXMgYSB1c2VmdWwgcG9pbnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRBWF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2ZpYi5jPTEwODk9c3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTE1Ni1cdFx0XHRcdGlmIChydC1cdTAwM2VmaWI2X3BtdHUpXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTE1NzpcdFx0XHRcdFx0ZmliNl9tZXRyaWNfc2V0KGl0ZXIsIFJUQVhfTVRVLFxubmV0L2lwdjYvaXA2X2ZpYi5jLTExNTgtXHRcdFx0XHRcdFx0XHRydC1cdTAwM2VmaWI2X3BtdHUpO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0yNjI9aW50IGlwNl9kc3RfaG9wbGltaXQoc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTI2My17XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MjY0Olx0aW50IGhvcGxpbWl0ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX0hPUExJTUlUKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yNjUtXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xMjMxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xNDE2LVx0XHRcdFx0ICAgcmFfbXNnLVx1MDAzZWljbXBoLmljbXA2X2hvcF9saW1pdCk7XG5uZXQvaXB2Ni9uZGlzYy5jOjE0MTc6XHRcdFx0ZmliNl9tZXRyaWNfc2V0KHJ0LCBSVEFYX0hPUExJTUlULFxubmV0L2lwdjYvbmRpc2MuYy0xNDE4LVx0XHRcdFx0XHRyYV9tc2ctXHUwMDNlaWNtcGguaWNtcDZfaG9wX2xpbWl0KTtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE1NjgtXHRcdFx0V1JJVEVfT05DRShpbjZfZGV2LVx1MDAzZWNuZi5tdHU2LCBtdHUpO1xubmV0L2lwdjYvbmRpc2MuYzoxNTY5Olx0XHRcdGZpYjZfbWV0cmljX3NldChydCwgUlRBWF9NVFUsIG10dSk7XG5uZXQvaXB2Ni9uZGlzYy5jLTE1NzAtXHRcdFx0cnQ2X210dV9jaGFuZ2Uoc2tiLVx1MDAzZWRldiwgbXR1KTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMjc5LVxubmV0L2lwdjYvcm91dGUuYzoyODA6c3RhdGljIGNvbnN0IHUzMiBpcDZfdGVtcGxhdGVfbWV0cmljc1tSVEFYX01BWF0gPSB7XG5uZXQvaXB2Ni9yb3V0ZS5jOjI4MTpcdFtSVEFYX0hPUExJTUlUIC0gMV0gPSAwLFxubmV0L2lwdjYvcm91dGUuYy0yODItfTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTE3MTg9c3RhdGljIGludCBydDZfaW5zZXJ0X2V4Y2VwdGlvbihzdHJ1Y3QgcnQ2X2luZm8gKm5ydCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTE3NjAtXHQgKi9cbm5ldC9pcHY2L3JvdXRlLmM6MTc2MTpcdGlmIChkc3RfbWV0cmljX3JhdyhcdTAwMjZucnQtXHUwMDNlZHN0LCBSVEFYX01UVSkgXHUwMDNlPSBmaWI2X210dShyZXMpKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jLTE3NjItXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0yMDgyPXN0YXRpYyB2b2lkIHJ0Nl9leGNlcHRpb25zX3VwZGF0ZV9wbXR1KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yMTAwLVx0XHRcdCAqL1xubmV0L2lwdjYvcm91dGUuYzoyMTAxOlx0XHRcdGlmIChkc3RfbWV0cmljX3JhdyhcdTAwMjZlbnRyeS1cdTAwM2Vkc3QsIFJUQVhfTVRVKSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L3JvdXRlLmMtMjEwMi1cdFx0XHQgICAgcnQ2X210dV9jaGFuZ2Vfcm91dGVfYWxsb3dlZChpZGV2LCBlbnRyeSwgbXR1KSlcbm5ldC9pcHY2L3JvdXRlLmM6MjEwMzpcdFx0XHRcdGRzdF9tZXRyaWNfc2V0KFx1MDAyNmVudHJ5LVx1MDAzZWRzdCwgUlRBWF9NVFUsIG10dSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTIxMDQtXHRcdH1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI5MDc9c3RhdGljIHZvaWQgcnQ2X2RvX3VwZGF0ZV9wbXR1KHN0cnVjdCBydDZfaW5mbyAqcnQsIHUzMiBtdHUpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yOTEwLVxubmV0L2lwdjYvcm91dGUuYzoyOTExOlx0ZHN0X21ldHJpY19zZXQoXHUwMDI2cnQtXHUwMDNlZHN0LCBSVEFYX01UVSwgbXR1KTtcbm5ldC9pcHY2L3JvdXRlLmMtMjkxMi1cdHJ0LVx1MDAzZXJ0NmlfZmxhZ3MgfD0gUlRGX01PRElGSUVEO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjkyMj1zdGF0aWMgdm9pZCBfX2lwNl9ydF91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTI5MjgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjI5Mjk6XHQvKiBOb3RlOiBkbyAqTk9UKiBjaGVjayBkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKVxubmV0L2lwdjYvcm91dGUuYy0yOTMwLVx0ICogSVB2NiBwbXR1IGRpc2NvdmVyeSBpc24mIzM5O3Qgb3B0aW9uYWwsIHNvICYjMzk7bXR1IGxvY2smIzM5OyBjYW5ub3QgZGlzYWJsZSBpdC5cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzMDI9dTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzMxMS1cbm5ldC9pcHY2L3JvdXRlLmM6MzMxMjpcdGlmICh1bmxpa2VseShmaWI2X21ldHJpY19sb2NrZWQoZjZpLCBSVEFYX01UVSkpKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jLTMzMTMtXHRcdG10dSA9IGY2aS1cdTAwM2VmaWI2X3BtdHU7XG4tLVxubmV0L2lwdjYvcm91dGUuYy0zMzE5LVx0aWYgKHVubGlrZWx5KHJ0KSkge1xubmV0L2lwdjYvcm91dGUuYzozMzIwOlx0XHRtdHUgPSBkc3RfbWV0cmljX3JhdyhcdTAwMjZydC1cdTAwM2Vkc3QsIFJUQVhfTVRVKTtcbm5ldC9pcHY2L3JvdXRlLmMtMzMyMS1cdH0gZWxzZSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMzM1PXN0cnVjdCBkc3RfZW50cnkgKmljbXA2X2RzdF9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzM1OC1cdHJ0LVx1MDAzZXJ0NmlfaWRldiAgICAgPSBpZGV2O1xubmV0L2lwdjYvcm91dGUuYzozMzU5Olx0ZHN0X21ldHJpY19zZXQoXHUwMDI2cnQtXHUwMDNlZHN0LCBSVEFYX0hPUExJTUlULCAwKTtcbm5ldC9pcHY2L3JvdXRlLmMtMzM2MC1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTUwNDQ9c3RhdGljIGludCBmaWI2X25oX210dV9jaGFuZ2Uoc3RydWN0IGZpYjZfbmggKm5oLCB2b2lkICpfYXJnKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTA2Mi1cdFx0ICAgIChtdHUgXHUwMDNjIGFyZy1cdTAwM2VtdHUgXHUwMDI2XHUwMDI2IG10dSA9PSBpZGV2LVx1MDAzZWNuZi5tdHU2KSlcbm5ldC9pcHY2L3JvdXRlLmM6NTA2MzpcdFx0XHRmaWI2X21ldHJpY19zZXQoZjZpLCBSVEFYX01UVSwgYXJnLVx1MDAzZW10dSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNjQtXG4tLVxubmV0L2lwdjYvcm91dGUuYz01MDczPXN0YXRpYyBpbnQgcnQ2X210dV9jaGFuZ2Vfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqZjZpLCB2b2lkICpwX2FyZylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzgtXHQvKiBJbiBJUHY2IHBtdHUgZGlzY292ZXJ5IGlzIG5vdCBvcHRpb25hbCxcbm5ldC9pcHY2L3JvdXRlLmM6NTA3OTpcdCAgIHNvIHRoYXQgUlRBWF9NVFUgbG9jayBjYW5ub3QgZGlzYWJsZSBpdC5cbm5ldC9pcHY2L3JvdXRlLmMtNTA4MC1cdCAgIFdlIHN0aWxsIHVzZSB0aGlzIGxvY2sgdG8gYmxvY2sgY2hhbmdlc1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTA4Ny1cbm5ldC9pcHY2L3JvdXRlLmM6NTA4ODpcdGlmIChmaWI2X21ldHJpY19sb2NrZWQoZjZpLCBSVEFYX01UVSkpXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwODktXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTY5OT1zdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3MzctXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX1BSSU9SSVRZICovXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3Mzg6XHQgICAgICAgJiM0MzsgUlRBWF9NQVggKiBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfTUVUUklDUyAqL1xubmV0L2lwdjYvcm91dGUuYy01NzM5LVx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3NDA6XHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cbm5ldC9pcHY2L3JvdXRlLmMtNTc0MS1cdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqL1xuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTI1Ni1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoyNTc6XHRyZXEtXHUwMDNlcnNrX3dpbmRvd19jbGFtcCA9IFJFQURfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXApID8gOmRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVyk7XG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjU4LVx0LyogbGltaXQgdGhlIHdpbmRvdyBzZWxlY3Rpb24gaWYgdGhlIHVzZXIgZW5mb3JjZSBhIHNtYWxsZXIgcnggYnVmZmVyICovXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTI2Ni1cdFx0XHRcdCAgaXJlcS1cdTAwM2V3c2NhbGVfb2ssIFx1MDAyNnJjdl93c2NhbGUsXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MjY3Olx0XHRcdFx0ICBkc3RfbWV0cmljKGRzdCwgUlRBWF9JTklUUldORCkpO1xubmV0L2lwdjYvc3luY29va2llcy5jLTI2OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUHY2IFJvdXRpbmcgTWV0cmljcyBDb251bmRydW0qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgc3RhbmRhcmQgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gd2FzIHVuaXZlcnNhbGx5IHVzZWQgZm9yIGhhbmRsaW5nIHJvdXRlIG1ldHJpY3MgYWNyb3NzIGJvdGggSVB2NCBhbmQgSVB2Ni4gQnV0IHRoZSBjb2RlIGZvciBgbmV0L2lwdjYvcm91dGUuY2AgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBjYWxsaW5nIGl0LiBUaGF04oCZcyB1bmV4cGVjdGVkLiBJdCB0aHJvd3MgYSB3cmVuY2ggaW4gbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBjb21tb25hbGl0aWVzIGJldHdlZW4gdGhlIHR3byBpbXBsZW1lbnRhdGlvbnMuCgpTbywgaG93IGV4YWN0bHkgZG9lcyB0aGUgSVB2NiByb3V0ZSBwYXJzaW5nIGRlYWwgd2l0aCB0aGVzZSBtZXRyaWNzPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29udmVyc2lvbiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBtZXRyaWNzIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBjb250ZXh0LiBBbHJpZ2h0LCBsZXTigJlzIGdvIGRpcmVjdGx5IHRvIGBuZXQvaXB2Ni9yb3V0ZS5jYCBhbmQgc3BlY2lmaWNhbGx5IHNlYXJjaCBmb3IgaG93IHRoZSBjb2RlIGhhbmRsZXMgYFJUQV9NRVRSSUNTYCB0byBjbGFyaWZ5IHRoaW5ncy4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgbG9naWMgdGhhdCBpcyBiZWluZyB1c2VkLCBvciBleHBsYWluICp3aHkqIHNvbWV0aGluZyBlbHNlIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JUQV9NRVRSSUNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9NTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX2lwdjZfcG9saWN5W1JUQV9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTExNy1cdFtSVEFfUFJJT1JJVFldICAgICAgICAgID0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9pcHY2L3JvdXRlLmM6NTExODpcdFtSVEFfTUVUUklDU10gICAgICAgICAgID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9pcHY2L3JvdXRlLmMtNTExOS1cdFtSVEFfTVVMVElQQVRIXVx0XHQ9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSB9LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTE4MT1zdGF0aWMgaW50IHJ0bV90b19maWI2X2NvbmZpZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUyODMtXG5uZXQvaXB2Ni9yb3V0ZS5jOjUyODQ6XHRpZiAodGJbUlRBX01FVFJJQ1NdKSB7XG5uZXQvaXB2Ni9yb3V0ZS5jOjUyODU6XHRcdGNmZy1cdTAwM2VmY19teCA9IG5sYV9kYXRhKHRiW1JUQV9NRVRSSUNTXSk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjUyODY6XHRcdGNmZy1cdTAwM2VmY19teF9sZW4gPSBubGFfbGVuKHRiW1JUQV9NRVRSSUNTXSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUyODctXHR9XG4tLVxubmV0L2lwdjYvcm91dGUuYz01Njk5PXN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTczNy1cdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfUFJJT1JJVFkgKi9cbm5ldC9pcHY2L3JvdXRlLmM6NTczODpcdCAgICAgICAmIzQzOyBSVEFYX01BWCAqIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9NRVRSSUNTICovXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3MzktXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIGFuIGV4cGVydCB3b3VsZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBJUHY2IFJvdXRlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYHJ0bV90b19maWI2X2NvbmZpZ2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3Mgc2V0dGluZyB0aGUgYGNmZy0mZ3Q7ZmNfbXhgIGZpZWxkLCBodWg/IFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgc3RlcC4gTm93LCBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCYjMzk7cyBpbnZvbHZlZCB3aXRoIHRoYXQgcGFydGljdWxhciBzdHJ1Y3R1cmUsIGFuZCB3aGF0IGl0IHJlbGF0ZXMgdG8gaW4gdGhlIHJvdXRpbmcgcHJvY2Vzcy4KCkFoLCByaWdodCwgc28gYGNmZy0mZ3Q7ZmNfbXhgIGlzIG9idmlvdXNseSBzb21ldGhpbmcgdGhhdCBnZXRzIGZlZCB0byB0aGUgY29uZmlndXJhdGlvbiByb3V0aW5lcy4gVGhlbiwgYGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZWAgcGFyc2VzIGFsbCBvZiB0aGlzLiBJIGJldCBpdCB0YWtlcyBgY2ZnLSZndDtmY19teGAgYW5kIGV4dHJhY3RzIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHJvdXRlLCBtYXliZSBzZXR0aW5nIHRoZSB2YXJpb3VzIGZpYiBlbnRyeSBmbGFncyBvciByb3V0ZSBhdHRyaWJ1dGVzLiBJIHNob3VsZCBsb29rIGludG8gdGhlIHNvdXJjZSBmb3IgYGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZWAgYW5kIGRvdWJsZSBjaGVjay4gS25vd2luZyB3aGVyZSB0aGF0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gb3JpZ2luYXRlcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugcm91dGVzIGdldCBpbnN0YWxsZWQuIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nIHRvIHZlcmlmeSBhZ2FpbnN0IHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZjX214JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTM4MDk9c3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKmlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4MzgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4Mzk6XHRydC1cdTAwM2VmaWI2X21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cdTAwM2VmY19teCwgY2ZnLVx1MDAzZWZjX214X2xlbixcbm5ldC9pcHY2L3JvdXRlLmMtMzg0MC1cdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz01MTgxPXN0YXRpYyBpbnQgcnRtX3RvX2ZpYjZfY29uZmlnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTI4NC1cdGlmICh0YltSVEFfTUVUUklDU10pIHtcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NTpcdFx0Y2ZnLVx1MDAzZWZjX214ID0gbmxhX2RhdGEodGJbUlRBX01FVFJJQ1NdKTtcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NjpcdFx0Y2ZnLVx1MDAzZWZjX214X2xlbiA9IG5sYV9sZW4odGJbUlRBX01FVFJJQ1NdKTtcbm5ldC9pcHY2L3JvdXRlLmMtNTI4Ny1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IFJvdXRpbmcgU2V0dXAqKgoKUmlnaHQsIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGNhbGxzIGBpcF9maWJfbWV0cmljc19pbml0YC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgbWV0cmljcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIElQdjYgcm91dGVzLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGEgZ2xvYmFsbHkgYWNjZXNzaWJsZSBmdW5jdGlvbiwgb3IgaXMgaXQgZGVjbGFyZWQgc29tZXdoZXJlIGludGVybmFsPyBJcyBpdCBleHBvcnRlZCBvciB2aXNpYmxlIHZpYSBhIGhlYWRlciBmaWxlPwoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgaW4gdGhlIHN0YW5kYXJkIHBsYWNlcywgcHJvYmFibHkgd2l0aGluIGBpbmNsdWRlL25ldC9pcC5oYCBvciBzb21ld2hlcmUgZXF1YWxseSBvYnZpb3VzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayYjMzk7cyBpbmNsdWRlIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGxpdmUuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBhIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24gaW4gdGhlcmUgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfZmliX21ldHJpY3NfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwLmg9NTA5PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL25ldC9pcC5oLTUyNC1cbmluY2x1ZGUvbmV0L2lwLmg6NTI1OnN0cnVjdCBkc3RfbWV0cmljcyAqaXBfZmliX21ldHJpY3NfaW5pdChzdHJ1Y3QgbmxhdHRyICpmY19teCwgaW50IGZjX214X2xlbixcbmluY2x1ZGUvbmV0L2lwLmgtNTI2LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0LCBhbmQgaXQmIzM5O3MgbmVhdGx5IGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L2lwLmhgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBib3RoIElQdjQgYW5kIElQdjYgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEV4Y2VsbGVudCEKCkxldCYjMzk7cyBicm9hZGVuIHRoZSBzY29wZS4gQmV5b25kIGBpcF9maWJfbWV0cmljc19pbml0YCwgSSBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmluZyBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyB0byBmdXp6LiBCYXNlZCBvbiBteSBxdWljayByZXZpZXcsIGBmaWJfY3JlYXRlX2luZm9gIChmb3IgSVB2NCkgYW5kIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIChmb3IgSVB2NikgbG9vayBsaWtlIHdvcnRod2hpbGUgdGFyZ2V0cyBhcyB3ZWxsLCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgYXJlIHJlbGF0ZWQgdG8gdGhlIEZJQiBzZXR1cC4KCk9rYXksIGxldCBtZSByZXZpc2l0IGBpcF9maWJfbWV0cmljc19pbml0YCBhbmQgZ2V0IGEgZmluZXIgZ3JhaW5lZCB2aWV3LiBJdCB0YWtlcyBgZmNfbXhgIGFuZCBgZmNfbXhfbGVuYCBhcyBpbnB1dHMgYW5kLCBpbXBvcnRhbnRseSwgY2FsbHMgYGlwX21ldHJpY3NfY29udmVydGAuIFRoZSBwYXRjaCBkb2N1bWVudGF0aW9uIGNsZWFybHkgaW5kaWNhdGVzIGEgbW9kaWZpY2F0aW9uIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHdpdGhpbiBgbmV0L2lwdjQvbWV0cmljcy5jYC4gVGhpcyBpcyBrZXkuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB3aWxsIGJlOgoqICAgYGlwX2ZpYl9tZXRyaWNzX2luaXRgCiogICBgZmliX2NyZWF0ZV9pbmZvYAoqICAgYGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZWAKCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIHdvcnJ5IGFib3V0PyBOb3BlLCBgQ09ORklHX0lORVRgIGlzIHN1ZmZpY2llbnQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpUaW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuCgpgYGBjCgkJaWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgJmFtcDsmYW1wOyB2YWwgJmFtcDsmYW1wOyB2YWwgJmx0OyBUQ1BfTUlOX01TUykgewoJCQlOTF9TRVRfRVJSX01TR19BVFRSX0ZNVChleHRhY2ssIG5sYSwKCQkJCQkJJiMzNDtJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yICZndDs9ICV1JiMzNDssCgkJCQkJCVRDUF9NSU5fTVNTKTsKCQkJcmV0dXJuIC1FSU5WQUw7CgkJfQpgYGAKClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW4gaW1wb3J0YW50IGNoZWNrISBJdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBhZHZtc3NgIHRvIGludmFsaWQgdmFsdWVzIGJldHdlZW4gMSBhbmQgYFRDUF9NSU5fTVNTIC0gMWAsIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBhIG5ldyBjb25zdHJhaW50LCBzbyBJIG5lZWQgdG8gZXhwbG9yZSB0aGUgYm91bmRhcmllcyBvZiB0aGlzIGNoZWNrIHRob3JvdWdobHkuIFRoZSBmdXp6aW5nIHNob3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBgUlRBWF9BRFZNU1NgIGhhbmRsaW5nLgoKVG8gYmUgY2xlYXIgb24gdGhlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcsIGFnYWluIHRoZSBmaW5hbCBsaXN0IGlzOgoqICAgYGlwX2ZpYl9tZXRyaWNzX2luaXRgCiogICBgZmliX2NyZWF0ZV9pbmZvYAoqICAgYGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZWAKCkkgc2hvdWxkIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3JvdXRlX2luZm9fY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTM3NjI9c3RhdGljIGludCBmaWI2X2NvbmZpZ192YWxpZGF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4MDgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4MDk6c3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKmlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbm5ldC9pcHY2L3JvdXRlLmMtMzgxMC1cdFx0XHRcdFx0ICAgICAgIGdmcF90IGdmcF9mbGFncyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4NzUtXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4NzY6c3RhdGljIGludCBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgoc3RydWN0IGZpYjZfaW5mbyAqcnQsXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4NzctXHRcdFx0XHQgICAgc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4tLVxubmV0L2lwdjYvcm91dGUuYz0zOTUyPWludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0zOTYxLVxubmV0L2lwdjYvcm91dGUuYzozOTYyOlx0cnQgPSBpcDZfcm91dGVfaW5mb19jcmVhdGUoY2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NjMtXHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NjUtXG5uZXQvaXB2Ni9yb3V0ZS5jOjM5NjY6XHRlcnIgPSBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgocnQsIGNmZywgZ2ZwX2ZsYWdzLCBleHRhY2spO1xubmV0L2lwdjYvcm91dGUuYy0zOTY3LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTQ2NzU9c3RydWN0IGZpYjZfaW5mbyAqYWRkcmNvbmZfZjZpX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3MDEtXG5uZXQvaXB2Ni9yb3V0ZS5jOjQ3MDI6XHRmNmkgPSBpcDZfcm91dGVfaW5mb19jcmVhdGUoXHUwMDI2Y2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3MDMtXHRpZiAoSVNfRVJSKGY2aSkpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00NzA1LVxubmV0L2lwdjYvcm91dGUuYzo0NzA2Olx0ZXJyID0gaXA2X3JvdXRlX2luZm9fY3JlYXRlX25oKGY2aSwgXHUwMDI2Y2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3MDctXHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTQxNT1zdGF0aWMgaW50IGlwNl9yb3V0ZV9tdWx0aXBhdGhfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTQ3MS1cdFx0cl9jZmcuZmNfZmxhZ3MgfD0gKHJ0bmgtXHUwMDNlcnRuaF9mbGFncyBcdTAwMjYgUlROSF9GX09OTElOSyk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjU0NzI6XHRcdHJ0ID0gaXA2X3JvdXRlX2luZm9fY3JlYXRlKFx1MDAyNnJfY2ZnLCBHRlBfS0VSTkVMLCBleHRhY2spO1xubmV0L2lwdjYvcm91dGUuYy01NDczLVx0XHRpZiAoSVNfRVJSKHJ0KSkge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTQ3OC1cbm5ldC9pcHY2L3JvdXRlLmM6NTQ3OTpcdFx0ZXJyID0gaXA2X3JvdXRlX2luZm9fY3JlYXRlX25oKHJ0LCBcdTAwMjZyX2NmZywgR0ZQX0tFUk5FTCwgZXh0YWNrKTtcbm5ldC9pcHY2L3JvdXRlLmMtNTQ4MC1cdFx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBJUHY2IFJvdXRpbmcgVGFibGUgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGNvdXBsZSBvZiB0aGluZ3MgaGVyZS4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYCBmdW5jdGlvbiBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gaXRzIHVzdWFsIHJvbGUuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBtZW1vcnkgb24gYGlwNl9yb3V0ZV9hZGRgLiBJICp0aGluayogdGhhdCYjMzk7cyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIGFuZCB0aGF0IGl0JiMzOTtzIGV4cG9ydGVkIGZvciBleHRlcm5hbCB1c2UuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3QgY29uZmlybSB0aGF0IG5vdyB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZCByZWNlbnRseS4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBpbiBvcmRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3JvdXRlX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz0zODc2PXN0YXRpYyBpbnQgaXA2X3JvdXRlX2luZm9fY3JlYXRlX25oKHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzk1MS1cbm5ldC9pcHY2L3JvdXRlLmM6Mzk1MjppbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubmV0L2lwdjYvcm91dGUuYy0zOTUzLVx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTQ0MTM9c3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKnJ0Nl9hZGRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvcm91dGUuYy00NDM5LVxubmV0L2lwdjYvcm91dGUuYzo0NDQwOlx0aXA2X3JvdXRlX2FkZChcdTAwMjZjZmcsIEdGUF9BVE9NSUMsIE5VTEwpO1xubmV0L2lwdjYvcm91dGUuYy00NDQxLVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NDQ3OD1zdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX2RmbHRfcm91dGVyKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ1MDAtXG5uZXQvaXB2Ni9yb3V0ZS5jOjQ1MDE6XHRpZiAoIWlwNl9yb3V0ZV9hZGQoXHUwMDI2Y2ZnLCBHRlBfQVRPTUlDLCBOVUxMKSkge1xubmV0L2lwdjYvcm91dGUuYy00NTAyLVx0XHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG4tLVxubmV0L2lwdjYvcm91dGUuYz00NTc4PWludCBpcHY2X3JvdXRlX2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGluNl9ydG1zZyAqcnRtc2cpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00NTk0LVx0XHRcdGNmZy5mY19tZXRyaWMgPSBJUDZfUlRfUFJJT19VU0VSO1xubmV0L2lwdjYvcm91dGUuYzo0NTk1Olx0XHRlcnIgPSBpcDZfcm91dGVfYWRkKFx1MDAyNmNmZywgR0ZQX0tFUk5FTCwgTlVMTCk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTQ1OTYtXHRcdGJyZWFrO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTY2MT1zdGF0aWMgaW50IGluZXQ2X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTU2NzYtXHRlbHNlXG5uZXQvaXB2Ni9yb3V0ZS5jOjU2Nzc6XHRcdHJldHVybiBpcDZfcm91dGVfYWRkKFx1MDAyNmNmZywgR0ZQX0tFUk5FTCwgZXh0YWNrKTtcbm5ldC9pcHY2L3JvdXRlLmMtNTY3OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDA4CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiBgaXA2X3JvdXRlX2FkZGAgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgYWxzbyBsaWtlIHdoYXQgSSBzZWUgd2l0aCBgaW5ldDZfcnRtX25ld3JvdXRlYDsgdGhhdCYjMzk7cyByZWxldmFudCB0byB0aGUgdG9waWMgYXMgd2VsbC4gVG8gZnVydGhlciBteSBpbnZlc3RpZ2F0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBwZWVrIGF0IGBmaWJfY3JlYXRlX2luZm9gIHdpdGhpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gQWgsIHllcywgY29uZmlybWVkOiBpdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMuIEV4Y2VsbGVudCwgdGhpcyBpcyBzb2xpZC4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBpcF9maWJfbWV0cmljc19pbml0YCwgYGZpYl9jcmVhdGVfaW5mb2AsIGFuZCBgaXA2X3JvdXRlX2FkZGAuIFRoaXMgc2V0IGFwcGVhcnMgdG8gYmUgdGhlIHJpZ2h0IHdheSB0byBhY2hpZXZlIG15IGdvYWwuIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcywgc28gSSYjMzk7bGwgc2V0IHRoZXNlIGZpbmRpbmdzIGFzaWRlIGZvciBub3cgYW5kIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2ZpYl9tZXRyaWNzX2luaXQmIzM0OywKICAgICYjMzQ7ZmliX2NyZWF0ZV9pbmZvJiMzNDssCiAgICAmIzM0O2lwNl9yb3V0ZV9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgdG8gYGlwX21ldHJpY3NfY29udmVydGAgdG8gZW5zdXJlIHRoYXQgdGhlIGBSVEFYX0FEVk1TU2AgbWV0cmljIGlzIGVpdGhlciAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgVENQX01JTl9NU1NgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gY29uZmlndXJpbmcgSVB2NCBvciBJUHY2IHJvdXRlcyB3aXRoIG1ldHJpY3MgdmlhIG5ldGxpbmsgKGUuZy4sIGBSVE1fTkVXUk9VVEVgKS4gU2luY2UgaXQgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9maWJfbWV0cmljc19pbml0JiMzNDssCiAgICAmIzM0O2ZpYl9jcmVhdGVfaW5mbyYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoZWNrIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHRvIGVuc3VyZSB0aGF0IHRoZSBgUlRBWF9BRFZNU1NgIG1ldHJpYyBpcyBlaXRoZXIgMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFRDUF9NSU5fTVNTYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIElQdjQgb3IgSVB2NiByb3V0ZXMgd2l0aCBtZXRyaWNzIHZpYSBuZXRsaW5rIChlLmcuLCBgUlRNX05FV1JPVVRFYCkuIFNpbmNlIGl0IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjowMi4wOTI3ODYyMjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTUwNTY0MDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9maWJfbWV0cmljc19pbml0XCIsXG4gICAgXCJmaWJfY3JlYXRlX2luZm9cIixcbiAgICBcImlwNl9yb3V0ZV9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGVjayB0byBgaXBfbWV0cmljc19jb252ZXJ0YCB0byBlbnN1cmUgdGhhdCB0aGUgYFJUQVhfQURWTVNTYCBtZXRyaWMgaXMgZWl0aGVyIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBUQ1BfTUlOX01TU2AuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBjb25maWd1cmluZyBJUHY0IG9yIElQdjYgcm91dGVzIHdpdGggbWV0cmljcyB2aWEgbmV0bGluayAoZS5nLiwgYFJUTV9ORVdST1VURWApLiBTaW5jZSBpdCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjowMi4wOTI4MDAxMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4Mjk0ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWI2ODNiODNiZDEyYWJhNTJmYjcxNzZjNmE2NGUzZWQ4MDQ1OThiMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAwMDo1NjowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9tZXRyaWNzLmMgYi9uZXQvaXB2NC9tZXRyaWNzLmNcXG5pbmRleCBhZDQwNzYyYThiMzgzLi5iOWI5N2EwYTUxMjZiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L21ldHJpY3MuY1xcbisrKyBiL25ldC9pcHY0L21ldHJpY3MuY1xcbkBAIC00NCw2ICs0NCwxMiBAQCBzdGF0aWMgaW50IGlwX21ldHJpY3NfY29udmVydChzdHJ1Y3QgbmxhdHRyICpmY19teCxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR2YWwgPSBubGFfZ2V0X3UzMihubGEpO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDI2XFx1MDAyNiB2YWwgXFx1MDAzYyBUQ1BfTUlOX01TUykge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSX0ZNVChleHRhY2ssIG5sYSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFxcIkludmFsaWQgYWR2bXNzLCBtdXN0IGJlIDAgb3IgXFx1MDAzZT0gJXVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRUQ1BfTUlOX01TUyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDNlIDY1NTM1IC0gNDApXFxuIFxcdFxcdFxcdHZhbCA9IDY1NTM1IC0gNDA7XFxuIFxcdFxcdGlmICh0eXBlID09IFJUQVhfTVRVIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDNlIDY1NTM1IC0gMTUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjAyLjc2MjAxMTI5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0ODM2NDA1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2ZpYl9tZXRyaWNzX2luaXRcIixcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiaXA2X3JvdXRlX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoZWNrIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHRvIGVuc3VyZSB0aGF0IHRoZSBgUlRBWF9BRFZNU1NgIG1ldHJpYyBpcyBlaXRoZXIgMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFRDUF9NSU5fTVNTYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIElQdjQgb3IgSVB2NiByb3V0ZXMgd2l0aCBtZXRyaWNzIHZpYSBuZXRsaW5rIChlLmcuLCBgUlRNX05FV1JPVVRFYCkuIFNpbmNlIGl0IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGViNjgzYjgzYmQxMmFiYTUyZmI3MTc2YzZhNjRlM2VkODA0NTk4YjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAwMDo1NjowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L21ldHJpY3MuYyBiL25ldC9pcHY0L21ldHJpY3MuY1xuaW5kZXggYWQ0MDc2MmE4YjM4My4uYjliOTdhMGE1MTI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L21ldHJpY3MuY1xuKysrIGIvbmV0L2lwdjQvbWV0cmljcy5jXG5AQCAtNDQsNiArNDQsMTIgQEAgc3RhdGljIGludCBpcF9tZXRyaWNzX2NvbnZlcnQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXG4gXHRcdFx0fVxuIFx0XHRcdHZhbCA9IG5sYV9nZXRfdTMyKG5sYSk7XG4gXHRcdH1cbitcdFx0aWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgXHUwMDI2XHUwMDI2IHZhbCBcdTAwMjZcdTAwMjYgdmFsIFx1MDAzYyBUQ1BfTUlOX01TUykge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFJfRk1UKGV4dGFjaywgbmxhLFxuK1x0XHRcdFx0XHRcdFwiSW52YWxpZCBhZHZtc3MsIG11c3QgYmUgMCBvciBcdTAwM2U9ICV1XCIsXG4rXHRcdFx0XHRcdFx0VENQX01JTl9NU1MpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDNlIDY1NTM1IC0gNDApXG4gXHRcdFx0dmFsID0gNjU1MzUgLSA0MDtcbiBcdFx0aWYgKHR5cGUgPT0gUlRBWF9NVFUgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2UgNjU1MzUgLSAxNSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjAyLjc2MjAxMjY1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDAzNDUzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgSVAgTWV0cmljIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBwcm9wb3NlZCBmb3IgYG5ldC9pcHY0L21ldHJpY3MuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpcF9tZXRyaWNzX2NvbnZlcnRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHRoZXkncmUgYWRkaW5nIGEgdmFsaWRhdGlvbiBjaGVjayBmb3IgdGhlIGBSVEFYX0FEVk1TU2AgbWV0cmljLiBFc3NlbnRpYWxseSwgaWYgc29tZW9uZSB0cmllcyB0byBzZXQgYW4gYGFkdm1zc2AgdmFsdWUgbGVzcyB0aGFuIGBUQ1BfTUlOX01TU2AgKGFuZCBpdCdzIG5vdCB6ZXJvKSwgdGhlIGZ1bmN0aW9uIG5vdyB0aHJvd3MgYSBgLUVJTlZBTGAgZXJyb3IuIFRoYXQncyBnb29kLCBwcmV2ZW50cyB0aG9zZSBvdXQtb2Ytc3BlYyB2YWx1ZXMgZnJvbSBwb3RlbnRpYWxseSBjYXVzaW5nIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBXZSB3b3VsZG4ndCB3YW50IHRob3NlIHNldHRpbmcgdGhlaXIgTVRVIGRvd24gdG9vIGxvdy5cblxuUmlnaHQsIHNvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIGlzIHVzZWQgd2hlbiB3ZSdyZSBzZXR0aW5nIElQIG1ldHJpY3MgdGhyb3VnaCBuZXRsaW5rIOKAkyB0aGluayByb3V0aW5nIHRhYmxlIHVwZGF0ZXMsIHRoYXQgc29ydCBvZiB0aGluZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIHZhbGlkYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gcmVncmVzc2lvbnMgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gVGhlIGNvZGUgbG9va3MgY29ycmVjdCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgdGhvcm91Z2guIE5vdywgbGV0IG1lIGRpZyBpbnRvIHdoZXJlIHRoaXMgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjowNi44NjIzNjE3MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTYwNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21ldHJpY3NfY29udmVydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbWV0cmljcy5jLTktXFxubmV0L2lwdjQvbWV0cmljcy5jOjEwOnN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxcbm5ldC9pcHY0L21ldHJpY3MuYy0xMS1cXHRcXHRcXHQgICAgICBpbnQgZmNfbXhfbGVuLCB1MzIgKm1ldHJpY3MsXFxuLS1cXG5uZXQvaXB2NC9tZXRyaWNzLmM9NzI9c3RydWN0IGRzdF9tZXRyaWNzICppcF9maWJfbWV0cmljc19pbml0KHN0cnVjdCBubGF0dHIgKmZjX214LFxcbi0tXFxubmV0L2lwdjQvbWV0cmljcy5jLTg1LVxcbm5ldC9pcHY0L21ldHJpY3MuYzo4NjpcXHRlcnIgPSBpcF9tZXRyaWNzX2NvbnZlcnQoZmNfbXgsIGZjX214X2xlbiwgZmliX21ldHJpY3MtXFx1MDAzZW1ldHJpY3MsXFxubmV0L2lwdjQvbWV0cmljcy5jLTg3LVxcdFxcdFxcdFxcdCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjowNy4wNTUzMzYwMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzNDQ3NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCBteXNlbGYsIGFuZCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwX2ZpYl9tZXRyaWNzX2luaXRgIEZ1bmN0aW9uKipcblxuUmlnaHQsIGBpcF9maWJfbWV0cmljc19pbml0YCBoYXMgdG8gYmUgaW5pdGlhbGl6aW5nIHNvbWV0aGluZy4gVGhlIGNvZGUgZGlyZWN0bHkgY2FsbHMgYGlwX21ldHJpY3NfY29udmVydGAsIHdoaWNoIGlzIGEgZGVjZW50IGNsdWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyB0cmFjZSB0aGlzIGJhY2suIFdoZXJlJ3MgdGhpcyBgaXBfZmliX21ldHJpY3NfaW5pdGAgcm91dGluZSBiZWluZyBpbnZva2VkPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2Ugb2YgdGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gbWFraW5nIHRoaXMgY29kZSBtYWtlIHNlbnNlLCBzbyBJJ20gZ29pbmcgdG8gZmluZCBhbGwgY2FsbHMgdG8gdGhpcyByb3V0aW5lIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlIGFuZCBjb250ZXh0LiBUaGF0J2xsIGd1aWRlIG15IHN1YnNlcXVlbnQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjoxMC4wNzg3ODY0NjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTE0NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2ZpYl9tZXRyaWNzX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzQ1PXN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTQwMy1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTQwNDpcXHRmaS1cXHUwMDNlZmliX21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cXHUwMDNlZmNfbXgsIGNmZy1cXHUwMDNlZmNfbXhfbGVuLCBleHRhY2spO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNDA1LVxcdGlmIChJU19FUlIoZmktXFx1MDAzZWZpYl9tZXRyaWNzKSkge1xcbi0tXFxubmV0L2lwdjQvbWV0cmljcy5jPTEwPXN0YXRpYyBpbnQgaXBfbWV0cmljc19jb252ZXJ0KHN0cnVjdCBubGF0dHIgKmZjX214LFxcbi0tXFxubmV0L2lwdjQvbWV0cmljcy5jLTcxLVxcbm5ldC9pcHY0L21ldHJpY3MuYzo3MjpzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXFxubmV0L2lwdjQvbWV0cmljcy5jLTczLVxcdFxcdFxcdFxcdFxcdGludCBmY19teF9sZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjEwLjE4NzcxMDU0MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Nzc2NjczMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGSUIgTWV0cmljIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYGZpYl9jcmVhdGVfaW5mb2AgY2FsbHMgYGlwX2ZpYl9tZXRyaWNzX2luaXRgLiBUaGF0J3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSB0cmlnZ2VyZWQgZHVyaW5nIGEgbmV0bGluayByb3V0ZSBhZGRpdGlvbiwgc3BlY2lmaWNhbGx5IGEgYFJUTV9ORVdST1VURWAgbWVzc2FnZS4gTm93LCB0aGUgYGlwX21ldHJpY3NfY29udmVydGAgZnVuY3Rpb24gaXMgc3RhdGljLiBFeGNlbGxlbnQuIFRoYXQgbWVhbnMgSSBjYW4gbmFycm93IG15IGZvY3VzOyBpdCdzIGVpdGhlciBnb2luZyB0byBiZSBpbiBgaXBfZmliX21ldHJpY3NfaW5pdGAgb3IgYGZpYl9jcmVhdGVfaW5mb2AuIFdhaXQuLi5pcyBgaXBfZmliX21ldHJpY3NfaW5pdGAgZXhwb3J0ZWQgb3IganVzdCBub3Qgc3RhdGljPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIGl0cyB2aXNpYmlsaXR5LiBSaWdodCwgbGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvaXB2NC9tZXRyaWNzLmNgIHNvdXJjZSBmaWxlIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjEzLjY2NTM4MjA2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDgyMjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9maWJfbWV0cmljc19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L21ldHJpY3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9tZXRyaWNzLmM9MTA9c3RhdGljIGludCBpcF9tZXRyaWNzX2NvbnZlcnQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXFxuLS1cXG5uZXQvaXB2NC9tZXRyaWNzLmMtNzEtXFxubmV0L2lwdjQvbWV0cmljcy5jOjcyOnN0cnVjdCBkc3RfbWV0cmljcyAqaXBfZmliX21ldHJpY3NfaW5pdChzdHJ1Y3QgbmxhdHRyICpmY19teCxcXG5uZXQvaXB2NC9tZXRyaWNzLmMtNzMtXFx0XFx0XFx0XFx0XFx0aW50IGZjX214X2xlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MTMuNzU2MjEyMDA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMDYwNjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCBjb25zaWRlcmluZyBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsOlxuXG4qKkNoZWNraW5nIGZvciBFeHBvcnRlZCBTeW1ib2w6IGBpcF9maWJfbWV0cmljc19pbml0YCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdmVyaWZ5IGlmIHRoaXMgYGlwX2ZpYl9tZXRyaWNzX2luaXRgIHN5bWJvbCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSd2ZSBlbmNvdW50ZXJlZCB0aGlzIGtpbmQgb2Ygc2l0dWF0aW9uIGJlZm9yZSwgd2hlcmUgYSBmdW5jdGlvbidzIHZpc2liaWxpdHkgY2FuIGltcGFjdCBpdHMgYXZhaWxhYmlsaXR5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1vZHVsZXMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBzb21laG93LiBJcyBpdCBkZWZpbmVkIGluIHRoZSBjb3JyZWN0IGhlYWRlcj8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYGdyZXBgIHRocm91Z2ggdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBvciB1c2UgYSB0b29sIGxpa2UgYG5tYCBvciBgb2JqZHVtcGAgb24gdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGUgb2JqZWN0IGZpbGVzLiBJdOKAmXMgbGlrZWx5IHRoYXQgaXQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIG9yIGl0IG1heSBiZSB3aXRoaW4gYSBzdGF0aWMgY29udGV4dC4gS25vd2luZyB3aGVyZSBpdCdzICpzdXBwb3NlZCogdG8gYmUgdXNlZCBpcyBhbHNvIHVzZWZ1bCBjb250ZXh0LCB0aGF0IHdvdWxkIHJlZmluZSB0aGUgc2VhcmNoLiBUaGlzIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJZiBpdCdzIG5vdCBleHBvcnRlZCwgdGhlbiBpdCdzIGEgbm8tZ28gZm9yIGRpcmVjdCBhY2Nlc3MuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGFjY2VzcyBtZXRob2RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MTcuMDU2ODIxMjE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM4MzE1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qaXBfZmliX21ldHJpY3NfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9tZXRyaWNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjE3LjEzMDIxNzg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjU0OTczNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBWYXJpYWJsZSdzIFByb3BlcnRpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdmFyaWFibGUgaW4gcXVlc3Rpb24gaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgd2hpY2ggaXMgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlLiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogc3RhdGljIGlzIGEgc2lnbmlmaWNhbnQgcG9pbnQuIFRoYXQgaW1wbGllcyBzb21lIGZvcm0gb2YgZXh0ZXJuYWwgdmlzaWJpbGl0eSBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGxpbmthZ2UgcG90ZW50aWFsIHdpdGhpbiB0aGUgY3VycmVudCBzY29wZSBvciBwb3RlbnRpYWxseSBpbmhlcml0ZWQgc2NvcGVzLiBUaGlzIGxhY2sgb2Ygc3RhdGljIGRlc2lnbmF0aW9uIHN1Z2dlc3RzIGl0IGNvdWxkIGJlIG1vZGlmaWVkIG9yIGFjY2Vzc2VkIGluIHdheXMgdGhhdCBhcmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTXkgbmV4dCBzdGVwPyBMZXQncyBpbW1lZGlhdGVseSBkaXZlIGludG8gYGZpYl9jcmVhdGVfaW5mb2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhhdCB2YXJpYWJsZS4gVGhlIGNhbGwgY29udGV4dCBhbmQgcHJvcGVydGllcyBvZiBgZmliX2NyZWF0ZV9pbmZvYCBhcmUgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBpbGx1bWluYXRlIHRoZSB1c2UgY2FzZXMgZm9yIG91ciB1bm5hbWVkIHZhcmlhYmxlLiBJdHMgcHJvYmFibHkgcGFzc2VkIHRoZXJlLCBvciBhZmZlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBzdG9yeSB3aWxsIHJlYWxseSBzdGFydCB0byB1bmZvbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjoyMC4xNTU3MTgwMzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTY3OTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfY3JlYXRlX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9sb29rdXAuaD0zOD12b2lkIGZpYl9yZWxlYXNlX2luZm8oc3RydWN0IGZpYl9pbmZvICopO1xcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC00MC1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzIxPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzQ0LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzQ1OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNDYtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2ZpYl90cmllLmM9MTE5ND1pbnQgZmliX3RhYmxlX2luc2VydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfdGFibGUgKnRiLFxcbi0tXFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjExLVxcbm5ldC9pcHY0L2ZpYl90cmllLmM6MTIxMjpcXHRmaSA9IGZpYl9jcmVhdGVfaW5mbyhjZmcsIGV4dGFjayk7XFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjEzLVxcdGlmIChJU19FUlIoZmkpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjIwLjI4MTQwNTQ0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM4ODIyMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUm91dGUgSW5zZXJ0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyByb3V0aW5nIGluZm9ybWF0aW9uIGdldHMgYWRkZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBmaWJfdGFibGVfaW5zZXJ0YCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBJdCdzIGNhbGxlZCBieSBgaW5ldF9ydG1fbmV3cm91dGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQncyBvdXIgZW50cnkgcG9pbnQuIEFuZCBgZmliX3RhYmxlX2luc2VydGAgaXRzZWxmIGNhbGxzIGBmaWJfY3JlYXRlX2luZm9gLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgY3JlYXRpb24gcHJvY2Vzcy5cblxuU28sIEkgc2hvdWxkIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgaXBfZmliX21ldHJpY3NfaW5pdGAsIGBmaWJfY3JlYXRlX2luZm9gLCBgZmliX3RhYmxlX2luc2VydGAsIGFuZCBkZWZpbml0ZWx5IGBpbmV0X3J0bV9uZXdyb3V0ZWAuIEkgdGhpbmsgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBgaXBfZmliX21ldHJpY3NfaW5pdGAgYWxzbyBzZWVtcyBwcm9taXNpbmcuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGNoZWNrIGBuZXQvaXB2NC9tZXRyaWNzLmNgIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aCBgaXBfZmliX21ldHJpY3NfaW5pdGAuIEdvb2QsIGl0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBtb2R1bGUuXG5cbkknbGwgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBhZmZlY3QgaXRzIHByZXNlbmNlLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBpdCdzICpub3QqIGNvbnRpbmdlbnQgb24gYENPTkZJR19JUF9ST1VURV9DTEFTU0lEYC4gSSdtIGd1ZXNzaW5nIGl0J3MgcHJvYmFibHkgY29tcGlsZWQgaW4gZm9yIElQdjQgcmVnYXJkbGVzcy4gSnVzdCB0byBiZSBzdXJlLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYyOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjoyNC44MjAyMzIxNTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0OTAzMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ldHJpY3Mub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS0xMC1cXHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxMTpcXHQgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIHRjcF9tZXRyaWNzLm8gdGNwX2Zhc3RvcGVuLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTEyLVxcdCAgICAgdGNwX3JlY292ZXJ5Lm8gdGNwX3VscC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTE2LVxcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE3OlxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0xOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MjQuOTE1MTQ0MzY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjAyMDA0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbmNsdXNpb24gb2YgbWV0cmljcy5vKipcblxuT2theSwgc28gYG1ldHJpY3Mub2AgaXMgZGVmaW5pdGVseSBnZXR0aW5nIGNvbXBpbGVkIGJlY2F1c2UgaXQncyBsaXN0ZWQgdW5kZXIgYG9iai15YC4gVGhhdCBtZWFucyBpdCdzIHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZCBhcyBsb25nIGFzIHRoZSBwYXJlbnQgY29uZmlndXJhdGlvbiBpcyBhY3RpdmUuIE5vdywgdGhlIHBhcmVudCBvZiBgbWV0cmljcy5vYCBpcyBJUHY0LlxuXG5SaWdodCwgSVB2NCBpcyBicm91Z2h0IGluIGJ5IGBDT05GSUdfSU5FVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgQ09ORklHX0lORVRgIGFmZmVjdHMgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGluY2x1c2lvbiBvZiBgbWV0cmljcy5vYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0lORVRgLiBTbywgbm93IEkgc2hvdWxkIGxvb2sgYXQgYFRDUF9NSU5fTVNTYCB0byBmaWd1cmUgb3V0IHRoZSBsYXJnZXIgaW1wbGljYXRpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NjoyNy42MzUzNDkyNjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTI5ODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJUQ1BfTUlOX01TU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD02OD12b2lkIHRjcF90aW1lX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUsIGludCB0aW1lbyk7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC04MS0vKiBNaW5pbWFsIGFjY2VwdGVkIE1TUy4gSXQgaXMgKDYwKzYwKzgpIC0gKDIwKzIwKS4gKi9cXG5pbmNsdWRlL25ldC90Y3AuaDo4MjojZGVmaW5lIFRDUF9NSU5fTVNTXFx0XFx0ODhVXFxuaW5jbHVkZS9uZXQvdGNwLmgtODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjI3Ljk2NDY1NDY3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ4MzY3NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklQIE1ldHJpYyBVcGRhdGU6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIHRoZSBgUlRBWF9BRFZNU1NgIHZhbHVlIHdoZW4gSVAgbWV0cmljcyBhcmUgYmVpbmcgc2V0LiBUaGF0J3MgZ29vZCBwcmFjdGljZSDigJMgd2Ugd2FudCB0byBiZSByb2J1c3QgaW4gaGFuZGxpbmcgcG90ZW50aWFsIHZhcmlhdGlvbnMuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBkZWZpbml0ZWx5IGRvaW5nIHNvbWV0aGluZyBhbmQgSSBjYW4gc2VlIHdoZXJlIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoZWQuIExldCdzIHNlZSB0aGUgY29udGV4dC5cblxuSSBzZWUgdGhlIGtleSBzeW1ib2xzIGFyZSBgaXBfZmliX21ldHJpY3NfaW5pdGAgYW5kIGBmaWJfY3JlYXRlX2luZm9gLiBJIGRvbid0IHNlZSBhbnkgd2VpcmQgZGVwZW5kZW5jaWVzIGhlcmU7IGxvb2tzIGxpa2Ugd2UgZG9uJ3QgbmVlZCB0byBlbmFibGUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGJleW9uZCBgSU5FVGAsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFzc3VtZWQgdGhlc2UgZGF5cy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBgaXBfbWV0cmljc19jb252ZXJ0YCBpbiBgbmV0L2lwdjQvbWV0cmljcy5jYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gR290dGEgbWFrZSBzdXJlIHRoaXMgYWRkaXRpb24gaXMgcGxheWluZyBuaWNlbHkgd2l0aCBldmVyeXRoaW5nIGVsc2UgaW4gdGhhdCBmaWxlLiBUaGF0J3MgdGhlIGltcG9ydGFudCBiaXQgZm9yIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MzEuNTEzMDI3MDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9tZXRyaWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3NwZWMuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHRzdGF0aWMgaW50IGlwX21ldHJpY3NfY29udmVydChzdHJ1Y3QgbmxhdHRyICpmY19teCxcXG4gIDExOlxcdFxcdFxcdFxcdCAgICAgIGludCBmY19teF9sZW4sIHUzMiAqbWV0cmljcyxcXG4gIDEyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gIDEzOlxcdHtcXG4gIDE0OlxcdFxcdGJvb2wgZWNuX2NhID0gZmFsc2U7XFxuICAxNTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuICAxNjpcXHRcXHRpbnQgcmVtYWluaW5nO1xcbiAgMTc6XFx0XFxuICAxODpcXHRcXHRubGFfZm9yX2VhY2hfYXR0cihubGEsIGZjX214LCBmY19teF9sZW4sIHJlbWFpbmluZykge1xcbiAgMTk6XFx0XFx0XFx0aW50IHR5cGUgPSBubGFfdHlwZShubGEpO1xcbiAgMjA6XFx0XFx0XFx0dTMyIHZhbDtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0XFx0aWYgKCF0eXBlKVxcbiAgMjM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICAyNDpcXHRcXHRcXHRpZiAodHlwZSBcXHUwMDNlIFJUQVhfTUFYKSB7XFxuICAyNTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIG1ldHJpYyB0eXBlXFxcIik7XFxuICAyNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDI3OlxcdFxcdFxcdH1cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0XFx0dHlwZSA9IGFycmF5X2luZGV4X25vc3BlYyh0eXBlLCBSVEFYX01BWCArIDEpO1xcbiAgMzA6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUlRBWF9DQ19BTEdPKSB7XFxuICAzMTpcXHRcXHRcXHRcXHRjaGFyIHRtcFtUQ1BfQ0FfTkFNRV9NQVhdO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHRcXHRcXHRubGFfc3Ryc2NweSh0bXAsIG5sYSwgc2l6ZW9mKHRtcCkpO1xcbiAgMzQ6XFx0XFx0XFx0XFx0dmFsID0gdGNwX2NhX2dldF9rZXlfYnlfbmFtZSh0bXAsIFxcdTAwMjZlY25fY2EpO1xcbiAgMzU6XFx0XFx0XFx0XFx0aWYgKHZhbCA9PSBUQ1BfQ0FfVU5TUEVDKSB7XFxuICAzNjpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJVbmtub3duIHRjcCBjb25nZXN0aW9uIGFsZ29yaXRobVxcXCIpO1xcbiAgMzc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICAzODpcXHRcXHRcXHRcXHR9XFxuICAzOTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAgNDA6XFx0XFx0XFx0XFx0aWYgKG5sYV9sZW4obmxhKSAhPSBzaXplb2YodTMyKSkge1xcbiAgNDE6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIG5sYSxcXG4gIDQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiSW52YWxpZCBhdHRyaWJ1dGUgaW4gbWV0cmljc1xcXCIpO1xcbiAgNDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA0NDpcXHRcXHRcXHRcXHR9XFxuICA0NTpcXHRcXHRcXHRcXHR2YWwgPSBubGFfZ2V0X3UzMihubGEpO1xcbiAgNDY6XFx0XFx0XFx0fVxcbiAgNDc6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgXFx1MDAyNlxcdTAwMjYgdmFsIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDNjIFRDUF9NSU5fTVNTKSB7XFxuICA0ODpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSX0ZNVChleHRhY2ssIG5sYSxcXG4gIDQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yIFxcdTAwM2U9ICV1XFxcIixcXG4gIDUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFRDUF9NSU5fTVNTKTtcXG4gIDUxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNTI6XFx0XFx0XFx0fVxcbiAgNTM6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUlRBWF9BRFZNU1MgXFx1MDAyNlxcdTAwMjYgdmFsIFxcdTAwM2UgNjU1MzUgLSA0MClcXG4gIDU0OlxcdFxcdFxcdFxcdHZhbCA9IDY1NTM1IC0gNDA7XFxuICA1NTpcXHRcXHRcXHRpZiAodHlwZSA9PSBSVEFYX01UVSBcXHUwMDI2XFx1MDAyNiB2YWwgXFx1MDAzZSA2NTUzNSAtIDE1KVxcbiAgNTY6XFx0XFx0XFx0XFx0dmFsID0gNjU1MzUgLSAxNTtcXG4gIDU3OlxcdFxcdFxcdGlmICh0eXBlID09IFJUQVhfSE9QTElNSVQgXFx1MDAyNlxcdTAwMjYgdmFsIFxcdTAwM2UgMjU1KVxcbiAgNTg6XFx0XFx0XFx0XFx0dmFsID0gMjU1O1xcbiAgNTk6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUlRBWF9GRUFUVVJFUyBcXHUwMDI2XFx1MDAyNiAodmFsIFxcdTAwMjYgflJUQVhfRkVBVFVSRV9NQVNLKSkge1xcbiAgNjA6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5rbm93biBmbGFnIHNldCBpbiBmZWF0dXJlIG1hc2sgaW4gbWV0cmljcyBhdHRyaWJ1dGVcXFwiKTtcXG4gIDYxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjI6XFx0XFx0XFx0fVxcbiAgNjM6XFx0XFx0XFx0bWV0cmljc1t0eXBlIC0gMV0gPSB2YWw7XFxuICA2NDpcXHRcXHR9XFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdGlmIChlY25fY2EpXFxuICA2NzpcXHRcXHRcXHRtZXRyaWNzW1JUQVhfRkVBVFVSRVMgLSAxXSB8PSBEU1RfRkVBVFVSRV9FQ05fQ0E7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdHJldHVybiAwO1xcbiAgNzA6XFx0fVxcbiAgNzE6XFx0XFxuICA3MjpcXHRzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsXFxuICA3MzpcXHRcXHRcXHRcXHRcXHRcXHRpbnQgZmNfbXhfbGVuLFxcbiAgNzQ6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0c3RydWN0IGRzdF9tZXRyaWNzICpmaWJfbWV0cmljcztcXG4gIDc3OlxcdFxcdGludCBlcnI7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdGlmICghZmNfbXgpXFxuICA4MDpcXHRcXHRcXHRyZXR1cm4gKHN0cnVjdCBkc3RfbWV0cmljcyAqKVxcdTAwMjZkc3RfZGVmYXVsdF9tZXRyaWNzO1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRmaWJfbWV0cmljcyA9IGt6YWxsb2Nfb2JqKCpmaWJfbWV0cmljcyk7XFxuICA4MzpcXHRcXHRpZiAodW5saWtlbHkoIWZpYl9tZXRyaWNzKSlcXG4gIDg0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRlcnIgPSBpcF9tZXRyaWNzX2NvbnZlcnQoZmNfbXgsIGZjX214X2xlbiwgZmliX21ldHJpY3MtXFx1MDAzZW1ldHJpY3MsXFxuICA4NzpcXHRcXHRcXHRcXHRcXHQgZXh0YWNrKTtcXG4gIDg4OlxcdFxcdGlmICghZXJyKSB7XFxuICA4OTpcXHRcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmZpYl9tZXRyaWNzLVxcdTAwM2VyZWZjbnQsIDEpO1xcbiAgOTA6XFx0XFx0fSBlbHNlIHtcXG4gIDkxOlxcdFxcdFxcdGtmcmVlKGZpYl9tZXRyaWNzKTtcXG4gIDkyOlxcdFxcdFxcdGZpYl9tZXRyaWNzID0gRVJSX1BUUihlcnIpO1xcbiAgOTM6XFx0XFx0fVxcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRyZXR1cm4gZmliX21ldHJpY3M7XFxuICA5NjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjMxLjUxMzE4OTYxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAyMDQyMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgSVAgRklCIE1ldHJpY3MgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgaXBfZmliX21ldHJpY3NfaW5pdGAgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgbm9uLXN0YXRpYyBvbmUuIFRoYXQgZmVlbHMgcmlnaHQuIEFuZCwgeWVhaCwgYGZpYl9jcmVhdGVfaW5mb2AgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AgbG9va3MgbGlrZSBhIGtleSBzeW1ib2wgdG8gZGlnIGludG8uXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBpcF9maWJfbWV0cmljc19pbml0YCBpcyBleHBvcnRlZC4gTm9wZSwgbm90IGV4cG9ydGVkLCBidXQgaXQgKmlzbid0KiBzdGF0aWMuIFRoYXQncyBhIHBvaW50IHRvIG1ha2UsIGl0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZS5cblxuT2theSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBjYWxsaW5nIGBpcF9tZXRyaWNzX2NvbnZlcnRgPyBOb3BlLCBub3RoaW5nLiBJbnRlcmVzdGluZy5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2ltaWxhciBjaGFuZ2VzIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gTmVlZCB0byBzZWUgaWYgSVB2NiBpcyBoYW5kbGVkIHNpbWlsYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ3NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjM1LjExNTIzNjMxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyOTIzNDIzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSVEFYX0FEVk1TU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjM1LjI0ODE3MzQ5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA1NTExODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBYnNlbmNlIG9mIFJUQVhfQURWTVNTIGluIG5ldC9pcHY2L3JvdXRlLmMqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIElQdjYgcm91dGluZyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2lwdjYvcm91dGUuY2Agd291bGQgdXRpbGl6ZSBgUlRBWF9BRFZNU1NgLCBidXQgdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgdGhlIGNhc2UuIFRoYXQncyBhIGJpdCB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIFBlcmhhcHMgaXQncyBoYW5kbGVkIGRpZmZlcmVudGx5IG9yIG5vdCBzdXBwb3J0ZWQgYXQgYWxsIGluIHRoaXMgcGFydGljdWxhciBhcmVhPyBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2suIE15IGZpcnN0IHN0ZXAgaXMgdG8gc2VhcmNoIHdpdGhpbiB0aGUgYG5ldC9pcHY2L3JvdXRlLmNgIGZpbGUgaXRzZWxmIGZvciBhIGZ1bmN0aW9uIGxpa2UgYGlwX21ldHJpY3NfY29udmVydGAgb3IgYW55dGhpbmcgd2l0aCBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb24gdGhhdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBoYW5kbGluZyBvciB0cmFuc2xhdGluZyByb3V0aW5nIG1ldHJpY3MuIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSBjb2RlIG1hbmFnZXMgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLCBvciBwb3RlbnRpYWxseSB3aHkgaXQncyBpZ25vcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODIwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6MzguMzUzNjg5ODg2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM5ODEzMDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21ldHJpY3NfY29udmVydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjM4LjQ1NzY4MjI1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUxMzEzOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBkZWFsaW5nIHdpdGggc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhlc2UgbmV0d29ya2luZyBkZXRhaWxzOlxuXG4qKkRpZ2dpbmcgaW50byBJUHY2IFJvdXRpbmcgYW5kIE1ldHJpY3MqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IElQdjYsIHNwZWNpZmljYWxseSB0aGUgcm91dGluZyBzaWRlIG9mIHRoaW5ncy4gSSdtIHdvbmRlcmluZyBpZiB0aGUgc3lzdGVtIEknbSB3b3JraW5nIHdpdGgsIG9yIHBlcmhhcHMgYSBzeXN0ZW0gSSdtIGFuYWx5emluZywgdXNlcyBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGxvb2tzIGZhbWlsaWFyLi4uYW5kIHRoZSB0aG91Z2h0IHRoZW4gdHJpZ2dlcnM6IGNvdWxkIHRoaXMgYmUgd2hlcmUgcm91dGluZyBtZXRyaWNzIG1pZ2h0IGJlIHBhcnNlZCBvciBldmVuIGNvbmZpZ3VyZWQ/IEl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyByb3V0ZSBwcmlvcml0aXphdGlvbiBhbmQgc2VsZWN0aW9uIGJhc2VkIG9uIHRob3NlIG1ldHJpY3MsIGJlIHRoZXkgY29zdCwgaG9wIGNvdW50LCBvciB3aGF0ZXZlciB0aGUgaW1wbGVtZW50YXRpb24gdXNlcy4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgY29kZSwgYW5kIHRoaXMgZnVuY3Rpb24gbmFtZSBpcyBhIHVzZWZ1bCBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTAyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6NDEuNDA5MDAxMzAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQxNTIzOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlRBWF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9maWIuYz0xMDg5PXN0YXRpYyBpbnQgZmliNl9hZGRfcnQybm9kZShzdHJ1Y3QgZmliNl9ub2RlICpmbiwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmMtMTE1Ni1cXHRcXHRcXHRcXHRpZiAocnQtXFx1MDAzZWZpYjZfcG10dSlcXG5uZXQvaXB2Ni9pcDZfZmliLmM6MTE1NzpcXHRcXHRcXHRcXHRcXHRmaWI2X21ldHJpY19zZXQoaXRlciwgUlRBWF9NVFUsXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTExNTgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0cnQtXFx1MDAzZWZpYjZfcG10dSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MjYyPWludCBpcDZfZHN0X2hvcGxpbWl0KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjYzLXtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MjY0OlxcdGludCBob3BsaW1pdCA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9IT1BMSU1JVCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTI2NS1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xNDE2LVxcdFxcdFxcdFxcdCAgIHJhX21zZy1cXHUwMDNlaWNtcGguaWNtcDZfaG9wX2xpbWl0KTtcXG5uZXQvaXB2Ni9uZGlzYy5jOjE0MTc6XFx0XFx0XFx0ZmliNl9tZXRyaWNfc2V0KHJ0LCBSVEFYX0hPUExJTUlULFxcbm5ldC9pcHY2L25kaXNjLmMtMTQxOC1cXHRcXHRcXHRcXHRcXHRyYV9tc2ctXFx1MDAzZWljbXBoLmljbXA2X2hvcF9saW1pdCk7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTE1NjgtXFx0XFx0XFx0V1JJVEVfT05DRShpbjZfZGV2LVxcdTAwM2VjbmYubXR1NiwgbXR1KTtcXG5uZXQvaXB2Ni9uZGlzYy5jOjE1Njk6XFx0XFx0XFx0ZmliNl9tZXRyaWNfc2V0KHJ0LCBSVEFYX01UVSwgbXR1KTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTE1NzAtXFx0XFx0XFx0cnQ2X210dV9jaGFuZ2Uoc2tiLVxcdTAwM2VkZXYsIG10dSk7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yNzktXFxubmV0L2lwdjYvcm91dGUuYzoyODA6c3RhdGljIGNvbnN0IHUzMiBpcDZfdGVtcGxhdGVfbWV0cmljc1tSVEFYX01BWF0gPSB7XFxubmV0L2lwdjYvcm91dGUuYzoyODE6XFx0W1JUQVhfSE9QTElNSVQgLSAxXSA9IDAsXFxubmV0L2lwdjYvcm91dGUuYy0yODItfTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MTcxOD1zdGF0aWMgaW50IHJ0Nl9pbnNlcnRfZXhjZXB0aW9uKHN0cnVjdCBydDZfaW5mbyAqbnJ0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0xNzYwLVxcdCAqL1xcbm5ldC9pcHY2L3JvdXRlLmM6MTc2MTpcXHRpZiAoZHN0X21ldHJpY19yYXcoXFx1MDAyNm5ydC1cXHUwMDNlZHN0LCBSVEFYX01UVSkgXFx1MDAzZT0gZmliNl9tdHUocmVzKSkge1xcbm5ldC9pcHY2L3JvdXRlLmMtMTc2Mi1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0yMDgyPXN0YXRpYyB2b2lkIHJ0Nl9leGNlcHRpb25zX3VwZGF0ZV9wbXR1KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTIxMDAtXFx0XFx0XFx0ICovXFxubmV0L2lwdjYvcm91dGUuYzoyMTAxOlxcdFxcdFxcdGlmIChkc3RfbWV0cmljX3JhdyhcXHUwMDI2ZW50cnktXFx1MDAzZWRzdCwgUlRBWF9NVFUpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvcm91dGUuYy0yMTAyLVxcdFxcdFxcdCAgICBydDZfbXR1X2NoYW5nZV9yb3V0ZV9hbGxvd2VkKGlkZXYsIGVudHJ5LCBtdHUpKVxcbm5ldC9pcHY2L3JvdXRlLmM6MjEwMzpcXHRcXHRcXHRcXHRkc3RfbWV0cmljX3NldChcXHUwMDI2ZW50cnktXFx1MDAzZWRzdCwgUlRBWF9NVFUsIG10dSk7XFxubmV0L2lwdjYvcm91dGUuYy0yMTA0LVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjkwNz1zdGF0aWMgdm9pZCBydDZfZG9fdXBkYXRlX3BtdHUoc3RydWN0IHJ0Nl9pbmZvICpydCwgdTMyIG10dSlcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjkxMC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjI5MTE6XFx0ZHN0X21ldHJpY19zZXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QsIFJUQVhfTVRVLCBtdHUpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMjkxMi1cXHRydC1cXHUwMDNlcnQ2aV9mbGFncyB8PSBSVEZfTU9ESUZJRUQ7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI5MjI9c3RhdGljIHZvaWQgX19pcDZfcnRfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTI5MjgtXFxubmV0L2lwdjYvcm91dGUuYzoyOTI5OlxcdC8qIE5vdGU6IGRvICpOT1QqIGNoZWNrIGRzdF9tZXRyaWNfbG9ja2VkKGRzdCwgUlRBWF9NVFUpXFxubmV0L2lwdjYvcm91dGUuYy0yOTMwLVxcdCAqIElQdjYgcG10dSBkaXNjb3ZlcnkgaXNuJ3Qgb3B0aW9uYWwsIHNvICdtdHUgbG9jaycgY2Fubm90IGRpc2FibGUgaXQuXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzMDI9dTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zMzExLVxcbm5ldC9pcHY2L3JvdXRlLmM6MzMxMjpcXHRpZiAodW5saWtlbHkoZmliNl9tZXRyaWNfbG9ja2VkKGY2aSwgUlRBWF9NVFUpKSkge1xcbm5ldC9pcHY2L3JvdXRlLmMtMzMxMy1cXHRcXHRtdHUgPSBmNmktXFx1MDAzZWZpYjZfcG10dTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzMxOS1cXHRpZiAodW5saWtlbHkocnQpKSB7XFxubmV0L2lwdjYvcm91dGUuYzozMzIwOlxcdFxcdG10dSA9IGRzdF9tZXRyaWNfcmF3KFxcdTAwMjZydC1cXHUwMDNlZHN0LCBSVEFYX01UVSk7XFxubmV0L2lwdjYvcm91dGUuYy0zMzIxLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzMzU9c3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzNTgtXFx0cnQtXFx1MDAzZXJ0NmlfaWRldiAgICAgPSBpZGV2O1xcbm5ldC9pcHY2L3JvdXRlLmM6MzM1OTpcXHRkc3RfbWV0cmljX3NldChcXHUwMDI2cnQtXFx1MDAzZWRzdCwgUlRBWF9IT1BMSU1JVCwgMCk7XFxubmV0L2lwdjYvcm91dGUuYy0zMzYwLVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDQ0PXN0YXRpYyBpbnQgZmliNl9uaF9tdHVfY2hhbmdlKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqX2FyZylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA2Mi1cXHRcXHQgICAgKG10dSBcXHUwMDNjIGFyZy1cXHUwMDNlbXR1IFxcdTAwMjZcXHUwMDI2IG10dSA9PSBpZGV2LVxcdTAwM2VjbmYubXR1NikpXFxubmV0L2lwdjYvcm91dGUuYzo1MDYzOlxcdFxcdFxcdGZpYjZfbWV0cmljX3NldChmNmksIFJUQVhfTVRVLCBhcmctXFx1MDAzZW10dSk7XFxubmV0L2lwdjYvcm91dGUuYy01MDY0LVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDczPXN0YXRpYyBpbnQgcnQ2X210dV9jaGFuZ2Vfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqZjZpLCB2b2lkICpwX2FyZylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3OC1cXHQvKiBJbiBJUHY2IHBtdHUgZGlzY292ZXJ5IGlzIG5vdCBvcHRpb25hbCxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzk6XFx0ICAgc28gdGhhdCBSVEFYX01UVSBsb2NrIGNhbm5vdCBkaXNhYmxlIGl0Llxcbm5ldC9pcHY2L3JvdXRlLmMtNTA4MC1cXHQgICBXZSBzdGlsbCB1c2UgdGhpcyBsb2NrIHRvIGJsb2NrIGNoYW5nZXNcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA4Ny1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwODg6XFx0aWYgKGZpYjZfbWV0cmljX2xvY2tlZChmNmksIFJUQVhfTVRVKSlcXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwODktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTU2OTk9c3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3MzctXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX1BSSU9SSVRZICovXFxubmV0L2lwdjYvcm91dGUuYzo1NzM4OlxcdCAgICAgICArIFJUQVhfTUFYICogbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX01FVFJJQ1MgKi9cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3MzktXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydGFfY2FjaGVpbmZvKSlcXG5uZXQvaXB2Ni9yb3V0ZS5jOjU3NDA6XFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU3NDEtXFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjU2LVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoyNTc6XFx0cmVxLVxcdTAwM2Vyc2tfd2luZG93X2NsYW1wID0gUkVBRF9PTkNFKHRwLVxcdTAwM2V3aW5kb3dfY2xhbXApID8gOmRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVyk7XFxubmV0L2lwdjYvc3luY29va2llcy5jLTI1OC1cXHQvKiBsaW1pdCB0aGUgd2luZG93IHNlbGVjdGlvbiBpZiB0aGUgdXNlciBlbmZvcmNlIGEgc21hbGxlciByeCBidWZmZXIgKi9cXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yNjYtXFx0XFx0XFx0XFx0ICBpcmVxLVxcdTAwM2V3c2NhbGVfb2ssIFxcdTAwMjZyY3Zfd3NjYWxlLFxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoyNjc6XFx0XFx0XFx0XFx0ICBkc3RfbWV0cmljKGRzdCwgUlRBWF9JTklUUldORCkpO1xcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjQxLjU0MzE2MjExNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3MjQwNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklQdjYgUm91dGluZyBNZXRyaWNzIENvbnVuZHJ1bSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIHN0YW5kYXJkIGBpcF9tZXRyaWNzX2NvbnZlcnRgIGZ1bmN0aW9uIHdhcyB1bml2ZXJzYWxseSB1c2VkIGZvciBoYW5kbGluZyByb3V0ZSBtZXRyaWNzIGFjcm9zcyBib3RoIElQdjQgYW5kIElQdjYuIEJ1dCB0aGUgY29kZSBmb3IgYG5ldC9pcHY2L3JvdXRlLmNgIGRvZXNuJ3Qgc2VlbSB0byBiZSBjYWxsaW5nIGl0LiBUaGF04oCZcyB1bmV4cGVjdGVkLiBJdCB0aHJvd3MgYSB3cmVuY2ggaW4gbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBjb21tb25hbGl0aWVzIGJldHdlZW4gdGhlIHR3byBpbXBsZW1lbnRhdGlvbnMuXG5cblNvLCBob3cgZXhhY3RseSBkb2VzIHRoZSBJUHY2IHJvdXRlIHBhcnNpbmcgZGVhbCB3aXRoIHRoZXNlIG1ldHJpY3M/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjb252ZXJzaW9uIG9yIGludGVycHJldGF0aW9uIG9mIHRob3NlIG1ldHJpY3MgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgSVB2NiByb3V0aW5nIGNvbnRleHQuIEFscmlnaHQsIGxldOKAmXMgZ28gZGlyZWN0bHkgdG8gYG5ldC9pcHY2L3JvdXRlLmNgIGFuZCBzcGVjaWZpY2FsbHkgc2VhcmNoIGZvciBob3cgdGhlIGNvZGUgaGFuZGxlcyBgUlRBX01FVFJJQ1NgIHRvIGNsYXJpZnkgdGhpbmdzLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSBsb2dpYyB0aGF0IGlzIGJlaW5nIHVzZWQsIG9yIGV4cGxhaW4gKndoeSogc29tZXRoaW5nIGVsc2UgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Njo0NS4xMzA0MDg3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNzA5MDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJUQV9NRVRSSUNTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTUxMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bV9pcHY2X3BvbGljeVtSVEFfTUFYKzFdID0ge1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01MTE3LVxcdFtSVEFfUFJJT1JJVFldICAgICAgICAgID0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUxMTg6XFx0W1JUQV9NRVRSSUNTXSAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9pcHY2L3JvdXRlLmMtNTExOS1cXHRbUlRBX01VTFRJUEFUSF1cXHRcXHQ9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSB9LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MTgxPXN0YXRpYyBpbnQgcnRtX3RvX2ZpYjZfY29uZmlnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01MjgzLVxcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NDpcXHRpZiAodGJbUlRBX01FVFJJQ1NdKSB7XFxubmV0L2lwdjYvcm91dGUuYzo1Mjg1OlxcdFxcdGNmZy1cXHUwMDNlZmNfbXggPSBubGFfZGF0YSh0YltSVEFfTUVUUklDU10pO1xcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NjpcXHRcXHRjZmctXFx1MDAzZWZjX214X2xlbiA9IG5sYV9sZW4odGJbUlRBX01FVFJJQ1NdKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTUyODctXFx0fVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01Njk5PXN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy01NzM3LVxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9QUklPUklUWSAqL1xcbm5ldC9pcHY2L3JvdXRlLmM6NTczODpcXHQgICAgICAgKyBSVEFYX01BWCAqIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9NRVRSSUNTICovXFxubmV0L2lwdjYvcm91dGUuYy01NzM5LVxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjQ1LjI1MTEyNjUzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE5MzQ5MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBhbiBleHBlcnQgd291bGQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBJUHY2IFJvdXRlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgcnRtX3RvX2ZpYjZfY29uZmlnYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHNldHRpbmcgdGhlIGBjZmctXHUwMDNlZmNfbXhgIGZpZWxkLCBodWg/IFRoYXQncyB0aGUgY3J1Y2lhbCBzdGVwLiBOb3csIEkgbmVlZCB0byByZW1lbWJlciB3aGF0J3MgaW52b2x2ZWQgd2l0aCB0aGF0IHBhcnRpY3VsYXIgc3RydWN0dXJlLCBhbmQgd2hhdCBpdCByZWxhdGVzIHRvIGluIHRoZSByb3V0aW5nIHByb2Nlc3MuXG5cbkFoLCByaWdodCwgc28gYGNmZy1cdTAwM2VmY19teGAgaXMgb2J2aW91c2x5IHNvbWV0aGluZyB0aGF0IGdldHMgZmVkIHRvIHRoZSBjb25maWd1cmF0aW9uIHJvdXRpbmVzLiBUaGVuLCBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYCBwYXJzZXMgYWxsIG9mIHRoaXMuIEkgYmV0IGl0IHRha2VzIGBjZmctXHUwMDNlZmNfbXhgIGFuZCBleHRyYWN0cyB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIHRoZSByb3V0ZSwgbWF5YmUgc2V0dGluZyB0aGUgdmFyaW91cyBmaWIgZW50cnkgZmxhZ3Mgb3Igcm91dGUgYXR0cmlidXRlcy4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBzb3VyY2UgZm9yIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGFuZCBkb3VibGUgY2hlY2suIEtub3dpbmcgd2hlcmUgdGhhdCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIG9yaWdpbmF0ZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHJvdXRlcyBnZXQgaW5zdGFsbGVkLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZyB0byB2ZXJpZnkgYWdhaW5zdCB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYW55IHBvdGVudGlhbCBjYXZlYXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM2MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjQ4LjU3MDQ3OTM2NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTI3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZjX214XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3JvdXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz0zODA5PXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICppcDZfcm91dGVfaW5mb19jcmVhdGUoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4MzgtXFxubmV0L2lwdjYvcm91dGUuYzozODM5OlxcdHJ0LVxcdTAwM2VmaWI2X21ldHJpY3MgPSBpcF9maWJfbWV0cmljc19pbml0KGNmZy1cXHUwMDNlZmNfbXgsIGNmZy1cXHUwMDNlZmNfbXhfbGVuLFxcbm5ldC9pcHY2L3JvdXRlLmMtMzg0MC1cXHRcXHRcXHRcXHRcXHQgICAgICAgZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NTE4MT1zdGF0aWMgaW50IHJ0bV90b19maWI2X2NvbmZpZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTI4NC1cXHRpZiAodGJbUlRBX01FVFJJQ1NdKSB7XFxubmV0L2lwdjYvcm91dGUuYzo1Mjg1OlxcdFxcdGNmZy1cXHUwMDNlZmNfbXggPSBubGFfZGF0YSh0YltSVEFfTUVUUklDU10pO1xcbm5ldC9pcHY2L3JvdXRlLmM6NTI4NjpcXHRcXHRjZmctXFx1MDAzZWZjX214X2xlbiA9IG5sYV9sZW4odGJbUlRBX01FVFJJQ1NdKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTUyODctXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Njo0OC42NzQ2MjA5NjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3ODk4ODA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBSb3V0aW5nIFNldHVwKipcblxuUmlnaHQsIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGNhbGxzIGBpcF9maWJfbWV0cmljc19pbml0YC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBtZXRyaWNzIGFyZSBiZWluZyBpbml0aWFsaXplZCBmb3IgSVB2NiByb3V0ZXMuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyBgaXBfZmliX21ldHJpY3NfaW5pdGAgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCBvciBpcyBpdCBkZWNsYXJlZCBzb21ld2hlcmUgaW50ZXJuYWw/IElzIGl0IGV4cG9ydGVkIG9yIHZpc2libGUgdmlhIGEgaGVhZGVyIGZpbGU/XG5cbk15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGluIHRoZSBzdGFuZGFyZCBwbGFjZXMsIHByb2JhYmx5IHdpdGhpbiBgaW5jbHVkZS9uZXQvaXAuaGAgb3Igc29tZXdoZXJlIGVxdWFsbHkgb2J2aW91cyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2sncyBpbmNsdWRlIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgbGl2ZS4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgYSBkZWZpbml0aW9uIG9yIGRlY2xhcmF0aW9uIGluIHRoZXJlIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6NTIuMTUzNjE0NzY3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc0OTMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfZmliX21ldHJpY3NfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcC5oPTUwOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTUyNC1cXG5pbmNsdWRlL25ldC9pcC5oOjUyNTpzdHJ1Y3QgZHN0X21ldHJpY3MgKmlwX2ZpYl9tZXRyaWNzX2luaXQoc3RydWN0IG5sYXR0ciAqZmNfbXgsIGludCBmY19teF9sZW4sXFxuaW5jbHVkZS9uZXQvaXAuaC01MjYtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTY6NTIuNDcxMTE1NzE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjU3NzE1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gYGlwX2ZpYl9tZXRyaWNzX2luaXRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHdlJ3JlIGxvb2tpbmcgYXQsIGFuZCBpdCdzIG5lYXRseSBkZWZpbmVkIGluIGBpbmNsdWRlL25ldC9pcC5oYC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBieSBib3RoIElQdjQgYW5kIElQdjYgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEV4Y2VsbGVudCFcblxuTGV0J3MgYnJvYWRlbiB0aGUgc2NvcGUuIEJleW9uZCBgaXBfZmliX21ldHJpY3NfaW5pdGAsIEkgc2hvdWxkIGFsc28gYmUgY29uc2lkZXJpbmcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZnV6ei4gQmFzZWQgb24gbXkgcXVpY2sgcmV2aWV3LCBgZmliX2NyZWF0ZV9pbmZvYCAoZm9yIElQdjQpIGFuZCBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYCAoZm9yIElQdjYpIGxvb2sgbGlrZSB3b3J0aHdoaWxlIHRhcmdldHMgYXMgd2VsbCwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IGFyZSByZWxhdGVkIHRvIHRoZSBGSUIgc2V0dXAuXG5cbk9rYXksIGxldCBtZSByZXZpc2l0IGBpcF9maWJfbWV0cmljc19pbml0YCBhbmQgZ2V0IGEgZmluZXIgZ3JhaW5lZCB2aWV3LiBJdCB0YWtlcyBgZmNfbXhgIGFuZCBgZmNfbXhfbGVuYCBhcyBpbnB1dHMgYW5kLCBpbXBvcnRhbnRseSwgY2FsbHMgYGlwX21ldHJpY3NfY29udmVydGAuIFRoZSBwYXRjaCBkb2N1bWVudGF0aW9uIGNsZWFybHkgaW5kaWNhdGVzIGEgbW9kaWZpY2F0aW9uIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHdpdGhpbiBgbmV0L2lwdjQvbWV0cmljcy5jYC4gVGhpcyBpcyBrZXkuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHdpbGwgYmU6XG4qICAgYGlwX2ZpYl9tZXRyaWNzX2luaXRgXG4qICAgYGZpYl9jcmVhdGVfaW5mb2BcbiogICBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYFxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIHdvcnJ5IGFib3V0PyBOb3BlLCBgQ09ORklHX0lORVRgIGlzIHN1ZmZpY2llbnQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuXG5cblRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIHBhdGNoIGl0c2VsZi5cblxuYGBgY1xuXHRcdGlmICh0eXBlID09IFJUQVhfQURWTVNTIFx1MDAyNlx1MDAyNiB2YWwgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2MgVENQX01JTl9NU1MpIHtcblx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFJfRk1UKGV4dGFjaywgbmxhLFxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGFkdm1zcywgbXVzdCBiZSAwIG9yIFx1MDAzZT0gJXVcIixcblx0XHRcdFx0XHRcdFRDUF9NSU5fTVNTKTtcblx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdH1cbmBgYFxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuIGltcG9ydGFudCBjaGVjayEgSXQncyBwcmV2ZW50aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBhZHZtc3NgIHRvIGludmFsaWQgdmFsdWVzIGJldHdlZW4gMSBhbmQgYFRDUF9NSU5fTVNTIC0gMWAsIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBhIG5ldyBjb25zdHJhaW50LCBzbyBJIG5lZWQgdG8gZXhwbG9yZSB0aGUgYm91bmRhcmllcyBvZiB0aGlzIGNoZWNrIHRob3JvdWdobHkuIFRoZSBmdXp6aW5nIHNob3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBgUlRBWF9BRFZNU1NgIGhhbmRsaW5nLlxuXG5UbyBiZSBjbGVhciBvbiB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZywgYWdhaW4gdGhlIGZpbmFsIGxpc3QgaXM6XG4qICAgYGlwX2ZpYl9tZXRyaWNzX2luaXRgXG4qICAgYGZpYl9jcmVhdGVfaW5mb2BcbiogICBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYFxuXG5JIHNob3VsZCBqdXN0IGRvdWJsZSBjaGVjayBpZiBgaXA2X3JvdXRlX2luZm9fY3JlYXRlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjU5LjM5Njg5MjM5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQwMTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfcm91dGVfaW5mb19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTM3NjI9c3RhdGljIGludCBmaWI2X2NvbmZpZ192YWxpZGF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzgwOC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4MDk6c3RhdGljIHN0cnVjdCBmaWI2X2luZm8gKmlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTM4MTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzg3NS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjM4NzY6c3RhdGljIGludCBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgoc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxubmV0L2lwdjYvcm91dGUuYy0zODc3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Mzk1Mj1pbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zOTYxLVxcbm5ldC9pcHY2L3JvdXRlLmM6Mzk2MjpcXHRydCA9IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShjZmcsIGdmcF9mbGFncywgZXh0YWNrKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NjMtXFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NjUtXFxubmV0L2lwdjYvcm91dGUuYzozOTY2OlxcdGVyciA9IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZV9uaChydCwgY2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XFxubmV0L2lwdjYvcm91dGUuYy0zOTY3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTQ2NzU9c3RydWN0IGZpYjZfaW5mbyAqYWRkcmNvbmZfZjZpX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDcwMS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjQ3MDI6XFx0ZjZpID0gaXA2X3JvdXRlX2luZm9fY3JlYXRlKFxcdTAwMjZjZmcsIGdmcF9mbGFncywgZXh0YWNrKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTQ3MDMtXFx0aWYgKElTX0VSUihmNmkpKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00NzA1LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDcwNjpcXHRlcnIgPSBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgoZjZpLCBcXHUwMDI2Y2ZnLCBnZnBfZmxhZ3MsIGV4dGFjayk7XFxubmV0L2lwdjYvcm91dGUuYy00NzA3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTU0MTU9c3RhdGljIGludCBpcDZfcm91dGVfbXVsdGlwYXRoX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTQ3MS1cXHRcXHRyX2NmZy5mY19mbGFncyB8PSAocnRuaC1cXHUwMDNlcnRuaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9PTkxJTkspO1xcbm5ldC9pcHY2L3JvdXRlLmM6NTQ3MjpcXHRcXHRydCA9IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZShcXHUwMDI2cl9jZmcsIEdGUF9LRVJORUwsIGV4dGFjayk7XFxubmV0L2lwdjYvcm91dGUuYy01NDczLVxcdFxcdGlmIChJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU0NzgtXFxubmV0L2lwdjYvcm91dGUuYzo1NDc5OlxcdFxcdGVyciA9IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZV9uaChydCwgXFx1MDAyNnJfY2ZnLCBHRlBfS0VSTkVMLCBleHRhY2spO1xcbm5ldC9pcHY2L3JvdXRlLmMtNTQ4MC1cXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU2OjU5LjQ3ODMwMjkwOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAzODc1MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBJUHY2IFJvdXRpbmcgVGFibGUgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGEgY291cGxlIG9mIHRoaW5ncyBoZXJlLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBpcDZfcm91dGVfaW5mb19jcmVhdGVgIGZ1bmN0aW9uIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBpdHMgdXN1YWwgcm9sZS4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IG1lbW9yeSBvbiBgaXA2X3JvdXRlX2FkZGAuIEkgKnRoaW5rKiB0aGF0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBhbmQgdGhhdCBpdCdzIGV4cG9ydGVkIGZvciBleHRlcm5hbCB1c2UuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3QgY29uZmlybSB0aGF0IG5vdyB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZCByZWNlbnRseS4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgdmVyaWZpY2F0aW9uIGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjU3OjAyLjQ4MjE4MzUwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNzEwNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9yb3V0ZV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvcm91dGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTM4NzY9c3RhdGljIGludCBpcDZfcm91dGVfaW5mb19jcmVhdGVfbmgoc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5NTEtXFxubmV0L2lwdjYvcm91dGUuYzozOTUyOmludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXFxubmV0L2lwdjYvcm91dGUuYy0zOTUzLVxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz00NDEzPXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00NDM5LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDQ0MDpcXHRpcDZfcm91dGVfYWRkKFxcdTAwMjZjZmcsIEdGUF9BVE9NSUMsIE5VTEwpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNDQ0MS1cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NDQ3OD1zdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX2RmbHRfcm91dGVyKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNDUwMC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjQ1MDE6XFx0aWYgKCFpcDZfcm91dGVfYWRkKFxcdTAwMjZjZmcsIEdGUF9BVE9NSUMsIE5VTEwpKSB7XFxubmV0L2lwdjYvcm91dGUuYy00NTAyLVxcdFxcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NDU3OD1pbnQgaXB2Nl9yb3V0ZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBpbjZfcnRtc2cgKnJ0bXNnKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00NTk0LVxcdFxcdFxcdGNmZy5mY19tZXRyaWMgPSBJUDZfUlRfUFJJT19VU0VSO1xcbm5ldC9pcHY2L3JvdXRlLmM6NDU5NTpcXHRcXHRlcnIgPSBpcDZfcm91dGVfYWRkKFxcdTAwMjZjZmcsIEdGUF9LRVJORUwsIE5VTEwpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNDU5Ni1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NTY2MT1zdGF0aWMgaW50IGluZXQ2X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTY3Ni1cXHRlbHNlXFxubmV0L2lwdjYvcm91dGUuYzo1Njc3OlxcdFxcdHJldHVybiBpcDZfcm91dGVfYWRkKFxcdTAwMjZjZmcsIEdGUF9LRVJORUwsIGV4dGFjayk7XFxubmV0L2lwdjYvcm91dGUuYy01Njc4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTc6MDIuNzI0OTA3Mzc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzM0NDQ3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIGBpcDZfcm91dGVfYWRkYCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGFsc28gbGlrZSB3aGF0IEkgc2VlIHdpdGggYGluZXQ2X3J0bV9uZXdyb3V0ZWA7IHRoYXQncyByZWxldmFudCB0byB0aGUgdG9waWMgYXMgd2VsbC4gVG8gZnVydGhlciBteSBpbnZlc3RpZ2F0aW9uLCBJJ20gZ29pbmcgdG8gdGFrZSBhIHBlZWsgYXQgYGZpYl9jcmVhdGVfaW5mb2Agd2l0aGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBBaCwgeWVzLCBjb25maXJtZWQ6IGl0J3MgYWxzbyBub24tc3RhdGljLiBFeGNlbGxlbnQsIHRoaXMgaXMgc29saWQuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBpcF9maWJfbWV0cmljc19pbml0YCwgYGZpYl9jcmVhdGVfaW5mb2AsIGFuZCBgaXA2X3JvdXRlX2FkZGAuIFRoaXMgc2V0IGFwcGVhcnMgdG8gYmUgdGhlIHJpZ2h0IHdheSB0byBhY2hpZXZlIG15IGdvYWwuIEknbSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLCBzbyBJJ2xsIHNldCB0aGVzZSBmaW5kaW5ncyBhc2lkZSBmb3Igbm93IGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDA4LCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NzowNy41OTgzNTc1NjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2ZpYl9tZXRyaWNzX2luaXRcIixcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiaXA2X3JvdXRlX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbmFsIGNoZWNrIHRvIGBpcF9tZXRyaWNzX2NvbnZlcnRgIHRvIGVuc3VyZSB0aGF0IHRoZSBgUlRBWF9BRFZNU1NgIG1ldHJpYyBpcyBlaXRoZXIgMCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFRDUF9NSU5fTVNTYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIElQdjQgb3IgSVB2NiByb3V0ZXMgd2l0aCBtZXRyaWNzIHZpYSBuZXRsaW5rIChlLmcuLCBgUlRNX05FV1JPVVRFYCkuIFNpbmNlIGl0IG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfZmliX21ldHJpY3NfaW5pdFwiLFxuICAgIFwiZmliX2NyZWF0ZV9pbmZvXCIsXG4gICAgXCJpcDZfcm91dGVfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgdG8gYGlwX21ldHJpY3NfY29udmVydGAgdG8gZW5zdXJlIHRoYXQgdGhlIGBSVEFYX0FEVk1TU2AgbWV0cmljIGlzIGVpdGhlciAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgVENQX01JTl9NU1NgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gY29uZmlndXJpbmcgSVB2NCBvciBJUHY2IHJvdXRlcyB3aXRoIG1ldHJpY3MgdmlhIG5ldGxpbmsgKGUuZy4sIGBSVE1fTkVXUk9VVEVgKS4gU2luY2UgaXQgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[1] Phase: Succeeded StartedAt: 2026-07-29 00:57:19 +0000 UTC FinishedAt: 2026-07-29 00:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 00:57:19 +0000 UTC FinishedAt: 2026-07-29 00:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2] Phase: Succeeded StartedAt: 2026-07-29 00:57:19 +0000 UTC FinishedAt: 2026-07-29 05:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 00:57:19 +0000 UTC FinishedAt: 2026-07-29 05:04:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 00:57:19 +0000 UTC FinishedAt: 2026-07-29 00:57:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 00:57:19 +0000 UTC FinishedAt: 2026-07-29 00:57:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt7ksm/series-workflowt7ksm-convert-artifact-2294853380/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 00:57:53 +0000 UTC FinishedAt: 2026-07-29 01:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 00:57:53 +0000 UTC FinishedAt: 2026-07-29 01:29:36 +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:*941cc71e-df6d-455e-9631-b15ddabaeae3,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-workflowt7ksm/series-workflowt7ksm-convert-artifact-2294853380/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": "8a63e350-1ac9-4b07-94b7-b6d10518d09c", "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-workflowt7ksm/series-workflowt7ksm-build-action-2479649858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 00:57:53 +0000 UTC FinishedAt: 2026-07-29 01:29:26 +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:*941cc71e-df6d-455e-9631-b15ddabaeae3,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-workflowt7ksm/series-workflowt7ksm-convert-artifact-2294853380/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": "8a63e350-1ac9-4b07-94b7-b6d10518d09c", "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-workflowt7ksm/series-workflowt7ksm-build-action-2479649858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 01:29:36 +0000 UTC FinishedAt: 2026-07-29 01:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 01:29:36 +0000 UTC FinishedAt: 2026-07-29 01:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 01:29:36 +0000 UTC FinishedAt: 2026-07-29 01:29:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 01:29:36 +0000 UTC FinishedAt: 2026-07-29 01:29:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt7ksm/series-workflowt7ksm-convert-artifact-1145781891/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 01:29:57 +0000 UTC FinishedAt: 2026-07-29 01:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 01:29:57 +0000 UTC FinishedAt: 2026-07-29 01:31:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a63e350-1ac9-4b07-94b7-b6d10518d09c,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-workflowt7ksm/series-workflowt7ksm-build-action-2479649858/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-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 01:31:40 +0000 UTC FinishedAt: 2026-07-29 01:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 01:31:40 +0000 UTC FinishedAt: 2026-07-29 01:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 01:31:41 +0000 UTC FinishedAt: 2026-07-29 01:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 01:31:41 +0000 UTC FinishedAt: 2026-07-29 01:59:25 +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:*941cc71e-df6d-455e-9631-b15ddabaeae3,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-workflowt7ksm/series-workflowt7ksm-convert-artifact-1145781891/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": "49342abf-4c03-4389-befe-9b1fb7b22e6c", "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-workflowt7ksm/series-workflowt7ksm-build-action-1346104631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 01:31:41 +0000 UTC FinishedAt: 2026-07-29 01:59:15 +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:*941cc71e-df6d-455e-9631-b15ddabaeae3,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-workflowt7ksm/series-workflowt7ksm-convert-artifact-1145781891/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": "49342abf-4c03-4389-befe-9b1fb7b22e6c", "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-workflowt7ksm/series-workflowt7ksm-build-action-1346104631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 01:59:25 +0000 UTC FinishedAt: 2026-07-29 01:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 01:59:25 +0000 UTC FinishedAt: 2026-07-29 01:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 01:59:25 +0000 UTC FinishedAt: 2026-07-29 02:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 01:59:25 +0000 UTC FinishedAt: 2026-07-29 02:01:18 +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:*49342abf-4c03-4389-befe-9b1fb7b22e6c,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-workflowt7ksm/series-workflowt7ksm-build-action-1346104631/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-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 02:01:28 +0000 UTC FinishedAt: 2026-07-29 05:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 02:01:28 +0000 UTC FinishedAt: 2026-07-29 05:04:33 +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":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"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:*8a63e350-1ac9-4b07-94b7-b6d10518d09c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49342abf-4c03-4389-befe-9b1fb7b22e6c,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-workflowt7ksm/series-workflowt7ksm-build-action-2479649858/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-workflowt7ksm/series-workflowt7ksm-build-action-1346104631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 02:01:28 +0000 UTC FinishedAt: 2026-07-29 02:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 02:01:28 +0000 UTC FinishedAt: 2026-07-29 02:01:35 +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":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"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-workflowt7ksm/series-workflowt7ksm-convert-artifact-466704540/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 02:01:28 +0000 UTC FinishedAt: 2026-07-29 02:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 02:01:28 +0000 UTC FinishedAt: 2026-07-29 02:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 02:01:28 +0000 UTC FinishedAt: 2026-07-29 02:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 02:01:38 +0000 UTC FinishedAt: 2026-07-29 05:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7ksm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_fib_metrics_init","fib_create_info","ip6_route_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","series_id":"ccbd49d5-6c0c-4ae1-a94f-c176c7b876c3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 02:01:38 +0000 UTC FinishedAt: 2026-07-29 05:04:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a63e350-1ac9-4b07-94b7-b6d10518d09c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49342abf-4c03-4389-befe-9b1fb7b22e6c,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-workflowt7ksm/series-workflowt7ksm-build-action-2479649858/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-workflowt7ksm/series-workflowt7ksm-build-action-1346104631/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-workflowt7ksm/series-workflowt7ksm-convert-artifact-466704540/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,}