Name: series-workflowx2mq5 Phase: Succeeded StartedAt: 2026-08-15 07:32:11 +0000 UTC FinishedAt: 2026-08-15 11:28:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[0] Phase: Succeeded StartedAt: 2026-08-15 07:32:11 +0000 UTC FinishedAt: 2026-08-15 07:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 07:32:11 +0000 UTC FinishedAt: 2026-08-15 07:48:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6057f06ef7afa9893ed33603f7917fa39d237b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6057f06ef7afa9893ed33603f7917fa39d237b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "b554ea1d-3678-4d16-8a31-4ea8d325f1e0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_v4_syn_recv_sock", "tcp_v6_syn_recv_sock", "tcp_make_synack", "tcp_openreq_init_rwin", "tcp_connect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX29wZW5yZXFfaW5pdF9yd2luJiMzNDssCiAgICAmIzM0O3RjcF9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBjb25maWd1cmVkIE1UVSBvZiBhIHJvdXRlIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUywgaWdub3JpbmcgdGhlIElDTVAtbGVhcm5lZCBwYXRoIE1UVS4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHNpbXBsZSBhcml0aG1ldGljIGFuZCByZWFkaW5nIGluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGV4aXN0aW5nIG5ldHdvcmtpbmcgc3RydWN0dXJlcyAoZHN0X2VudHJ5LCBydDZfaW5mbywgZmliNl9pbmZvLCBpbmV0Nl9kZXYpLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIE1TUyBmb3IgSVB2NCBhbmQgSVB2NiByb3V0ZXMsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNpbmcgdGhlIGNvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIHRoZSByb3V0ZSBvciBkZXZpY2UuIFRoaXMgYWZmZWN0cyBjb3JlIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgbG9naWMgKFNZTi9TWU4tQUNLIHByb2Nlc3NpbmcpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBTWU4gaGFuZGxpbmcgZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzM1ZmM2NTE0MDExNmVkOGY4YjQyZmM0ZmM4MGQ5MmJmYjE0ZDdjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDA3OjQ3OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXAuaFxuQEAgLTUwNiw2ICYjNDM7NTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXG4mIzQzOyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXHUwMDNlcnRfcG10dSkuICBUaGUgYWR2ZXJ0aXNlZCBNU1MgYm91bmRzIHdoYXQgdGhlXG4mIzQzOyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yXG4mIzQzOyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZClcbiYjNDM7ICogZGlyZWN0aW9uLCB3aGljaCBtYXkgbm90IGFwcGx5IHRvIHRoZSBwZWVyLVx1MDAzZXVzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlXG4mIzQzOyAqIGZvciB0aGUgd2hvbGUgY29ubmVjdGlvbi4gIFNlZSBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmVcbiYjNDM7ICogdGNwX2FkdmVydGlzZV9tc3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbiYjNDM7XHRpZiAoIW10dSlcbiYjNDM7XHRcdG10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLVx1MDAzZW10dSk7XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xuJiM0MztcdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NSw2ICYjNDM7Mzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbiYjNDM7ICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXG4mIzQzOyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTXG4mIzQzOyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbiYjNDM7ICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXG4mIzQzOyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcbiYjNDM7XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBtdHUgPSAwO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0LyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWVcbiYjNDM7XHQgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSlcbiYjNDM7XHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcbiYjNDM7XHQgKiB2aWEgLVx1MDAzZWZyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LVx1MDAzZWZyb20pO1xuJiM0MztcdGlmIChmcm9tKVxuJiM0MztcdFx0bXR1ID0gZnJvbS1cdTAwM2VmaWI2X3BtdHU7XG4mIzQzO1x0aWYgKCFtdHUpIHtcbiYjNDM7XHRcdG10dSA9IElQVjZfTUlOX01UVTtcbiYjNDM7XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuJiM0MztcdFx0aWYgKGlkZXYpXG4mIzQzO1x0XHRcdG10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYubXR1NikpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbiYjNDM7XHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiBpcDZfbXR1X2Zyb21fZmliNihjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcbmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jXG5AQCAtMTMzNCw4ICYjNDM7MTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcbi1cdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXB2NF9tdHUoZHN0KSAtIGhlYWRlcl9zaXplLFxuLVx0XHRcdFx0ICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4mIzQzO1x0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KSAtIGhlYWRlcl9zaXplLFxuJiM0MztcdFx0ICAgICAgIG5ldC1cdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0zMjYxLDcgJiM0MzszMjYxLDcgQEAgdm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFxuIFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjJlZjkzMWI3N2ExY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdFxuQEAgLTAsMCAmIzQzOzEsNjcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7Ly9cbiYjNDM7Ly8gVGVzdCB0aGF0IElQdjQgYWR2ZXJ0aXNlZCBNU1MgaW4gU1lOLUFDSyBpcyBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWRcbiYjNDM7Ly8gaW50ZXJmYWNlIE1UVSAoMTUwMCAtXHUwMDNlIE1TUyAxNDYwKSwgbm90IHRoZSBJQ01QLWxlYXJuZWQgUGF0aCBNVFUuXG4mIzQzO1xuJiM0MzstLWlwX3ZlcnNpb249aXB2NFxuJiM0MztcbiYjNDM7YC4vZGVmYXVsdHMuc2hcbiYjNDM7ZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcbiYjNDM7YFxuJiM0MztcbiYjNDM7Ly9cbiYjNDM7Ly8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyMDAgLVx1MDAzZSBNU1MgMTE2MClcbiYjNDM7Ly9cbiYjNDM7ICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuJiM0MzsgICAmIzQzOzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4mIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwXG4mIzQzO1xuJiM0MzsgICAmIzQzOzAgXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcdTAwM2VcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4mIzQzOyAgJiM0MzsuMSBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDRcbiYjNDM7XG4mIzQzOy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50XG4mIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxuJiM0MztcbiYjNDM7Ly8gSUNNUCBGcmFnbWVudGF0aW9uIE5lZWRlZCBhcnJpdmVzIGluZGljYXRpbmcgbmV4dC1ob3AgTVRVIDEyMDBcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyBpY21wIHVucmVhY2hhYmxlIGZyYWdfbmVlZGVkIG10dSAxMjAwIFsxOjE0NjEoMTQ2MCldXG4mIzQzO1xuJiM0MzsvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjAwIChNU1MgPSAxMjAwIC0gNDAgPSAxMTYwKVxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIC4gMToxMTYxKDExNjApIGFjayAxXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgUC4gMTE2MToxNDYxKDMwMCkgYWNrIDFcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyBSIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMFxuJiM0MztcbiYjNDM7Ly8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lclxuJiM0MzsgICAmIzQzOzAgY2xvc2UoNCkgPSAwXG4mIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDBcbiYjNDM7XG4mIzQzOy8vXG4mIzQzOy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyXG4mIzQzOy8vXG4mIzQzOyAgICYjNDM7MCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4mIzQzOyAgICYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbiYjNDM7ICAgJiM0MzswIGxpc3RlbigzLCAxKSA9IDBcbiYjNDM7XG4mIzQzOyAgICYjNDM7MCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuJiM0MztcbiYjNDM7Ly8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMTYwXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgUy4gMDowKDApIGFjayAxIFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFx1MDAzZVxuJiM0MzsgICAmIzQzOzAgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbiYjNDM7ICAgJiM0MzswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XG4mIzQzO1xuJiM0MzsvLyBWZXJpZnk6IE91dGdvaW5nIHRyYW5zbWl0IE1TUyBpcyBzdGlsbCBjb25zdHJhaW5lZCBieSB0aGUgbGVhcm5lZCBQTVRVIDEyMDBcbiYjNDM7ICAgJiM0MzswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgLiAxOjExNjEoMTE2MCkgYWNrIDFcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSBQLiAxMTYxOjE0NjEoMzAwKSBhY2sgMVxuJiM0MzsgICAmIzQzOzAgXHUwMDNjIC4gMToxKDApIGFjayAxNDYxIHdpbiAyNTdcbiYjNDM7XG4mIzQzOy8vIENsZWFuIHVwXG4mIzQzOyAgICYjNDM7MCBjbG9zZSg0KSA9IDBcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSBGLiAxNDYxOjE0NjEoMCkgYWNrIDFcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyBGLiAxOjEoMCkgYWNrIDE0NjIgd2luIDI1N1xuJiM0MzsgICAmIzQzOzAgXHUwMDNlIC4gMTQ2MjoxNDYyKDApIGFjayAyXG4mIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3NjM4YjExYTgxNWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3RcbkBAIC0wLDAgJiM0MzsxLDY3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8vXG4mIzQzOy8vIFRlc3QgdGhhdCBJUHY2IGFkdmVydGlzZWQgTVNTIGluIFNZTi1BQ0sgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25maWd1cmVkXG4mIzQzOy8vIGludGVyZmFjZSBNVFUgKDE1MjAgLVx1MDAzZSBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUHY2LWxlYXJuZWQgUGF0aCBNVFUuXG4mIzQzO1xuJiM0MzstLWlwX3ZlcnNpb249aXB2NlxuJiM0MztcbiYjNDM7YC4vZGVmYXVsdHMuc2hcbiYjNDM7ZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcbiYjNDM7YFxuJiM0MztcbiYjNDM7Ly9cbiYjNDM7Ly8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyODAgLVx1MDAzZSBNU1MgMTIyMClcbiYjNDM7Ly9cbiYjNDM7ICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuJiM0MzsgICAmIzQzOzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4mIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwXG4mIzQzO1xuJiM0MzsgICAmIzQzOzAgXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcdTAwM2VcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4mIzQzOyAgJiM0MzsuMSBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDRcbiYjNDM7XG4mIzQzOy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50XG4mIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxuJiM0MztcbiYjNDM7Ly8gSUNNUHY2IFBhY2tldCBUb28gQmlnIGFycml2ZXMgaW5kaWNhdGluZyBuZXh0LWhvcCBNVFUgMTI4MFxuJiM0MzsgICAmIzQzOzAgXHUwMDNjIGljbXAgcGFja2V0X3Rvb19iaWcgbXR1IDEyODAgWzE6MTQ2MSgxNDYwKV1cbiYjNDM7XG4mIzQzOy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyODAgKE1TUyA9IDEyODAgLSA0MCAtIDIwID0gMTIyMClcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSAuIDE6MTIyMSgxMjIwKSBhY2sgMVxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxXG4mIzQzOyAgICYjNDM7MCBcdTAwM2MgUiAxOjEoMCkgYWNrIDE0NjEgd2luIDBcbiYjNDM7XG4mIzQzOy8vIENsb3NlIGNvbm5lY3Rpb24gMSBhbmQgbGlzdGVuZXJcbiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMFxuJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwXG4mIzQzO1xuJiM0MzsvL1xuJiM0MzsvLyBDb25uZWN0aW9uIDI6IE5ldyBjb25uZWN0aW9uIGZyb20gdGhlIHNhbWUgcGVlclxuJiM0MzsvL1xuJiM0MzsgICAmIzQzOzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuJiM0MzsgICAmIzQzOzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4mIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwXG4mIzQzO1xuJiM0MzsgICAmIzQzOzAgXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcdTAwM2VcbiYjNDM7XG4mIzQzOy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTIyMFxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIFMuIDA6MCgwKSBhY2sgMSBcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcdTAwM2VcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XG4mIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuJiM0MztcbiYjNDM7Ly8gVmVyaWZ5OiBPdXRnb2luZyB0cmFuc21pdCBNU1MgaXMgc3RpbGwgY29uc3RyYWluZWQgYnkgdGhlIGxlYXJuZWQgUE1UVSAxMjgwXG4mIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIC4gMToxMjIxKDEyMjApIGFjayAxXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgUC4gMTIyMToxNDYxKDI0MCkgYWNrIDFcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyAuIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMjU3XG4mIzQzO1xuJiM0MzsvLyBDbGVhbiB1cFxuJiM0MzsgICAmIzQzOzAgY2xvc2UoNCkgPSAwXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgRi4gMTQ2MToxNDYxKDApIGFjayAxXG4mIzQzOyAgICYjNDM7MCBcdTAwM2MgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTdcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSAuIDE0NjI6MTQ2MigwKSBhY2sgMlxuJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX29wZW5yZXFfaW5pdF9yd2luJiMzNDssCiAgICAmIzM0O3RjcF9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBNU1MgZm9yIElQdjQgYW5kIElQdjYgcm91dGVzLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzaW5nIHRoZSBjb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiB0aGUgcm91dGUgb3IgZGV2aWNlLiBUaGlzIGFmZmVjdHMgY29yZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljIChTWU4vU1lOLUFDSyBwcm9jZXNzaW5nKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgU1lOIGhhbmRsaW5nIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzNWZjNjUxNDAxMTZlZDhmOGI0MmZjNGZjODBkOTJiZmIxNGQ3YzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAwNzo0NzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDdmMmZlMWE4NDAxYjEuLmE4ZjU3YjRmNGFhMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNTA2LDYgJiM0Mzs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAlyZXR1cm4gcmVzOwogfQogCiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLgomIzQzOyAqCiYjNDM7ICogVW5saWtlIGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZQomIzQzOyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtJmd0O3J0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZQomIzQzOyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yCiYjNDM7ICogcm91dGUtY29uZmlndXJlZCBNVFUpLCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKQomIzQzOyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci0mZ3Q7dXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGUKJiM0MzsgKiBmb3IgdGhlIHdob2xlIGNvbm5lY3Rpb24uICBTZWUgUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlCiYjNDM7ICogdGNwX2FkdmVydGlzZV9tc3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG10dSwgcmVzOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpOwomIzQzOwlpZiAoIW10dSkKJiM0MzsJCW10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLSZndDttdHUpOwomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7CiYjNDM7CXJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCAwOWZmZTBmMTNjZTc1Li5hYzFhY2MwYjc0MzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzg1LDYgJiM0MzszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QKIAlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKIH0KIAomIzQzOy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy4KJiM0MzsgKgomIzQzOyAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aAomIzQzOyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZgomIzQzOyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTCiYjNDM7ICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZQomIzQzOyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZQomIzQzOyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCA9IGRzdF9ydDZfaW5mbyhkc3QpOwomIzQzOwljb25zdCBzdHJ1Y3QgZmliNl9pbmZvICpmcm9tOwomIzQzOwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwomIzQzOwl1bnNpZ25lZCBpbnQgbXR1ID0gMDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZQomIzQzOwkgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSkKJiM0MzsJICogZHN0LCB0aGUgY29uZmlndXJlZCBvbmUgb24gdGhlIHVuZGVybHlpbmcgcm91dGUuICBSZWFjaCB0aGUgbGF0dGVyCiYjNDM7CSAqIHZpYSAtJmd0O2Zyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS4KJiM0MzsJICovCiYjNDM7CWZyb20gPSByY3VfZGVyZWZlcmVuY2UocnQtJmd0O2Zyb20pOwomIzQzOwlpZiAoZnJvbSkKJiM0MzsJCW10dSA9IGZyb20tJmd0O2ZpYjZfcG10dTsKJiM0MzsJaWYgKCFtdHUpIHsKJiM0MzsJCW10dSA9IElQVjZfTUlOX01UVTsKJiM0MzsJCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpOwomIzQzOwkJaWYgKGlkZXYpCiYjNDM7CQkJbXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LSZndDtjbmYubXR1NikpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpOwomIzQzOwlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKJiM0Mzt9CiYjNDM7CiB1MzIgaXA2X210dV9mcm9tX2ZpYjYoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZmQ2ODhlMWY4NzlmNS4uNDZhYTk4YzkyMTgzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMzM0LDggJiM0MzsxMzM0LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIAogCXJjdV9yZWFkX2xvY2soKTsKIAluZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTsKLQlhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSwKLQkJCQkgICBuZXQtJmd0O2lwdjQuaXBfcnRfbWluX2Fkdm1zcyk7CiYjNDM7CWFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXBfZHN0X210dV9jb25maWd1cmVkKGRzdCkgLSBoZWFkZXJfc2l6ZSwKJiM0MzsJCSAgICAgICBuZXQtJmd0O2lwdjQuaXBfcnRfbWluX2Fkdm1zcyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDU5NjhjZTVhZDE1MDguLmUyMDU2YmQwZGYzYzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMzI2MSw3ICYjNDM7MzI2MSw3IEBAIHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIAogc3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewotCXVuc2lnbmVkIGludCBtdHUgPSBkc3Q2X210dShkc3QpOwomIzQzOwl1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpOwogCXN0cnVjdCBuZXQgKm5ldDsKIAogCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmYyZWY5MzFiNzdhMWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0CkBAIC0wLDAgJiM0MzsxLDY3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvLwomIzQzOy8vIFRlc3QgdGhhdCBJUHY0IGFkdmVydGlzZWQgTVNTIGluIFNZTi1BQ0sgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25maWd1cmVkCiYjNDM7Ly8gaW50ZXJmYWNlIE1UVSAoMTUwMCAtJmd0OyBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUC1sZWFybmVkIFBhdGggTVRVLgomIzQzOwomIzQzOy0taXBfdmVyc2lvbj1pcHY0CiYjNDM7CiYjNDM7YC4vZGVmYXVsdHMuc2gKJiM0MztldGh0b29sIC1LIHR1bjAgdHNvIG9mZgomIzQzO2AKJiM0MzsKJiM0MzsvLwomIzQzOy8vIENvbm5lY3Rpb24gMTogTGVhcm4gUE1UVSBleGNlcHRpb24gKE1UVSAxMjAwIC0mZ3Q7IE1TUyAxMTYwKQomIzQzOy8vCiYjNDM7ICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7ICAgJiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwCiYjNDM7CiYjNDM7ICAgJiM0MzswICZsdDsgUyAwOjAoMCkgd2luIDY1NTM1ICZsdDttc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAgJiM0MzswICZndDsgUy4gMDowKDApIGFjayAxICZsdDttc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAmIzQzOy4xICZsdDsgLiAxOjEoMCkgYWNrIDEgd2luIDI1NwomIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50CiYjNDM7ICAgJiM0MzswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwCiYjNDM7ICAgJiM0MzswICZndDsgUC4gMToxNDYxKDE0NjApIGFjayAxCiYjNDM7CiYjNDM7Ly8gSUNNUCBGcmFnbWVudGF0aW9uIE5lZWRlZCBhcnJpdmVzIGluZGljYXRpbmcgbmV4dC1ob3AgTVRVIDEyMDAKJiM0MzsgICAmIzQzOzAgJmx0OyBpY21wIHVucmVhY2hhYmxlIGZyYWdfbmVlZGVkIG10dSAxMjAwIFsxOjE0NjEoMTQ2MCldCiYjNDM7CiYjNDM7Ly8gTG9jYWwgaG9zdCByZXRyYW5zbWl0cyB1c2luZyB0aGUgbGVhcm5lZCBNVFUgMTIwMCAoTVNTID0gMTIwMCAtIDQwID0gMTE2MCkKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE6MTE2MSgxMTYwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDExNjE6MTQ2MSgzMDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgUiAxOjEoMCkgYWNrIDE0NjEgd2luIDAKJiM0MzsKJiM0MzsvLyBDbG9zZSBjb25uZWN0aW9uIDEgYW5kIGxpc3RlbmVyCiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMAomIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDAKJiM0MzsKJiM0MzsvLwomIzQzOy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyCiYjNDM7Ly8KJiM0MzsgICAmIzQzOzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7ICAgJiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwCiYjNDM7CiYjNDM7ICAgJiM0MzswICZsdDsgUyAwOjAoMCkgd2luIDY1NTM1ICZsdDttc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7CiYjNDM7Ly8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMTYwCiYjNDM7ICAgJiM0MzswICZndDsgUy4gMDowKDApIGFjayAxICZsdDttc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAgJiM0MzswICZsdDsgLiAxOjEoMCkgYWNrIDEgd2luIDI1NwomIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFZlcmlmeTogT3V0Z29pbmcgdHJhbnNtaXQgTVNTIGlzIHN0aWxsIGNvbnN0cmFpbmVkIGJ5IHRoZSBsZWFybmVkIFBNVFUgMTIwMAomIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MAomIzQzOyAgICYjNDM7MCAmZ3Q7IC4gMToxMTYxKDExNjApIGFjayAxCiYjNDM7ICAgJiM0MzswICZndDsgUC4gMTE2MToxNDYxKDMwMCkgYWNrIDEKJiM0MzsgICAmIzQzOzAgJmx0OyAuIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMjU3CiYjNDM7CiYjNDM7Ly8gQ2xlYW4gdXAKJiM0MzsgICAmIzQzOzAgY2xvc2UoNCkgPSAwCiYjNDM7ICAgJiM0MzswICZndDsgRi4gMTQ2MToxNDYxKDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE0NjI6MTQ2MigwKSBhY2sgMgomIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3NjM4YjExYTgxNWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0CkBAIC0wLDAgJiM0MzsxLDY3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvLwomIzQzOy8vIFRlc3QgdGhhdCBJUHY2IGFkdmVydGlzZWQgTVNTIGluIFNZTi1BQ0sgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25maWd1cmVkCiYjNDM7Ly8gaW50ZXJmYWNlIE1UVSAoMTUyMCAtJmd0OyBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUHY2LWxlYXJuZWQgUGF0aCBNVFUuCiYjNDM7CiYjNDM7LS1pcF92ZXJzaW9uPWlwdjYKJiM0MzsKJiM0MztgLi9kZWZhdWx0cy5zaAomIzQzO2V0aHRvb2wgLUsgdHVuMCB0c28gb2ZmCiYjNDM7YAomIzQzOwomIzQzOy8vCiYjNDM7Ly8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyODAgLSZndDsgTVNTIDEyMjApCiYjNDM7Ly8KJiM0MzsgICAgMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gMwomIzQzOyAgICYjNDM7MCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDAKJiM0MzsgICAmIzQzOzAgYmluZCgzLCAuLi4sIC4uLikgPSAwCiYjNDM7ICAgJiM0MzswIGxpc3RlbigzLCAxKSA9IDAKJiM0MzsKJiM0MzsgICAmIzQzOzAgJmx0OyBTIDA6MCgwKSB3aW4gNjU1MzUgJmx0O21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOCZndDsKJiM0MzsgICAmIzQzOzAgJmd0OyBTLiAwOjAoMCkgYWNrIDEgJmx0O21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOCZndDsKJiM0MzsgICYjNDM7LjEgJmx0OyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3CiYjNDM7ICAgJiM0MzswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0CiYjNDM7CiYjNDM7Ly8gU2VuZCBhIGZ1bGwgMTQ2MC1ieXRlIHNlZ21lbnQKJiM0MzsgICAmIzQzOzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjAKJiM0MzsgICAmIzQzOzAgJmd0OyBQLiAxOjE0NjEoMTQ2MCkgYWNrIDEKJiM0MzsKJiM0MzsvLyBJQ01QdjYgUGFja2V0IFRvbyBCaWcgYXJyaXZlcyBpbmRpY2F0aW5nIG5leHQtaG9wIE1UVSAxMjgwCiYjNDM7ICAgJiM0MzswICZsdDsgaWNtcCBwYWNrZXRfdG9vX2JpZyBtdHUgMTI4MCBbMToxNDYxKDE0NjApXQomIzQzOwomIzQzOy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyODAgKE1TUyA9IDEyODAgLSA0MCAtIDIwID0gMTIyMCkKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE6MTIyMSgxMjIwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgUiAxOjEoMCkgYWNrIDE0NjEgd2luIDAKJiM0MzsKJiM0MzsvLyBDbG9zZSBjb25uZWN0aW9uIDEgYW5kIGxpc3RlbmVyCiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMAomIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDAKJiM0MzsKJiM0MzsvLwomIzQzOy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyCiYjNDM7Ly8KJiM0MzsgICAmIzQzOzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7ICAgJiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwCiYjNDM7CiYjNDM7ICAgJiM0MzswICZsdDsgUyAwOjAoMCkgd2luIDY1NTM1ICZsdDttc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7CiYjNDM7Ly8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMjIwCiYjNDM7ICAgJiM0MzswICZndDsgUy4gMDowKDApIGFjayAxICZsdDttc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAgJiM0MzswICZsdDsgLiAxOjEoMCkgYWNrIDEgd2luIDI1NwomIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFZlcmlmeTogT3V0Z29pbmcgdHJhbnNtaXQgTVNTIGlzIHN0aWxsIGNvbnN0cmFpbmVkIGJ5IHRoZSBsZWFybmVkIFBNVFUgMTI4MAomIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MAomIzQzOyAgICYjNDM7MCAmZ3Q7IC4gMToxMjIxKDEyMjApIGFjayAxCiYjNDM7ICAgJiM0MzswICZndDsgUC4gMTIyMToxNDYxKDI0MCkgYWNrIDEKJiM0MzsgICAmIzQzOzAgJmx0OyAuIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMjU3CiYjNDM7CiYjNDM7Ly8gQ2xlYW4gdXAKJiM0MzsgICAmIzQzOzAgY2xvc2UoNCkgPSAwCiYjNDM7ICAgJiM0MzswICZndDsgRi4gMTQ2MToxNDYxKDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE0NjI6MTQ2MigwKSBhY2sgMgomIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBNU1MgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0d2Vha2luZyBob3cgd2UgaGFuZGxlIHRoZSBhZHZlcnRpc2VkIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGNhbGN1bGF0aW9ucywgc3BlY2lmaWNhbGx5IGZvciBJUHY0IGFuZCBJUHY2IHJvdXRlcy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAuIFRoZSBpbnRlbnRpb24gaXMgdG8gZmF2b3IgdGhlIGNvbmZpZ3VyZWQsIGFkbWluaXN0cmF0aXZlIE1UVSBvdmVyIHRoZSBkeW5hbWljYWxseSBsZWFybmVkIFBhdGggTVRVIChQTVRVKSwgd2hpY2ggaXMgYSBkZWZpbml0ZSBkZXBhcnR1cmUgZnJvbSB0aGUgY3VycmVudCBiZWhhdmlvci4gVGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgdGhlbiBwbHVnZ2VkIGludG8gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCwgd2hpY2ggaXMgd2hlcmUgdGhlIGNoYW5nZSB3aWxsIG1hbmlmZXN0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZXNlIGtleSBmdW5jdGlvbnMsIGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AsIGFyZSBjdXJyZW50bHkgdXNlZCBpbiB0aGUgY29kZWJhc2UuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IHNlZW1zIHRoYXQgYGlwdjRfZGVmYXVsdF9hZHZtc3NgIHJlc2lkZXMgd2l0aGluIGBuZXQvaXB2NC9yb3V0ZS5jYCwgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgIHJlc2lkZXMgaW4gYG5ldC9pcHY2L3JvdXRlLmNgLiBUaGlzIGlzIHdoYXQgSSB3b3VsZCBoYXZlIGV4cGVjdGVkLCBzbywgc28gZmFyLCBzbyBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjRfZGVmYXVsdF9hZHZtc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvcm91dGUuYz0xMjk9c3RydWN0IGRzdF9lbnRyeVx0KmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIGNvb2tpZSk7XG5uZXQvaXB2NC9yb3V0ZS5jOjEzMDpzdGF0aWMgdW5zaWduZWQgaW50XHQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xubmV0L2lwdjQvcm91dGUuYy0xMzEtSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE1ND1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3Rfb3BzID0ge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTU2LVx0LmNoZWNrID1cdFx0aXB2NF9kc3RfY2hlY2ssXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzpcdC5kZWZhdWx0X2Fkdm1zcyA9XHRpcHY0X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjQvcm91dGUuYy0xNTgtXHQubXR1ID1cdFx0XHRpcHY0X210dSxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTEzMjA9c3RhdGljIHZvaWQgc2V0X2NsYXNzX3RhZyhzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhZylcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMjgtXG5uZXQvaXB2NC9yb3V0ZS5jOjEzMjk6c3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbm5ldC9pcHY0L3JvdXRlLmMtMTMzMC17XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yODgxPXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9ibGFja2hvbGVfb3BzID0ge1xubmV0L2lwdjQvcm91dGUuYy0yODgyLVx0LmZhbWlseVx0XHRcdD0gQUZfSU5FVCxcbm5ldC9pcHY0L3JvdXRlLmM6Mjg4MzpcdC5kZWZhdWx0X2Fkdm1zc1x0XHQ9IGlwdjRfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODQtXHQubmVpZ2hfbG9va3VwXHRcdD0gaXB2NF9uZWlnaF9sb29rdXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RlZmF1bHRfYWR2bXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9ODY9c3RydWN0IGRzdF9lbnRyeVx0KmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcbm5ldC9pcHY2L3JvdXRlLmM6ODc6c3RhdGljIHVuc2lnbmVkIGludFx0IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xubmV0L2lwdjYvcm91dGUuYy04OC1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1My1cdC5jaGVja1x0XHRcdD1cdGlwNl9kc3RfY2hlY2ssXG5uZXQvaXB2Ni9yb3V0ZS5jOjI1NDpcdC5kZWZhdWx0X2Fkdm1zc1x0XHQ9XHRpcDZfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1NS1cdC5tdHVcdFx0XHQ9XHRpcDZfbXR1LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjY4PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2Ni9yb3V0ZS5jLTI2OS1cdC5mYW1pbHlcdFx0XHQ9IEFGX0lORVQ2LFxubmV0L2lwdjYvcm91dGUuYzoyNzA6XHQuZGVmYXVsdF9hZHZtc3NcdFx0PSBpcDZfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2Ni9yb3V0ZS5jLTI3MS1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcDZfZHN0X25laWdoX2xvb2t1cCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyNTY9dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzI2MS1cbm5ldC9pcHY2L3JvdXRlLmM6MzI2MjpzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgUm9sZSBvZiBgLmRlZmF1bHRfYWR2bXNzYCBpbiBgZHN0X29wc2AqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiBgLmRlZmF1bHRfYWR2bXNzYCB3aXRoaW4gdGhlIGBkc3Rfb3BzYCBjb250ZXh0LiBJIGtub3cgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYSBkZWZhdWx0LiBOb3csIEkgaGF2ZSB0byBwaW5wb2ludCAqd2hlcmUqIGl0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdC4gSXMgaXQgYmVpbmcgdXNlZCBhcyBhIGhhcmRjb2RlZCBkZWZhdWx0IHZhbHVlLCBvciBpcyBpdCBkeW5hbWljYWxseSBtb2RpZmllZCBiYXNlZCBvbiBvdGhlciBmYWN0b3JzPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIGhlbHBzIGNsYXJpZnkgaXRzIHJvbGUgd2l0aGluIGFueSByZWxldmFudCBhbGdvcml0aG1zIG9yIGNvbmZpZ3VyYXRpb25zLiBJdCBhbHNvIGhlbHBzIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBuZWVkIHRvIGJlIGFkanVzdGVkIG9yIGN1c3RvbWl6ZWQgYmFzZWQgb24gdGhlIHN5c3RlbSBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5kZWZhdWx0X2Fkdm1zcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yb3V0ZS5jPTE1ND1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3Rfb3BzID0ge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTU2LVx0LmNoZWNrID1cdFx0aXB2NF9kc3RfY2hlY2ssXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzpcdC5kZWZhdWx0X2Fkdm1zcyA9XHRpcHY0X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjQvcm91dGUuYy0xNTgtXHQubXR1ID1cdFx0XHRpcHY0X210dSxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI4ODE9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVULFxubmV0L2lwdjQvcm91dGUuYzoyODgzOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXB2NF9kZWZhdWx0X2Fkdm1zcyxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcHY0X25laWdoX2xvb2t1cCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI0OT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9vcHNfdGVtcGxhdGUgPSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYy0yNTMtXHQuY2hlY2tcdFx0XHQ9XHRpcDZfZHN0X2NoZWNrLFxubmV0L2lwdjYvcm91dGUuYzoyNTQ6XHQuZGVmYXVsdF9hZHZtc3NcdFx0PVx0aXA2X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjYvcm91dGUuYy0yNTUtXHQubXR1XHRcdFx0PVx0aXA2X210dSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xubmV0L2lwdjYvcm91dGUuYy0yNjktXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVUNixcbm5ldC9pcHY2L3JvdXRlLmM6MjcwOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXA2X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjYvcm91dGUuYy0yNzEtXHQubmVpZ2hfbG9va3VwXHRcdD0gaXA2X2RzdF9uZWlnaF9sb29rdXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU2VhcmNoIFRlcm0qKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgcHJvY2Vzc2luZyBqdXN0IGZsYWdnZWQgc29tZXRoaW5nLiBJIHdhcyBvbiBhIHRyYWNrLCBidXQgSSBuZWVkIHRvIHBpdm90IHNsaWdodGx5LiBUaGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzIGxlYWRpbmcgbWUgaW4gYSBkaXJlY3Rpb24sIGJ1dCBub3cgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gcmVmaW5lIG15IHNlYXJjaCBjcml0ZXJpYS4gSW5zdGVhZCBvZiBhIGdlbmVyYWwgYXBwcm9hY2gsIGl0IGZlZWxzIGxpa2UgSSBzaG91bGQgYmUgbW9yZSBwcmVjaXNlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgc3BlY2lmaWNhbGx5IGFtIEkgbG9va2luZyBmb3I/IFRoZSBtZW50aW9uIG9mICYjMzQ7ZGVmYXVsdF9hZHZtc3MmIzM0OyBmZWVscyBpbXBvcnRhbnQgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBhbG1vc3QgbGlrZSBhIGtleSB0ZXJtLiBTbywgSSBuZWVkIHRvIHN0YXJ0IHVzaW5nIHRvb2xzIG9uIG15IGV4aXN0aW5nIGRhdGFzZXQgYW5kIHN0YXJ0IGxvb2tpbmcgd2l0aCBtb3JlIHByZWNpc2lvbi4gSSBuZWVkIHRvIHJlYWNoIGZvciBhIGBncmVwYCBjb21tYW5kLCB1c2luZyBgLSZndDtkZWZhdWx0X2Fkdm1zc2AgYXMgdGhlIGV4YWN0IHNlYXJjaCB0ZXJtLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBob25lIGluIG9uIHRoZSBwYXJ0aWN1bGFyIGluc3RhbmNlcyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gaXNvbGF0ZSB0aG9zZSBzcGVjaWZpYyBvY2N1cnJlbmNlcyBpbiB0aGUgY29kZSBvciBkYXRhIEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgd2l0aC4gSG9wZWZ1bGx5IHRoaXMgd2lsbCByZXZlYWwgdGhlIGluZm9ybWF0aW9uIEkgd2FzIGhvcGluZyB0byBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2VkZWZhdWx0X2Fkdm1zcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9kc3QuaD0xODU9ZHN0X21ldHJpY19hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbmluY2x1ZGUvbmV0L2RzdC5oLTE4OS1cdGlmICghYWR2bXNzKVxuaW5jbHVkZS9uZXQvZHN0Lmg6MTkwOlx0XHRhZHZtc3MgPSBkc3QtXHUwMDNlb3BzLVx1MDAzZWRlZmF1bHRfYWR2bXNzKGRzdCk7XG5pbmNsdWRlL25ldC9kc3QuaC0xOTEtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MTExPWludCB4ZnJtX3BvbGljeV9yZWdpc3Rlcl9hZmluZm8oY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvLCBpbnQgZmFtaWx5KVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEyNi1cdFx0XHRkc3Rfb3BzLVx1MDAzZWNoZWNrID0geGZybV9kc3RfY2hlY2s7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjc6XHRcdGlmIChsaWtlbHkoZHN0X29wcy1cdTAwM2VkZWZhdWx0X2Fkdm1zcyA9PSBOVUxMKSlcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDEyODpcdFx0XHRkc3Rfb3BzLVx1MDAzZWRlZmF1bHRfYWR2bXNzID0geGZybV9kZWZhdWx0X2Fkdm1zcztcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEyOS1cdFx0aWYgKGxpa2VseShkc3Rfb3BzLVx1MDAzZW10dSA9PSBOVUxMKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkZpbmRpbmcgdGhlIFVzYWdlIG9mIGRzdF9tZXRyaWNfYWR2bXNzKioKCk9rYXksIHNvIEkgc2VlIGBkc3RfbWV0cmljX2Fkdm1zc2AgbWVudGlvbmVkLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaGUgdGV4dCBpbmRpY2F0ZXMgdGhhdCBJIHNob3VsZCBmb2N1cyBvbiB3aGVyZSBgZHN0X21ldHJpY19hZHZtc3NgIGlzICp1c2VkKi4gIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbi4gVGltZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUgdG8gaWRlbnRpZnkgdGhvc2UgbG9jYXRpb25zIGFuZCBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHJlbGF0aW9uc2hpcHMuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzdF9tZXRyaWNfYWR2bXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jPTEwOTg9dW5zaWduZWQgaW50IGN4Z2JpX3NvY2tfc2VsZWN0X21zcyhzdHJ1Y3QgY3hnYmlfc29jayAqY3NrLCB1bnNpZ25lZCBpbnQgcG10dSlcbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy0xMTAyLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6MTEwMzpcdGNzay1cdTAwM2VhZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpO1xuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMtMTEwNC1cbi0tXG5pbmNsdWRlL25ldC9kc3QuaD0xODQ9c3RhdGljIGlubGluZSB1MzJcbmluY2x1ZGUvbmV0L2RzdC5oOjE4NTpkc3RfbWV0cmljX2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG5pbmNsdWRlL25ldC9kc3QuaC0xODYte1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY3ND1zdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTczOC1cdHRjcF9zeW5jX21zcyhuZXdzaywgZHN0NF9tdHUoZHN0KSk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE3Mzk6XHRuZXd0cC1cdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRjcF9zayhzayksIGRzdF9tZXRyaWNfYWR2bXNzKGRzdCkpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0xNzQwLVxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MzE9dm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00NDItXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDQzOlx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDQ0LVx0d2luZG93X2NsYW1wID0gUkVBRF9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTEzOT1zdGF0aWMgX191MTYgdGNwX2FkdmVydGlzZV9tc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDUtXHRpZiAoZHN0KSB7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTQ2Olx0XHR1bnNpZ25lZCBpbnQgbWV0cmljID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDctXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5MzE9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3NC1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTc1Olx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3Ni1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEzMC1cdFx0V1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIGRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVykpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMzE6XHR0cC1cdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRwLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTMyLVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0ODktXHR0Y3Bfc3luY19tc3MobmV3c2ssIGRzdDZfbXR1KGRzdCkpO1xubmV0L2lwdjYvdGNwX2lwdjYuYzoxNDkwOlx0bmV3dHAtXHUwMDNlYWR2bXNzID0gdGNwX21zc19jbGFtcCh0Y3Bfc2soc2spLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQ5MS1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQwNjI9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2My17XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQwNjQ6XHRyZXR1cm4gZHN0X21ldHJpY19hZHZtc3MoeGZybV9kc3RfcGF0aChkc3QpKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAzNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNU1MgQWR2ZXJ0aXNlbWVudCBMb2dpYyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyBob3cgdGhlIGRlZmF1bHQgTVNTIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBmb3IgSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IHVzaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgaW5zdGVhZCBvZiBzb21ldGhpbmcgZWxzZSAocHJlc3VtYWJseSwgdGhlIG9sZCBsb2dpYykuIFRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBUQ1AgTVNTIGFkdmVydGlzZW1lbnQ6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBgdGNwX2FkdmVydGlzZV9tc3NgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF9jb25uZWN0X2luaXRgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gIERlZmluaXRlbHkgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCBhcmUgc3RhdGljLCBidXQgdGhlIGZ1bmN0aW9ucyB0aGV5IHVzZSBhcmUgc3RhdGljIGlubGluZS4gVGhlIHJlYWwgY2FsbCBzaXRlIGZvciBkc3RfbWV0cmljX2Fkdm1zcyBpcyBjYWxsZWQgZnJvbSB0aGUgZnVuY3Rpb25zIEkgbGlzdGVkIGFib3ZlLiAKCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gdG8gZmluZCB0aGUgYmVzdCBlbnRyeSBwb2ludHMuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgd291bGQgZ2l2ZSBtZSB0aGUgYmVzdCBiYW5nIGZvciB0aGUgYnVjayBpbiB0ZXJtcyBvZiBjb3ZlcmFnZS4gSSYjMzk7bSBkaXNjYXJkaW5nIGB0Y3BfYWR2ZXJ0aXNlX21zc2AgYW5kIGB0Y3BfY29ubmVjdF9pbml0YCByaWdodCBhd2F5IGJlY2F1c2UgdGhleSYjMzk7cmUgc3RhdGljIGFuZCBsaWtlbHkgdG8gYmUgbGVzcyBpbnRlcmVzdGluZyBhcyBkaXJlY3QgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGF0IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBhbmQgYHRjcF9tYWtlX3N5bmFja2AgYXJlbiYjMzk7dCBzdGF0aWMuIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYXBwZWFyIHRvIGJlIHN0cm9uZyBjYW5kaWRhdGVzIGFzIGluaXRpYWwgZm9jdXMgcG9pbnRzLiBUaGV5IHNlZW0gbGlrZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgdGhlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF92NF9zeW5fcmVjdl9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU2MD12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MTpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvdGNwLmgtNTYyLVx0XHRcdFx0ICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjU1PWludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzMtICovXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2NzQ6c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY3NS1cdFx0XHRcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM1OD1jb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzYyLVx0LmNvbm5fcmVxdWVzdFx0ICAgPSB0Y3BfdjRfY29ubl9yZXF1ZXN0LFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzYzOlx0LnN5bl9yZWN2X3NvY2tcdCAgID0gdGNwX3Y0X3N5bl9yZWN2X3NvY2ssXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNjQtXHQubmV0X2hlYWRlcl9sZW5cdCAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzM3PXN0YXRpYyB2b2lkIHRjcF92Nl9yZXN0b3JlX2NiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzQ2LVxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzQ3Oi8qIENhbGxlZCBmcm9tIHRjcF92NF9zeW5fcmVjdl9zb2NrKCkgZm9yIHY2X21hcHBlZCBjaGlsZHJlbi4gKi9cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM0OC1zdGF0aWMgdm9pZCB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzcyLVxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzczOlx0LyogdGNwX3Y0X3N5bl9yZWN2X3NvY2soKSBoYXMgaW5pdGlhbGl6ZWQgbmV3aW5ldC1cdTAwM2VtY197aW5kZXgsdHRsfSAqL1xubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzc0LVx0bmV3bnAtXHUwMDNlbWNhc3Rfb2lmICAgPSBuZXdpbmV0LVx1MDAzZW1jX2luZGV4O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0MDQtXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTQwNTpcdFx0cmV0dXJuIHRjcF92NF9zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDA2LVx0XHRcdFx0XHQgICAgcmVxX3VuaGFzaCwgb3duX3JlcSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Y2X3N5bl9yZWN2X3NvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc3luY29va2llcy5jPTE3ND1zdHJ1Y3Qgc29jayAqY29va2llX3Y2X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjI5LVx0ICogV2UgbmVlZCB0byBsb29rdXAgdGhlIGRzdF9lbnRyeSB0byBnZXQgdGhlIGNvcnJlY3Qgd2luZG93IHNpemUuXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MjMwOlx0ICogVGhpcyBpcyB0YWtlbiBmcm9tIHRjcF92Nl9zeW5fcmVjdl9zb2NrLiAgU29tZWJvZHkgcGxlYXNlIGVubGlnaHRlblxubmV0L2lwdjYvc3luY29va2llcy5jLTIzMS1cdCAqIG1lIGlmIHRoZXJlIGlzIGEgcHJlZmVycmVkIHdheS5cbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTEzNDg9c3RhdGljIHZvaWQgdGNwX3Y2X21hcHBlZF9jaGlsZF9pbml0KHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM4MS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTM4MjpzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM4My1cdFx0XHRcdFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIwMDc9Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljID0ge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjAxMS1cdC5jb25uX3JlcXVlc3RcdCAgID0gdGNwX3Y2X2Nvbm5fcmVxdWVzdCxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjAxMjpcdC5zeW5fcmVjdl9zb2NrXHQgICA9IHRjcF92Nl9zeW5fcmVjdl9zb2NrLFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDEzLVx0Lm5ldF9oZWFkZXJfbGVuXHQgICA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkciksXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfbWFwcGVkID0ge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjA0Mi1cdC5jb25uX3JlcXVlc3RcdCAgID0gdGNwX3Y2X2Nvbm5fcmVxdWVzdCxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjA0MzpcdC5zeW5fcmVjdl9zb2NrXHQgICA9IHRjcF92Nl9zeW5fcmVjdl9zb2NrLFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDQ0LVx0Lm5ldF9oZWFkZXJfbGVuXHQgICA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugc3ltYm9scywga2VlcGluZyBpbiBtaW5kIG15IG93biBleHBlcnQgdW5kZXJzdGFuZGluZzoKCioqVGhpbmtpbmcgVGhyb3VnaCBUQ1AgU1lOIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBwb2ludHMgaW4gdGhlIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIGNvbmZpcm1lZDogYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBhcmUgZXhhY3RseSB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZGlzc2VjdCBmb3IgYSBkZWVwIGRpdmUgaW50byBJUHY0IGFuZCBJUHY2IFNZTiBoYW5kbGluZyByZXNwZWN0aXZlbHkuIFRoZXkgcmVwcmVzZW50IHRoZSBjb3JlIGxvZ2ljIGZvciBhIGxpc3RlbmluZyBzb2NrZXQgcmVjZWl2aW5nIGEgU1lOIHBhY2tldC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBzb2NrZXQgc3RhdGUgdHJhbnNpdGlvbnMsIHF1ZXVlaW5nLCBhbmQgYW55IHNwZWNpZmljIElQdjQvSVB2Ni1yZWxhdGVkIGRpZmZlcmVuY2VzLgoKTm93LCBJIG5lZWQgdG8gZXhwYW5kIG15IHNjb3BlIHNsaWdodGx5LiBXaGF0IGFib3V0IGB0Y3BfbWFrZV9zeW5hY2tgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSXQgcHJvYmFibHkgaGFzIGEgY3JpdGljYWwgcGFydCB0byBwbGF5IHRvbywgcG9zc2libHkgYnVpbGRpbmcgdGhlIFNZTi1BQ0sgcmVzcG9uc2UgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVjZWl2ZWQgU1lOLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgaXQgYnVpbGRzLCBhbmQgaG93IGl0IGRpZmZlcnMgaW4gSVB2NCBhbmQgSVB2NiBjb250ZXh0cy4gSXMgaXQgYSBjZW50cmFsIGZ1bmN0aW9uLCBvciBhcmUgdGhlcmUgc2VwYXJhdGUgSVB2NCBhbmQgSVB2NiB2YXJpYW50cz8gSXQmIzM5O3MgYWxsIGFib3V0IGhvdyB0aGUgU1lOLUFDSyBpcyBjcmFmdGVkIGFuZCBzZW50IGJhY2sgdG8gdGhlIGNsaWVudC4gQW5kLCBjcnVjaWFsbHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHNvY2tldCBkYXRhIHN0cnVjdHVyZXMgYXQgdGhpcyBzdGFnZT8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX21ha2Vfc3luYWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU3MT1lbnVtIHRjcF9zeW5hY2tfdHlwZSB7XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtNTc2LX07XG5pbmNsdWRlL25ldC90Y3AuaDo1Nzc6c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbmluY2x1ZGUvbmV0L3RjcC5oLTU3OC1cdFx0XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTc4LVxubmV0L2lwdjQvdGNwX2lwdjQuYzoxMTc5Olx0c2tiID0gdGNwX21ha2Vfc3luYWNrKHNrLCBkc3QsIHJlcSwgZm9jLCBzeW5hY2tfdHlwZSwgc3luX3NrYik7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExODAtXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM4ODc9aW50IHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MjEtLyoqXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkyMjogKiB0Y3BfbWFrZV9zeW5hY2sgLSBBbGxvY2F0ZSBvbmUgc2tiIGFuZCBidWlsZCBhIFNZTkFDSyBwYWNrZXQuXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkyMy0gKiBAc2s6IGxpc3RlbmVyIHNvY2tldFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTMwLSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjM5MzE6c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTMyLVx0XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9NTUwPXN0YXRpYyBpbnQgdGNwX3Y2X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtNTY5LVxubmV0L2lwdjYvdGNwX2lwdjYuYzo1NzA6XHRza2IgPSB0Y3BfbWFrZV9zeW5hY2soc2ssIGRzdCwgcmVxLCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNTcxLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmM9MjIxPXN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmMtMjQ5LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmM6MjUwOlx0ICogWFhYOiBUaGUgdGVzdCBkb2VzbiYjMzk7dCBpbmNyZWFzZSBhbnkgY291bnRlcnMsIHNlZSB0Y3BfbWFrZV9zeW5hY2soKS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmMtMjUxLVx0ICogUG90ZW50aWFsbHksIGl0IGNhbiBiZSBzcGVlZCB1cCBieSBzZXR0aW5nIHNrX3BhaXIgPSAtRVRJTUVET1VUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTY0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVENQIFNZTkFDSyBHZW5lcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGNwX21ha2Vfc3luYWNrYC4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIFNZTi1BQ0sgcGFja2V0cywgYW5kIGl0JiMzOTtzIHVzZWQgZGlyZWN0bHkgYnkgYm90aCB0aGUgSVB2NCBhbmQgSVB2NiB2YXJpYW50cywgYHRjcF92NF9zZW5kX3N5bmFja2AgYW5kIGB0Y3BfdjZfc2VuZF9zeW5hY2tgLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgZm9jdXMgc3ltYm9sIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBTWU4tQUNLIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50LCB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4KCk5vdywgYSByZWxhdGVkIHRob3VnaHQgcG9wcGVkIHVwOiBXaGF0JiMzOTtzIHRoZSByb2xlIG9mIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gIGluIHRoaXMgd2hvbGUgZGFuY2U/IEl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGludm9sdmVkIGluIGluaXRpYWxpemluZyB0aGUgcmVjZWl2ZSB3aW5kb3cgd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIG9wZW4gcmVxdWVzdC4gSXMgaXQgYSBwcmUtcmVxdWlzaXRlIGZvciBgdGNwX21ha2Vfc3luYWNrYCwgYW4gYWRqYWNlbnQgZnVuY3Rpb24sIG9yIGlzIGl0IHdvcmtpbmcgaW4gcGFyYWxsZWwgdG8gaW5pdGlhbGl6ZSBhbm90aGVyIGFzcGVjdCBvZiB0aGUgY29ubmVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCB0aGF0IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9vcGVucmVxX2luaXRfcndpbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0xODIzPXN0YXRpYyBpbmxpbmUgYm9vbCB0Y3BfZXBvbGxpbl9yZWFkeShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCB0YXJnZXQpXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMTgzNC1cbmluY2x1ZGUvbmV0L3RjcC5oOjE4MzU6ZXh0ZXJuIHZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzYtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NTktXHR0Y3BfcnNrKHJlcSktXHUwMDNlc3luX3RvcyA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VpcF9kc2ZpZWxkO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc2MDpcdHRjcF9vcGVucmVxX2luaXRfcndpbihyZXEsIHNrLCBkc3QpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc2MS1cdHNrX3J4X3F1ZXVlX3NldChyZXFfdG9fc2socmVxKSwgc2tiKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NDEyPXZvaWQgdGNwX3R3c2tfcHVyZ2Uoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdClcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMwLSAqL1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQzMTp2b2lkIHRjcF9vcGVucmVxX2luaXRfcndpbihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMyLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gIGlzIGp1bXBpbmcgb3V0IGF0IG1lIGFzIGEgcG90ZW50aWFsIGtleSBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0JiMzOTtzIGEgc29saWQgZm9jdXMgc3ltYm9sLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHdvcnRoIGEgZGVlcCBkaXZlLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgZmxvdywgbGV0JiMzOTtzIGFsc28gcHVsbCBpbiBgdGNwX2Nvbm5lY3RfaW5pdGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBhIFRDUCBjb25uZWN0aW9uIHN0YXJ0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jb25uZWN0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0xNj1zdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgICAgICAgICBpY3NrX2tlZXBhbGl2ZV90aW1lclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNzp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0byAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3Bfc2NoZWR1bGVfbG8uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMTgtdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19ydG9fbWluXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yMD11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja19tYXhcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjE6dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wbXR1X2Nvb2tpZSAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3N5bmNfbXNzLHRjcF9jdXJyZW50X21zcyx0Y3BfLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIyOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgICAgICAgICAgIGljc2tfY2Ffb3BzICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jd25kX3ZhbGlkYXRlLHRjcF90c29fc2Vncyx0Yy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMzpzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICBpY3NrX2FmX29wcyAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZmluaXNoX2Nvbm5lY3QsdGNwX3NlbmRfc3luX2QuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMjQtc3RydWN0IHRjcF91bHBfb3BzKiAgICAgICAgICAgICAgICAgaWNza191bHBfb3BzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yOD11ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX3NldHNvY2tvcHRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6Mjk6dTg6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9kc3RfbG9ja2VkICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2NhX2RzdF9pbml0LHRjcF9jb25uZWN0X2luaXQsLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMwOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcmV0cmFuc21pdHMgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jb25uZWN0X2luaXQsdGNwX2Nvbm5lY3RcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMzEtdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wZW5kaW5nICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcix0Y3BfY29uLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMyOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfYmFja29mZiAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF93cml0ZV9xdWV1ZV9wdXJnZSx0Y3BfY29ubmVjdC4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMy11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3N5bl9yZXRyaWVzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD00MT1zdHJ1Y3QgaWNza19hY2tfdTMyICAgICAgICAgICAgICAgICBscmN2dGltZSAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZmluaXNoX2Nvbm5lY3QsdGNwX2Nvbm5lY3QsdGMuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDI6c3RydWN0IGljc2tfYWNrX3UxNiAgICAgICAgICAgICAgICAgcmN2X21zcyAgICAgICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgX190Y3Bfc2VsZWN0X3dpbmRvdyxfX3RjcF9jbGVhbnVwLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQzOnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9oaWdoICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NDpzdHJ1Y3QgaWNza19tdHVwX2ludCAgICAgICAgICAgICAgICBzZWFyY2hfbG93ICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1X3Byb2JlLHRjcF9tdHVfY2hlY2tfcmVwcm8uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDU6c3RydWN0IGljc2tfbXR1cF91MzI6MzEgICAgICAgICAgICAgcHJvYmVfc2l6ZSAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LF9fLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ2OnN0cnVjdCBpY3NrX210dXBfdTMyOjEgICAgICAgICAgICAgIGVuYWJsZWQgICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NzpzdHJ1Y3QgaWNza19tdHVwX3UzMiAgICAgICAgICAgICAgICBwcm9iZV90aW1lc3RhbXAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9jb25uZWN0X2luaXQsdGMuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtNDgtdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wcm9iZXNfdHN0YW1wXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQwODE9c3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTAwLS8qIERvIGFsbCBjb25uZWN0IHNvY2tldCBzZXR1cHMgdGhhdCBjYW4gYmUgZG9uZSBBRiBpbmRlcGVuZGVudC4gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTAxOnN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDIte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00Mjk4PWludCB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNTktXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDM2MDpcdHRjcF9jb25uZWN0X2luaXQoc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTAyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBUQ1AgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGB0Y3BfY29ubmVjdF9pbml0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLi4uIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIE1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCwgY2FsbGVkIGJ5IGB0Y3BfY29ubmVjdGAuIFJpZ2h0LCBhbmQgYHRjcF9jb25uZWN0YCBpcyAqZXhwb3J0ZWQqLiBTbyBgdGNwX2Nvbm5lY3RgIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbiBmb3IgaW5pdGlhdGluZyBhIFRDUCBjb25uZWN0aW9uLCBhbmQgYHRjcF9jb25uZWN0X2luaXRgIGlzIGl0cyBpbnRlcm5hbCBoZWxwZXIuIFRoYXQgY2xhcmlmaWVzIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgY29ubmVjdGlvbiBpbml0aWF0aW9uIHByb2Nlc3MuIE5vdywgd2hhdCYjMzk7cyBuZXh0IGluIHRoZSBjaGFpbj8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGB0Y3BfYWR2ZXJ0aXNlX21zc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgTWF4aW11bSBTZWdtZW50IFNpemUgaXMgaGFuZGxlZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9hZHZlcnRpc2VfbXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01MTYtICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxuaW5jbHVkZS9uZXQvaXAuaDo1MTc6ICogdGNwX2FkdmVydGlzZV9tc3MoKS5cbmluY2x1ZGUvbmV0L2lwLmgtNTE4LSAqL1xuLS1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTM2NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTQtICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozOTU6ICogUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlIHRjcF9hZHZlcnRpc2VfbXNzKCkuXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTYtICovXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTExMz1zdGF0aWMgaW5saW5lIF9fdTMyIHRjcF9hY2NlcHRhYmxlX3NlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEzOC0gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMzk6c3RhdGljIF9fdTE2IHRjcF9hZHZlcnRpc2VfbXNzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDAte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05NTk9c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05OTEtXHQgKiBnb2luZyBvdXQuICAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjk5MjpcdG9wdHMtXHUwMDNlbXNzID0gdGNwX2FkdmVydGlzZV9tc3Moc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTk5My1cdHJlbWFpbmluZyAtPSBUQ1BPTEVOX01TU19BTElHTkVEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHRjcF9hZHZlcnRpc2VfbXNzYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgdGNwX2FkdmVydGlzZV9tc3NgIGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgY2FsbGVkIGJ5IGB0Y3Bfc3luX29wdGlvbnNgLiBBbmQgYHRjcF9zeW5fb3B0aW9uc2AgaXMgYWxzbyBzdGF0aWMsIHVzZWQgYnkgYm90aCBgdGNwX2Nvbm5lY3RgIGFuZCBgdGNwX21ha2Vfc3luYWNrYC4gIFNvLCBpZiBJJiMzOTttIGdvaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZTogYHRjcF92NF9zeW5fcmVjdl9zb2NrYCwgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCwgYHRjcF9tYWtlX3N5bmFja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBhbmQsIG9mIGNvdXJzZSwgYHRjcF9jb25uZWN0YC4KCk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb25zIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgaGVyZS4gSSBjYW4gc2VlIHRoZSBjb3JlIGNvZGUgaXMgaW4gYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AuICBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBleHBlY3RlZCwgc28gbm90aGluZyBzcGVjaWFsIHNvIGZhci4gQW55dGhpbmcgZWxzZT8gQWgsIHRoZSBwYXRjaCBhZGRzIHRlc3RzLiBUaGVzZSBhcmUgYHBhY2tldGRyaWxsYCB0ZXN0czogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3RgIGFuZCBgdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0YC4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyB3ZSBoYXZlIHRlc3QgY292ZXJhZ2UuIEFuZCBpdCBhcHBlYXJzIHRoZSBwYXRjaCBtb2RpZmllcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLgoKR2l2ZW4gdGhlIGZpbGVzIGludm9sdmVkIGFuZCB0aGUgbGFjayBvZiB1bnVzdWFsIGBDT05GSUdfYCByZXF1aXJlbWVudHMsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBjb3JlIElQdjQvSVB2NiByb3V0aW5nIGxvZ2ljLiBBbmQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgaGVhZGVyIGZpbGUgYGluY2x1ZGUvbmV0L2lwLmhgIGZvciBgaXBfZHN0X210dV9jb25maWd1cmVkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfZHN0X210dV9jb25maWd1cmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01MTgtICovXG5pbmNsdWRlL25ldC9pcC5oOjUxOTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuaW5jbHVkZS9uZXQvaXAuaC01MjAte1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTMyOT1zdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTMzNi1cdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xubmV0L2lwdjQvcm91dGUuYzoxMzM3Olx0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KSAtIGhlYWRlcl9zaXplLFxubmV0L2lwdjQvcm91dGUuYy0xMzM4LVx0XHQgICAgICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIElQdjYgUm91dGluZyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gSVB2NiByb3V0aW5nIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgLiBNeSBpbW1lZGlhdGUgbWVudGFsIGZsYWcgaXMgb24gdGhlIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJvbGUgaW4gdGhlIGxhcmdlciBwaWN0dXJlLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBmbGFnIGlzICp1c2VkKiwgbm90IGp1c3QgZGVmaW5lZC4gSXMgdGhpcyBhIGxvY2FsIGZsYWcgd2l0aGluIGEgZGVzdGluYXRpb24gZW50cnksIGEgZ2xvYmFsIGluZGljYXRvciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgbWVjaGFuaXNtcyBzZXQgYW5kIGNsZWFyIGl0PyBLbm93aW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBmbGFnIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgaG93IE1UVSBkaXNjb3ZlcnkgYW5kIHBhdGggbWFuYWdlbWVudCBmdW5jdGlvbiB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBzdGFjay4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzOiBob3cgYW5kICp3aGVuKiBpcyB0aGlzIHZhbHVlIGNvbmZpZ3VyZWQ/IE15IG5leHQgbW92ZSBpcyB0byBsb2NhdGUgdXNhZ2VzIG9mIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCBpbiB0aGUgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RzdF9tdHVfY29uZmlndXJlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNjU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk2LSAqL1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6Mzk3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk4LXtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyNjI9c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjYvcm91dGUuYy0zMjYzLXtcbm5ldC9pcHY2L3JvdXRlLmM6MzI2NDpcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjUtXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjY0CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBNU1MgQ2FsY3VsYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBob3cgd2UgY2FsY3VsYXRlIHRoZSBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSB0aGF0JiMzOTtzIGFkdmVydGlzZWQgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIFRoYXQmIzM5O3MgY29yZSBUQ1AvSVAgbG9naWMsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIGFuZCBgdGNwX2Nvbm5lY3RgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgU1lOL1NZTi1BQ0sgaGFuZHNoYWtlIGFuZCBjb25uZWN0aW9uIGluaXRpYXRpb24sIHNvIHRoZXkmIzM5O2xsIGJlIGNyaXRpY2FsIHRvIHJldmlldy4KCkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzZXQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYnVpbGQgZGVwZW5kZW5jaWVzLiBBaCwgcmlnaHQsIGBDT05GSUdfSVBWNmAgaXMgcmVxdWlyZWQgZm9yIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gU28sIEkmIzM5O2xsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aGF0IGluIG15IG1lbnRhbCBjaGVja2xpc3QuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhleSBsb29rIGltcG9ydGFudC4gWWVzLCB0aGV5IGFyZSBleHBvcnRlZCBhbmQgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBpcHY0X3NwZWNpZmljYCBhbmQgYGlwdjZfc3BlY2lmaWNgIHN0cnVjdHVyZXMsIHJlc3BlY3RpdmVseS4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvb2QgZm9jdXMgc3ltYm9scyBhbmQgdGhlIGNvZGUgaW52b2x2aW5nIHRoZXNlIG11c3QgYmUgcmV2aWV3ZWQgY2FyZWZ1bGx5LiBJIGNhbiBnbyBhaGVhZCBhbmQgaW5jb3Jwb3JhdGUgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3Y0X3N5bl9yZWN2X3NvY2smIzM0OywKICAgICYjMzQ7dGNwX3Y2X3N5bl9yZWN2X3NvY2smIzM0OywKICAgICYjMzQ7dGNwX21ha2Vfc3luYWNrJiMzNDssCiAgICAmIzM0O3RjcF9vcGVucmVxX2luaXRfcndpbiYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGFkdmVydGlzZWQgTVNTIGZvciBJUHY0IGFuZCBJUHY2IHJvdXRlcywgaWdub3JpbmcgdGhlIElDTVAtbGVhcm5lZCBwYXRoIE1UVSBhbmQgaW5zdGVhZCB1c2luZyB0aGUgY29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgdGhlIHJvdXRlIG9yIGRldmljZS4gVGhpcyBhZmZlY3RzIGNvcmUgVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBsb2dpYyAoU1lOL1NZTi1BQ0sgcHJvY2Vzc2luZykuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIFNZTiBoYW5kbGluZyBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX29wZW5yZXFfaW5pdF9yd2luJiMzNDssCiAgICAmIzM0O3RjcF9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBNU1MgZm9yIElQdjQgYW5kIElQdjYgcm91dGVzLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzaW5nIHRoZSBjb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiB0aGUgcm91dGUgb3IgZGV2aWNlLiBUaGlzIGFmZmVjdHMgY29yZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljIChTWU4vU1lOLUFDSyBwcm9jZXNzaW5nKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgU1lOIGhhbmRsaW5nIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZ3VyZWQgTVRVIG9mIGEgcm91dGUgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIHJlYWRpbmcgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gZXhpc3RpbmcgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIChkc3RfZW50cnksIHJ0Nl9pbmZvLCBmaWI2X2luZm8sIGluZXQ2X2RldikuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIG5ldyBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMzVmYzY1MTQwMTE2ZWQ4ZjhiNDJmYzRmYzgwZDkyYmZiMTRkN2M4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMDc6NDc6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTUwNiw2ICYjNDM7NTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJcmV0dXJuIHJlczsKIH0KIAomIzQzOy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy4KJiM0MzsgKgomIzQzOyAqIFVubGlrZSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGUKJiM0MzsgKiBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgKHJ0LSZndDtydF9wbXR1KS4gIFRoZSBhZHZlcnRpc2VkIE1TUyBib3VuZHMgd2hhdCB0aGUKJiM0MzsgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvcgomIzQzOyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkKJiM0MzsgKiBkaXJlY3Rpb24sIHdoaWNoIG1heSBub3QgYXBwbHkgdG8gdGhlIHBlZXItJmd0O3VzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlCiYjNDM7ICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZQomIzQzOyAqIHRjcF9hZHZlcnRpc2VfbXNzKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBtdHUsIHJlczsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTsKJiM0MzsJaWYgKCFtdHUpCiYjNDM7CQltdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS0mZ3Q7bXR1KTsKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpOwomIzQzOwlyZXMgPSBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTM4NSw2ICYjNDM7Mzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0CiAJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiB9CiAKJiM0MzsvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuCiYjNDM7ICoKJiM0MzsgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGgKJiM0MzsgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2YKJiM0MzsgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TUwomIzQzOyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUKJiM0MzsgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWUKJiM0MzsgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTsKJiM0MzsJY29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTsKJiM0MzsJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKJiM0MzsJdW5zaWduZWQgaW50IG10dSA9IDA7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJLyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWUKJiM0MzsJICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpCiYjNDM7CSAqIGRzdCwgdGhlIGNvbmZpZ3VyZWQgb25lIG9uIHRoZSB1bmRlcmx5aW5nIHJvdXRlLiAgUmVhY2ggdGhlIGxhdHRlcgomIzQzOwkgKiB2aWEgLSZndDtmcm9tIChmaWI2X3BtdHUpLCBwb3B1bGF0ZWQgYnkgaXA2X3JvdXRlX2luZm9fY3JlYXRlKCkuCiYjNDM7CSAqLwomIzQzOwlmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LSZndDtmcm9tKTsKJiM0MzsJaWYgKGZyb20pCiYjNDM7CQltdHUgPSBmcm9tLSZndDtmaWI2X3BtdHU7CiYjNDM7CWlmICghbXR1KSB7CiYjNDM7CQltdHUgPSBJUFY2X01JTl9NVFU7CiYjNDM7CQlpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTsKJiM0MzsJCWlmIChpZGV2KQomIzQzOwkJCW10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi0mZ3Q7Y25mLm10dTYpKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTsKJiM0MzsJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiYjNDM7fQomIzQzOwogdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTMzNCw4ICYjNDM7MTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbmV0ID0gZHN0X2Rldl9uZXRfcmN1KGRzdCk7Ci0JYWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcHY0X210dShkc3QpIC0gaGVhZGVyX3NpemUsCi0JCQkJICAgbmV0LSZndDtpcHY0LmlwX3J0X21pbl9hZHZtc3MpOwomIzQzOwlhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsCiYjNDM7CQkgICAgICAgbmV0LSZndDtpcHY0LmlwX3J0X21pbl9hZHZtc3MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCA1OTY4Y2U1YWQxNTA4Li5lMjA1NmJkMGRmM2M0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTMyNjEsNyAmIzQzOzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQl1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTsKJiM0MzsJdW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAltdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mMmVmOTMxYjc3YTFjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdApAQCAtMCwwICYjNDM7MSw2NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8KJiM0MzsvLyBUZXN0IHRoYXQgSVB2NCBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZAomIzQzOy8vIGludGVyZmFjZSBNVFUgKDE1MDAgLSZndDsgTVNTIDE0NjApLCBub3QgdGhlIElDTVAtbGVhcm5lZCBQYXRoIE1UVS4KJiM0MzsKJiM0MzstLWlwX3ZlcnNpb249aXB2NAomIzQzOwomIzQzO2AuL2RlZmF1bHRzLnNoCiYjNDM7ZXRodG9vbCAtSyB0dW4wIHRzbyBvZmYKJiM0MztgCiYjNDM7CiYjNDM7Ly8KJiM0MzsvLyBDb25uZWN0aW9uIDE6IExlYXJuIFBNVFUgZXhjZXB0aW9uIChNVFUgMTIwMCAtJmd0OyBNU1MgMTE2MCkKJiM0MzsvLwomIzQzOyAgICAwIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzCiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMAomIzQzOyAgICYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDAKJiM0MzsgICAmIzQzOzAgbGlzdGVuKDMsIDEpID0gMAomIzQzOwomIzQzOyAgICYjNDM7MCAmbHQ7IFMgMDowKDApIHdpbiA2NTUzNSAmbHQ7bXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4Jmd0OwomIzQzOyAgICYjNDM7MCAmZ3Q7IFMuIDA6MCgwKSBhY2sgMSAmbHQ7bXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4Jmd0OwomIzQzOyAgJiM0MzsuMSAmbHQ7IC4gMToxKDApIGFjayAxIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDQKJiM0MzsKJiM0MzsvLyBTZW5kIGEgZnVsbCAxNDYwLWJ5dGUgc2VnbWVudAomIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MAomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDE6MTQ2MSgxNDYwKSBhY2sgMQomIzQzOwomIzQzOy8vIElDTVAgRnJhZ21lbnRhdGlvbiBOZWVkZWQgYXJyaXZlcyBpbmRpY2F0aW5nIG5leHQtaG9wIE1UVSAxMjAwCiYjNDM7ICAgJiM0MzswICZsdDsgaWNtcCB1bnJlYWNoYWJsZSBmcmFnX25lZWRlZCBtdHUgMTIwMCBbMToxNDYxKDE0NjApXQomIzQzOwomIzQzOy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyMDAgKE1TUyA9IDEyMDAgLSA0MCA9IDExNjApCiYjNDM7ICAgJiM0MzswICZndDsgLiAxOjExNjEoMTE2MCkgYWNrIDEKJiM0MzsgICAmIzQzOzAgJmd0OyBQLiAxMTYxOjE0NjEoMzAwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmbHQ7IFIgMToxKDApIGFjayAxNDYxIHdpbiAwCiYjNDM7CiYjNDM7Ly8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lcgomIzQzOyAgICYjNDM7MCBjbG9zZSg0KSA9IDAKJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwCiYjNDM7CiYjNDM7Ly8KJiM0MzsvLyBDb25uZWN0aW9uIDI6IE5ldyBjb25uZWN0aW9uIGZyb20gdGhlIHNhbWUgcGVlcgomIzQzOy8vCiYjNDM7ICAgJiM0MzswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzCiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMAomIzQzOyAgICYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDAKJiM0MzsgICAmIzQzOzAgbGlzdGVuKDMsIDEpID0gMAomIzQzOwomIzQzOyAgICYjNDM7MCAmbHQ7IFMgMDowKDApIHdpbiA2NTUzNSAmbHQ7bXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4Jmd0OwomIzQzOwomIzQzOy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTE2MAomIzQzOyAgICYjNDM7MCAmZ3Q7IFMuIDA6MCgwKSBhY2sgMSAmbHQ7bXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4Jmd0OwomIzQzOyAgICYjNDM7MCAmbHQ7IC4gMToxKDApIGFjayAxIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDQKJiM0MzsKJiM0MzsvLyBWZXJpZnk6IE91dGdvaW5nIHRyYW5zbWl0IE1TUyBpcyBzdGlsbCBjb25zdHJhaW5lZCBieSB0aGUgbGVhcm5lZCBQTVRVIDEyMDAKJiM0MzsgICAmIzQzOzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjAKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE6MTE2MSgxMTYwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDExNjE6MTQ2MSgzMDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1NwomIzQzOwomIzQzOy8vIENsZWFuIHVwCiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMAomIzQzOyAgICYjNDM7MCAmZ3Q7IEYuIDE0NjE6MTQ2MSgwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmbHQ7IEYuIDE6MSgwKSBhY2sgMTQ2MiB3aW4gMjU3CiYjNDM7ICAgJiM0MzswICZndDsgLiAxNDYyOjE0NjIoMCkgYWNrIDIKJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jNzYzOGIxMWE4MTViCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdApAQCAtMCwwICYjNDM7MSw2NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8KJiM0MzsvLyBUZXN0IHRoYXQgSVB2NiBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZAomIzQzOy8vIGludGVyZmFjZSBNVFUgKDE1MjAgLSZndDsgTVNTIDE0NjApLCBub3QgdGhlIElDTVB2Ni1sZWFybmVkIFBhdGggTVRVLgomIzQzOwomIzQzOy0taXBfdmVyc2lvbj1pcHY2CiYjNDM7CiYjNDM7YC4vZGVmYXVsdHMuc2gKJiM0MztldGh0b29sIC1LIHR1bjAgdHNvIG9mZgomIzQzO2AKJiM0MzsKJiM0MzsvLwomIzQzOy8vIENvbm5lY3Rpb24gMTogTGVhcm4gUE1UVSBleGNlcHRpb24gKE1UVSAxMjgwIC0mZ3Q7IE1TUyAxMjIwKQomIzQzOy8vCiYjNDM7ICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7ICAgJiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwCiYjNDM7CiYjNDM7ICAgJiM0MzswICZsdDsgUyAwOjAoMCkgd2luIDY1NTM1ICZsdDttc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAgJiM0MzswICZndDsgUy4gMDowKDApIGFjayAxICZsdDttc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAmIzQzOy4xICZsdDsgLiAxOjEoMCkgYWNrIDEgd2luIDI1NwomIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50CiYjNDM7ICAgJiM0MzswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwCiYjNDM7ICAgJiM0MzswICZndDsgUC4gMToxNDYxKDE0NjApIGFjayAxCiYjNDM7CiYjNDM7Ly8gSUNNUHY2IFBhY2tldCBUb28gQmlnIGFycml2ZXMgaW5kaWNhdGluZyBuZXh0LWhvcCBNVFUgMTI4MAomIzQzOyAgICYjNDM7MCAmbHQ7IGljbXAgcGFja2V0X3Rvb19iaWcgbXR1IDEyODAgWzE6MTQ2MSgxNDYwKV0KJiM0MzsKJiM0MzsvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjgwIChNU1MgPSAxMjgwIC0gNDAgLSAyMCA9IDEyMjApCiYjNDM7ICAgJiM0MzswICZndDsgLiAxOjEyMjEoMTIyMCkgYWNrIDEKJiM0MzsgICAmIzQzOzAgJmd0OyBQLiAxMjIxOjE0NjEoMjQwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmbHQ7IFIgMToxKDApIGFjayAxNDYxIHdpbiAwCiYjNDM7CiYjNDM7Ly8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lcgomIzQzOyAgICYjNDM7MCBjbG9zZSg0KSA9IDAKJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwCiYjNDM7CiYjNDM7Ly8KJiM0MzsvLyBDb25uZWN0aW9uIDI6IE5ldyBjb25uZWN0aW9uIGZyb20gdGhlIHNhbWUgcGVlcgomIzQzOy8vCiYjNDM7ICAgJiM0MzswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzCiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMAomIzQzOyAgICYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDAKJiM0MzsgICAmIzQzOzAgbGlzdGVuKDMsIDEpID0gMAomIzQzOwomIzQzOyAgICYjNDM7MCAmbHQ7IFMgMDowKDApIHdpbiA2NTUzNSAmbHQ7bXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4Jmd0OwomIzQzOwomIzQzOy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTIyMAomIzQzOyAgICYjNDM7MCAmZ3Q7IFMuIDA6MCgwKSBhY2sgMSAmbHQ7bXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4Jmd0OwomIzQzOyAgICYjNDM7MCAmbHQ7IC4gMToxKDApIGFjayAxIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDQKJiM0MzsKJiM0MzsvLyBWZXJpZnk6IE91dGdvaW5nIHRyYW5zbWl0IE1TUyBpcyBzdGlsbCBjb25zdHJhaW5lZCBieSB0aGUgbGVhcm5lZCBQTVRVIDEyODAKJiM0MzsgICAmIzQzOzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjAKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE6MTIyMSgxMjIwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1NwomIzQzOwomIzQzOy8vIENsZWFuIHVwCiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMAomIzQzOyAgICYjNDM7MCAmZ3Q7IEYuIDE0NjE6MTQ2MSgwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmbHQ7IEYuIDE6MSgwKSBhY2sgMTQ2MiB3aW4gMjU3CiYjNDM7ICAgJiM0MzswICZndDsgLiAxNDYyOjE0NjIoMCkgYWNrIDIKJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODcyCgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDkyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1UVSBDYWxjdWxhdGlvbiBmb3IgVENQIE1TUyBBZHZlcnRpc2VtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgdHdvIG5ldyBmdW5jdGlvbnMsIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAsIHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlndXJlZCBNVFUgb2YgYSByb3V0ZSwgZGVsaWJlcmF0ZWx5ICppZ25vcmluZyogYW55IElDTVAtbGVhcm5lZCBQYXRoIE1UVS4gVGhpcyBtYWtlcyBzZW5zZTsgd2Ugd2FudCBhIGNvbnNpc3RlbnQgYmFzZWxpbmUgZm9yIFRDUCBNU1MgYWR2ZXJ0aXNlbWVudCwgc2VwYXJhdGUgZnJvbSBwb3RlbnRpYWxseSBmbHVjdHVhdGluZyBQTVRVIHZhbHVlcy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgdGhlIHVzdWFsIHN1c3BlY3RzOiBgaXAuaGAsIGBpcDZfcm91dGUuaGAsIGByb3V0ZS5jYCBmb3IgSVB2NCwgYW5kIGByb3V0ZS5jYCBmb3IgSVB2Niwgd2hpY2ggaXMgYWxsIGFzIGV4cGVjdGVkLiBHb29kIHRvIHNlZSB0aGV5JiMzOTt2ZSBhbHNvIGluY2x1ZGVkIHBhY2tldGRyaWxsIHRlc3RzIOKAkyBpbXBvcnRhbnQgZm9yIHZlcmlmeWluZyB0aGUgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9ucy4gTG9va2luZyBhdCBgaXBfZHN0X210dV9jb25maWd1cmVkYCwgd2UgaGF2ZToKCmBgYGMKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKewoJdW5zaWduZWQgaW50IG10dSwgcmVzOwoKCXJjdV9yZWFkX2xvY2soKTsKCW10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpOwoJaWYgKCFtdHUpCgkJbXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktJmd0O210dSk7CgltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7CglyZXMgPSBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwoJcmN1X3JlYWRfdW5sb2NrKCk7CgoJcmV0dXJuIHJlczsKfQpgYGAKCkFuZCBmb3IgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgOgoKYGBgYwpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKewoJY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCA9IGRzdF9ydDZfaW5mbyhkc3QpOwoJY29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTsKCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7Cgl1bnNpZ25lZCBpbnQgbXR1ID0gMDsKCglyY3VfcmVhZF9sb2NrKCk7CgkvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZQoJICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpCgkgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXIKCSAqIHZpYSAtJmd0O2Zyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS4KCSAqLwoJZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC0mZ3Q7ZnJvbSk7CglpZiAoZnJvbSkKCQltdHUgPSBmcm9tLSZndDtmaWI2X3BtdHU7CglpZiAoIW10dSkgewoJCW10dSA9IElQVjZfTUlOX01UVTsKCQlpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTsKCQlpZiAoaWRldikKCQkJbXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LSZndDtjbmYubXR1NikpOwoJfQoJcmN1X3JlYWRfdW5sb2NrKCk7CgoJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTsKCXJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwp9CmBgYAoKVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGlzIGNsZWFyLiBCb3RoIGZ1bmN0aW9ucyBnZXQgYW4gTVRVLCBjYXBwaW5nIGl0IGF0IHRoZSBhcHByb3ByaWF0ZSBtYXhpbXVtLCBhbmQgdGhlbiBzdWJ0cmFjdCB0aGUgTFdUdW5uZWwgaGVhZHJvb20uIFRoZSByZXN1bHRzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYWR2ZXJ0aXNlZCBNU1MgaW4gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYC4KCk15IGNvbmNlcm4gaGVyZSBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBIb3dldmVyLCB0aGUgY29kZSBsb29rcyBzb3VuZC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2suIEluIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgLCBgbXR1YCBpcyBndWFyYW50ZWVkIHRvIGJlIGFzc2lnbmVkIGEgdmFsdWU6IGVpdGhlciBmcm9tIGBkc3RfbWV0cmljX3Jhd2Agb3IgYGRzdF9kZXZfcmN1LSZndDttdHVgLCBhbmQgYHJlc2AgaXMgY29tcHV0ZWQgZGlyZWN0bHkgZnJvbSBgbXR1YC4gTm8gaXNzdWVzIHRoZXJlLiBJbiBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAsIGBtdHVgIHN0YXJ0cyBhdCAwLCBidXQgaXMgaW1tZWRpYXRlbHkgYXNzaWduZWQgZWl0aGVyIGBmcm9tLSZndDtmaWI2X3BtdHVgIG9yIGBpZGV2LSZndDtjbmYubXR1NmAgb3IgYElQVjZfTUlOX01UVWAuIEFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCgpUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBubyBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlOyB0aGUgYE5lZWRzS01TQU5gIHRhZyBzaG91bGQgYmUgYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2FmZSBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlndXJlZCBNVFUgb2YgYSByb3V0ZSBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUuIFRoZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgcmVhZGluZyBpbml0aWFsaXplZCBmaWVsZHMgZnJvbSBleGlzdGluZyBuZXR3b3JraW5nIHN0cnVjdHVyZXMgKGRzdF9lbnRyeSwgcnQ2X2luZm8sIGZpYjZfaW5mbywgaW5ldDZfZGV2KS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgbm8gbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgbmV3IGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZ3VyZWQgTVRVIG9mIGEgcm91dGUgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIHJlYWRpbmcgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gZXhpc3RpbmcgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIChkc3RfZW50cnksIHJ0Nl9pbmZvLCBmaWI2X2luZm8sIGluZXQ2X2RldikuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIG5ldyBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0NzoyMi4yNTgzODI5ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc2Njk5MzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Y0X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcInRjcF92Nl9zeW5fcmVjdl9zb2NrXCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF9vcGVucmVxX2luaXRfcndpblwiLFxuICAgIFwidGNwX2Nvbm5lY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlndXJlZCBNVFUgb2YgYSByb3V0ZSBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUuIFRoZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgcmVhZGluZyBpbml0aWFsaXplZCBmaWVsZHMgZnJvbSBleGlzdGluZyBuZXR3b3JraW5nIHN0cnVjdHVyZXMgKGRzdF9lbnRyeSwgcnQ2X2luZm8sIGZpYjZfaW5mbywgaW5ldDZfZGV2KS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgbm8gbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgbmV3IGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIE1TUyBmb3IgSVB2NCBhbmQgSVB2NiByb3V0ZXMsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNpbmcgdGhlIGNvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIHRoZSByb3V0ZSBvciBkZXZpY2UuIFRoaXMgYWZmZWN0cyBjb3JlIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgbG9naWMgKFNZTi9TWU4tQUNLIHByb2Nlc3NpbmcpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBTWU4gaGFuZGxpbmcgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0NzoyMi4yNTgzOTE3OTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDM1NDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzNWZjNjUxNDAxMTZlZDhmOGI0MmZjNGZjODBkOTJiZmIxNGQ3YzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDc6NDc6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmhcXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcC5oXFxuQEAgLTUwNiw2ICs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxcbisgKlxcbisgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXFxuKyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXFx1MDAzZXJ0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZVxcbisgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvclxcbisgKiByb3V0ZS1jb25maWd1cmVkIE1UVSksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpXFxuKyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci1cXHUwMDNldXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGVcXG4rICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxcbisgKiB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xcbitcXHRpZiAoIW10dSlcXG4rXFx0XFx0bXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktXFx1MDAzZW10dSk7XFxuK1xcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUF9NQVhfTVRVKTtcXG4rXFx0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuQEAgLTM4NSw2ICszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcXG4gXFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuIH1cXG4gXFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cXG4rICpcXG4rICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXFxuKyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxcbisgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xcbisgKiBib3VuZHMgd2hhdCB0aGUgcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlXFxuKyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZVxcbisgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcXG4rXFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4rXFx0dW5zaWduZWQgaW50IG10dSA9IDA7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdC8qIElQdjYga2VlcHMgdGhlIGxlYXJuZWQgUE1UVSBhbmQgdGhlIGNvbmZpZ3VyZWQgTVRVIGluIHRoZSBzYW1lXFxuK1xcdCAqIFJUQVhfTVRVIHNsb3Q6IHRoZSBsZWFybmVkIHZhbHVlIHNpdHMgb24gdGhpcyAocG9zc2libHkgUlRGX0NBQ0hFKVxcbitcXHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcXG4rXFx0ICogdmlhIC1cXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxcbitcXHQgKi9cXG4rXFx0ZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC1cXHUwMDNlZnJvbSk7XFxuK1xcdGlmIChmcm9tKVxcbitcXHRcXHRtdHUgPSBmcm9tLVxcdTAwM2VmaWI2X3BtdHU7XFxuK1xcdGlmICghbXR1KSB7XFxuK1xcdFxcdG10dSA9IElQVjZfTUlOX01UVTtcXG4rXFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldl9yY3UoZHN0KSk7XFxuK1xcdFxcdGlmIChpZGV2KVxcbitcXHRcXHRcXHRtdHUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIG10dSwgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5tdHU2KSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbitcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4rfVxcbitcXG4gdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcXG5pbmRleCBmZDY4OGUxZjg3OWY1Li40NmFhOThjOTIxODMzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2NC9yb3V0ZS5jXFxuQEAgLTEzMzQsOCArMTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xcbi1cXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgbmV0LVxcdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xcbitcXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXFxuK1xcdFxcdCAgICAgICBuZXQtXFx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0zMjYxLDcgKzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG10dSA9IGRzdDZfbXR1KGRzdCk7XFxuK1xcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gXFxuIFxcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjJlZjkzMWI3N2ExY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0XFxuQEAgLTAsMCArMSw2NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvL1xcbisvLyBUZXN0IHRoYXQgSVB2NCBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZFxcbisvLyBpbnRlcmZhY2UgTVRVICgxNTAwIC1cXHUwMDNlIE1TUyAxNDYwKSwgbm90IHRoZSBJQ01QLWxlYXJuZWQgUGF0aCBNVFUuXFxuK1xcbistLWlwX3ZlcnNpb249aXB2NFxcbitcXG4rYC4vZGVmYXVsdHMuc2hcXG4rZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcXG4rYFxcbitcXG4rLy9cXG4rLy8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyMDAgLVxcdTAwM2UgTVNTIDExNjApXFxuKy8vXFxuKyAgICAwIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXFxuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxcbisgICArMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxcbitcXG4rICAgKzAgXFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICAgKzAgXFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICArLjEgXFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XFxuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XFxuK1xcbisvLyBTZW5kIGEgZnVsbCAxNDYwLWJ5dGUgc2VnbWVudFxcbisgICArMCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxcbisgICArMCBcXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxcbitcXG4rLy8gSUNNUCBGcmFnbWVudGF0aW9uIE5lZWRlZCBhcnJpdmVzIGluZGljYXRpbmcgbmV4dC1ob3AgTVRVIDEyMDBcXG4rICAgKzAgXFx1MDAzYyBpY21wIHVucmVhY2hhYmxlIGZyYWdfbmVlZGVkIG10dSAxMjAwIFsxOjE0NjEoMTQ2MCldXFxuK1xcbisvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjAwIChNU1MgPSAxMjAwIC0gNDAgPSAxMTYwKVxcbisgICArMCBcXHUwMDNlIC4gMToxMTYxKDExNjApIGFjayAxXFxuKyAgICswIFxcdTAwM2UgUC4gMTE2MToxNDYxKDMwMCkgYWNrIDFcXG4rICAgKzAgXFx1MDAzYyBSIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMFxcbitcXG4rLy8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lclxcbisgICArMCBjbG9zZSg0KSA9IDBcXG4rICAgKzAgY2xvc2UoMykgPSAwXFxuK1xcbisvL1xcbisvLyBDb25uZWN0aW9uIDI6IE5ldyBjb25uZWN0aW9uIGZyb20gdGhlIHNhbWUgcGVlclxcbisvL1xcbisgICArMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xcbisgICArMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcXG4rICAgKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcXG4rXFxuKyAgICswIFxcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFxcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcXHUwMDNlXFxuK1xcbisvLyBWZXJpZnk6IFNZTi1BQ0sgTVVTVCBhZHZlcnRpc2UgY29uZmlndXJlZCBNU1MgMTQ2MCwgTk9UIHRoZSBsZWFybmVkIFBNVFUgTVNTIDExNjBcXG4rICAgKzAgXFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICAgKzAgXFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XFxuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XFxuK1xcbisvLyBWZXJpZnk6IE91dGdvaW5nIHRyYW5zbWl0IE1TUyBpcyBzdGlsbCBjb25zdHJhaW5lZCBieSB0aGUgbGVhcm5lZCBQTVRVIDEyMDBcXG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcXG4rICAgKzAgXFx1MDAzZSAuIDE6MTE2MSgxMTYwKSBhY2sgMVxcbisgICArMCBcXHUwMDNlIFAuIDExNjE6MTQ2MSgzMDApIGFjayAxXFxuKyAgICswIFxcdTAwM2MgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1N1xcbitcXG4rLy8gQ2xlYW4gdXBcXG4rICAgKzAgY2xvc2UoNCkgPSAwXFxuKyAgICswIFxcdTAwM2UgRi4gMTQ2MToxNDYxKDApIGFjayAxXFxuKyAgICswIFxcdTAwM2MgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTdcXG4rICAgKzAgXFx1MDAzZSAuIDE0NjI6MTQ2MigwKSBhY2sgMlxcbisgICArMCBjbG9zZSgzKSA9IDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3RcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3NjM4YjExYTgxNWJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdFxcbkBAIC0wLDAgKzEsNjcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLy9cXG4rLy8gVGVzdCB0aGF0IElQdjYgYWR2ZXJ0aXNlZCBNU1MgaW4gU1lOLUFDSyBpcyBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWRcXG4rLy8gaW50ZXJmYWNlIE1UVSAoMTUyMCAtXFx1MDAzZSBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUHY2LWxlYXJuZWQgUGF0aCBNVFUuXFxuK1xcbistLWlwX3ZlcnNpb249aXB2NlxcbitcXG4rYC4vZGVmYXVsdHMuc2hcXG4rZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcXG4rYFxcbitcXG4rLy9cXG4rLy8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyODAgLVxcdTAwM2UgTVNTIDEyMjApXFxuKy8vXFxuKyAgICAwIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXFxuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxcbisgICArMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxcbitcXG4rICAgKzAgXFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICAgKzAgXFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICArLjEgXFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XFxuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XFxuK1xcbisvLyBTZW5kIGEgZnVsbCAxNDYwLWJ5dGUgc2VnbWVudFxcbisgICArMCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxcbisgICArMCBcXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxcbitcXG4rLy8gSUNNUHY2IFBhY2tldCBUb28gQmlnIGFycml2ZXMgaW5kaWNhdGluZyBuZXh0LWhvcCBNVFUgMTI4MFxcbisgICArMCBcXHUwMDNjIGljbXAgcGFja2V0X3Rvb19iaWcgbXR1IDEyODAgWzE6MTQ2MSgxNDYwKV1cXG4rXFxuKy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyODAgKE1TUyA9IDEyODAgLSA0MCAtIDIwID0gMTIyMClcXG4rICAgKzAgXFx1MDAzZSAuIDE6MTIyMSgxMjIwKSBhY2sgMVxcbisgICArMCBcXHUwMDNlIFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxXFxuKyAgICswIFxcdTAwM2MgUiAxOjEoMCkgYWNrIDE0NjEgd2luIDBcXG4rXFxuKy8vIENsb3NlIGNvbm5lY3Rpb24gMSBhbmQgbGlzdGVuZXJcXG4rICAgKzAgY2xvc2UoNCkgPSAwXFxuKyAgICswIGNsb3NlKDMpID0gMFxcbitcXG4rLy9cXG4rLy8gQ29ubmVjdGlvbiAyOiBOZXcgY29ubmVjdGlvbiBmcm9tIHRoZSBzYW1lIHBlZXJcXG4rLy9cXG4rICAgKzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcXG4rICAgKzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxcbisgICArMCBsaXN0ZW4oMywgMSkgPSAwXFxuK1xcbisgICArMCBcXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcXHUwMDNjbXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4XFx1MDAzZVxcbitcXG4rLy8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMjIwXFxuKyAgICswIFxcdTAwM2UgUy4gMDowKDApIGFjayAxIFxcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcXHUwMDNlXFxuKyAgICswIFxcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxcbitcXG4rLy8gVmVyaWZ5OiBPdXRnb2luZyB0cmFuc21pdCBNU1MgaXMgc3RpbGwgY29uc3RyYWluZWQgYnkgdGhlIGxlYXJuZWQgUE1UVSAxMjgwXFxuKyAgICswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXFxuKyAgICswIFxcdTAwM2UgLiAxOjEyMjEoMTIyMCkgYWNrIDFcXG4rICAgKzAgXFx1MDAzZSBQLiAxMjIxOjE0NjEoMjQwKSBhY2sgMVxcbisgICArMCBcXHUwMDNjIC4gMToxKDApIGFjayAxNDYxIHdpbiAyNTdcXG4rXFxuKy8vIENsZWFuIHVwXFxuKyAgICswIGNsb3NlKDQpID0gMFxcbisgICArMCBcXHUwMDNlIEYuIDE0NjE6MTQ2MSgwKSBhY2sgMVxcbisgICArMCBcXHUwMDNjIEYuIDE6MSgwKSBhY2sgMTQ2MiB3aW4gMjU3XFxuKyAgICswIFxcdTAwM2UgLiAxNDYyOjE0NjIoMCkgYWNrIDJcXG4rICAgKzAgY2xvc2UoMykgPSAwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjIyLjczMzU3ODgyOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4MDgzMTU4NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfdjRfc3luX3JlY3Zfc29ja1wiLFxuICAgIFwidGNwX3Y2X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcInRjcF9tYWtlX3N5bmFja1wiLFxuICAgIFwidGNwX29wZW5yZXFfaW5pdF9yd2luXCIsXG4gICAgXCJ0Y3BfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBNU1MgZm9yIElQdjQgYW5kIElQdjYgcm91dGVzLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzaW5nIHRoZSBjb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiB0aGUgcm91dGUgb3IgZGV2aWNlLiBUaGlzIGFmZmVjdHMgY29yZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljIChTWU4vU1lOLUFDSyBwcm9jZXNzaW5nKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgU1lOIGhhbmRsaW5nIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzM1ZmM2NTE0MDExNmVkOGY4YjQyZmM0ZmM4MGQ5MmJmYjE0ZDdjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDA3OjQ3OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmhcbmluZGV4IDdmMmZlMWE4NDAxYjEuLmE4ZjU3YjRmNGFhMjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcC5oXG4rKysgYi9pbmNsdWRlL25ldC9pcC5oXG5AQCAtNTA2LDYgKzUwNiwzMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuKyAqXG4rICogVW5saWtlIGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZVxuKyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXHUwMDNlcnRfcG10dSkuICBUaGUgYWR2ZXJ0aXNlZCBNU1MgYm91bmRzIHdoYXQgdGhlXG4rICogcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlIGNhcGFiaWxpdHkgKHRoZSBkZXZpY2Ugb3JcbisgKiByb3V0ZS1jb25maWd1cmVkIE1UVSksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpXG4rICogZGlyZWN0aW9uLCB3aGljaCBtYXkgbm90IGFwcGx5IHRvIHRoZSBwZWVyLVx1MDAzZXVzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlXG4rICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxuKyAqIHRjcF9hZHZlcnRpc2VfbXNzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbit7XG4rXHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbitcdGlmICghbXR1KVxuK1x0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuK1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xuK1x0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NSw2ICszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4gfVxuIFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cbisgKlxuKyAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aFxuKyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxuKyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTXG4rICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZVxuKyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZVxuKyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbitcdGNvbnN0IHN0cnVjdCBmaWI2X2luZm8gKmZyb207XG4rXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuK1x0dW5zaWduZWQgaW50IG10dSA9IDA7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHQvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZVxuK1x0ICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpXG4rXHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcbitcdCAqIHZpYSAtXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxuK1x0ICovXG4rXHRmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LVx1MDAzZWZyb20pO1xuK1x0aWYgKGZyb20pXG4rXHRcdG10dSA9IGZyb20tXHUwMDNlZmliNl9wbXR1O1xuK1x0aWYgKCFtdHUpIHtcbitcdFx0bXR1ID0gSVBWNl9NSU5fTVRVO1xuK1x0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcbitcdFx0aWYgKGlkZXYpXG4rXHRcdFx0bXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4rXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuK31cbitcbiB1MzIgaXA2X210dV9mcm9tX2ZpYjYoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCBmZDY4OGUxZjg3OWY1Li40NmFhOThjOTIxODMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTEzMzQsOCArMTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcbi1cdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXB2NF9tdHUoZHN0KSAtIGhlYWRlcl9zaXplLFxuLVx0XHRcdFx0ICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4rXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXG4rXHRcdCAgICAgICBuZXQtXHUwMDNlaXB2NC5pcF9ydF9taW5fYWR2bXNzKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IDU5NjhjZTVhZDE1MDguLmUyMDU2YmQwZGYzYzQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMzI2MSw3ICszMjYxLDcgQEAgdm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTtcbitcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXG4gXHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmYyZWY5MzFiNzdhMWNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3RcbkBAIC0wLDAgKzEsNjcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8vXG4rLy8gVGVzdCB0aGF0IElQdjQgYWR2ZXJ0aXNlZCBNU1MgaW4gU1lOLUFDSyBpcyBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWRcbisvLyBpbnRlcmZhY2UgTVRVICgxNTAwIC1cdTAwM2UgTVNTIDE0NjApLCBub3QgdGhlIElDTVAtbGVhcm5lZCBQYXRoIE1UVS5cbitcbistLWlwX3ZlcnNpb249aXB2NFxuK1xuK2AuL2RlZmF1bHRzLnNoXG4rZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcbitgXG4rXG4rLy9cbisvLyBDb25uZWN0aW9uIDE6IExlYXJuIFBNVFUgZXhjZXB0aW9uIChNVFUgMTIwMCAtXHUwMDNlIE1TUyAxMTYwKVxuKy8vXG4rICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbisgICArMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcbisgICArMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbisgICArMCBsaXN0ZW4oMywgMSkgPSAwXG4rXG4rICAgKzAgXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcdTAwM2VcbisgICArMCBcdTAwM2UgUy4gMDowKDApIGFjayAxIFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFx1MDAzZVxuKyAgKy4xIFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XG4rICAgKzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDRcbitcbisvLyBTZW5kIGEgZnVsbCAxNDYwLWJ5dGUgc2VnbWVudFxuKyAgICswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXG4rICAgKzAgXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxuK1xuKy8vIElDTVAgRnJhZ21lbnRhdGlvbiBOZWVkZWQgYXJyaXZlcyBpbmRpY2F0aW5nIG5leHQtaG9wIE1UVSAxMjAwXG4rICAgKzAgXHUwMDNjIGljbXAgdW5yZWFjaGFibGUgZnJhZ19uZWVkZWQgbXR1IDEyMDAgWzE6MTQ2MSgxNDYwKV1cbitcbisvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjAwIChNU1MgPSAxMjAwIC0gNDAgPSAxMTYwKVxuKyAgICswIFx1MDAzZSAuIDE6MTE2MSgxMTYwKSBhY2sgMVxuKyAgICswIFx1MDAzZSBQLiAxMTYxOjE0NjEoMzAwKSBhY2sgMVxuKyAgICswIFx1MDAzYyBSIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMFxuK1xuKy8vIENsb3NlIGNvbm5lY3Rpb24gMSBhbmQgbGlzdGVuZXJcbisgICArMCBjbG9zZSg0KSA9IDBcbisgICArMCBjbG9zZSgzKSA9IDBcbitcbisvL1xuKy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyXG4rLy9cbisgICArMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcbitcbisgICArMCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuK1xuKy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTE2MFxuKyAgICswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4rICAgKzAgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFZlcmlmeTogT3V0Z29pbmcgdHJhbnNtaXQgTVNTIGlzIHN0aWxsIGNvbnN0cmFpbmVkIGJ5IHRoZSBsZWFybmVkIFBNVFUgMTIwMFxuKyAgICswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXG4rICAgKzAgXHUwMDNlIC4gMToxMTYxKDExNjApIGFjayAxXG4rICAgKzAgXHUwMDNlIFAuIDExNjE6MTQ2MSgzMDApIGFjayAxXG4rICAgKzAgXHUwMDNjIC4gMToxKDApIGFjayAxNDYxIHdpbiAyNTdcbitcbisvLyBDbGVhbiB1cFxuKyAgICswIGNsb3NlKDQpID0gMFxuKyAgICswIFx1MDAzZSBGLiAxNDYxOjE0NjEoMCkgYWNrIDFcbisgICArMCBcdTAwM2MgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTdcbisgICArMCBcdTAwM2UgLiAxNDYyOjE0NjIoMCkgYWNrIDJcbisgICArMCBjbG9zZSgzKSA9IDBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3NjM4YjExYTgxNWJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3RcbkBAIC0wLDAgKzEsNjcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8vXG4rLy8gVGVzdCB0aGF0IElQdjYgYWR2ZXJ0aXNlZCBNU1MgaW4gU1lOLUFDSyBpcyBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWRcbisvLyBpbnRlcmZhY2UgTVRVICgxNTIwIC1cdTAwM2UgTVNTIDE0NjApLCBub3QgdGhlIElDTVB2Ni1sZWFybmVkIFBhdGggTVRVLlxuK1xuKy0taXBfdmVyc2lvbj1pcHY2XG4rXG4rYC4vZGVmYXVsdHMuc2hcbitldGh0b29sIC1LIHR1bjAgdHNvIG9mZlxuK2BcbitcbisvL1xuKy8vIENvbm5lY3Rpb24gMTogTGVhcm4gUE1UVSBleGNlcHRpb24gKE1UVSAxMjgwIC1cdTAwM2UgTVNTIDEyMjApXG4rLy9cbisgICAgMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcbitcbisgICArMCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuKyAgICswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4rICArLjEgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50XG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcbisgICArMCBcdTAwM2UgUC4gMToxNDYxKDE0NjApIGFjayAxXG4rXG4rLy8gSUNNUHY2IFBhY2tldCBUb28gQmlnIGFycml2ZXMgaW5kaWNhdGluZyBuZXh0LWhvcCBNVFUgMTI4MFxuKyAgICswIFx1MDAzYyBpY21wIHBhY2tldF90b29fYmlnIG10dSAxMjgwIFsxOjE0NjEoMTQ2MCldXG4rXG4rLy8gTG9jYWwgaG9zdCByZXRyYW5zbWl0cyB1c2luZyB0aGUgbGVhcm5lZCBNVFUgMTI4MCAoTVNTID0gMTI4MCAtIDQwIC0gMjAgPSAxMjIwKVxuKyAgICswIFx1MDAzZSAuIDE6MTIyMSgxMjIwKSBhY2sgMVxuKyAgICswIFx1MDAzZSBQLiAxMjIxOjE0NjEoMjQwKSBhY2sgMVxuKyAgICswIFx1MDAzYyBSIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMFxuK1xuKy8vIENsb3NlIGNvbm5lY3Rpb24gMSBhbmQgbGlzdGVuZXJcbisgICArMCBjbG9zZSg0KSA9IDBcbisgICArMCBjbG9zZSgzKSA9IDBcbitcbisvL1xuKy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyXG4rLy9cbisgICArMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcbitcbisgICArMCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuK1xuKy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTIyMFxuKyAgICswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4rICAgKzAgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFZlcmlmeTogT3V0Z29pbmcgdHJhbnNtaXQgTVNTIGlzIHN0aWxsIGNvbnN0cmFpbmVkIGJ5IHRoZSBsZWFybmVkIFBNVFUgMTI4MFxuKyAgICswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXG4rICAgKzAgXHUwMDNlIC4gMToxMjIxKDEyMjApIGFjayAxXG4rICAgKzAgXHUwMDNlIFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxXG4rICAgKzAgXHUwMDNjIC4gMToxKDApIGFjayAxNDYxIHdpbiAyNTdcbitcbisvLyBDbGVhbiB1cFxuKyAgICswIGNsb3NlKDQpID0gMFxuKyAgICswIFx1MDAzZSBGLiAxNDYxOjE0NjEoMCkgYWNrIDFcbisgICArMCBcdTAwM2MgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTdcbisgICArMCBcdTAwM2UgLiAxNDYyOjE0NjIoMCkgYWNrIDJcbisgICArMCBjbG9zZSgzKSA9IDBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjIyLjczMzU4MDc5OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDc3MzU3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgTVNTIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgaG93IHdlIGhhbmRsZSB0aGUgYWR2ZXJ0aXNlZCBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBjYWxjdWxhdGlvbnMsIHNwZWNpZmljYWxseSBmb3IgSVB2NCBhbmQgSVB2NiByb3V0ZXMuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLiBUaGUgaW50ZW50aW9uIGlzIHRvIGZhdm9yIHRoZSBjb25maWd1cmVkLCBhZG1pbmlzdHJhdGl2ZSBNVFUgb3ZlciB0aGUgZHluYW1pY2FsbHkgbGVhcm5lZCBQYXRoIE1UVSAoUE1UVSksIHdoaWNoIGlzIGEgZGVmaW5pdGUgZGVwYXJ0dXJlIGZyb20gdGhlIGN1cnJlbnQgYmVoYXZpb3IuIFRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHRoZW4gcGx1Z2dlZCBpbnRvIGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AsIHdoaWNoIGlzIHdoZXJlIHRoZSBjaGFuZ2Ugd2lsbCBtYW5pZmVzdC5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgdGhlc2Uga2V5IGZ1bmN0aW9ucywgYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCwgYXJlIGN1cnJlbnRseSB1c2VkIGluIHRoZSBjb2RlYmFzZS4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgaXQgc2VlbXMgdGhhdCBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgcmVzaWRlcyB3aXRoaW4gYG5ldC9pcHY0L3JvdXRlLmNgLCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AgcmVzaWRlcyBpbiBgbmV0L2lwdjYvcm91dGUuY2AuIFRoaXMgaXMgd2hhdCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQsIHNvLCBzbyBmYXIsIHNvIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0NzoyNi43NDEzMTk0NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDU3ODc4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY0X2RlZmF1bHRfYWR2bXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3JvdXRlLmM9MTI5PXN0cnVjdCBkc3RfZW50cnlcXHQqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcXG5uZXQvaXB2NC9yb3V0ZS5jOjEzMDpzdGF0aWMgdW5zaWduZWQgaW50XFx0IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMS1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xNTQ9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU2LVxcdC5jaGVjayA9XFx0XFx0aXB2NF9kc3RfY2hlY2ssXFxubmV0L2lwdjQvcm91dGUuYzoxNTc6XFx0LmRlZmF1bHRfYWR2bXNzID1cXHRpcHY0X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY0L3JvdXRlLmMtMTU4LVxcdC5tdHUgPVxcdFxcdFxcdGlwdjRfbXR1LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xMzIwPXN0YXRpYyB2b2lkIHNldF9jbGFzc190YWcoc3RydWN0IHJ0YWJsZSAqcnQsIHUzMiB0YWcpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMjgtXFxubmV0L2lwdjQvcm91dGUuYzoxMzI5OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L2lwdjQvcm91dGUuYy0xMzMwLXtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9Mjg4MT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3RfYmxhY2tob2xlX29wcyA9IHtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXFx0LmZhbWlseVxcdFxcdFxcdD0gQUZfSU5FVCxcXG5uZXQvaXB2NC9yb3V0ZS5jOjI4ODM6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PSBpcHY0X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cXHQubmVpZ2hfbG9va3VwXFx0XFx0PSBpcHY0X25laWdoX2xvb2t1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6MjguNzE1OTA5MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzUyOTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVmYXVsdF9hZHZtc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz04Nj1zdHJ1Y3QgZHN0X2VudHJ5XFx0KmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnRcXHQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XFxubmV0L2lwdjYvcm91dGUuYy04OC1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0yNDk9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3Rfb3BzX3RlbXBsYXRlID0ge1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yNTMtXFx0LmNoZWNrXFx0XFx0XFx0PVxcdGlwNl9kc3RfY2hlY2ssXFxubmV0L2lwdjYvcm91dGUuYzoyNTQ6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PVxcdGlwNl9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1NS1cXHQubXR1XFx0XFx0XFx0PVxcdGlwNl9tdHUsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xcbm5ldC9pcHY2L3JvdXRlLmMtMjY5LVxcdC5mYW1pbHlcXHRcXHRcXHQ9IEFGX0lORVQ2LFxcbm5ldC9pcHY2L3JvdXRlLmM6MjcwOlxcdC5kZWZhdWx0X2Fkdm1zc1xcdFxcdD0gaXA2X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY2L3JvdXRlLmMtMjcxLVxcdC5uZWlnaF9sb29rdXBcXHRcXHQ9IGlwNl9kc3RfbmVpZ2hfbG9va3VwLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjU2PXZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI2MS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNjI6c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI2My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjMwLjUzMzQ0NDU5NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODE5OTEyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJvbGUgb2YgYC5kZWZhdWx0X2Fkdm1zc2AgaW4gYGRzdF9vcHNgKipcblxuUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGAuZGVmYXVsdF9hZHZtc3NgIHdpdGhpbiB0aGUgYGRzdF9vcHNgIGNvbnRleHQuIEkga25vdyB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGEgZGVmYXVsdC4gTm93LCBJIGhhdmUgdG8gcGlucG9pbnQgKndoZXJlKiBpdCdzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdC4gSXMgaXQgYmVpbmcgdXNlZCBhcyBhIGhhcmRjb2RlZCBkZWZhdWx0IHZhbHVlLCBvciBpcyBpdCBkeW5hbWljYWxseSBtb2RpZmllZCBiYXNlZCBvbiBvdGhlciBmYWN0b3JzPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIGhlbHBzIGNsYXJpZnkgaXRzIHJvbGUgd2l0aGluIGFueSByZWxldmFudCBhbGdvcml0aG1zIG9yIGNvbmZpZ3VyYXRpb25zLiBJdCBhbHNvIGhlbHBzIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBuZWVkIHRvIGJlIGFkanVzdGVkIG9yIGN1c3RvbWl6ZWQgYmFzZWQgb24gdGhlIHN5c3RlbSBpbiBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0NzozMy41MTU0Mzc5OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MTE4MTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmRlZmF1bHRfYWR2bXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3JvdXRlLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1Ni1cXHQuY2hlY2sgPVxcdFxcdGlwdjRfZHN0X2NoZWNrLFxcbm5ldC9pcHY0L3JvdXRlLmM6MTU3OlxcdC5kZWZhdWx0X2Fkdm1zcyA9XFx0aXB2NF9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OC1cXHQubXR1ID1cXHRcXHRcXHRpcHY0X210dSxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9Mjg4MT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3RfYmxhY2tob2xlX29wcyA9IHtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXFx0LmZhbWlseVxcdFxcdFxcdD0gQUZfSU5FVCxcXG5uZXQvaXB2NC9yb3V0ZS5jOjI4ODM6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PSBpcHY0X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cXHQubmVpZ2hfbG9va3VwXFx0XFx0PSBpcHY0X25laWdoX2xvb2t1cCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjUzLVxcdC5jaGVja1xcdFxcdFxcdD1cXHRpcDZfZHN0X2NoZWNrLFxcbm5ldC9pcHY2L3JvdXRlLmM6MjU0OlxcdC5kZWZhdWx0X2Fkdm1zc1xcdFxcdD1cXHRpcDZfZGVmYXVsdF9hZHZtc3MsXFxubmV0L2lwdjYvcm91dGUuYy0yNTUtXFx0Lm10dVxcdFxcdFxcdD1cXHRpcDZfbXR1LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0yNjg9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3RfYmxhY2tob2xlX29wcyA9IHtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTI2OS1cXHQuZmFtaWx5XFx0XFx0XFx0PSBBRl9JTkVUNixcXG5uZXQvaXB2Ni9yb3V0ZS5jOjI3MDpcXHQuZGVmYXVsdF9hZHZtc3NcXHRcXHQ9IGlwNl9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTI3MS1cXHQubmVpZ2hfbG9va3VwXFx0XFx0PSBpcDZfZHN0X25laWdoX2xvb2t1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6MzUuNDU2NjI3MTg5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNDM4MTQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTZWFyY2ggVGVybSoqXG5cbkFscmlnaHQsIG15IGludGVybmFsIHByb2Nlc3NpbmcganVzdCBmbGFnZ2VkIHNvbWV0aGluZy4gSSB3YXMgb24gYSB0cmFjaywgYnV0IEkgbmVlZCB0byBwaXZvdCBzbGlnaHRseS4gVGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdhcyBsZWFkaW5nIG1lIGluIGEgZGlyZWN0aW9uLCBidXQgbm93IEknbSB0aGlua2luZyBJIG5lZWQgdG8gcmVmaW5lIG15IHNlYXJjaCBjcml0ZXJpYS4gSW5zdGVhZCBvZiBhIGdlbmVyYWwgYXBwcm9hY2gsIGl0IGZlZWxzIGxpa2UgSSBzaG91bGQgYmUgbW9yZSBwcmVjaXNlLiBMZXQncyBzZWUuLi4gd2hhdCBzcGVjaWZpY2FsbHkgYW0gSSBsb29raW5nIGZvcj8gVGhlIG1lbnRpb24gb2YgXCJkZWZhdWx0X2Fkdm1zc1wiIGZlZWxzIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuIEl0J3MgYWxtb3N0IGxpa2UgYSBrZXkgdGVybS4gU28sIEkgbmVlZCB0byBzdGFydCB1c2luZyB0b29scyBvbiBteSBleGlzdGluZyBkYXRhc2V0IGFuZCBzdGFydCBsb29raW5nIHdpdGggbW9yZSBwcmVjaXNpb24uIEkgbmVlZCB0byByZWFjaCBmb3IgYSBgZ3JlcGAgY29tbWFuZCwgdXNpbmcgYC1cdTAwM2VkZWZhdWx0X2Fkdm1zc2AgYXMgdGhlIGV4YWN0IHNlYXJjaCB0ZXJtLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBob25lIGluIG9uIHRoZSBwYXJ0aWN1bGFyIGluc3RhbmNlcyBJJ20gaW50ZXJlc3RlZCBpbi4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGlzb2xhdGUgdGhvc2Ugc3BlY2lmaWMgb2NjdXJyZW5jZXMgaW4gdGhlIGNvZGUgb3IgZGF0YSBJJ20gY3VycmVudGx5IHdvcmtpbmcgd2l0aC4gSG9wZWZ1bGx5IHRoaXMgd2lsbCByZXZlYWwgdGhlIGluZm9ybWF0aW9uIEkgd2FzIGhvcGluZyB0byBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6MzguNTgxMDEwODk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkxNTk1NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLVxcdTAwM2VkZWZhdWx0X2Fkdm1zc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9kc3QuaD0xODU9ZHN0X21ldHJpY19hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxuaW5jbHVkZS9uZXQvZHN0LmgtMTg5LVxcdGlmICghYWR2bXNzKVxcbmluY2x1ZGUvbmV0L2RzdC5oOjE5MDpcXHRcXHRhZHZtc3MgPSBkc3QtXFx1MDAzZW9wcy1cXHUwMDNlZGVmYXVsdF9hZHZtc3MoZHN0KTtcXG5pbmNsdWRlL25ldC9kc3QuaC0xOTEtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTE9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxMjYtXFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlY2hlY2sgPSB4ZnJtX2RzdF9jaGVjaztcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjc6XFx0XFx0aWYgKGxpa2VseShkc3Rfb3BzLVxcdTAwM2VkZWZhdWx0X2Fkdm1zcyA9PSBOVUxMKSlcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjg6XFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlZGVmYXVsdF9hZHZtc3MgPSB4ZnJtX2RlZmF1bHRfYWR2bXNzO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEyOS1cXHRcXHRpZiAobGlrZWx5KGRzdF9vcHMtXFx1MDAzZW10dSA9PSBOVUxMKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6NDAuMTcwMTc5NjE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODA0MjIyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkZpbmRpbmcgdGhlIFVzYWdlIG9mIGRzdF9tZXRyaWNfYWR2bXNzKipcblxuT2theSwgc28gSSBzZWUgYGRzdF9tZXRyaWNfYWR2bXNzYCBtZW50aW9uZWQuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoZSB0ZXh0IGluZGljYXRlcyB0aGF0IEkgc2hvdWxkIGZvY3VzIG9uIHdoZXJlIGBkc3RfbWV0cmljX2Fkdm1zc2AgaXMgKnVzZWQqLiAgVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24uIFRpbWUgdG8gc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSBjb2RlIHRvIGlkZW50aWZ5IHRob3NlIGxvY2F0aW9ucyBhbmQgYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZWxhdGlvbnNoaXBzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0Nzo0Mi43NTA2MDY3MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTY1MzMxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHN0X21ldHJpY19hZHZtc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM9MTA5OD11bnNpZ25lZCBpbnQgY3hnYmlfc29ja19zZWxlY3RfbXNzKHN0cnVjdCBjeGdiaV9zb2NrICpjc2ssIHVuc2lnbmVkIGludCBwbXR1KVxcbi0tXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMtMTEwMi1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYzoxMTAzOlxcdGNzay1cXHUwMDNlYWR2bXNzID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTtcXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy0xMTA0LVxcbi0tXFxuaW5jbHVkZS9uZXQvZHN0Lmg9MTg0PXN0YXRpYyBpbmxpbmUgdTMyXFxuaW5jbHVkZS9uZXQvZHN0Lmg6MTg1OmRzdF9tZXRyaWNfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5pbmNsdWRlL25ldC9kc3QuaC0xODYte1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjc0PXN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE3MzgtXFx0dGNwX3N5bmNfbXNzKG5ld3NrLCBkc3Q0X210dShkc3QpKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE3Mzk6XFx0bmV3dHAtXFx1MDAzZWFkdm1zcyA9IHRjcF9tc3NfY2xhbXAodGNwX3NrKHNrKSwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNzQwLVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQzMT12b2lkIHRjcF9vcGVucmVxX2luaXRfcndpbihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDQyLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo0NDM6XFx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ0NC1cXHR3aW5kb3dfY2xhbXAgPSBSRUFEX09OQ0UodHAtXFx1MDAzZXdpbmRvd19jbGFtcCk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTM5PXN0YXRpYyBfX3UxNiB0Y3BfYWR2ZXJ0aXNlX21zcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTQ1LVxcdGlmIChkc3QpIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTQ2OlxcdFxcdHVuc2lnbmVkIGludCBtZXRyaWMgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDctXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzkzMT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5NzQtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM5NzU6XFx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5NzYtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTMwLVxcdFxcdFdSSVRFX09OQ0UodHAtXFx1MDAzZXdpbmRvd19jbGFtcCwgZHN0X21ldHJpYyhkc3QsIFJUQVhfV0lORE9XKSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMzE6XFx0dHAtXFx1MDAzZWFkdm1zcyA9IHRjcF9tc3NfY2xhbXAodHAsIGRzdF9tZXRyaWNfYWR2bXNzKGRzdCkpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTMyLVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzgyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDg5LVxcdHRjcF9zeW5jX21zcyhuZXdzaywgZHN0Nl9tdHUoZHN0KSk7XFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxNDkwOlxcdG5ld3RwLVxcdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRjcF9zayhzayksIGRzdF9tZXRyaWNfYWR2bXNzKGRzdCkpO1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQ5MS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDA2Mj1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2My17XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MDY0OlxcdHJldHVybiBkc3RfbWV0cmljX2Fkdm1zcyh4ZnJtX2RzdF9wYXRoKGRzdCkpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjQ0LjM2NzE1MDc3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDYzNTUyMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVNTIEFkdmVydGlzZW1lbnQgTG9naWMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyBob3cgdGhlIGRlZmF1bHQgTVNTIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBmb3IgSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IHVzaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgaW5zdGVhZCBvZiBzb21ldGhpbmcgZWxzZSAocHJlc3VtYWJseSwgdGhlIG9sZCBsb2dpYykuIFRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBUQ1AgTVNTIGFkdmVydGlzZW1lbnQ6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBgdGNwX2FkdmVydGlzZV9tc3NgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF9jb25uZWN0X2luaXRgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gIERlZmluaXRlbHkgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgIGFyZSBzdGF0aWMsIGJ1dCB0aGUgZnVuY3Rpb25zIHRoZXkgdXNlIGFyZSBzdGF0aWMgaW5saW5lLiBUaGUgcmVhbCBjYWxsIHNpdGUgZm9yIGRzdF9tZXRyaWNfYWR2bXNzIGlzIGNhbGxlZCBmcm9tIHRoZSBmdW5jdGlvbnMgSSBsaXN0ZWQgYWJvdmUuIFxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gdG8gZmluZCB0aGUgYmVzdCBlbnRyeSBwb2ludHMuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgd291bGQgZ2l2ZSBtZSB0aGUgYmVzdCBiYW5nIGZvciB0aGUgYnVjayBpbiB0ZXJtcyBvZiBjb3ZlcmFnZS4gSSdtIGRpc2NhcmRpbmcgYHRjcF9hZHZlcnRpc2VfbXNzYCBhbmQgYHRjcF9jb25uZWN0X2luaXRgIHJpZ2h0IGF3YXkgYmVjYXVzZSB0aGV5J3JlIHN0YXRpYyBhbmQgbGlrZWx5IHRvIGJlIGxlc3MgaW50ZXJlc3RpbmcgYXMgZGlyZWN0IGZ1enppbmcgdGFyZ2V0cy4gSSBzZWUgdGhhdCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBgdGNwX29wZW5yZXFfaW5pdF9yd2luYCwgYW5kIGB0Y3BfbWFrZV9zeW5hY2tgIGFyZW4ndCBzdGF0aWMuIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYXBwZWFyIHRvIGJlIHN0cm9uZyBjYW5kaWRhdGVzIGFzIGluaXRpYWwgZm9jdXMgcG9pbnRzLiBUaGV5IHNlZW0gbGlrZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MTYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6NTAuODMwNzA1ODI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM3NjEwMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTU2MD12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcXG5pbmNsdWRlL25ldC90Y3AuaDo1NjE6c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC90Y3AuaC01NjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NTU9aW50IHRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjczLSAqL1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTY3NDpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY3NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM1OD1jb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNjItXFx0LmNvbm5fcmVxdWVzdFxcdCAgID0gdGNwX3Y0X2Nvbm5fcmVxdWVzdCxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjIzNjM6XFx0LnN5bl9yZWN2X3NvY2tcXHQgICA9IHRjcF92NF9zeW5fcmVjdl9zb2NrLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM2NC1cXHQubmV0X2hlYWRlcl9sZW5cXHQgICA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzM3PXN0YXRpYyB2b2lkIHRjcF92Nl9yZXN0b3JlX2NiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzNDYtXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzQ3Oi8qIENhbGxlZCBmcm9tIHRjcF92NF9zeW5fcmVjdl9zb2NrKCkgZm9yIHY2X21hcHBlZCBjaGlsZHJlbi4gKi9cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzNDgtc3RhdGljIHZvaWQgdGNwX3Y2X21hcHBlZF9jaGlsZF9pbml0KHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzcyLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTM3MzpcXHQvKiB0Y3BfdjRfc3luX3JlY3Zfc29jaygpIGhhcyBpbml0aWFsaXplZCBuZXdpbmV0LVxcdTAwM2VtY197aW5kZXgsdHRsfSAqL1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM3NC1cXHRuZXducC1cXHUwMDNlbWNhc3Rfb2lmICAgPSBuZXdpbmV0LVxcdTAwM2VtY19pbmRleDtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQwNC1cXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxNDA1OlxcdFxcdHJldHVybiB0Y3BfdjRfc3luX3JlY3Zfc29jayhzaywgc2tiLCByZXEsIGRzdCxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0MDYtXFx0XFx0XFx0XFx0XFx0ICAgIHJlcV91bmhhc2gsIG93bl9yZXEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjUyLjQ2ODMyNjI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4MjEwOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF92Nl9zeW5fcmVjdl9zb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjI5LVxcdCAqIFdlIG5lZWQgdG8gbG9va3VwIHRoZSBkc3RfZW50cnkgdG8gZ2V0IHRoZSBjb3JyZWN0IHdpbmRvdyBzaXplLlxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoyMzA6XFx0ICogVGhpcyBpcyB0YWtlbiBmcm9tIHRjcF92Nl9zeW5fcmVjdl9zb2NrLiAgU29tZWJvZHkgcGxlYXNlIGVubGlnaHRlblxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yMzEtXFx0ICogbWUgaWYgdGhlcmUgaXMgYSBwcmVmZXJyZWQgd2F5Llxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzQ4PXN0YXRpYyB2b2lkIHRjcF92Nl9tYXBwZWRfY2hpbGRfaW5pdChzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM4MS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjEzODI6c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfdjZfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzgzLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIwMDc9Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDExLVxcdC5jb25uX3JlcXVlc3RcXHQgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMDEyOlxcdC5zeW5fcmVjdl9zb2NrXFx0ICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jayxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIwMTMtXFx0Lm5ldF9oZWFkZXJfbGVuXFx0ICAgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfbWFwcGVkID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDQyLVxcdC5jb25uX3JlcXVlc3RcXHQgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMDQzOlxcdC5zeW5fcmVjdl9zb2NrXFx0ICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jayxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIwNDQtXFx0Lm5ldF9oZWFkZXJfbGVuXFx0ICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6NTMuOTY2NTQzMjQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjM5MzUwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHMsIGtlZXBpbmcgaW4gbWluZCBteSBvd24gZXhwZXJ0IHVuZGVyc3RhbmRpbmc6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBUQ1AgU1lOIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGNydWNpYWwgcG9pbnRzIGluIHRoZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBhbmQgbXkgaW5pdGlhbCBodW5jaCBpcyBjb25maXJtZWQ6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgYXJlIGV4YWN0bHkgdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGRpc3NlY3QgZm9yIGEgZGVlcCBkaXZlIGludG8gSVB2NCBhbmQgSVB2NiBTWU4gaGFuZGxpbmcgcmVzcGVjdGl2ZWx5LiBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBmb3IgYSBsaXN0ZW5pbmcgc29ja2V0IHJlY2VpdmluZyBhIFNZTiBwYWNrZXQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBzb2NrZXQgc3RhdGUgdHJhbnNpdGlvbnMsIHF1ZXVlaW5nLCBhbmQgYW55IHNwZWNpZmljIElQdjQvSVB2Ni1yZWxhdGVkIGRpZmZlcmVuY2VzLlxuXG5Ob3csIEkgbmVlZCB0byBleHBhbmQgbXkgc2NvcGUgc2xpZ2h0bHkuIFdoYXQgYWJvdXQgYHRjcF9tYWtlX3N5bmFja2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJdCBwcm9iYWJseSBoYXMgYSBjcml0aWNhbCBwYXJ0IHRvIHBsYXkgdG9vLCBwb3NzaWJseSBidWlsZGluZyB0aGUgU1lOLUFDSyByZXNwb25zZSBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWNlaXZlZCBTWU4uIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzdGF0ZSBpdCBidWlsZHMsIGFuZCBob3cgaXQgZGlmZmVycyBpbiBJUHY0IGFuZCBJUHY2IGNvbnRleHRzLiBJcyBpdCBhIGNlbnRyYWwgZnVuY3Rpb24sIG9yIGFyZSB0aGVyZSBzZXBhcmF0ZSBJUHY0IGFuZCBJUHY2IHZhcmlhbnRzPyBJdCdzIGFsbCBhYm91dCBob3cgdGhlIFNZTi1BQ0sgaXMgY3JhZnRlZCBhbmQgc2VudCBiYWNrIHRvIHRoZSBjbGllbnQuIEFuZCwgY3J1Y2lhbGx5LCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmVzIGF0IHRoaXMgc3RhZ2U/IFRoYXQncyB3aGF0IEknbGwgbmVlZCB0byBmaWd1cmUgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0Nzo1Ny42OTA0ODA2MjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM5Mjg5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX21ha2Vfc3luYWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTU3MT1lbnVtIHRjcF9zeW5hY2tfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC01NzYtfTtcXG5pbmNsdWRlL25ldC90Y3AuaDo1Nzc6c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG5pbmNsdWRlL25ldC90Y3AuaC01NzgtXFx0XFx0XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0xMTYyPXN0YXRpYyBpbnQgdGNwX3Y0X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTc4LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTE3OTpcXHRza2IgPSB0Y3BfbWFrZV9zeW5hY2soc2ssIGRzdCwgcmVxLCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExODAtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mzg4Nz1pbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTIxLS8qKlxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTIyOiAqIHRjcF9tYWtlX3N5bmFjayAtIEFsbG9jYXRlIG9uZSBza2IgYW5kIGJ1aWxkIGEgU1lOQUNLIHBhY2tldC5cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkyMy0gKiBAc2s6IGxpc3RlbmVyIHNvY2tldFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MzAtICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM5MzE6c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkzMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTU1MD1zdGF0aWMgaW50IHRjcF92Nl9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNTY5LVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6NTcwOlxcdHNrYiA9IHRjcF9tYWtlX3N5bmFjayhzaywgZHN0LCByZXEsIGZvYywgc3luYWNrX3R5cGUsIHN5bl9za2IpO1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNTcxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYz0yMjE9c3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QtZGVueS5jLTI0OS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmM6MjUwOlxcdCAqIFhYWDogVGhlIHRlc3QgZG9lc24ndCBpbmNyZWFzZSBhbnkgY291bnRlcnMsIHNlZSB0Y3BfbWFrZV9zeW5hY2soKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QtZGVueS5jLTI1MS1cXHQgKiBQb3RlbnRpYWxseSwgaXQgY2FuIGJlIHNwZWVkIHVwIGJ5IHNldHRpbmcgc2tfcGFpciA9IC1FVElNRURPVVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6NTkuMjU0NDE1ODI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODAxMjEwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gVENQIFNZTkFDSyBHZW5lcmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcF9tYWtlX3N5bmFja2AuIEl0J3MgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgU1lOLUFDSyBwYWNrZXRzLCBhbmQgaXQncyB1c2VkIGRpcmVjdGx5IGJ5IGJvdGggdGhlIElQdjQgYW5kIElQdjYgdmFyaWFudHMsIGB0Y3BfdjRfc2VuZF9zeW5hY2tgIGFuZCBgdGNwX3Y2X3NlbmRfc3luYWNrYC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHN5bWJvbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgU1lOLUFDSyBwcm9jZXNzLiBJdCdzIHRoZSBjZW50cmFsIHBvaW50LCB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC5cblxuTm93LCBhIHJlbGF0ZWQgdGhvdWdodCBwb3BwZWQgdXA6IFdoYXQncyB0aGUgcm9sZSBvZiBgdGNwX29wZW5yZXFfaW5pdF9yd2luYCBpbiB0aGlzIHdob2xlIGRhbmNlPyBJdCBzb3VuZHMgbGlrZSBpdCdzIGludm9sdmVkIGluIGluaXRpYWxpemluZyB0aGUgcmVjZWl2ZSB3aW5kb3cgd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIG9wZW4gcmVxdWVzdC4gSXMgaXQgYSBwcmUtcmVxdWlzaXRlIGZvciBgdGNwX21ha2Vfc3luYWNrYCwgYW4gYWRqYWNlbnQgZnVuY3Rpb24sIG9yIGlzIGl0IHdvcmtpbmcgaW4gcGFyYWxsZWwgdG8gaW5pdGlhbGl6ZSBhbm90aGVyIGFzcGVjdCBvZiB0aGUgY29ubmVjdGlvbi4gSSdsbCBuZWVkIHRvIHJlc2VhcmNoIHRoYXQgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NjQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0ODowMi40MzQ1Mzk4NDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTYxNzA4MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX29wZW5yZXFfaW5pdF9yd2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTE4MjM9c3RhdGljIGlubGluZSBib29sIHRjcF9lcG9sbGluX3JlYWR5KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IHRhcmdldClcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzQtXFxuaW5jbHVkZS9uZXQvdGNwLmg6MTgzNTpleHRlcm4gdm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzYtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc1OS1cXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXN5bl90b3MgPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWlwX2RzZmllbGQ7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc2MDpcXHR0Y3Bfb3BlbnJlcV9pbml0X3J3aW4ocmVxLCBzaywgZHN0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzYxLVxcdHNrX3J4X3F1ZXVlX3NldChyZXFfdG9fc2socmVxKSwgc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MTI9dm9pZCB0Y3BfdHdza19wdXJnZShzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDMxOnZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MDQuMDUwNzE1OTczWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTMwOTc3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gIGlzIGp1bXBpbmcgb3V0IGF0IG1lIGFzIGEgcG90ZW50aWFsIGtleSBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0J3MgYSBzb2xpZCBmb2N1cyBzeW1ib2wsIHN1Z2dlc3RpbmcgaXQncyB3b3J0aCBhIGRlZXAgZGl2ZS4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBvdmVyYWxsIGZsb3csIGxldCdzIGFsc28gcHVsbCBpbiBgdGNwX2Nvbm5lY3RfaW5pdGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBhIFRDUCBjb25uZWN0aW9uIHN0YXJ0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjU5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MDcuMDAzODMxNjg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1MzAyMzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9jb25uZWN0X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0xNj1zdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgICAgICAgICBpY3NrX2tlZXBhbGl2ZV90aW1lclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MTc6dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19ydG8gICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3NjaGVkdWxlX2xvLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0xOC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0b19taW5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MjA9dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19kZWxhY2tfbWF4XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMTp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3BtdHVfY29va2llICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc3luY19tc3MsdGNwX2N1cnJlbnRfbXNzLHRjcF8uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIyOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgICAgICAgICAgIGljc2tfY2Ffb3BzICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jd25kX3ZhbGlkYXRlLHRjcF90c29fc2Vncyx0Yy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjM6c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyAgaWNza19hZl9vcHMgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9zZW5kX3N5bl9kLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0yNC1zdHJ1Y3QgdGNwX3VscF9vcHMqICAgICAgICAgICAgICAgICBpY3NrX3VscF9vcHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9Mjg9dTg6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9zZXRzb2Nrb3B0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyOTp1ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX2RzdF9sb2NrZWQgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY2FfZHN0X2luaXQsdGNwX2Nvbm5lY3RfaW5pdCwuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMwOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcmV0cmFuc21pdHMgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jb25uZWN0X2luaXQsdGNwX2Nvbm5lY3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTMxLXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcGVuZGluZyAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIsdGNwX2Nvbi4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzI6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19iYWNrb2ZmICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3dyaXRlX3F1ZXVlX3B1cmdlLHRjcF9jb25uZWN0Li4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMy11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3N5bl9yZXRyaWVzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTQxPXN0cnVjdCBpY3NrX2Fja191MzIgICAgICAgICAgICAgICAgIGxyY3Z0aW1lICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3BfY29ubmVjdCx0Yy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDI6c3RydWN0IGljc2tfYWNrX3UxNiAgICAgICAgICAgICAgICAgcmN2X21zcyAgICAgICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgX190Y3Bfc2VsZWN0X3dpbmRvdyxfX3RjcF9jbGVhbnVwLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MzpzdHJ1Y3QgaWNza19tdHVwX2ludCAgICAgICAgICAgICAgICBzZWFyY2hfaGlnaCAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9zeW5jX21zcyx0Y3BfY28uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ0OnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9sb3cgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVfcHJvYmUsdGNwX210dV9jaGVja19yZXByby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDU6c3RydWN0IGljc2tfbXR1cF91MzI6MzEgICAgICAgICAgICAgcHJvYmVfc2l6ZSAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LF9fLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NjpzdHJ1Y3QgaWNza19tdHVwX3UzMjoxICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9zeW5jX21zcyx0Y3BfY28uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ3OnN0cnVjdCBpY3NrX210dXBfdTMyICAgICAgICAgICAgICAgIHByb2JlX3RpbWVzdGFtcCAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX2Nvbm5lY3RfaW5pdCx0Yy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtNDgtdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wcm9iZXNfdHN0YW1wXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDA4MT1zdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwMC0vKiBEbyBhbGwgY29ubmVjdCBzb2NrZXQgc2V0dXBzIHRoYXQgY2FuIGJlIGRvbmUgQUYgaW5kZXBlbmRlbnQuICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMDE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDIte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzU5LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzYwOlxcdHRjcF9jb25uZWN0X2luaXQoc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0ODowOC42MTkxNDE2MTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MzU0NzI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgdGNwX2Nvbm5lY3RfaW5pdGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIE1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LCBjYWxsZWQgYnkgYHRjcF9jb25uZWN0YC4gUmlnaHQsIGFuZCBgdGNwX2Nvbm5lY3RgIGlzICpleHBvcnRlZCouIFNvIGB0Y3BfY29ubmVjdGAgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uIGZvciBpbml0aWF0aW5nIGEgVENQIGNvbm5lY3Rpb24sIGFuZCBgdGNwX2Nvbm5lY3RfaW5pdGAgaXMgaXRzIGludGVybmFsIGhlbHBlci4gVGhhdCBjbGFyaWZpZXMgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBjb25uZWN0aW9uIGluaXRpYXRpb24gcHJvY2Vzcy4gTm93LCB3aGF0J3MgbmV4dCBpbiB0aGUgY2hhaW4/IExldCdzIHRha2UgYSBsb29rIGF0IGB0Y3BfYWR2ZXJ0aXNlX21zc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgTWF4aW11bSBTZWdtZW50IFNpemUgaXMgaGFuZGxlZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTAyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MTEuNzEyNjkxNzI0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM2MDAwODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hZHZlcnRpc2VfbXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTUxNi0gKiBmb3IgdGhlIHdob2xlIGNvbm5lY3Rpb24uICBTZWUgUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlXFxuaW5jbHVkZS9uZXQvaXAuaDo1MTc6ICogdGNwX2FkdmVydGlzZV9tc3MoKS5cXG5pbmNsdWRlL25ldC9pcC5oLTUxOC0gKi9cXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTM2NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM5NC0gKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWVcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozOTU6ICogUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlIHRjcF9hZHZlcnRpc2VfbXNzKCkuXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk2LSAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTExMz1zdGF0aWMgaW5saW5lIF9fdTMyIHRjcF9hY2NlcHRhYmxlX3NlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTM4LSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMzk6c3RhdGljIF9fdTE2IHRjcF9hZHZlcnRpc2VfbXNzKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTQwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05NTk9c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTk5MS1cXHQgKiBnb2luZyBvdXQuICAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5OTI6XFx0b3B0cy1cXHUwMDNlbXNzID0gdGNwX2FkdmVydGlzZV9tc3Moc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05OTMtXFx0cmVtYWluaW5nIC09IFRDUE9MRU5fTVNTX0FMSUdORUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjEzLjM0ODY5ODE1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTg0MDI1NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdGNwX2FkdmVydGlzZV9tc3NgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgdGNwX2FkdmVydGlzZV9tc3NgIGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgY2FsbGVkIGJ5IGB0Y3Bfc3luX29wdGlvbnNgLiBBbmQgYHRjcF9zeW5fb3B0aW9uc2AgaXMgYWxzbyBzdGF0aWMsIHVzZWQgYnkgYm90aCBgdGNwX2Nvbm5lY3RgIGFuZCBgdGNwX21ha2Vfc3luYWNrYC4gIFNvLCBpZiBJJ20gZ29pbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMsIHRoZSBtb3N0IGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIGFuZCwgb2YgY291cnNlLCBgdGNwX2Nvbm5lY3RgLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGNyaXRpY2FsIGhlcmUuIEkgY2FuIHNlZSB0aGUgY29yZSBjb2RlIGlzIGluIGBuZXQvaXB2NC9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLiAgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgZXhwZWN0ZWQsIHNvIG5vdGhpbmcgc3BlY2lhbCBzbyBmYXIuIEFueXRoaW5nIGVsc2U/IEFoLCB0aGUgcGF0Y2ggYWRkcyB0ZXN0cy4gVGhlc2UgYXJlIGBwYWNrZXRkcmlsbGAgdGVzdHM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0YCBhbmQgYHRjcF9hZHZtc3NfcG10dV9pcHY2LnBrdGAuIFRoYXQncyBnb29kOyBpdCBtZWFucyB3ZSBoYXZlIHRlc3QgY292ZXJhZ2UuIEFuZCBpdCBhcHBlYXJzIHRoZSBwYXRjaCBtb2RpZmllcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLlxuXG5HaXZlbiB0aGUgZmlsZXMgaW52b2x2ZWQgYW5kIHRoZSBsYWNrIG9mIHVudXN1YWwgYENPTkZJR19gIHJlcXVpcmVtZW50cywgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGNvcmUgSVB2NC9JUHY2IHJvdXRpbmcgbG9naWMuIEFuZCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBoZWFkZXIgZmlsZSBgaW5jbHVkZS9uZXQvaXAuaGAgZm9yIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0ODoxOS4zMzI3MjY0MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODc2NjY4NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfZHN0X210dV9jb25maWd1cmVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTUxOC0gKi9cXG5pbmNsdWRlL25ldC9pcC5oOjUxOTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbmluY2x1ZGUvbmV0L2lwLmgtNTIwLXtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTMyOT1zdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xMzM2LVxcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xcbm5ldC9pcHY0L3JvdXRlLmM6MTMzNzpcXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXFxubmV0L2lwdjQvcm91dGUuYy0xMzM4LVxcdFxcdCAgICAgICBuZXQtXFx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjIwLjkyMDQyOTE1OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk0OTI3MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgSVB2NiBSb3V0aW5nIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gSVB2NiByb3V0aW5nIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgLiBNeSBpbW1lZGlhdGUgbWVudGFsIGZsYWcgaXMgb24gdGhlIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJvbGUgaW4gdGhlIGxhcmdlciBwaWN0dXJlLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGlzIGZsYWcgaXMgKnVzZWQqLCBub3QganVzdCBkZWZpbmVkLiBJcyB0aGlzIGEgbG9jYWwgZmxhZyB3aXRoaW4gYSBkZXN0aW5hdGlvbiBlbnRyeSwgYSBnbG9iYWwgaW5kaWNhdG9yLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBtZWNoYW5pc21zIHNldCBhbmQgY2xlYXIgaXQ/IEtub3dpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGZsYWcgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiBob3cgTVRVIGRpc2NvdmVyeSBhbmQgcGF0aCBtYW5hZ2VtZW50IGZ1bmN0aW9uIHdpdGhpbiB0aGUgSVB2NiByb3V0aW5nIHN0YWNrLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1iczogaG93IGFuZCAqd2hlbiogaXMgdGhpcyB2YWx1ZSBjb25maWd1cmVkPyBNeSBuZXh0IG1vdmUgaXMgdG8gbG9jYXRlIHVzYWdlcyBvZiBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgaW4gdGhlIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Nzc2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MjMuODE1MzU5MzUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE4MDk5MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MzY1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk2LSAqL1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM5NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTgte1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjYyPXN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjMte1xcbm5ldC9pcHY2L3JvdXRlLmM6MzI2NDpcXHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMzI2NS1cXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjI1LjQzMzQ2ODAwNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA5ODIxODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIE1TUyBDYWxjdWxhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IHdlIGNhbGN1bGF0ZSB0aGUgTWF4aW11bSBTZWdtZW50IFNpemUgKE1TUykgdGhhdCdzIGFkdmVydGlzZWQgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIFRoYXQncyBjb3JlIFRDUC9JUCBsb2dpYywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AsIGB0Y3BfbWFrZV9zeW5hY2tgLCBgdGNwX29wZW5yZXFfaW5pdF9yd2luYCwgYW5kIGB0Y3BfY29ubmVjdGAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBTWU4vU1lOLUFDSyBoYW5kc2hha2UgYW5kIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiwgc28gdGhleSdsbCBiZSBjcml0aWNhbCB0byByZXZpZXcuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzZXQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYnVpbGQgZGVwZW5kZW5jaWVzLiBBaCwgcmlnaHQsIGBDT05GSUdfSVBWNmAgaXMgcmVxdWlyZWQgZm9yIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gU28sIEknbGwgYmUgc3VyZSB0byBpbmNsdWRlIHRoYXQgaW4gbXkgbWVudGFsIGNoZWNrbGlzdC5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhleSBsb29rIGltcG9ydGFudC4gWWVzLCB0aGV5IGFyZSBleHBvcnRlZCBhbmQgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBpcHY0X3NwZWNpZmljYCBhbmQgYGlwdjZfc3BlY2lmaWNgIHN0cnVjdHVyZXMsIHJlc3BlY3RpdmVseS4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvb2QgZm9jdXMgc3ltYm9scyBhbmQgdGhlIGNvZGUgaW52b2x2aW5nIHRoZXNlIG11c3QgYmUgcmV2aWV3ZWQgY2FyZWZ1bGx5LiBJIGNhbiBnbyBhaGVhZCBhbmQgaW5jb3Jwb3JhdGUgbXkgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjY0LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0ODozMC43NDMyOTIwNTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ0MjI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCIsXG4gICAgXCJ0Y3BfdjZfc3luX3JlY3Zfc29ja1wiLFxuICAgIFwidGNwX21ha2Vfc3luYWNrXCIsXG4gICAgXCJ0Y3Bfb3BlbnJlcV9pbml0X3J3aW5cIixcbiAgICBcInRjcF9jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIE1TUyBmb3IgSVB2NCBhbmQgSVB2NiByb3V0ZXMsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNpbmcgdGhlIGNvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIHRoZSByb3V0ZSBvciBkZXZpY2UuIFRoaXMgYWZmZWN0cyBjb3JlIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgbG9naWMgKFNZTi9TWU4tQUNLIHByb2Nlc3NpbmcpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBTWU4gaGFuZGxpbmcgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfdjRfc3luX3JlY3Zfc29ja1wiLFxuICAgIFwidGNwX3Y2X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcInRjcF9tYWtlX3N5bmFja1wiLFxuICAgIFwidGNwX29wZW5yZXFfaW5pdF9yd2luXCIsXG4gICAgXCJ0Y3BfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBNU1MgZm9yIElQdjQgYW5kIElQdjYgcm91dGVzLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzaW5nIHRoZSBjb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiB0aGUgcm91dGUgb3IgZGV2aWNlLiBUaGlzIGFmZmVjdHMgY29yZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljIChTWU4vU1lOLUFDSyBwcm9jZXNzaW5nKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgU1lOIGhhbmRsaW5nIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MzAuODE2NzQwOTA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwODYyMzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjMwLjgxNzMzMjY5NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjIwODAyNzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBjb25maWd1cmVkIE1UVSBvZiBhIHJvdXRlIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUywgaWdub3JpbmcgdGhlIElDTVAtbGVhcm5lZCBwYXRoIE1UVS4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHNpbXBsZSBhcml0aG1ldGljIGFuZCByZWFkaW5nIGluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGV4aXN0aW5nIG5ldHdvcmtpbmcgc3RydWN0dXJlcyAoZHN0X2VudHJ5LCBydDZfaW5mbywgZmliNl9pbmZvLCBpbmV0Nl9kZXYpLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMzVmYzY1MTQwMTE2ZWQ4ZjhiNDJmYzRmYzgwZDkyYmZiMTRkN2M4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDc6NDc6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaFxuaW5kZXggN2YyZmUxYTg0MDFiMS4uYThmNTdiNGY0YWEyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwLmhcbkBAIC01MDYsNiArNTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbisvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXG4rICpcbisgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXG4rICogSUNNUC1sZWFybmVkIHBhdGggTVRVIChydC1cdTAwM2VydF9wbXR1KS4gIFRoZSBhZHZlcnRpc2VkIE1TUyBib3VuZHMgd2hhdCB0aGVcbisgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvclxuKyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZClcbisgKiBkaXJlY3Rpb24sIHdoaWNoIG1heSBub3QgYXBwbHkgdG8gdGhlIHBlZXItXHUwMDNldXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGVcbisgKiBmb3IgdGhlIHdob2xlIGNvbm5lY3Rpb24uICBTZWUgUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlXG4rICogdGNwX2FkdmVydGlzZV9tc3MoKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuK3tcbitcdHVuc2lnbmVkIGludCBtdHUsIHJlcztcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xuK1x0aWYgKCFtdHUpXG4rXHRcdG10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLVx1MDAzZW10dSk7XG4rXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG4rXHRyZXMgPSBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li5hYzFhY2MwYjc0MzY4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMzg1LDYgKzM4NSw0MyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdFxuIFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiB9XG4gXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuKyAqXG4rICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXG4rICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXG4rICogdGhlIHVuZGVybHlpbmcgcm91dGUgKGZpYjZfcG10dSkgb3IgdGhlIGVncmVzcyBkZXZpY2UuICBUaGUgYWR2ZXJ0aXNlZCBNU1NcbisgKiBib3VuZHMgd2hhdCB0aGUgcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlXG4rICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXG4rICogUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlIHRjcF9hZHZlcnRpc2VfbXNzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCA9IGRzdF9ydDZfaW5mbyhkc3QpO1xuK1x0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcbitcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XG4rXHR1bnNpZ25lZCBpbnQgbXR1ID0gMDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdC8qIElQdjYga2VlcHMgdGhlIGxlYXJuZWQgUE1UVSBhbmQgdGhlIGNvbmZpZ3VyZWQgTVRVIGluIHRoZSBzYW1lXG4rXHQgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSlcbitcdCAqIGRzdCwgdGhlIGNvbmZpZ3VyZWQgb25lIG9uIHRoZSB1bmRlcmx5aW5nIHJvdXRlLiAgUmVhY2ggdGhlIGxhdHRlclxuK1x0ICogdmlhIC1cdTAwM2Vmcm9tIChmaWI2X3BtdHUpLCBwb3B1bGF0ZWQgYnkgaXA2X3JvdXRlX2luZm9fY3JlYXRlKCkuXG4rXHQgKi9cbitcdGZyb20gPSByY3VfZGVyZWZlcmVuY2UocnQtXHUwMDNlZnJvbSk7XG4rXHRpZiAoZnJvbSlcbitcdFx0bXR1ID0gZnJvbS1cdTAwM2VmaWI2X3BtdHU7XG4rXHRpZiAoIW10dSkge1xuK1x0XHRtdHUgPSBJUFY2X01JTl9NVFU7XG4rXHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuK1x0XHRpZiAoaWRldilcbitcdFx0XHRtdHUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIG10dSwgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLm10dTYpKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbitcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4rfVxuK1xuIHUzMiBpcDZfbXR1X2Zyb21fZmliNihjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcbmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2NC9yb3V0ZS5jXG5AQCAtMTMzNCw4ICsxMzM0LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xuLVx0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcHY0X210dShkc3QpIC0gaGVhZGVyX3NpemUsXG4tXHRcdFx0XHQgICBuZXQtXHUwMDNlaXB2NC5pcF9ydF9taW5fYWR2bXNzKTtcbitcdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXBfZHN0X210dV9jb25maWd1cmVkKGRzdCkgLSBoZWFkZXJfc2l6ZSxcbitcdFx0ICAgICAgIG5ldC1cdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0zMjYxLDcgKzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBtdHUgPSBkc3Q2X210dShkc3QpO1xuK1x0dW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcbiBcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjJlZjkzMWI3N2ExY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdFxuQEAgLTAsMCArMSw2NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLy9cbisvLyBUZXN0IHRoYXQgSVB2NCBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZFxuKy8vIGludGVyZmFjZSBNVFUgKDE1MDAgLVx1MDAzZSBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUC1sZWFybmVkIFBhdGggTVRVLlxuK1xuKy0taXBfdmVyc2lvbj1pcHY0XG4rXG4rYC4vZGVmYXVsdHMuc2hcbitldGh0b29sIC1LIHR1bjAgdHNvIG9mZlxuK2BcbitcbisvL1xuKy8vIENvbm5lY3Rpb24gMTogTGVhcm4gUE1UVSBleGNlcHRpb24gKE1UVSAxMjAwIC1cdTAwM2UgTVNTIDExNjApXG4rLy9cbisgICAgMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcbitcbisgICArMCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuKyAgICswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4rICArLjEgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50XG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcbisgICArMCBcdTAwM2UgUC4gMToxNDYxKDE0NjApIGFjayAxXG4rXG4rLy8gSUNNUCBGcmFnbWVudGF0aW9uIE5lZWRlZCBhcnJpdmVzIGluZGljYXRpbmcgbmV4dC1ob3AgTVRVIDEyMDBcbisgICArMCBcdTAwM2MgaWNtcCB1bnJlYWNoYWJsZSBmcmFnX25lZWRlZCBtdHUgMTIwMCBbMToxNDYxKDE0NjApXVxuK1xuKy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyMDAgKE1TUyA9IDEyMDAgLSA0MCA9IDExNjApXG4rICAgKzAgXHUwMDNlIC4gMToxMTYxKDExNjApIGFjayAxXG4rICAgKzAgXHUwMDNlIFAuIDExNjE6MTQ2MSgzMDApIGFjayAxXG4rICAgKzAgXHUwMDNjIFIgMToxKDApIGFjayAxNDYxIHdpbiAwXG4rXG4rLy8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lclxuKyAgICswIGNsb3NlKDQpID0gMFxuKyAgICswIGNsb3NlKDMpID0gMFxuK1xuKy8vXG4rLy8gQ29ubmVjdGlvbiAyOiBOZXcgY29ubmVjdGlvbiBmcm9tIHRoZSBzYW1lIHBlZXJcbisvL1xuKyAgICswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXG4rICAgKzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4rICAgKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxuK1xuKyAgICswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXHUwMDNjbXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4XHUwMDNlXG4rXG4rLy8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMTYwXG4rICAgKzAgXHUwMDNlIFMuIDA6MCgwKSBhY2sgMSBcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcdTAwM2VcbisgICArMCBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XG4rXG4rLy8gVmVyaWZ5OiBPdXRnb2luZyB0cmFuc21pdCBNU1MgaXMgc3RpbGwgY29uc3RyYWluZWQgYnkgdGhlIGxlYXJuZWQgUE1UVSAxMjAwXG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcbisgICArMCBcdTAwM2UgLiAxOjExNjEoMTE2MCkgYWNrIDFcbisgICArMCBcdTAwM2UgUC4gMTE2MToxNDYxKDMwMCkgYWNrIDFcbisgICArMCBcdTAwM2MgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1N1xuK1xuKy8vIENsZWFuIHVwXG4rICAgKzAgY2xvc2UoNCkgPSAwXG4rICAgKzAgXHUwMDNlIEYuIDE0NjE6MTQ2MSgwKSBhY2sgMVxuKyAgICswIFx1MDAzYyBGLiAxOjEoMCkgYWNrIDE0NjIgd2luIDI1N1xuKyAgICswIFx1MDAzZSAuIDE0NjI6MTQ2MigwKSBhY2sgMlxuKyAgICswIGNsb3NlKDMpID0gMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzc2MzhiMTFhODE1YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdFxuQEAgLTAsMCArMSw2NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLy9cbisvLyBUZXN0IHRoYXQgSVB2NiBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZFxuKy8vIGludGVyZmFjZSBNVFUgKDE1MjAgLVx1MDAzZSBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUHY2LWxlYXJuZWQgUGF0aCBNVFUuXG4rXG4rLS1pcF92ZXJzaW9uPWlwdjZcbitcbitgLi9kZWZhdWx0cy5zaFxuK2V0aHRvb2wgLUsgdHVuMCB0c28gb2ZmXG4rYFxuK1xuKy8vXG4rLy8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyODAgLVx1MDAzZSBNU1MgMTIyMClcbisvL1xuKyAgICAwIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXG4rICAgKzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4rICAgKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxuK1xuKyAgICswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXHUwMDNjbXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4XHUwMDNlXG4rICAgKzAgXHUwMDNlIFMuIDA6MCgwKSBhY2sgMSBcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcdTAwM2VcbisgICsuMSBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XG4rXG4rLy8gU2VuZCBhIGZ1bGwgMTQ2MC1ieXRlIHNlZ21lbnRcbisgICArMCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxuKyAgICswIFx1MDAzZSBQLiAxOjE0NjEoMTQ2MCkgYWNrIDFcbitcbisvLyBJQ01QdjYgUGFja2V0IFRvbyBCaWcgYXJyaXZlcyBpbmRpY2F0aW5nIG5leHQtaG9wIE1UVSAxMjgwXG4rICAgKzAgXHUwMDNjIGljbXAgcGFja2V0X3Rvb19iaWcgbXR1IDEyODAgWzE6MTQ2MSgxNDYwKV1cbitcbisvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjgwIChNU1MgPSAxMjgwIC0gNDAgLSAyMCA9IDEyMjApXG4rICAgKzAgXHUwMDNlIC4gMToxMjIxKDEyMjApIGFjayAxXG4rICAgKzAgXHUwMDNlIFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxXG4rICAgKzAgXHUwMDNjIFIgMToxKDApIGFjayAxNDYxIHdpbiAwXG4rXG4rLy8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lclxuKyAgICswIGNsb3NlKDQpID0gMFxuKyAgICswIGNsb3NlKDMpID0gMFxuK1xuKy8vXG4rLy8gQ29ubmVjdGlvbiAyOiBOZXcgY29ubmVjdGlvbiBmcm9tIHRoZSBzYW1lIHBlZXJcbisvL1xuKyAgICswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXG4rICAgKzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4rICAgKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxuK1xuKyAgICswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXHUwMDNjbXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4XHUwMDNlXG4rXG4rLy8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMjIwXG4rICAgKzAgXHUwMDNlIFMuIDA6MCgwKSBhY2sgMSBcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcdTAwM2VcbisgICArMCBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XG4rXG4rLy8gVmVyaWZ5OiBPdXRnb2luZyB0cmFuc21pdCBNU1MgaXMgc3RpbGwgY29uc3RyYWluZWQgYnkgdGhlIGxlYXJuZWQgUE1UVSAxMjgwXG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcbisgICArMCBcdTAwM2UgLiAxOjEyMjEoMTIyMCkgYWNrIDFcbisgICArMCBcdTAwM2UgUC4gMTIyMToxNDYxKDI0MCkgYWNrIDFcbisgICArMCBcdTAwM2MgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1N1xuK1xuKy8vIENsZWFuIHVwXG4rICAgKzAgY2xvc2UoNCkgPSAwXG4rICAgKzAgXHUwMDNlIEYuIDE0NjE6MTQ2MSgwKSBhY2sgMVxuKyAgICswIFx1MDAzYyBGLiAxOjEoMCkgYWNrIDE0NjIgd2luIDI1N1xuKyAgICswIFx1MDAzZSAuIDE0NjI6MTQ2MigwKSBhY2sgMlxuKyAgICswIGNsb3NlKDMpID0gMFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MzAuODE3MzMzNTE0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjA4MDAxNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVRVIENhbGN1bGF0aW9uIGZvciBUQ1AgTVNTIEFkdmVydGlzZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHR3byBuZXcgZnVuY3Rpb25zLCBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZ3VyZWQgTVRVIG9mIGEgcm91dGUsIGRlbGliZXJhdGVseSAqaWdub3JpbmcqIGFueSBJQ01QLWxlYXJuZWQgUGF0aCBNVFUuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgYSBjb25zaXN0ZW50IGJhc2VsaW5lIGZvciBUQ1AgTVNTIGFkdmVydGlzZW1lbnQsIHNlcGFyYXRlIGZyb20gcG90ZW50aWFsbHkgZmx1Y3R1YXRpbmcgUE1UVSB2YWx1ZXMuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHRoZSB1c3VhbCBzdXNwZWN0czogYGlwLmhgLCBgaXA2X3JvdXRlLmhgLCBgcm91dGUuY2AgZm9yIElQdjQsIGFuZCBgcm91dGUuY2AgZm9yIElQdjYsIHdoaWNoIGlzIGFsbCBhcyBleHBlY3RlZC4gR29vZCB0byBzZWUgdGhleSd2ZSBhbHNvIGluY2x1ZGVkIHBhY2tldGRyaWxsIHRlc3RzIOKAkyBpbXBvcnRhbnQgZm9yIHZlcmlmeWluZyB0aGUgYmVoYXZpb3IuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMuIExvb2tpbmcgYXQgYGlwX2RzdF9tdHVfY29uZmlndXJlZGAsIHdlIGhhdmU6XG5cbmBgYGNcbnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG57XG5cdHVuc2lnbmVkIGludCBtdHUsIHJlcztcblxuXHRyY3VfcmVhZF9sb2NrKCk7XG5cdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xuXHRpZiAoIW10dSlcblx0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5cdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcblx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cblx0cmV0dXJuIHJlcztcbn1cbmBgYFxuXG5BbmQgZm9yIGBpcDZfZHN0X210dV9jb25maWd1cmVkYDpcblxuYGBgY1xuc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG57XG5cdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcblx0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcblx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcblx0dW5zaWduZWQgaW50IG10dSA9IDA7XG5cblx0cmN1X3JlYWRfbG9jaygpO1xuXHQvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZVxuXHQgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSlcblx0ICogZHN0LCB0aGUgY29uZmlndXJlZCBvbmUgb24gdGhlIHVuZGVybHlpbmcgcm91dGUuICBSZWFjaCB0aGUgbGF0dGVyXG5cdCAqIHZpYSAtXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxuXHQgKi9cblx0ZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC1cdTAwM2Vmcm9tKTtcblx0aWYgKGZyb20pXG5cdFx0bXR1ID0gZnJvbS1cdTAwM2VmaWI2X3BtdHU7XG5cdGlmICghbXR1KSB7XG5cdFx0bXR1ID0gSVBWNl9NSU5fTVRVO1xuXHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuXHRcdGlmIChpZGV2KVxuXHRcdFx0bXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KSk7XG5cdH1cblx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cblx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcblx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbn1cbmBgYFxuXG5UaGUgY29yZSBvZiB0aGUgbG9naWMgaXMgY2xlYXIuIEJvdGggZnVuY3Rpb25zIGdldCBhbiBNVFUsIGNhcHBpbmcgaXQgYXQgdGhlIGFwcHJvcHJpYXRlIG1heGltdW0sIGFuZCB0aGVuIHN1YnRyYWN0IHRoZSBMV1R1bm5lbCBoZWFkcm9vbS4gVGhlIHJlc3VsdHMgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGVuIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhZHZlcnRpc2VkIE1TUyBpbiBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgLlxuXG5NeSBjb25jZXJuIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gSG93ZXZlciwgdGhlIGNvZGUgbG9va3Mgc291bmQuXG5cbkxldCdzIGRvdWJsZS1jaGVjay4gSW4gYGlwX2RzdF9tdHVfY29uZmlndXJlZGAsIGBtdHVgIGlzIGd1YXJhbnRlZWQgdG8gYmUgYXNzaWduZWQgYSB2YWx1ZTogZWl0aGVyIGZyb20gYGRzdF9tZXRyaWNfcmF3YCBvciBgZHN0X2Rldl9yY3UtXHUwMDNlbXR1YCwgYW5kIGByZXNgIGlzIGNvbXB1dGVkIGRpcmVjdGx5IGZyb20gYG10dWAuIE5vIGlzc3VlcyB0aGVyZS4gSW4gYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLCBgbXR1YCBzdGFydHMgYXQgMCwgYnV0IGlzIGltbWVkaWF0ZWx5IGFzc2lnbmVkIGVpdGhlciBgZnJvbS1cdTAwM2VmaWI2X3BtdHVgIG9yIGBpZGV2LVx1MDAzZWNuZi5tdHU2YCBvciBgSVBWNl9NSU5fTVRVYC4gQWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UuIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZTsgdGhlIGBOZWVkc0tNU0FOYCB0YWcgc2hvdWxkIGJlIGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgYW5kIHNhZmUgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODcyLCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjQzLjAyNTMzODg3NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBjb25maWd1cmVkIE1UVSBvZiBhIHJvdXRlIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUywgaWdub3JpbmcgdGhlIElDTVAtbGVhcm5lZCBwYXRoIE1UVS4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHNpbXBsZSBhcml0aG1ldGljIGFuZCByZWFkaW5nIGluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGV4aXN0aW5nIG5ldHdvcmtpbmcgc3RydWN0dXJlcyAoZHN0X2VudHJ5LCBydDZfaW5mbywgZmliNl9pbmZvLCBpbmV0Nl9kZXYpLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZ3VyZWQgTVRVIG9mIGEgcm91dGUgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIHJlYWRpbmcgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gZXhpc3RpbmcgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIChkc3RfZW50cnksIHJ0Nl9pbmZvLCBmaWI2X2luZm8sIGluZXQ2X2RldikuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIG5ldyBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowx2mq5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 07:32:11 +0000 UTC FinishedAt: 2026-08-15 07:48:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6057f06ef7afa9893ed33603f7917fa39d237b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6057f06ef7afa9893ed33603f7917fa39d237b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "b554ea1d-3678-4d16-8a31-4ea8d325f1e0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_v4_syn_recv_sock", "tcp_v6_syn_recv_sock", "tcp_make_synack", "tcp_openreq_init_rwin", "tcp_connect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX29wZW5yZXFfaW5pdF9yd2luJiMzNDssCiAgICAmIzM0O3RjcF9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBjb25maWd1cmVkIE1UVSBvZiBhIHJvdXRlIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUywgaWdub3JpbmcgdGhlIElDTVAtbGVhcm5lZCBwYXRoIE1UVS4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHNpbXBsZSBhcml0aG1ldGljIGFuZCByZWFkaW5nIGluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGV4aXN0aW5nIG5ldHdvcmtpbmcgc3RydWN0dXJlcyAoZHN0X2VudHJ5LCBydDZfaW5mbywgZmliNl9pbmZvLCBpbmV0Nl9kZXYpLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIE1TUyBmb3IgSVB2NCBhbmQgSVB2NiByb3V0ZXMsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNpbmcgdGhlIGNvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIHRoZSByb3V0ZSBvciBkZXZpY2UuIFRoaXMgYWZmZWN0cyBjb3JlIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgbG9naWMgKFNZTi9TWU4tQUNLIHByb2Nlc3NpbmcpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBTWU4gaGFuZGxpbmcgZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzM1ZmM2NTE0MDExNmVkOGY4YjQyZmM0ZmM4MGQ5MmJmYjE0ZDdjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDA3OjQ3OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXAuaFxuQEAgLTUwNiw2ICYjNDM7NTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXG4mIzQzOyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXHUwMDNlcnRfcG10dSkuICBUaGUgYWR2ZXJ0aXNlZCBNU1MgYm91bmRzIHdoYXQgdGhlXG4mIzQzOyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yXG4mIzQzOyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZClcbiYjNDM7ICogZGlyZWN0aW9uLCB3aGljaCBtYXkgbm90IGFwcGx5IHRvIHRoZSBwZWVyLVx1MDAzZXVzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlXG4mIzQzOyAqIGZvciB0aGUgd2hvbGUgY29ubmVjdGlvbi4gIFNlZSBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmVcbiYjNDM7ICogdGNwX2FkdmVydGlzZV9tc3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbiYjNDM7XHRpZiAoIW10dSlcbiYjNDM7XHRcdG10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLVx1MDAzZW10dSk7XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xuJiM0MztcdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NSw2ICYjNDM7Mzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbiYjNDM7ICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXG4mIzQzOyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTXG4mIzQzOyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbiYjNDM7ICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXG4mIzQzOyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcbiYjNDM7XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBtdHUgPSAwO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0LyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWVcbiYjNDM7XHQgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSlcbiYjNDM7XHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcbiYjNDM7XHQgKiB2aWEgLVx1MDAzZWZyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LVx1MDAzZWZyb20pO1xuJiM0MztcdGlmIChmcm9tKVxuJiM0MztcdFx0bXR1ID0gZnJvbS1cdTAwM2VmaWI2X3BtdHU7XG4mIzQzO1x0aWYgKCFtdHUpIHtcbiYjNDM7XHRcdG10dSA9IElQVjZfTUlOX01UVTtcbiYjNDM7XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuJiM0MztcdFx0aWYgKGlkZXYpXG4mIzQzO1x0XHRcdG10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYubXR1NikpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbiYjNDM7XHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiBpcDZfbXR1X2Zyb21fZmliNihjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcbmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jXG5AQCAtMTMzNCw4ICYjNDM7MTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcbi1cdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXB2NF9tdHUoZHN0KSAtIGhlYWRlcl9zaXplLFxuLVx0XHRcdFx0ICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4mIzQzO1x0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KSAtIGhlYWRlcl9zaXplLFxuJiM0MztcdFx0ICAgICAgIG5ldC1cdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0zMjYxLDcgJiM0MzszMjYxLDcgQEAgdm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFxuIFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjJlZjkzMWI3N2ExY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdFxuQEAgLTAsMCAmIzQzOzEsNjcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7Ly9cbiYjNDM7Ly8gVGVzdCB0aGF0IElQdjQgYWR2ZXJ0aXNlZCBNU1MgaW4gU1lOLUFDSyBpcyBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWRcbiYjNDM7Ly8gaW50ZXJmYWNlIE1UVSAoMTUwMCAtXHUwMDNlIE1TUyAxNDYwKSwgbm90IHRoZSBJQ01QLWxlYXJuZWQgUGF0aCBNVFUuXG4mIzQzO1xuJiM0MzstLWlwX3ZlcnNpb249aXB2NFxuJiM0MztcbiYjNDM7YC4vZGVmYXVsdHMuc2hcbiYjNDM7ZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcbiYjNDM7YFxuJiM0MztcbiYjNDM7Ly9cbiYjNDM7Ly8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyMDAgLVx1MDAzZSBNU1MgMTE2MClcbiYjNDM7Ly9cbiYjNDM7ICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuJiM0MzsgICAmIzQzOzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4mIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwXG4mIzQzO1xuJiM0MzsgICAmIzQzOzAgXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcdTAwM2VcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4mIzQzOyAgJiM0MzsuMSBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDRcbiYjNDM7XG4mIzQzOy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50XG4mIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxuJiM0MztcbiYjNDM7Ly8gSUNNUCBGcmFnbWVudGF0aW9uIE5lZWRlZCBhcnJpdmVzIGluZGljYXRpbmcgbmV4dC1ob3AgTVRVIDEyMDBcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyBpY21wIHVucmVhY2hhYmxlIGZyYWdfbmVlZGVkIG10dSAxMjAwIFsxOjE0NjEoMTQ2MCldXG4mIzQzO1xuJiM0MzsvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjAwIChNU1MgPSAxMjAwIC0gNDAgPSAxMTYwKVxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIC4gMToxMTYxKDExNjApIGFjayAxXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgUC4gMTE2MToxNDYxKDMwMCkgYWNrIDFcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyBSIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMFxuJiM0MztcbiYjNDM7Ly8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lclxuJiM0MzsgICAmIzQzOzAgY2xvc2UoNCkgPSAwXG4mIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDBcbiYjNDM7XG4mIzQzOy8vXG4mIzQzOy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyXG4mIzQzOy8vXG4mIzQzOyAgICYjNDM7MCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4mIzQzOyAgICYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbiYjNDM7ICAgJiM0MzswIGxpc3RlbigzLCAxKSA9IDBcbiYjNDM7XG4mIzQzOyAgICYjNDM7MCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuJiM0MztcbiYjNDM7Ly8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMTYwXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgUy4gMDowKDApIGFjayAxIFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFx1MDAzZVxuJiM0MzsgICAmIzQzOzAgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbiYjNDM7ICAgJiM0MzswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XG4mIzQzO1xuJiM0MzsvLyBWZXJpZnk6IE91dGdvaW5nIHRyYW5zbWl0IE1TUyBpcyBzdGlsbCBjb25zdHJhaW5lZCBieSB0aGUgbGVhcm5lZCBQTVRVIDEyMDBcbiYjNDM7ICAgJiM0MzswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgLiAxOjExNjEoMTE2MCkgYWNrIDFcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSBQLiAxMTYxOjE0NjEoMzAwKSBhY2sgMVxuJiM0MzsgICAmIzQzOzAgXHUwMDNjIC4gMToxKDApIGFjayAxNDYxIHdpbiAyNTdcbiYjNDM7XG4mIzQzOy8vIENsZWFuIHVwXG4mIzQzOyAgICYjNDM7MCBjbG9zZSg0KSA9IDBcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSBGLiAxNDYxOjE0NjEoMCkgYWNrIDFcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyBGLiAxOjEoMCkgYWNrIDE0NjIgd2luIDI1N1xuJiM0MzsgICAmIzQzOzAgXHUwMDNlIC4gMTQ2MjoxNDYyKDApIGFjayAyXG4mIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3NjM4YjExYTgxNWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3RcbkBAIC0wLDAgJiM0MzsxLDY3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8vXG4mIzQzOy8vIFRlc3QgdGhhdCBJUHY2IGFkdmVydGlzZWQgTVNTIGluIFNZTi1BQ0sgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25maWd1cmVkXG4mIzQzOy8vIGludGVyZmFjZSBNVFUgKDE1MjAgLVx1MDAzZSBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUHY2LWxlYXJuZWQgUGF0aCBNVFUuXG4mIzQzO1xuJiM0MzstLWlwX3ZlcnNpb249aXB2NlxuJiM0MztcbiYjNDM7YC4vZGVmYXVsdHMuc2hcbiYjNDM7ZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcbiYjNDM7YFxuJiM0MztcbiYjNDM7Ly9cbiYjNDM7Ly8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyODAgLVx1MDAzZSBNU1MgMTIyMClcbiYjNDM7Ly9cbiYjNDM7ICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuJiM0MzsgICAmIzQzOzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4mIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwXG4mIzQzO1xuJiM0MzsgICAmIzQzOzAgXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcdTAwM2VcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4mIzQzOyAgJiM0MzsuMSBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDRcbiYjNDM7XG4mIzQzOy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50XG4mIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxuJiM0MztcbiYjNDM7Ly8gSUNNUHY2IFBhY2tldCBUb28gQmlnIGFycml2ZXMgaW5kaWNhdGluZyBuZXh0LWhvcCBNVFUgMTI4MFxuJiM0MzsgICAmIzQzOzAgXHUwMDNjIGljbXAgcGFja2V0X3Rvb19iaWcgbXR1IDEyODAgWzE6MTQ2MSgxNDYwKV1cbiYjNDM7XG4mIzQzOy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyODAgKE1TUyA9IDEyODAgLSA0MCAtIDIwID0gMTIyMClcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSAuIDE6MTIyMSgxMjIwKSBhY2sgMVxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxXG4mIzQzOyAgICYjNDM7MCBcdTAwM2MgUiAxOjEoMCkgYWNrIDE0NjEgd2luIDBcbiYjNDM7XG4mIzQzOy8vIENsb3NlIGNvbm5lY3Rpb24gMSBhbmQgbGlzdGVuZXJcbiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMFxuJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwXG4mIzQzO1xuJiM0MzsvL1xuJiM0MzsvLyBDb25uZWN0aW9uIDI6IE5ldyBjb25uZWN0aW9uIGZyb20gdGhlIHNhbWUgcGVlclxuJiM0MzsvL1xuJiM0MzsgICAmIzQzOzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuJiM0MzsgICAmIzQzOzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4mIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwXG4mIzQzO1xuJiM0MzsgICAmIzQzOzAgXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcdTAwM2VcbiYjNDM7XG4mIzQzOy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTIyMFxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIFMuIDA6MCgwKSBhY2sgMSBcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcdTAwM2VcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XG4mIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuJiM0MztcbiYjNDM7Ly8gVmVyaWZ5OiBPdXRnb2luZyB0cmFuc21pdCBNU1MgaXMgc3RpbGwgY29uc3RyYWluZWQgYnkgdGhlIGxlYXJuZWQgUE1UVSAxMjgwXG4mIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxuJiM0MzsgICAmIzQzOzAgXHUwMDNlIC4gMToxMjIxKDEyMjApIGFjayAxXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgUC4gMTIyMToxNDYxKDI0MCkgYWNrIDFcbiYjNDM7ICAgJiM0MzswIFx1MDAzYyAuIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMjU3XG4mIzQzO1xuJiM0MzsvLyBDbGVhbiB1cFxuJiM0MzsgICAmIzQzOzAgY2xvc2UoNCkgPSAwXG4mIzQzOyAgICYjNDM7MCBcdTAwM2UgRi4gMTQ2MToxNDYxKDApIGFjayAxXG4mIzQzOyAgICYjNDM7MCBcdTAwM2MgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTdcbiYjNDM7ICAgJiM0MzswIFx1MDAzZSAuIDE0NjI6MTQ2MigwKSBhY2sgMlxuJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX29wZW5yZXFfaW5pdF9yd2luJiMzNDssCiAgICAmIzM0O3RjcF9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBNU1MgZm9yIElQdjQgYW5kIElQdjYgcm91dGVzLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzaW5nIHRoZSBjb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiB0aGUgcm91dGUgb3IgZGV2aWNlLiBUaGlzIGFmZmVjdHMgY29yZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljIChTWU4vU1lOLUFDSyBwcm9jZXNzaW5nKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgU1lOIGhhbmRsaW5nIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzNWZjNjUxNDAxMTZlZDhmOGI0MmZjNGZjODBkOTJiZmIxNGQ3YzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAwNzo0NzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDdmMmZlMWE4NDAxYjEuLmE4ZjU3YjRmNGFhMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNTA2LDYgJiM0Mzs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAlyZXR1cm4gcmVzOwogfQogCiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLgomIzQzOyAqCiYjNDM7ICogVW5saWtlIGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZQomIzQzOyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtJmd0O3J0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZQomIzQzOyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yCiYjNDM7ICogcm91dGUtY29uZmlndXJlZCBNVFUpLCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKQomIzQzOyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci0mZ3Q7dXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGUKJiM0MzsgKiBmb3IgdGhlIHdob2xlIGNvbm5lY3Rpb24uICBTZWUgUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlCiYjNDM7ICogdGNwX2FkdmVydGlzZV9tc3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG10dSwgcmVzOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpOwomIzQzOwlpZiAoIW10dSkKJiM0MzsJCW10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLSZndDttdHUpOwomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7CiYjNDM7CXJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCAwOWZmZTBmMTNjZTc1Li5hYzFhY2MwYjc0MzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzg1LDYgJiM0MzszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QKIAlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKIH0KIAomIzQzOy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy4KJiM0MzsgKgomIzQzOyAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aAomIzQzOyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZgomIzQzOyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTCiYjNDM7ICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZQomIzQzOyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZQomIzQzOyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCA9IGRzdF9ydDZfaW5mbyhkc3QpOwomIzQzOwljb25zdCBzdHJ1Y3QgZmliNl9pbmZvICpmcm9tOwomIzQzOwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwomIzQzOwl1bnNpZ25lZCBpbnQgbXR1ID0gMDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZQomIzQzOwkgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSkKJiM0MzsJICogZHN0LCB0aGUgY29uZmlndXJlZCBvbmUgb24gdGhlIHVuZGVybHlpbmcgcm91dGUuICBSZWFjaCB0aGUgbGF0dGVyCiYjNDM7CSAqIHZpYSAtJmd0O2Zyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS4KJiM0MzsJICovCiYjNDM7CWZyb20gPSByY3VfZGVyZWZlcmVuY2UocnQtJmd0O2Zyb20pOwomIzQzOwlpZiAoZnJvbSkKJiM0MzsJCW10dSA9IGZyb20tJmd0O2ZpYjZfcG10dTsKJiM0MzsJaWYgKCFtdHUpIHsKJiM0MzsJCW10dSA9IElQVjZfTUlOX01UVTsKJiM0MzsJCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpOwomIzQzOwkJaWYgKGlkZXYpCiYjNDM7CQkJbXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LSZndDtjbmYubXR1NikpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpOwomIzQzOwlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKJiM0Mzt9CiYjNDM7CiB1MzIgaXA2X210dV9mcm9tX2ZpYjYoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZmQ2ODhlMWY4NzlmNS4uNDZhYTk4YzkyMTgzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMzM0LDggJiM0MzsxMzM0LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIAogCXJjdV9yZWFkX2xvY2soKTsKIAluZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTsKLQlhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSwKLQkJCQkgICBuZXQtJmd0O2lwdjQuaXBfcnRfbWluX2Fkdm1zcyk7CiYjNDM7CWFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXBfZHN0X210dV9jb25maWd1cmVkKGRzdCkgLSBoZWFkZXJfc2l6ZSwKJiM0MzsJCSAgICAgICBuZXQtJmd0O2lwdjQuaXBfcnRfbWluX2Fkdm1zcyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDU5NjhjZTVhZDE1MDguLmUyMDU2YmQwZGYzYzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMzI2MSw3ICYjNDM7MzI2MSw3IEBAIHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIAogc3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewotCXVuc2lnbmVkIGludCBtdHUgPSBkc3Q2X210dShkc3QpOwomIzQzOwl1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpOwogCXN0cnVjdCBuZXQgKm5ldDsKIAogCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmYyZWY5MzFiNzdhMWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0CkBAIC0wLDAgJiM0MzsxLDY3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvLwomIzQzOy8vIFRlc3QgdGhhdCBJUHY0IGFkdmVydGlzZWQgTVNTIGluIFNZTi1BQ0sgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25maWd1cmVkCiYjNDM7Ly8gaW50ZXJmYWNlIE1UVSAoMTUwMCAtJmd0OyBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUC1sZWFybmVkIFBhdGggTVRVLgomIzQzOwomIzQzOy0taXBfdmVyc2lvbj1pcHY0CiYjNDM7CiYjNDM7YC4vZGVmYXVsdHMuc2gKJiM0MztldGh0b29sIC1LIHR1bjAgdHNvIG9mZgomIzQzO2AKJiM0MzsKJiM0MzsvLwomIzQzOy8vIENvbm5lY3Rpb24gMTogTGVhcm4gUE1UVSBleGNlcHRpb24gKE1UVSAxMjAwIC0mZ3Q7IE1TUyAxMTYwKQomIzQzOy8vCiYjNDM7ICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7ICAgJiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwCiYjNDM7CiYjNDM7ICAgJiM0MzswICZsdDsgUyAwOjAoMCkgd2luIDY1NTM1ICZsdDttc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAgJiM0MzswICZndDsgUy4gMDowKDApIGFjayAxICZsdDttc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAmIzQzOy4xICZsdDsgLiAxOjEoMCkgYWNrIDEgd2luIDI1NwomIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50CiYjNDM7ICAgJiM0MzswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwCiYjNDM7ICAgJiM0MzswICZndDsgUC4gMToxNDYxKDE0NjApIGFjayAxCiYjNDM7CiYjNDM7Ly8gSUNNUCBGcmFnbWVudGF0aW9uIE5lZWRlZCBhcnJpdmVzIGluZGljYXRpbmcgbmV4dC1ob3AgTVRVIDEyMDAKJiM0MzsgICAmIzQzOzAgJmx0OyBpY21wIHVucmVhY2hhYmxlIGZyYWdfbmVlZGVkIG10dSAxMjAwIFsxOjE0NjEoMTQ2MCldCiYjNDM7CiYjNDM7Ly8gTG9jYWwgaG9zdCByZXRyYW5zbWl0cyB1c2luZyB0aGUgbGVhcm5lZCBNVFUgMTIwMCAoTVNTID0gMTIwMCAtIDQwID0gMTE2MCkKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE6MTE2MSgxMTYwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDExNjE6MTQ2MSgzMDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgUiAxOjEoMCkgYWNrIDE0NjEgd2luIDAKJiM0MzsKJiM0MzsvLyBDbG9zZSBjb25uZWN0aW9uIDEgYW5kIGxpc3RlbmVyCiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMAomIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDAKJiM0MzsKJiM0MzsvLwomIzQzOy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyCiYjNDM7Ly8KJiM0MzsgICAmIzQzOzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7ICAgJiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwCiYjNDM7CiYjNDM7ICAgJiM0MzswICZsdDsgUyAwOjAoMCkgd2luIDY1NTM1ICZsdDttc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7CiYjNDM7Ly8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMTYwCiYjNDM7ICAgJiM0MzswICZndDsgUy4gMDowKDApIGFjayAxICZsdDttc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAgJiM0MzswICZsdDsgLiAxOjEoMCkgYWNrIDEgd2luIDI1NwomIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFZlcmlmeTogT3V0Z29pbmcgdHJhbnNtaXQgTVNTIGlzIHN0aWxsIGNvbnN0cmFpbmVkIGJ5IHRoZSBsZWFybmVkIFBNVFUgMTIwMAomIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MAomIzQzOyAgICYjNDM7MCAmZ3Q7IC4gMToxMTYxKDExNjApIGFjayAxCiYjNDM7ICAgJiM0MzswICZndDsgUC4gMTE2MToxNDYxKDMwMCkgYWNrIDEKJiM0MzsgICAmIzQzOzAgJmx0OyAuIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMjU3CiYjNDM7CiYjNDM7Ly8gQ2xlYW4gdXAKJiM0MzsgICAmIzQzOzAgY2xvc2UoNCkgPSAwCiYjNDM7ICAgJiM0MzswICZndDsgRi4gMTQ2MToxNDYxKDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE0NjI6MTQ2MigwKSBhY2sgMgomIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3NjM4YjExYTgxNWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0CkBAIC0wLDAgJiM0MzsxLDY3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvLwomIzQzOy8vIFRlc3QgdGhhdCBJUHY2IGFkdmVydGlzZWQgTVNTIGluIFNZTi1BQ0sgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25maWd1cmVkCiYjNDM7Ly8gaW50ZXJmYWNlIE1UVSAoMTUyMCAtJmd0OyBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUHY2LWxlYXJuZWQgUGF0aCBNVFUuCiYjNDM7CiYjNDM7LS1pcF92ZXJzaW9uPWlwdjYKJiM0MzsKJiM0MztgLi9kZWZhdWx0cy5zaAomIzQzO2V0aHRvb2wgLUsgdHVuMCB0c28gb2ZmCiYjNDM7YAomIzQzOwomIzQzOy8vCiYjNDM7Ly8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyODAgLSZndDsgTVNTIDEyMjApCiYjNDM7Ly8KJiM0MzsgICAgMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gMwomIzQzOyAgICYjNDM7MCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDAKJiM0MzsgICAmIzQzOzAgYmluZCgzLCAuLi4sIC4uLikgPSAwCiYjNDM7ICAgJiM0MzswIGxpc3RlbigzLCAxKSA9IDAKJiM0MzsKJiM0MzsgICAmIzQzOzAgJmx0OyBTIDA6MCgwKSB3aW4gNjU1MzUgJmx0O21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOCZndDsKJiM0MzsgICAmIzQzOzAgJmd0OyBTLiAwOjAoMCkgYWNrIDEgJmx0O21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOCZndDsKJiM0MzsgICYjNDM7LjEgJmx0OyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3CiYjNDM7ICAgJiM0MzswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0CiYjNDM7CiYjNDM7Ly8gU2VuZCBhIGZ1bGwgMTQ2MC1ieXRlIHNlZ21lbnQKJiM0MzsgICAmIzQzOzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjAKJiM0MzsgICAmIzQzOzAgJmd0OyBQLiAxOjE0NjEoMTQ2MCkgYWNrIDEKJiM0MzsKJiM0MzsvLyBJQ01QdjYgUGFja2V0IFRvbyBCaWcgYXJyaXZlcyBpbmRpY2F0aW5nIG5leHQtaG9wIE1UVSAxMjgwCiYjNDM7ICAgJiM0MzswICZsdDsgaWNtcCBwYWNrZXRfdG9vX2JpZyBtdHUgMTI4MCBbMToxNDYxKDE0NjApXQomIzQzOwomIzQzOy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyODAgKE1TUyA9IDEyODAgLSA0MCAtIDIwID0gMTIyMCkKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE6MTIyMSgxMjIwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgUiAxOjEoMCkgYWNrIDE0NjEgd2luIDAKJiM0MzsKJiM0MzsvLyBDbG9zZSBjb25uZWN0aW9uIDEgYW5kIGxpc3RlbmVyCiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMAomIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDAKJiM0MzsKJiM0MzsvLwomIzQzOy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyCiYjNDM7Ly8KJiM0MzsgICAmIzQzOzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7ICAgJiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwCiYjNDM7CiYjNDM7ICAgJiM0MzswICZsdDsgUyAwOjAoMCkgd2luIDY1NTM1ICZsdDttc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7CiYjNDM7Ly8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMjIwCiYjNDM7ICAgJiM0MzswICZndDsgUy4gMDowKDApIGFjayAxICZsdDttc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAgJiM0MzswICZsdDsgLiAxOjEoMCkgYWNrIDEgd2luIDI1NwomIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFZlcmlmeTogT3V0Z29pbmcgdHJhbnNtaXQgTVNTIGlzIHN0aWxsIGNvbnN0cmFpbmVkIGJ5IHRoZSBsZWFybmVkIFBNVFUgMTI4MAomIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MAomIzQzOyAgICYjNDM7MCAmZ3Q7IC4gMToxMjIxKDEyMjApIGFjayAxCiYjNDM7ICAgJiM0MzswICZndDsgUC4gMTIyMToxNDYxKDI0MCkgYWNrIDEKJiM0MzsgICAmIzQzOzAgJmx0OyAuIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMjU3CiYjNDM7CiYjNDM7Ly8gQ2xlYW4gdXAKJiM0MzsgICAmIzQzOzAgY2xvc2UoNCkgPSAwCiYjNDM7ICAgJiM0MzswICZndDsgRi4gMTQ2MToxNDYxKDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE0NjI6MTQ2MigwKSBhY2sgMgomIzQzOyAgICYjNDM7MCBjbG9zZSgzKSA9IDAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBNU1MgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0d2Vha2luZyBob3cgd2UgaGFuZGxlIHRoZSBhZHZlcnRpc2VkIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGNhbGN1bGF0aW9ucywgc3BlY2lmaWNhbGx5IGZvciBJUHY0IGFuZCBJUHY2IHJvdXRlcy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAuIFRoZSBpbnRlbnRpb24gaXMgdG8gZmF2b3IgdGhlIGNvbmZpZ3VyZWQsIGFkbWluaXN0cmF0aXZlIE1UVSBvdmVyIHRoZSBkeW5hbWljYWxseSBsZWFybmVkIFBhdGggTVRVIChQTVRVKSwgd2hpY2ggaXMgYSBkZWZpbml0ZSBkZXBhcnR1cmUgZnJvbSB0aGUgY3VycmVudCBiZWhhdmlvci4gVGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgdGhlbiBwbHVnZ2VkIGludG8gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCwgd2hpY2ggaXMgd2hlcmUgdGhlIGNoYW5nZSB3aWxsIG1hbmlmZXN0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZXNlIGtleSBmdW5jdGlvbnMsIGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AsIGFyZSBjdXJyZW50bHkgdXNlZCBpbiB0aGUgY29kZWJhc2UuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IHNlZW1zIHRoYXQgYGlwdjRfZGVmYXVsdF9hZHZtc3NgIHJlc2lkZXMgd2l0aGluIGBuZXQvaXB2NC9yb3V0ZS5jYCwgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgIHJlc2lkZXMgaW4gYG5ldC9pcHY2L3JvdXRlLmNgLiBUaGlzIGlzIHdoYXQgSSB3b3VsZCBoYXZlIGV4cGVjdGVkLCBzbywgc28gZmFyLCBzbyBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjRfZGVmYXVsdF9hZHZtc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvcm91dGUuYz0xMjk9c3RydWN0IGRzdF9lbnRyeVx0KmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIGNvb2tpZSk7XG5uZXQvaXB2NC9yb3V0ZS5jOjEzMDpzdGF0aWMgdW5zaWduZWQgaW50XHQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xubmV0L2lwdjQvcm91dGUuYy0xMzEtSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE1ND1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3Rfb3BzID0ge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTU2LVx0LmNoZWNrID1cdFx0aXB2NF9kc3RfY2hlY2ssXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzpcdC5kZWZhdWx0X2Fkdm1zcyA9XHRpcHY0X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjQvcm91dGUuYy0xNTgtXHQubXR1ID1cdFx0XHRpcHY0X210dSxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTEzMjA9c3RhdGljIHZvaWQgc2V0X2NsYXNzX3RhZyhzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhZylcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMjgtXG5uZXQvaXB2NC9yb3V0ZS5jOjEzMjk6c3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbm5ldC9pcHY0L3JvdXRlLmMtMTMzMC17XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yODgxPXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9ibGFja2hvbGVfb3BzID0ge1xubmV0L2lwdjQvcm91dGUuYy0yODgyLVx0LmZhbWlseVx0XHRcdD0gQUZfSU5FVCxcbm5ldC9pcHY0L3JvdXRlLmM6Mjg4MzpcdC5kZWZhdWx0X2Fkdm1zc1x0XHQ9IGlwdjRfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODQtXHQubmVpZ2hfbG9va3VwXHRcdD0gaXB2NF9uZWlnaF9sb29rdXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RlZmF1bHRfYWR2bXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9ODY9c3RydWN0IGRzdF9lbnRyeVx0KmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcbm5ldC9pcHY2L3JvdXRlLmM6ODc6c3RhdGljIHVuc2lnbmVkIGludFx0IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xubmV0L2lwdjYvcm91dGUuYy04OC1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1My1cdC5jaGVja1x0XHRcdD1cdGlwNl9kc3RfY2hlY2ssXG5uZXQvaXB2Ni9yb3V0ZS5jOjI1NDpcdC5kZWZhdWx0X2Fkdm1zc1x0XHQ9XHRpcDZfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1NS1cdC5tdHVcdFx0XHQ9XHRpcDZfbXR1LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjY4PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2Ni9yb3V0ZS5jLTI2OS1cdC5mYW1pbHlcdFx0XHQ9IEFGX0lORVQ2LFxubmV0L2lwdjYvcm91dGUuYzoyNzA6XHQuZGVmYXVsdF9hZHZtc3NcdFx0PSBpcDZfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2Ni9yb3V0ZS5jLTI3MS1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcDZfZHN0X25laWdoX2xvb2t1cCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyNTY9dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzI2MS1cbm5ldC9pcHY2L3JvdXRlLmM6MzI2MjpzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgUm9sZSBvZiBgLmRlZmF1bHRfYWR2bXNzYCBpbiBgZHN0X29wc2AqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiBgLmRlZmF1bHRfYWR2bXNzYCB3aXRoaW4gdGhlIGBkc3Rfb3BzYCBjb250ZXh0LiBJIGtub3cgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYSBkZWZhdWx0LiBOb3csIEkgaGF2ZSB0byBwaW5wb2ludCAqd2hlcmUqIGl0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdC4gSXMgaXQgYmVpbmcgdXNlZCBhcyBhIGhhcmRjb2RlZCBkZWZhdWx0IHZhbHVlLCBvciBpcyBpdCBkeW5hbWljYWxseSBtb2RpZmllZCBiYXNlZCBvbiBvdGhlciBmYWN0b3JzPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIGhlbHBzIGNsYXJpZnkgaXRzIHJvbGUgd2l0aGluIGFueSByZWxldmFudCBhbGdvcml0aG1zIG9yIGNvbmZpZ3VyYXRpb25zLiBJdCBhbHNvIGhlbHBzIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBuZWVkIHRvIGJlIGFkanVzdGVkIG9yIGN1c3RvbWl6ZWQgYmFzZWQgb24gdGhlIHN5c3RlbSBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5kZWZhdWx0X2Fkdm1zcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yb3V0ZS5jPTE1ND1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3Rfb3BzID0ge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTU2LVx0LmNoZWNrID1cdFx0aXB2NF9kc3RfY2hlY2ssXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzpcdC5kZWZhdWx0X2Fkdm1zcyA9XHRpcHY0X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjQvcm91dGUuYy0xNTgtXHQubXR1ID1cdFx0XHRpcHY0X210dSxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI4ODE9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVULFxubmV0L2lwdjQvcm91dGUuYzoyODgzOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXB2NF9kZWZhdWx0X2Fkdm1zcyxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcHY0X25laWdoX2xvb2t1cCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI0OT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9vcHNfdGVtcGxhdGUgPSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYy0yNTMtXHQuY2hlY2tcdFx0XHQ9XHRpcDZfZHN0X2NoZWNrLFxubmV0L2lwdjYvcm91dGUuYzoyNTQ6XHQuZGVmYXVsdF9hZHZtc3NcdFx0PVx0aXA2X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjYvcm91dGUuYy0yNTUtXHQubXR1XHRcdFx0PVx0aXA2X210dSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xubmV0L2lwdjYvcm91dGUuYy0yNjktXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVUNixcbm5ldC9pcHY2L3JvdXRlLmM6MjcwOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXA2X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjYvcm91dGUuYy0yNzEtXHQubmVpZ2hfbG9va3VwXHRcdD0gaXA2X2RzdF9uZWlnaF9sb29rdXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU2VhcmNoIFRlcm0qKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgcHJvY2Vzc2luZyBqdXN0IGZsYWdnZWQgc29tZXRoaW5nLiBJIHdhcyBvbiBhIHRyYWNrLCBidXQgSSBuZWVkIHRvIHBpdm90IHNsaWdodGx5LiBUaGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzIGxlYWRpbmcgbWUgaW4gYSBkaXJlY3Rpb24sIGJ1dCBub3cgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gcmVmaW5lIG15IHNlYXJjaCBjcml0ZXJpYS4gSW5zdGVhZCBvZiBhIGdlbmVyYWwgYXBwcm9hY2gsIGl0IGZlZWxzIGxpa2UgSSBzaG91bGQgYmUgbW9yZSBwcmVjaXNlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgc3BlY2lmaWNhbGx5IGFtIEkgbG9va2luZyBmb3I/IFRoZSBtZW50aW9uIG9mICYjMzQ7ZGVmYXVsdF9hZHZtc3MmIzM0OyBmZWVscyBpbXBvcnRhbnQgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBhbG1vc3QgbGlrZSBhIGtleSB0ZXJtLiBTbywgSSBuZWVkIHRvIHN0YXJ0IHVzaW5nIHRvb2xzIG9uIG15IGV4aXN0aW5nIGRhdGFzZXQgYW5kIHN0YXJ0IGxvb2tpbmcgd2l0aCBtb3JlIHByZWNpc2lvbi4gSSBuZWVkIHRvIHJlYWNoIGZvciBhIGBncmVwYCBjb21tYW5kLCB1c2luZyBgLSZndDtkZWZhdWx0X2Fkdm1zc2AgYXMgdGhlIGV4YWN0IHNlYXJjaCB0ZXJtLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBob25lIGluIG9uIHRoZSBwYXJ0aWN1bGFyIGluc3RhbmNlcyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gaXNvbGF0ZSB0aG9zZSBzcGVjaWZpYyBvY2N1cnJlbmNlcyBpbiB0aGUgY29kZSBvciBkYXRhIEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgd2l0aC4gSG9wZWZ1bGx5IHRoaXMgd2lsbCByZXZlYWwgdGhlIGluZm9ybWF0aW9uIEkgd2FzIGhvcGluZyB0byBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2VkZWZhdWx0X2Fkdm1zcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9kc3QuaD0xODU9ZHN0X21ldHJpY19hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbmluY2x1ZGUvbmV0L2RzdC5oLTE4OS1cdGlmICghYWR2bXNzKVxuaW5jbHVkZS9uZXQvZHN0Lmg6MTkwOlx0XHRhZHZtc3MgPSBkc3QtXHUwMDNlb3BzLVx1MDAzZWRlZmF1bHRfYWR2bXNzKGRzdCk7XG5pbmNsdWRlL25ldC9kc3QuaC0xOTEtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MTExPWludCB4ZnJtX3BvbGljeV9yZWdpc3Rlcl9hZmluZm8oY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvLCBpbnQgZmFtaWx5KVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEyNi1cdFx0XHRkc3Rfb3BzLVx1MDAzZWNoZWNrID0geGZybV9kc3RfY2hlY2s7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjc6XHRcdGlmIChsaWtlbHkoZHN0X29wcy1cdTAwM2VkZWZhdWx0X2Fkdm1zcyA9PSBOVUxMKSlcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDEyODpcdFx0XHRkc3Rfb3BzLVx1MDAzZWRlZmF1bHRfYWR2bXNzID0geGZybV9kZWZhdWx0X2Fkdm1zcztcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEyOS1cdFx0aWYgKGxpa2VseShkc3Rfb3BzLVx1MDAzZW10dSA9PSBOVUxMKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkZpbmRpbmcgdGhlIFVzYWdlIG9mIGRzdF9tZXRyaWNfYWR2bXNzKioKCk9rYXksIHNvIEkgc2VlIGBkc3RfbWV0cmljX2Fkdm1zc2AgbWVudGlvbmVkLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaGUgdGV4dCBpbmRpY2F0ZXMgdGhhdCBJIHNob3VsZCBmb2N1cyBvbiB3aGVyZSBgZHN0X21ldHJpY19hZHZtc3NgIGlzICp1c2VkKi4gIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbi4gVGltZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUgdG8gaWRlbnRpZnkgdGhvc2UgbG9jYXRpb25zIGFuZCBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHJlbGF0aW9uc2hpcHMuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzdF9tZXRyaWNfYWR2bXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jPTEwOTg9dW5zaWduZWQgaW50IGN4Z2JpX3NvY2tfc2VsZWN0X21zcyhzdHJ1Y3QgY3hnYmlfc29jayAqY3NrLCB1bnNpZ25lZCBpbnQgcG10dSlcbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy0xMTAyLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6MTEwMzpcdGNzay1cdTAwM2VhZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpO1xuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMtMTEwNC1cbi0tXG5pbmNsdWRlL25ldC9kc3QuaD0xODQ9c3RhdGljIGlubGluZSB1MzJcbmluY2x1ZGUvbmV0L2RzdC5oOjE4NTpkc3RfbWV0cmljX2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG5pbmNsdWRlL25ldC9kc3QuaC0xODYte1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY3ND1zdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTczOC1cdHRjcF9zeW5jX21zcyhuZXdzaywgZHN0NF9tdHUoZHN0KSk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE3Mzk6XHRuZXd0cC1cdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRjcF9zayhzayksIGRzdF9tZXRyaWNfYWR2bXNzKGRzdCkpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0xNzQwLVxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MzE9dm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00NDItXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDQzOlx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDQ0LVx0d2luZG93X2NsYW1wID0gUkVBRF9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTEzOT1zdGF0aWMgX191MTYgdGNwX2FkdmVydGlzZV9tc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDUtXHRpZiAoZHN0KSB7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTQ2Olx0XHR1bnNpZ25lZCBpbnQgbWV0cmljID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDctXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5MzE9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3NC1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTc1Olx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3Ni1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEzMC1cdFx0V1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIGRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVykpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMzE6XHR0cC1cdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRwLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTMyLVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0ODktXHR0Y3Bfc3luY19tc3MobmV3c2ssIGRzdDZfbXR1KGRzdCkpO1xubmV0L2lwdjYvdGNwX2lwdjYuYzoxNDkwOlx0bmV3dHAtXHUwMDNlYWR2bXNzID0gdGNwX21zc19jbGFtcCh0Y3Bfc2soc2spLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQ5MS1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQwNjI9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2My17XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQwNjQ6XHRyZXR1cm4gZHN0X21ldHJpY19hZHZtc3MoeGZybV9kc3RfcGF0aChkc3QpKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAzNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNU1MgQWR2ZXJ0aXNlbWVudCBMb2dpYyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyBob3cgdGhlIGRlZmF1bHQgTVNTIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBmb3IgSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IHVzaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgaW5zdGVhZCBvZiBzb21ldGhpbmcgZWxzZSAocHJlc3VtYWJseSwgdGhlIG9sZCBsb2dpYykuIFRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBUQ1AgTVNTIGFkdmVydGlzZW1lbnQ6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBgdGNwX2FkdmVydGlzZV9tc3NgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF9jb25uZWN0X2luaXRgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gIERlZmluaXRlbHkgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCBhcmUgc3RhdGljLCBidXQgdGhlIGZ1bmN0aW9ucyB0aGV5IHVzZSBhcmUgc3RhdGljIGlubGluZS4gVGhlIHJlYWwgY2FsbCBzaXRlIGZvciBkc3RfbWV0cmljX2Fkdm1zcyBpcyBjYWxsZWQgZnJvbSB0aGUgZnVuY3Rpb25zIEkgbGlzdGVkIGFib3ZlLiAKCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gdG8gZmluZCB0aGUgYmVzdCBlbnRyeSBwb2ludHMuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgd291bGQgZ2l2ZSBtZSB0aGUgYmVzdCBiYW5nIGZvciB0aGUgYnVjayBpbiB0ZXJtcyBvZiBjb3ZlcmFnZS4gSSYjMzk7bSBkaXNjYXJkaW5nIGB0Y3BfYWR2ZXJ0aXNlX21zc2AgYW5kIGB0Y3BfY29ubmVjdF9pbml0YCByaWdodCBhd2F5IGJlY2F1c2UgdGhleSYjMzk7cmUgc3RhdGljIGFuZCBsaWtlbHkgdG8gYmUgbGVzcyBpbnRlcmVzdGluZyBhcyBkaXJlY3QgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGF0IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBhbmQgYHRjcF9tYWtlX3N5bmFja2AgYXJlbiYjMzk7dCBzdGF0aWMuIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYXBwZWFyIHRvIGJlIHN0cm9uZyBjYW5kaWRhdGVzIGFzIGluaXRpYWwgZm9jdXMgcG9pbnRzLiBUaGV5IHNlZW0gbGlrZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgdGhlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF92NF9zeW5fcmVjdl9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU2MD12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MTpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvdGNwLmgtNTYyLVx0XHRcdFx0ICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjU1PWludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzMtICovXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2NzQ6c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY3NS1cdFx0XHRcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM1OD1jb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzYyLVx0LmNvbm5fcmVxdWVzdFx0ICAgPSB0Y3BfdjRfY29ubl9yZXF1ZXN0LFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzYzOlx0LnN5bl9yZWN2X3NvY2tcdCAgID0gdGNwX3Y0X3N5bl9yZWN2X3NvY2ssXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNjQtXHQubmV0X2hlYWRlcl9sZW5cdCAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzM3PXN0YXRpYyB2b2lkIHRjcF92Nl9yZXN0b3JlX2NiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzQ2LVxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzQ3Oi8qIENhbGxlZCBmcm9tIHRjcF92NF9zeW5fcmVjdl9zb2NrKCkgZm9yIHY2X21hcHBlZCBjaGlsZHJlbi4gKi9cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM0OC1zdGF0aWMgdm9pZCB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzcyLVxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzczOlx0LyogdGNwX3Y0X3N5bl9yZWN2X3NvY2soKSBoYXMgaW5pdGlhbGl6ZWQgbmV3aW5ldC1cdTAwM2VtY197aW5kZXgsdHRsfSAqL1xubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzc0LVx0bmV3bnAtXHUwMDNlbWNhc3Rfb2lmICAgPSBuZXdpbmV0LVx1MDAzZW1jX2luZGV4O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0MDQtXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTQwNTpcdFx0cmV0dXJuIHRjcF92NF9zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDA2LVx0XHRcdFx0XHQgICAgcmVxX3VuaGFzaCwgb3duX3JlcSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Y2X3N5bl9yZWN2X3NvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc3luY29va2llcy5jPTE3ND1zdHJ1Y3Qgc29jayAqY29va2llX3Y2X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjI5LVx0ICogV2UgbmVlZCB0byBsb29rdXAgdGhlIGRzdF9lbnRyeSB0byBnZXQgdGhlIGNvcnJlY3Qgd2luZG93IHNpemUuXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MjMwOlx0ICogVGhpcyBpcyB0YWtlbiBmcm9tIHRjcF92Nl9zeW5fcmVjdl9zb2NrLiAgU29tZWJvZHkgcGxlYXNlIGVubGlnaHRlblxubmV0L2lwdjYvc3luY29va2llcy5jLTIzMS1cdCAqIG1lIGlmIHRoZXJlIGlzIGEgcHJlZmVycmVkIHdheS5cbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTEzNDg9c3RhdGljIHZvaWQgdGNwX3Y2X21hcHBlZF9jaGlsZF9pbml0KHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM4MS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTM4MjpzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM4My1cdFx0XHRcdFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIwMDc9Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljID0ge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjAxMS1cdC5jb25uX3JlcXVlc3RcdCAgID0gdGNwX3Y2X2Nvbm5fcmVxdWVzdCxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjAxMjpcdC5zeW5fcmVjdl9zb2NrXHQgICA9IHRjcF92Nl9zeW5fcmVjdl9zb2NrLFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDEzLVx0Lm5ldF9oZWFkZXJfbGVuXHQgICA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkciksXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfbWFwcGVkID0ge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjA0Mi1cdC5jb25uX3JlcXVlc3RcdCAgID0gdGNwX3Y2X2Nvbm5fcmVxdWVzdCxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjA0MzpcdC5zeW5fcmVjdl9zb2NrXHQgICA9IHRjcF92Nl9zeW5fcmVjdl9zb2NrLFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDQ0LVx0Lm5ldF9oZWFkZXJfbGVuXHQgICA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugc3ltYm9scywga2VlcGluZyBpbiBtaW5kIG15IG93biBleHBlcnQgdW5kZXJzdGFuZGluZzoKCioqVGhpbmtpbmcgVGhyb3VnaCBUQ1AgU1lOIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBwb2ludHMgaW4gdGhlIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIGNvbmZpcm1lZDogYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBhcmUgZXhhY3RseSB0aGUgc3ltYm9scyBJIG5lZWQgdG8gZGlzc2VjdCBmb3IgYSBkZWVwIGRpdmUgaW50byBJUHY0IGFuZCBJUHY2IFNZTiBoYW5kbGluZyByZXNwZWN0aXZlbHkuIFRoZXkgcmVwcmVzZW50IHRoZSBjb3JlIGxvZ2ljIGZvciBhIGxpc3RlbmluZyBzb2NrZXQgcmVjZWl2aW5nIGEgU1lOIHBhY2tldC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBzb2NrZXQgc3RhdGUgdHJhbnNpdGlvbnMsIHF1ZXVlaW5nLCBhbmQgYW55IHNwZWNpZmljIElQdjQvSVB2Ni1yZWxhdGVkIGRpZmZlcmVuY2VzLgoKTm93LCBJIG5lZWQgdG8gZXhwYW5kIG15IHNjb3BlIHNsaWdodGx5LiBXaGF0IGFib3V0IGB0Y3BfbWFrZV9zeW5hY2tgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSXQgcHJvYmFibHkgaGFzIGEgY3JpdGljYWwgcGFydCB0byBwbGF5IHRvbywgcG9zc2libHkgYnVpbGRpbmcgdGhlIFNZTi1BQ0sgcmVzcG9uc2UgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVjZWl2ZWQgU1lOLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgaXQgYnVpbGRzLCBhbmQgaG93IGl0IGRpZmZlcnMgaW4gSVB2NCBhbmQgSVB2NiBjb250ZXh0cy4gSXMgaXQgYSBjZW50cmFsIGZ1bmN0aW9uLCBvciBhcmUgdGhlcmUgc2VwYXJhdGUgSVB2NCBhbmQgSVB2NiB2YXJpYW50cz8gSXQmIzM5O3MgYWxsIGFib3V0IGhvdyB0aGUgU1lOLUFDSyBpcyBjcmFmdGVkIGFuZCBzZW50IGJhY2sgdG8gdGhlIGNsaWVudC4gQW5kLCBjcnVjaWFsbHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHNvY2tldCBkYXRhIHN0cnVjdHVyZXMgYXQgdGhpcyBzdGFnZT8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX21ha2Vfc3luYWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU3MT1lbnVtIHRjcF9zeW5hY2tfdHlwZSB7XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtNTc2LX07XG5pbmNsdWRlL25ldC90Y3AuaDo1Nzc6c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbmluY2x1ZGUvbmV0L3RjcC5oLTU3OC1cdFx0XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTc4LVxubmV0L2lwdjQvdGNwX2lwdjQuYzoxMTc5Olx0c2tiID0gdGNwX21ha2Vfc3luYWNrKHNrLCBkc3QsIHJlcSwgZm9jLCBzeW5hY2tfdHlwZSwgc3luX3NrYik7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExODAtXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM4ODc9aW50IHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MjEtLyoqXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkyMjogKiB0Y3BfbWFrZV9zeW5hY2sgLSBBbGxvY2F0ZSBvbmUgc2tiIGFuZCBidWlsZCBhIFNZTkFDSyBwYWNrZXQuXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkyMy0gKiBAc2s6IGxpc3RlbmVyIHNvY2tldFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTMwLSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjM5MzE6c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTMyLVx0XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9NTUwPXN0YXRpYyBpbnQgdGNwX3Y2X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtNTY5LVxubmV0L2lwdjYvdGNwX2lwdjYuYzo1NzA6XHRza2IgPSB0Y3BfbWFrZV9zeW5hY2soc2ssIGRzdCwgcmVxLCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNTcxLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmM9MjIxPXN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmMtMjQ5LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmM6MjUwOlx0ICogWFhYOiBUaGUgdGVzdCBkb2VzbiYjMzk7dCBpbmNyZWFzZSBhbnkgY291bnRlcnMsIHNlZSB0Y3BfbWFrZV9zeW5hY2soKS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmMtMjUxLVx0ICogUG90ZW50aWFsbHksIGl0IGNhbiBiZSBzcGVlZCB1cCBieSBzZXR0aW5nIHNrX3BhaXIgPSAtRVRJTUVET1VUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTY0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVENQIFNZTkFDSyBHZW5lcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGNwX21ha2Vfc3luYWNrYC4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIFNZTi1BQ0sgcGFja2V0cywgYW5kIGl0JiMzOTtzIHVzZWQgZGlyZWN0bHkgYnkgYm90aCB0aGUgSVB2NCBhbmQgSVB2NiB2YXJpYW50cywgYHRjcF92NF9zZW5kX3N5bmFja2AgYW5kIGB0Y3BfdjZfc2VuZF9zeW5hY2tgLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgZm9jdXMgc3ltYm9sIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBTWU4tQUNLIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50LCB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4KCk5vdywgYSByZWxhdGVkIHRob3VnaHQgcG9wcGVkIHVwOiBXaGF0JiMzOTtzIHRoZSByb2xlIG9mIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gIGluIHRoaXMgd2hvbGUgZGFuY2U/IEl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGludm9sdmVkIGluIGluaXRpYWxpemluZyB0aGUgcmVjZWl2ZSB3aW5kb3cgd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIG9wZW4gcmVxdWVzdC4gSXMgaXQgYSBwcmUtcmVxdWlzaXRlIGZvciBgdGNwX21ha2Vfc3luYWNrYCwgYW4gYWRqYWNlbnQgZnVuY3Rpb24sIG9yIGlzIGl0IHdvcmtpbmcgaW4gcGFyYWxsZWwgdG8gaW5pdGlhbGl6ZSBhbm90aGVyIGFzcGVjdCBvZiB0aGUgY29ubmVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCB0aGF0IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9vcGVucmVxX2luaXRfcndpbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0xODIzPXN0YXRpYyBpbmxpbmUgYm9vbCB0Y3BfZXBvbGxpbl9yZWFkeShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCB0YXJnZXQpXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMTgzNC1cbmluY2x1ZGUvbmV0L3RjcC5oOjE4MzU6ZXh0ZXJuIHZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzYtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NTktXHR0Y3BfcnNrKHJlcSktXHUwMDNlc3luX3RvcyA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VpcF9kc2ZpZWxkO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc2MDpcdHRjcF9vcGVucmVxX2luaXRfcndpbihyZXEsIHNrLCBkc3QpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc2MS1cdHNrX3J4X3F1ZXVlX3NldChyZXFfdG9fc2socmVxKSwgc2tiKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NDEyPXZvaWQgdGNwX3R3c2tfcHVyZ2Uoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdClcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMwLSAqL1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQzMTp2b2lkIHRjcF9vcGVucmVxX2luaXRfcndpbihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMyLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gIGlzIGp1bXBpbmcgb3V0IGF0IG1lIGFzIGEgcG90ZW50aWFsIGtleSBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0JiMzOTtzIGEgc29saWQgZm9jdXMgc3ltYm9sLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHdvcnRoIGEgZGVlcCBkaXZlLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgZmxvdywgbGV0JiMzOTtzIGFsc28gcHVsbCBpbiBgdGNwX2Nvbm5lY3RfaW5pdGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBhIFRDUCBjb25uZWN0aW9uIHN0YXJ0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jb25uZWN0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0xNj1zdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgICAgICAgICBpY3NrX2tlZXBhbGl2ZV90aW1lclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNzp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0byAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3Bfc2NoZWR1bGVfbG8uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMTgtdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19ydG9fbWluXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yMD11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja19tYXhcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjE6dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wbXR1X2Nvb2tpZSAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3N5bmNfbXNzLHRjcF9jdXJyZW50X21zcyx0Y3BfLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIyOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgICAgICAgICAgIGljc2tfY2Ffb3BzICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jd25kX3ZhbGlkYXRlLHRjcF90c29fc2Vncyx0Yy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMzpzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICBpY3NrX2FmX29wcyAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZmluaXNoX2Nvbm5lY3QsdGNwX3NlbmRfc3luX2QuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMjQtc3RydWN0IHRjcF91bHBfb3BzKiAgICAgICAgICAgICAgICAgaWNza191bHBfb3BzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yOD11ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX3NldHNvY2tvcHRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6Mjk6dTg6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9kc3RfbG9ja2VkICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2NhX2RzdF9pbml0LHRjcF9jb25uZWN0X2luaXQsLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMwOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcmV0cmFuc21pdHMgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jb25uZWN0X2luaXQsdGNwX2Nvbm5lY3RcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMzEtdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wZW5kaW5nICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcix0Y3BfY29uLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMyOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfYmFja29mZiAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF93cml0ZV9xdWV1ZV9wdXJnZSx0Y3BfY29ubmVjdC4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMy11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3N5bl9yZXRyaWVzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD00MT1zdHJ1Y3QgaWNza19hY2tfdTMyICAgICAgICAgICAgICAgICBscmN2dGltZSAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZmluaXNoX2Nvbm5lY3QsdGNwX2Nvbm5lY3QsdGMuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDI6c3RydWN0IGljc2tfYWNrX3UxNiAgICAgICAgICAgICAgICAgcmN2X21zcyAgICAgICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgX190Y3Bfc2VsZWN0X3dpbmRvdyxfX3RjcF9jbGVhbnVwLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQzOnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9oaWdoICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NDpzdHJ1Y3QgaWNza19tdHVwX2ludCAgICAgICAgICAgICAgICBzZWFyY2hfbG93ICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1X3Byb2JlLHRjcF9tdHVfY2hlY2tfcmVwcm8uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDU6c3RydWN0IGljc2tfbXR1cF91MzI6MzEgICAgICAgICAgICAgcHJvYmVfc2l6ZSAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LF9fLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ2OnN0cnVjdCBpY3NrX210dXBfdTMyOjEgICAgICAgICAgICAgIGVuYWJsZWQgICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NzpzdHJ1Y3QgaWNza19tdHVwX3UzMiAgICAgICAgICAgICAgICBwcm9iZV90aW1lc3RhbXAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9jb25uZWN0X2luaXQsdGMuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtNDgtdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wcm9iZXNfdHN0YW1wXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQwODE9c3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTAwLS8qIERvIGFsbCBjb25uZWN0IHNvY2tldCBzZXR1cHMgdGhhdCBjYW4gYmUgZG9uZSBBRiBpbmRlcGVuZGVudC4gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTAxOnN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDIte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00Mjk4PWludCB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNTktXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDM2MDpcdHRjcF9jb25uZWN0X2luaXQoc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTAyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBUQ1AgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGB0Y3BfY29ubmVjdF9pbml0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLi4uIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIE1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCwgY2FsbGVkIGJ5IGB0Y3BfY29ubmVjdGAuIFJpZ2h0LCBhbmQgYHRjcF9jb25uZWN0YCBpcyAqZXhwb3J0ZWQqLiBTbyBgdGNwX2Nvbm5lY3RgIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbiBmb3IgaW5pdGlhdGluZyBhIFRDUCBjb25uZWN0aW9uLCBhbmQgYHRjcF9jb25uZWN0X2luaXRgIGlzIGl0cyBpbnRlcm5hbCBoZWxwZXIuIFRoYXQgY2xhcmlmaWVzIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgY29ubmVjdGlvbiBpbml0aWF0aW9uIHByb2Nlc3MuIE5vdywgd2hhdCYjMzk7cyBuZXh0IGluIHRoZSBjaGFpbj8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGB0Y3BfYWR2ZXJ0aXNlX21zc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgTWF4aW11bSBTZWdtZW50IFNpemUgaXMgaGFuZGxlZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9hZHZlcnRpc2VfbXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01MTYtICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxuaW5jbHVkZS9uZXQvaXAuaDo1MTc6ICogdGNwX2FkdmVydGlzZV9tc3MoKS5cbmluY2x1ZGUvbmV0L2lwLmgtNTE4LSAqL1xuLS1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTM2NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTQtICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozOTU6ICogUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlIHRjcF9hZHZlcnRpc2VfbXNzKCkuXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTYtICovXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTExMz1zdGF0aWMgaW5saW5lIF9fdTMyIHRjcF9hY2NlcHRhYmxlX3NlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEzOC0gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMzk6c3RhdGljIF9fdTE2IHRjcF9hZHZlcnRpc2VfbXNzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDAte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05NTk9c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05OTEtXHQgKiBnb2luZyBvdXQuICAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjk5MjpcdG9wdHMtXHUwMDNlbXNzID0gdGNwX2FkdmVydGlzZV9tc3Moc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTk5My1cdHJlbWFpbmluZyAtPSBUQ1BPTEVOX01TU19BTElHTkVEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHRjcF9hZHZlcnRpc2VfbXNzYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgdGNwX2FkdmVydGlzZV9tc3NgIGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgY2FsbGVkIGJ5IGB0Y3Bfc3luX29wdGlvbnNgLiBBbmQgYHRjcF9zeW5fb3B0aW9uc2AgaXMgYWxzbyBzdGF0aWMsIHVzZWQgYnkgYm90aCBgdGNwX2Nvbm5lY3RgIGFuZCBgdGNwX21ha2Vfc3luYWNrYC4gIFNvLCBpZiBJJiMzOTttIGdvaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZTogYHRjcF92NF9zeW5fcmVjdl9zb2NrYCwgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCwgYHRjcF9tYWtlX3N5bmFja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBhbmQsIG9mIGNvdXJzZSwgYHRjcF9jb25uZWN0YC4KCk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb25zIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgaGVyZS4gSSBjYW4gc2VlIHRoZSBjb3JlIGNvZGUgaXMgaW4gYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AuICBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBleHBlY3RlZCwgc28gbm90aGluZyBzcGVjaWFsIHNvIGZhci4gQW55dGhpbmcgZWxzZT8gQWgsIHRoZSBwYXRjaCBhZGRzIHRlc3RzLiBUaGVzZSBhcmUgYHBhY2tldGRyaWxsYCB0ZXN0czogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3RgIGFuZCBgdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0YC4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyB3ZSBoYXZlIHRlc3QgY292ZXJhZ2UuIEFuZCBpdCBhcHBlYXJzIHRoZSBwYXRjaCBtb2RpZmllcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLgoKR2l2ZW4gdGhlIGZpbGVzIGludm9sdmVkIGFuZCB0aGUgbGFjayBvZiB1bnVzdWFsIGBDT05GSUdfYCByZXF1aXJlbWVudHMsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBjb3JlIElQdjQvSVB2NiByb3V0aW5nIGxvZ2ljLiBBbmQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgaGVhZGVyIGZpbGUgYGluY2x1ZGUvbmV0L2lwLmhgIGZvciBgaXBfZHN0X210dV9jb25maWd1cmVkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfZHN0X210dV9jb25maWd1cmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01MTgtICovXG5pbmNsdWRlL25ldC9pcC5oOjUxOTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuaW5jbHVkZS9uZXQvaXAuaC01MjAte1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTMyOT1zdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTMzNi1cdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xubmV0L2lwdjQvcm91dGUuYzoxMzM3Olx0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KSAtIGhlYWRlcl9zaXplLFxubmV0L2lwdjQvcm91dGUuYy0xMzM4LVx0XHQgICAgICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIElQdjYgUm91dGluZyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gSVB2NiByb3V0aW5nIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgLiBNeSBpbW1lZGlhdGUgbWVudGFsIGZsYWcgaXMgb24gdGhlIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJvbGUgaW4gdGhlIGxhcmdlciBwaWN0dXJlLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBmbGFnIGlzICp1c2VkKiwgbm90IGp1c3QgZGVmaW5lZC4gSXMgdGhpcyBhIGxvY2FsIGZsYWcgd2l0aGluIGEgZGVzdGluYXRpb24gZW50cnksIGEgZ2xvYmFsIGluZGljYXRvciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgbWVjaGFuaXNtcyBzZXQgYW5kIGNsZWFyIGl0PyBLbm93aW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBmbGFnIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgaG93IE1UVSBkaXNjb3ZlcnkgYW5kIHBhdGggbWFuYWdlbWVudCBmdW5jdGlvbiB3aXRoaW4gdGhlIElQdjYgcm91dGluZyBzdGFjay4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzOiBob3cgYW5kICp3aGVuKiBpcyB0aGlzIHZhbHVlIGNvbmZpZ3VyZWQ/IE15IG5leHQgbW92ZSBpcyB0byBsb2NhdGUgdXNhZ2VzIG9mIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCBpbiB0aGUgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RzdF9tdHVfY29uZmlndXJlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNjU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk2LSAqL1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6Mzk3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk4LXtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyNjI9c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjYvcm91dGUuYy0zMjYzLXtcbm5ldC9pcHY2L3JvdXRlLmM6MzI2NDpcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjUtXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjY0CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBNU1MgQ2FsY3VsYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBob3cgd2UgY2FsY3VsYXRlIHRoZSBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSB0aGF0JiMzOTtzIGFkdmVydGlzZWQgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIFRoYXQmIzM5O3MgY29yZSBUQ1AvSVAgbG9naWMsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIGFuZCBgdGNwX2Nvbm5lY3RgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgU1lOL1NZTi1BQ0sgaGFuZHNoYWtlIGFuZCBjb25uZWN0aW9uIGluaXRpYXRpb24sIHNvIHRoZXkmIzM5O2xsIGJlIGNyaXRpY2FsIHRvIHJldmlldy4KCkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzZXQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYnVpbGQgZGVwZW5kZW5jaWVzLiBBaCwgcmlnaHQsIGBDT05GSUdfSVBWNmAgaXMgcmVxdWlyZWQgZm9yIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gU28sIEkmIzM5O2xsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aGF0IGluIG15IG1lbnRhbCBjaGVja2xpc3QuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhleSBsb29rIGltcG9ydGFudC4gWWVzLCB0aGV5IGFyZSBleHBvcnRlZCBhbmQgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBpcHY0X3NwZWNpZmljYCBhbmQgYGlwdjZfc3BlY2lmaWNgIHN0cnVjdHVyZXMsIHJlc3BlY3RpdmVseS4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvb2QgZm9jdXMgc3ltYm9scyBhbmQgdGhlIGNvZGUgaW52b2x2aW5nIHRoZXNlIG11c3QgYmUgcmV2aWV3ZWQgY2FyZWZ1bGx5LiBJIGNhbiBnbyBhaGVhZCBhbmQgaW5jb3Jwb3JhdGUgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3Y0X3N5bl9yZWN2X3NvY2smIzM0OywKICAgICYjMzQ7dGNwX3Y2X3N5bl9yZWN2X3NvY2smIzM0OywKICAgICYjMzQ7dGNwX21ha2Vfc3luYWNrJiMzNDssCiAgICAmIzM0O3RjcF9vcGVucmVxX2luaXRfcndpbiYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGFkdmVydGlzZWQgTVNTIGZvciBJUHY0IGFuZCBJUHY2IHJvdXRlcywgaWdub3JpbmcgdGhlIElDTVAtbGVhcm5lZCBwYXRoIE1UVSBhbmQgaW5zdGVhZCB1c2luZyB0aGUgY29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgdGhlIHJvdXRlIG9yIGRldmljZS4gVGhpcyBhZmZlY3RzIGNvcmUgVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBsb2dpYyAoU1lOL1NZTi1BQ0sgcHJvY2Vzc2luZykuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIFNZTiBoYW5kbGluZyBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX29wZW5yZXFfaW5pdF9yd2luJiMzNDssCiAgICAmIzM0O3RjcF9jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBNU1MgZm9yIElQdjQgYW5kIElQdjYgcm91dGVzLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzaW5nIHRoZSBjb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiB0aGUgcm91dGUgb3IgZGV2aWNlLiBUaGlzIGFmZmVjdHMgY29yZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljIChTWU4vU1lOLUFDSyBwcm9jZXNzaW5nKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgU1lOIGhhbmRsaW5nIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDc6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZ3VyZWQgTVRVIG9mIGEgcm91dGUgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIHJlYWRpbmcgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gZXhpc3RpbmcgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIChkc3RfZW50cnksIHJ0Nl9pbmZvLCBmaWI2X2luZm8sIGluZXQ2X2RldikuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIG5ldyBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMzVmYzY1MTQwMTE2ZWQ4ZjhiNDJmYzRmYzgwZDkyYmZiMTRkN2M4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMDc6NDc6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTUwNiw2ICYjNDM7NTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJcmV0dXJuIHJlczsKIH0KIAomIzQzOy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy4KJiM0MzsgKgomIzQzOyAqIFVubGlrZSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGUKJiM0MzsgKiBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgKHJ0LSZndDtydF9wbXR1KS4gIFRoZSBhZHZlcnRpc2VkIE1TUyBib3VuZHMgd2hhdCB0aGUKJiM0MzsgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvcgomIzQzOyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkKJiM0MzsgKiBkaXJlY3Rpb24sIHdoaWNoIG1heSBub3QgYXBwbHkgdG8gdGhlIHBlZXItJmd0O3VzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlCiYjNDM7ICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZQomIzQzOyAqIHRjcF9hZHZlcnRpc2VfbXNzKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBtdHUsIHJlczsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTsKJiM0MzsJaWYgKCFtdHUpCiYjNDM7CQltdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS0mZ3Q7bXR1KTsKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpOwomIzQzOwlyZXMgPSBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTM4NSw2ICYjNDM7Mzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0CiAJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiB9CiAKJiM0MzsvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuCiYjNDM7ICoKJiM0MzsgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGgKJiM0MzsgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2YKJiM0MzsgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TUwomIzQzOyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUKJiM0MzsgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWUKJiM0MzsgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTsKJiM0MzsJY29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTsKJiM0MzsJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKJiM0MzsJdW5zaWduZWQgaW50IG10dSA9IDA7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJLyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWUKJiM0MzsJICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpCiYjNDM7CSAqIGRzdCwgdGhlIGNvbmZpZ3VyZWQgb25lIG9uIHRoZSB1bmRlcmx5aW5nIHJvdXRlLiAgUmVhY2ggdGhlIGxhdHRlcgomIzQzOwkgKiB2aWEgLSZndDtmcm9tIChmaWI2X3BtdHUpLCBwb3B1bGF0ZWQgYnkgaXA2X3JvdXRlX2luZm9fY3JlYXRlKCkuCiYjNDM7CSAqLwomIzQzOwlmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LSZndDtmcm9tKTsKJiM0MzsJaWYgKGZyb20pCiYjNDM7CQltdHUgPSBmcm9tLSZndDtmaWI2X3BtdHU7CiYjNDM7CWlmICghbXR1KSB7CiYjNDM7CQltdHUgPSBJUFY2X01JTl9NVFU7CiYjNDM7CQlpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTsKJiM0MzsJCWlmIChpZGV2KQomIzQzOwkJCW10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi0mZ3Q7Y25mLm10dTYpKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTsKJiM0MzsJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiYjNDM7fQomIzQzOwogdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTMzNCw4ICYjNDM7MTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbmV0ID0gZHN0X2Rldl9uZXRfcmN1KGRzdCk7Ci0JYWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcHY0X210dShkc3QpIC0gaGVhZGVyX3NpemUsCi0JCQkJICAgbmV0LSZndDtpcHY0LmlwX3J0X21pbl9hZHZtc3MpOwomIzQzOwlhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsCiYjNDM7CQkgICAgICAgbmV0LSZndDtpcHY0LmlwX3J0X21pbl9hZHZtc3MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCA1OTY4Y2U1YWQxNTA4Li5lMjA1NmJkMGRmM2M0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTMyNjEsNyAmIzQzOzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQl1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTsKJiM0MzsJdW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAltdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mMmVmOTMxYjc3YTFjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdApAQCAtMCwwICYjNDM7MSw2NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8KJiM0MzsvLyBUZXN0IHRoYXQgSVB2NCBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZAomIzQzOy8vIGludGVyZmFjZSBNVFUgKDE1MDAgLSZndDsgTVNTIDE0NjApLCBub3QgdGhlIElDTVAtbGVhcm5lZCBQYXRoIE1UVS4KJiM0MzsKJiM0MzstLWlwX3ZlcnNpb249aXB2NAomIzQzOwomIzQzO2AuL2RlZmF1bHRzLnNoCiYjNDM7ZXRodG9vbCAtSyB0dW4wIHRzbyBvZmYKJiM0MztgCiYjNDM7CiYjNDM7Ly8KJiM0MzsvLyBDb25uZWN0aW9uIDE6IExlYXJuIFBNVFUgZXhjZXB0aW9uIChNVFUgMTIwMCAtJmd0OyBNU1MgMTE2MCkKJiM0MzsvLwomIzQzOyAgICAwIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzCiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMAomIzQzOyAgICYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDAKJiM0MzsgICAmIzQzOzAgbGlzdGVuKDMsIDEpID0gMAomIzQzOwomIzQzOyAgICYjNDM7MCAmbHQ7IFMgMDowKDApIHdpbiA2NTUzNSAmbHQ7bXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4Jmd0OwomIzQzOyAgICYjNDM7MCAmZ3Q7IFMuIDA6MCgwKSBhY2sgMSAmbHQ7bXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4Jmd0OwomIzQzOyAgJiM0MzsuMSAmbHQ7IC4gMToxKDApIGFjayAxIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDQKJiM0MzsKJiM0MzsvLyBTZW5kIGEgZnVsbCAxNDYwLWJ5dGUgc2VnbWVudAomIzQzOyAgICYjNDM7MCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MAomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDE6MTQ2MSgxNDYwKSBhY2sgMQomIzQzOwomIzQzOy8vIElDTVAgRnJhZ21lbnRhdGlvbiBOZWVkZWQgYXJyaXZlcyBpbmRpY2F0aW5nIG5leHQtaG9wIE1UVSAxMjAwCiYjNDM7ICAgJiM0MzswICZsdDsgaWNtcCB1bnJlYWNoYWJsZSBmcmFnX25lZWRlZCBtdHUgMTIwMCBbMToxNDYxKDE0NjApXQomIzQzOwomIzQzOy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyMDAgKE1TUyA9IDEyMDAgLSA0MCA9IDExNjApCiYjNDM7ICAgJiM0MzswICZndDsgLiAxOjExNjEoMTE2MCkgYWNrIDEKJiM0MzsgICAmIzQzOzAgJmd0OyBQLiAxMTYxOjE0NjEoMzAwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmbHQ7IFIgMToxKDApIGFjayAxNDYxIHdpbiAwCiYjNDM7CiYjNDM7Ly8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lcgomIzQzOyAgICYjNDM7MCBjbG9zZSg0KSA9IDAKJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwCiYjNDM7CiYjNDM7Ly8KJiM0MzsvLyBDb25uZWN0aW9uIDI6IE5ldyBjb25uZWN0aW9uIGZyb20gdGhlIHNhbWUgcGVlcgomIzQzOy8vCiYjNDM7ICAgJiM0MzswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzCiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMAomIzQzOyAgICYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDAKJiM0MzsgICAmIzQzOzAgbGlzdGVuKDMsIDEpID0gMAomIzQzOwomIzQzOyAgICYjNDM7MCAmbHQ7IFMgMDowKDApIHdpbiA2NTUzNSAmbHQ7bXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4Jmd0OwomIzQzOwomIzQzOy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTE2MAomIzQzOyAgICYjNDM7MCAmZ3Q7IFMuIDA6MCgwKSBhY2sgMSAmbHQ7bXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4Jmd0OwomIzQzOyAgICYjNDM7MCAmbHQ7IC4gMToxKDApIGFjayAxIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDQKJiM0MzsKJiM0MzsvLyBWZXJpZnk6IE91dGdvaW5nIHRyYW5zbWl0IE1TUyBpcyBzdGlsbCBjb25zdHJhaW5lZCBieSB0aGUgbGVhcm5lZCBQTVRVIDEyMDAKJiM0MzsgICAmIzQzOzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjAKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE6MTE2MSgxMTYwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDExNjE6MTQ2MSgzMDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1NwomIzQzOwomIzQzOy8vIENsZWFuIHVwCiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMAomIzQzOyAgICYjNDM7MCAmZ3Q7IEYuIDE0NjE6MTQ2MSgwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmbHQ7IEYuIDE6MSgwKSBhY2sgMTQ2MiB3aW4gMjU3CiYjNDM7ICAgJiM0MzswICZndDsgLiAxNDYyOjE0NjIoMCkgYWNrIDIKJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jNzYzOGIxMWE4MTViCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdApAQCAtMCwwICYjNDM7MSw2NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8KJiM0MzsvLyBUZXN0IHRoYXQgSVB2NiBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZAomIzQzOy8vIGludGVyZmFjZSBNVFUgKDE1MjAgLSZndDsgTVNTIDE0NjApLCBub3QgdGhlIElDTVB2Ni1sZWFybmVkIFBhdGggTVRVLgomIzQzOwomIzQzOy0taXBfdmVyc2lvbj1pcHY2CiYjNDM7CiYjNDM7YC4vZGVmYXVsdHMuc2gKJiM0MztldGh0b29sIC1LIHR1bjAgdHNvIG9mZgomIzQzO2AKJiM0MzsKJiM0MzsvLwomIzQzOy8vIENvbm5lY3Rpb24gMTogTGVhcm4gUE1UVSBleGNlcHRpb24gKE1UVSAxMjgwIC0mZ3Q7IE1TUyAxMjIwKQomIzQzOy8vCiYjNDM7ICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsgICAmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7ICAgJiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyAgICYjNDM7MCBsaXN0ZW4oMywgMSkgPSAwCiYjNDM7CiYjNDM7ICAgJiM0MzswICZsdDsgUyAwOjAoMCkgd2luIDY1NTM1ICZsdDttc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAgJiM0MzswICZndDsgUy4gMDowKDApIGFjayAxICZsdDttc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDgmZ3Q7CiYjNDM7ICAmIzQzOy4xICZsdDsgLiAxOjEoMCkgYWNrIDEgd2luIDI1NwomIzQzOyAgICYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50CiYjNDM7ICAgJiM0MzswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwCiYjNDM7ICAgJiM0MzswICZndDsgUC4gMToxNDYxKDE0NjApIGFjayAxCiYjNDM7CiYjNDM7Ly8gSUNNUHY2IFBhY2tldCBUb28gQmlnIGFycml2ZXMgaW5kaWNhdGluZyBuZXh0LWhvcCBNVFUgMTI4MAomIzQzOyAgICYjNDM7MCAmbHQ7IGljbXAgcGFja2V0X3Rvb19iaWcgbXR1IDEyODAgWzE6MTQ2MSgxNDYwKV0KJiM0MzsKJiM0MzsvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjgwIChNU1MgPSAxMjgwIC0gNDAgLSAyMCA9IDEyMjApCiYjNDM7ICAgJiM0MzswICZndDsgLiAxOjEyMjEoMTIyMCkgYWNrIDEKJiM0MzsgICAmIzQzOzAgJmd0OyBQLiAxMjIxOjE0NjEoMjQwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmbHQ7IFIgMToxKDApIGFjayAxNDYxIHdpbiAwCiYjNDM7CiYjNDM7Ly8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lcgomIzQzOyAgICYjNDM7MCBjbG9zZSg0KSA9IDAKJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwCiYjNDM7CiYjNDM7Ly8KJiM0MzsvLyBDb25uZWN0aW9uIDI6IE5ldyBjb25uZWN0aW9uIGZyb20gdGhlIHNhbWUgcGVlcgomIzQzOy8vCiYjNDM7ICAgJiM0MzswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzCiYjNDM7ICAgJiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMAomIzQzOyAgICYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDAKJiM0MzsgICAmIzQzOzAgbGlzdGVuKDMsIDEpID0gMAomIzQzOwomIzQzOyAgICYjNDM7MCAmbHQ7IFMgMDowKDApIHdpbiA2NTUzNSAmbHQ7bXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4Jmd0OwomIzQzOwomIzQzOy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTIyMAomIzQzOyAgICYjNDM7MCAmZ3Q7IFMuIDA6MCgwKSBhY2sgMSAmbHQ7bXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4Jmd0OwomIzQzOyAgICYjNDM7MCAmbHQ7IC4gMToxKDApIGFjayAxIHdpbiAyNTcKJiM0MzsgICAmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDQKJiM0MzsKJiM0MzsvLyBWZXJpZnk6IE91dGdvaW5nIHRyYW5zbWl0IE1TUyBpcyBzdGlsbCBjb25zdHJhaW5lZCBieSB0aGUgbGVhcm5lZCBQTVRVIDEyODAKJiM0MzsgICAmIzQzOzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjAKJiM0MzsgICAmIzQzOzAgJmd0OyAuIDE6MTIyMSgxMjIwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmZ3Q7IFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxCiYjNDM7ICAgJiM0MzswICZsdDsgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1NwomIzQzOwomIzQzOy8vIENsZWFuIHVwCiYjNDM7ICAgJiM0MzswIGNsb3NlKDQpID0gMAomIzQzOyAgICYjNDM7MCAmZ3Q7IEYuIDE0NjE6MTQ2MSgwKSBhY2sgMQomIzQzOyAgICYjNDM7MCAmbHQ7IEYuIDE6MSgwKSBhY2sgMTQ2MiB3aW4gMjU3CiYjNDM7ICAgJiM0MzswICZndDsgLiAxNDYyOjE0NjIoMCkgYWNrIDIKJiM0MzsgICAmIzQzOzAgY2xvc2UoMykgPSAwCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODcyCgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDkyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1UVSBDYWxjdWxhdGlvbiBmb3IgVENQIE1TUyBBZHZlcnRpc2VtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgdHdvIG5ldyBmdW5jdGlvbnMsIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAsIHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlndXJlZCBNVFUgb2YgYSByb3V0ZSwgZGVsaWJlcmF0ZWx5ICppZ25vcmluZyogYW55IElDTVAtbGVhcm5lZCBQYXRoIE1UVS4gVGhpcyBtYWtlcyBzZW5zZTsgd2Ugd2FudCBhIGNvbnNpc3RlbnQgYmFzZWxpbmUgZm9yIFRDUCBNU1MgYWR2ZXJ0aXNlbWVudCwgc2VwYXJhdGUgZnJvbSBwb3RlbnRpYWxseSBmbHVjdHVhdGluZyBQTVRVIHZhbHVlcy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgdGhlIHVzdWFsIHN1c3BlY3RzOiBgaXAuaGAsIGBpcDZfcm91dGUuaGAsIGByb3V0ZS5jYCBmb3IgSVB2NCwgYW5kIGByb3V0ZS5jYCBmb3IgSVB2Niwgd2hpY2ggaXMgYWxsIGFzIGV4cGVjdGVkLiBHb29kIHRvIHNlZSB0aGV5JiMzOTt2ZSBhbHNvIGluY2x1ZGVkIHBhY2tldGRyaWxsIHRlc3RzIOKAkyBpbXBvcnRhbnQgZm9yIHZlcmlmeWluZyB0aGUgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9ucy4gTG9va2luZyBhdCBgaXBfZHN0X210dV9jb25maWd1cmVkYCwgd2UgaGF2ZToKCmBgYGMKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKewoJdW5zaWduZWQgaW50IG10dSwgcmVzOwoKCXJjdV9yZWFkX2xvY2soKTsKCW10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpOwoJaWYgKCFtdHUpCgkJbXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktJmd0O210dSk7CgltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7CglyZXMgPSBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwoJcmN1X3JlYWRfdW5sb2NrKCk7CgoJcmV0dXJuIHJlczsKfQpgYGAKCkFuZCBmb3IgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgOgoKYGBgYwpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKewoJY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCA9IGRzdF9ydDZfaW5mbyhkc3QpOwoJY29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTsKCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7Cgl1bnNpZ25lZCBpbnQgbXR1ID0gMDsKCglyY3VfcmVhZF9sb2NrKCk7CgkvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZQoJICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpCgkgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXIKCSAqIHZpYSAtJmd0O2Zyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS4KCSAqLwoJZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC0mZ3Q7ZnJvbSk7CglpZiAoZnJvbSkKCQltdHUgPSBmcm9tLSZndDtmaWI2X3BtdHU7CglpZiAoIW10dSkgewoJCW10dSA9IElQVjZfTUlOX01UVTsKCQlpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTsKCQlpZiAoaWRldikKCQkJbXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LSZndDtjbmYubXR1NikpOwoJfQoJcmN1X3JlYWRfdW5sb2NrKCk7CgoJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTsKCXJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwp9CmBgYAoKVGhlIGNvcmUgb2YgdGhlIGxvZ2ljIGlzIGNsZWFyLiBCb3RoIGZ1bmN0aW9ucyBnZXQgYW4gTVRVLCBjYXBwaW5nIGl0IGF0IHRoZSBhcHByb3ByaWF0ZSBtYXhpbXVtLCBhbmQgdGhlbiBzdWJ0cmFjdCB0aGUgTFdUdW5uZWwgaGVhZHJvb20uIFRoZSByZXN1bHRzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYWR2ZXJ0aXNlZCBNU1MgaW4gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYC4KCk15IGNvbmNlcm4gaGVyZSBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBIb3dldmVyLCB0aGUgY29kZSBsb29rcyBzb3VuZC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2suIEluIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgLCBgbXR1YCBpcyBndWFyYW50ZWVkIHRvIGJlIGFzc2lnbmVkIGEgdmFsdWU6IGVpdGhlciBmcm9tIGBkc3RfbWV0cmljX3Jhd2Agb3IgYGRzdF9kZXZfcmN1LSZndDttdHVgLCBhbmQgYHJlc2AgaXMgY29tcHV0ZWQgZGlyZWN0bHkgZnJvbSBgbXR1YC4gTm8gaXNzdWVzIHRoZXJlLiBJbiBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAsIGBtdHVgIHN0YXJ0cyBhdCAwLCBidXQgaXMgaW1tZWRpYXRlbHkgYXNzaWduZWQgZWl0aGVyIGBmcm9tLSZndDtmaWI2X3BtdHVgIG9yIGBpZGV2LSZndDtjbmYubXR1NmAgb3IgYElQVjZfTUlOX01UVWAuIEFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCgpUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBubyBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlOyB0aGUgYE5lZWRzS01TQU5gIHRhZyBzaG91bGQgYmUgYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2FmZSBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlndXJlZCBNVFUgb2YgYSByb3V0ZSBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUuIFRoZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgcmVhZGluZyBpbml0aWFsaXplZCBmaWVsZHMgZnJvbSBleGlzdGluZyBuZXR3b3JraW5nIHN0cnVjdHVyZXMgKGRzdF9lbnRyeSwgcnQ2X2luZm8sIGZpYjZfaW5mbywgaW5ldDZfZGV2KS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgbm8gbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgbmV3IGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZ3VyZWQgTVRVIG9mIGEgcm91dGUgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIHJlYWRpbmcgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gZXhpc3RpbmcgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIChkc3RfZW50cnksIHJ0Nl9pbmZvLCBmaWI2X2luZm8sIGluZXQ2X2RldikuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIG5ldyBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0NzoyMi4yNTgzODI5ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc2Njk5MzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Y0X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcInRjcF92Nl9zeW5fcmVjdl9zb2NrXCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF9vcGVucmVxX2luaXRfcndpblwiLFxuICAgIFwidGNwX2Nvbm5lY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlndXJlZCBNVFUgb2YgYSByb3V0ZSBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUuIFRoZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgcmVhZGluZyBpbml0aWFsaXplZCBmaWVsZHMgZnJvbSBleGlzdGluZyBuZXR3b3JraW5nIHN0cnVjdHVyZXMgKGRzdF9lbnRyeSwgcnQ2X2luZm8sIGZpYjZfaW5mbywgaW5ldDZfZGV2KS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgbm8gbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgbmV3IGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIE1TUyBmb3IgSVB2NCBhbmQgSVB2NiByb3V0ZXMsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNpbmcgdGhlIGNvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIHRoZSByb3V0ZSBvciBkZXZpY2UuIFRoaXMgYWZmZWN0cyBjb3JlIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgbG9naWMgKFNZTi9TWU4tQUNLIHByb2Nlc3NpbmcpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBTWU4gaGFuZGxpbmcgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0NzoyMi4yNTgzOTE3OTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDM1NDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzNWZjNjUxNDAxMTZlZDhmOGI0MmZjNGZjODBkOTJiZmIxNGQ3YzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDc6NDc6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmhcXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcC5oXFxuQEAgLTUwNiw2ICs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxcbisgKlxcbisgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXFxuKyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXFx1MDAzZXJ0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZVxcbisgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvclxcbisgKiByb3V0ZS1jb25maWd1cmVkIE1UVSksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpXFxuKyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci1cXHUwMDNldXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGVcXG4rICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxcbisgKiB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xcbitcXHRpZiAoIW10dSlcXG4rXFx0XFx0bXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktXFx1MDAzZW10dSk7XFxuK1xcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUF9NQVhfTVRVKTtcXG4rXFx0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuQEAgLTM4NSw2ICszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcXG4gXFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuIH1cXG4gXFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cXG4rICpcXG4rICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXFxuKyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxcbisgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xcbisgKiBib3VuZHMgd2hhdCB0aGUgcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlXFxuKyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZVxcbisgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcXG4rXFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4rXFx0dW5zaWduZWQgaW50IG10dSA9IDA7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdC8qIElQdjYga2VlcHMgdGhlIGxlYXJuZWQgUE1UVSBhbmQgdGhlIGNvbmZpZ3VyZWQgTVRVIGluIHRoZSBzYW1lXFxuK1xcdCAqIFJUQVhfTVRVIHNsb3Q6IHRoZSBsZWFybmVkIHZhbHVlIHNpdHMgb24gdGhpcyAocG9zc2libHkgUlRGX0NBQ0hFKVxcbitcXHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcXG4rXFx0ICogdmlhIC1cXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxcbitcXHQgKi9cXG4rXFx0ZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC1cXHUwMDNlZnJvbSk7XFxuK1xcdGlmIChmcm9tKVxcbitcXHRcXHRtdHUgPSBmcm9tLVxcdTAwM2VmaWI2X3BtdHU7XFxuK1xcdGlmICghbXR1KSB7XFxuK1xcdFxcdG10dSA9IElQVjZfTUlOX01UVTtcXG4rXFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldl9yY3UoZHN0KSk7XFxuK1xcdFxcdGlmIChpZGV2KVxcbitcXHRcXHRcXHRtdHUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIG10dSwgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5tdHU2KSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbitcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4rfVxcbitcXG4gdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcXG5pbmRleCBmZDY4OGUxZjg3OWY1Li40NmFhOThjOTIxODMzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2NC9yb3V0ZS5jXFxuQEAgLTEzMzQsOCArMTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xcbi1cXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgbmV0LVxcdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xcbitcXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXFxuK1xcdFxcdCAgICAgICBuZXQtXFx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0zMjYxLDcgKzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG10dSA9IGRzdDZfbXR1KGRzdCk7XFxuK1xcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gXFxuIFxcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjJlZjkzMWI3N2ExY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0XFxuQEAgLTAsMCArMSw2NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvL1xcbisvLyBUZXN0IHRoYXQgSVB2NCBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZFxcbisvLyBpbnRlcmZhY2UgTVRVICgxNTAwIC1cXHUwMDNlIE1TUyAxNDYwKSwgbm90IHRoZSBJQ01QLWxlYXJuZWQgUGF0aCBNVFUuXFxuK1xcbistLWlwX3ZlcnNpb249aXB2NFxcbitcXG4rYC4vZGVmYXVsdHMuc2hcXG4rZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcXG4rYFxcbitcXG4rLy9cXG4rLy8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyMDAgLVxcdTAwM2UgTVNTIDExNjApXFxuKy8vXFxuKyAgICAwIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXFxuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxcbisgICArMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxcbitcXG4rICAgKzAgXFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICAgKzAgXFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICArLjEgXFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XFxuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XFxuK1xcbisvLyBTZW5kIGEgZnVsbCAxNDYwLWJ5dGUgc2VnbWVudFxcbisgICArMCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxcbisgICArMCBcXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxcbitcXG4rLy8gSUNNUCBGcmFnbWVudGF0aW9uIE5lZWRlZCBhcnJpdmVzIGluZGljYXRpbmcgbmV4dC1ob3AgTVRVIDEyMDBcXG4rICAgKzAgXFx1MDAzYyBpY21wIHVucmVhY2hhYmxlIGZyYWdfbmVlZGVkIG10dSAxMjAwIFsxOjE0NjEoMTQ2MCldXFxuK1xcbisvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjAwIChNU1MgPSAxMjAwIC0gNDAgPSAxMTYwKVxcbisgICArMCBcXHUwMDNlIC4gMToxMTYxKDExNjApIGFjayAxXFxuKyAgICswIFxcdTAwM2UgUC4gMTE2MToxNDYxKDMwMCkgYWNrIDFcXG4rICAgKzAgXFx1MDAzYyBSIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMFxcbitcXG4rLy8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lclxcbisgICArMCBjbG9zZSg0KSA9IDBcXG4rICAgKzAgY2xvc2UoMykgPSAwXFxuK1xcbisvL1xcbisvLyBDb25uZWN0aW9uIDI6IE5ldyBjb25uZWN0aW9uIGZyb20gdGhlIHNhbWUgcGVlclxcbisvL1xcbisgICArMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xcbisgICArMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcXG4rICAgKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcXG4rXFxuKyAgICswIFxcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFxcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcXHUwMDNlXFxuK1xcbisvLyBWZXJpZnk6IFNZTi1BQ0sgTVVTVCBhZHZlcnRpc2UgY29uZmlndXJlZCBNU1MgMTQ2MCwgTk9UIHRoZSBsZWFybmVkIFBNVFUgTVNTIDExNjBcXG4rICAgKzAgXFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICAgKzAgXFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XFxuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XFxuK1xcbisvLyBWZXJpZnk6IE91dGdvaW5nIHRyYW5zbWl0IE1TUyBpcyBzdGlsbCBjb25zdHJhaW5lZCBieSB0aGUgbGVhcm5lZCBQTVRVIDEyMDBcXG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcXG4rICAgKzAgXFx1MDAzZSAuIDE6MTE2MSgxMTYwKSBhY2sgMVxcbisgICArMCBcXHUwMDNlIFAuIDExNjE6MTQ2MSgzMDApIGFjayAxXFxuKyAgICswIFxcdTAwM2MgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1N1xcbitcXG4rLy8gQ2xlYW4gdXBcXG4rICAgKzAgY2xvc2UoNCkgPSAwXFxuKyAgICswIFxcdTAwM2UgRi4gMTQ2MToxNDYxKDApIGFjayAxXFxuKyAgICswIFxcdTAwM2MgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTdcXG4rICAgKzAgXFx1MDAzZSAuIDE0NjI6MTQ2MigwKSBhY2sgMlxcbisgICArMCBjbG9zZSgzKSA9IDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3RcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3NjM4YjExYTgxNWJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdFxcbkBAIC0wLDAgKzEsNjcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLy9cXG4rLy8gVGVzdCB0aGF0IElQdjYgYWR2ZXJ0aXNlZCBNU1MgaW4gU1lOLUFDSyBpcyBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWRcXG4rLy8gaW50ZXJmYWNlIE1UVSAoMTUyMCAtXFx1MDAzZSBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUHY2LWxlYXJuZWQgUGF0aCBNVFUuXFxuK1xcbistLWlwX3ZlcnNpb249aXB2NlxcbitcXG4rYC4vZGVmYXVsdHMuc2hcXG4rZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcXG4rYFxcbitcXG4rLy9cXG4rLy8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyODAgLVxcdTAwM2UgTVNTIDEyMjApXFxuKy8vXFxuKyAgICAwIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXFxuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxcbisgICArMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxcbitcXG4rICAgKzAgXFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICAgKzAgXFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFxcdTAwM2VcXG4rICArLjEgXFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XFxuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XFxuK1xcbisvLyBTZW5kIGEgZnVsbCAxNDYwLWJ5dGUgc2VnbWVudFxcbisgICArMCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxcbisgICArMCBcXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxcbitcXG4rLy8gSUNNUHY2IFBhY2tldCBUb28gQmlnIGFycml2ZXMgaW5kaWNhdGluZyBuZXh0LWhvcCBNVFUgMTI4MFxcbisgICArMCBcXHUwMDNjIGljbXAgcGFja2V0X3Rvb19iaWcgbXR1IDEyODAgWzE6MTQ2MSgxNDYwKV1cXG4rXFxuKy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyODAgKE1TUyA9IDEyODAgLSA0MCAtIDIwID0gMTIyMClcXG4rICAgKzAgXFx1MDAzZSAuIDE6MTIyMSgxMjIwKSBhY2sgMVxcbisgICArMCBcXHUwMDNlIFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxXFxuKyAgICswIFxcdTAwM2MgUiAxOjEoMCkgYWNrIDE0NjEgd2luIDBcXG4rXFxuKy8vIENsb3NlIGNvbm5lY3Rpb24gMSBhbmQgbGlzdGVuZXJcXG4rICAgKzAgY2xvc2UoNCkgPSAwXFxuKyAgICswIGNsb3NlKDMpID0gMFxcbitcXG4rLy9cXG4rLy8gQ29ubmVjdGlvbiAyOiBOZXcgY29ubmVjdGlvbiBmcm9tIHRoZSBzYW1lIHBlZXJcXG4rLy9cXG4rICAgKzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcXG4rICAgKzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxcbisgICArMCBsaXN0ZW4oMywgMSkgPSAwXFxuK1xcbisgICArMCBcXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcXHUwMDNjbXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4XFx1MDAzZVxcbitcXG4rLy8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMjIwXFxuKyAgICswIFxcdTAwM2UgUy4gMDowKDApIGFjayAxIFxcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcXHUwMDNlXFxuKyAgICswIFxcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxcbitcXG4rLy8gVmVyaWZ5OiBPdXRnb2luZyB0cmFuc21pdCBNU1MgaXMgc3RpbGwgY29uc3RyYWluZWQgYnkgdGhlIGxlYXJuZWQgUE1UVSAxMjgwXFxuKyAgICswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXFxuKyAgICswIFxcdTAwM2UgLiAxOjEyMjEoMTIyMCkgYWNrIDFcXG4rICAgKzAgXFx1MDAzZSBQLiAxMjIxOjE0NjEoMjQwKSBhY2sgMVxcbisgICArMCBcXHUwMDNjIC4gMToxKDApIGFjayAxNDYxIHdpbiAyNTdcXG4rXFxuKy8vIENsZWFuIHVwXFxuKyAgICswIGNsb3NlKDQpID0gMFxcbisgICArMCBcXHUwMDNlIEYuIDE0NjE6MTQ2MSgwKSBhY2sgMVxcbisgICArMCBcXHUwMDNjIEYuIDE6MSgwKSBhY2sgMTQ2MiB3aW4gMjU3XFxuKyAgICswIFxcdTAwM2UgLiAxNDYyOjE0NjIoMCkgYWNrIDJcXG4rICAgKzAgY2xvc2UoMykgPSAwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjIyLjczMzU3ODgyOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4MDgzMTU4NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfdjRfc3luX3JlY3Zfc29ja1wiLFxuICAgIFwidGNwX3Y2X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcInRjcF9tYWtlX3N5bmFja1wiLFxuICAgIFwidGNwX29wZW5yZXFfaW5pdF9yd2luXCIsXG4gICAgXCJ0Y3BfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBNU1MgZm9yIElQdjQgYW5kIElQdjYgcm91dGVzLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzaW5nIHRoZSBjb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiB0aGUgcm91dGUgb3IgZGV2aWNlLiBUaGlzIGFmZmVjdHMgY29yZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljIChTWU4vU1lOLUFDSyBwcm9jZXNzaW5nKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgU1lOIGhhbmRsaW5nIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzM1ZmM2NTE0MDExNmVkOGY4YjQyZmM0ZmM4MGQ5MmJmYjE0ZDdjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDA3OjQ3OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmhcbmluZGV4IDdmMmZlMWE4NDAxYjEuLmE4ZjU3YjRmNGFhMjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcC5oXG4rKysgYi9pbmNsdWRlL25ldC9pcC5oXG5AQCAtNTA2LDYgKzUwNiwzMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuKyAqXG4rICogVW5saWtlIGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZVxuKyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXHUwMDNlcnRfcG10dSkuICBUaGUgYWR2ZXJ0aXNlZCBNU1MgYm91bmRzIHdoYXQgdGhlXG4rICogcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlIGNhcGFiaWxpdHkgKHRoZSBkZXZpY2Ugb3JcbisgKiByb3V0ZS1jb25maWd1cmVkIE1UVSksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpXG4rICogZGlyZWN0aW9uLCB3aGljaCBtYXkgbm90IGFwcGx5IHRvIHRoZSBwZWVyLVx1MDAzZXVzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlXG4rICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxuKyAqIHRjcF9hZHZlcnRpc2VfbXNzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbit7XG4rXHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbitcdGlmICghbXR1KVxuK1x0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuK1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xuK1x0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NSw2ICszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4gfVxuIFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cbisgKlxuKyAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aFxuKyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxuKyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTXG4rICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZVxuKyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZVxuKyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbitcdGNvbnN0IHN0cnVjdCBmaWI2X2luZm8gKmZyb207XG4rXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuK1x0dW5zaWduZWQgaW50IG10dSA9IDA7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHQvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZVxuK1x0ICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpXG4rXHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcbitcdCAqIHZpYSAtXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxuK1x0ICovXG4rXHRmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LVx1MDAzZWZyb20pO1xuK1x0aWYgKGZyb20pXG4rXHRcdG10dSA9IGZyb20tXHUwMDNlZmliNl9wbXR1O1xuK1x0aWYgKCFtdHUpIHtcbitcdFx0bXR1ID0gSVBWNl9NSU5fTVRVO1xuK1x0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcbitcdFx0aWYgKGlkZXYpXG4rXHRcdFx0bXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4rXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuK31cbitcbiB1MzIgaXA2X210dV9mcm9tX2ZpYjYoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCBmZDY4OGUxZjg3OWY1Li40NmFhOThjOTIxODMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTEzMzQsOCArMTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcbi1cdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXB2NF9tdHUoZHN0KSAtIGhlYWRlcl9zaXplLFxuLVx0XHRcdFx0ICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4rXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXG4rXHRcdCAgICAgICBuZXQtXHUwMDNlaXB2NC5pcF9ydF9taW5fYWR2bXNzKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IDU5NjhjZTVhZDE1MDguLmUyMDU2YmQwZGYzYzQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMzI2MSw3ICszMjYxLDcgQEAgdm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTtcbitcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXG4gXHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmYyZWY5MzFiNzdhMWNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3RcbkBAIC0wLDAgKzEsNjcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8vXG4rLy8gVGVzdCB0aGF0IElQdjQgYWR2ZXJ0aXNlZCBNU1MgaW4gU1lOLUFDSyBpcyBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWRcbisvLyBpbnRlcmZhY2UgTVRVICgxNTAwIC1cdTAwM2UgTVNTIDE0NjApLCBub3QgdGhlIElDTVAtbGVhcm5lZCBQYXRoIE1UVS5cbitcbistLWlwX3ZlcnNpb249aXB2NFxuK1xuK2AuL2RlZmF1bHRzLnNoXG4rZXRodG9vbCAtSyB0dW4wIHRzbyBvZmZcbitgXG4rXG4rLy9cbisvLyBDb25uZWN0aW9uIDE6IExlYXJuIFBNVFUgZXhjZXB0aW9uIChNVFUgMTIwMCAtXHUwMDNlIE1TUyAxMTYwKVxuKy8vXG4rICAgIDAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbisgICArMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcbisgICArMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbisgICArMCBsaXN0ZW4oMywgMSkgPSAwXG4rXG4rICAgKzAgXHUwMDNjIFMgMDowKDApIHdpbiA2NTUzNSBcdTAwM2Ntc3MgMTQ2MCxzYWNrT0ssbm9wLG5vcCxub3Asd3NjYWxlIDhcdTAwM2VcbisgICArMCBcdTAwM2UgUy4gMDowKDApIGFjayAxIFx1MDAzY21zcyAxNDYwLG5vcCxub3Asc2Fja09LLG5vcCx3c2NhbGUgOFx1MDAzZVxuKyAgKy4xIFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gMjU3XG4rICAgKzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDRcbitcbisvLyBTZW5kIGEgZnVsbCAxNDYwLWJ5dGUgc2VnbWVudFxuKyAgICswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXG4rICAgKzAgXHUwMDNlIFAuIDE6MTQ2MSgxNDYwKSBhY2sgMVxuK1xuKy8vIElDTVAgRnJhZ21lbnRhdGlvbiBOZWVkZWQgYXJyaXZlcyBpbmRpY2F0aW5nIG5leHQtaG9wIE1UVSAxMjAwXG4rICAgKzAgXHUwMDNjIGljbXAgdW5yZWFjaGFibGUgZnJhZ19uZWVkZWQgbXR1IDEyMDAgWzE6MTQ2MSgxNDYwKV1cbitcbisvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjAwIChNU1MgPSAxMjAwIC0gNDAgPSAxMTYwKVxuKyAgICswIFx1MDAzZSAuIDE6MTE2MSgxMTYwKSBhY2sgMVxuKyAgICswIFx1MDAzZSBQLiAxMTYxOjE0NjEoMzAwKSBhY2sgMVxuKyAgICswIFx1MDAzYyBSIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMFxuK1xuKy8vIENsb3NlIGNvbm5lY3Rpb24gMSBhbmQgbGlzdGVuZXJcbisgICArMCBjbG9zZSg0KSA9IDBcbisgICArMCBjbG9zZSgzKSA9IDBcbitcbisvL1xuKy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyXG4rLy9cbisgICArMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcbitcbisgICArMCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuK1xuKy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTE2MFxuKyAgICswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4rICAgKzAgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFZlcmlmeTogT3V0Z29pbmcgdHJhbnNtaXQgTVNTIGlzIHN0aWxsIGNvbnN0cmFpbmVkIGJ5IHRoZSBsZWFybmVkIFBNVFUgMTIwMFxuKyAgICswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXG4rICAgKzAgXHUwMDNlIC4gMToxMTYxKDExNjApIGFjayAxXG4rICAgKzAgXHUwMDNlIFAuIDExNjE6MTQ2MSgzMDApIGFjayAxXG4rICAgKzAgXHUwMDNjIC4gMToxKDApIGFjayAxNDYxIHdpbiAyNTdcbitcbisvLyBDbGVhbiB1cFxuKyAgICswIGNsb3NlKDQpID0gMFxuKyAgICswIFx1MDAzZSBGLiAxNDYxOjE0NjEoMCkgYWNrIDFcbisgICArMCBcdTAwM2MgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTdcbisgICArMCBcdTAwM2UgLiAxNDYyOjE0NjIoMCkgYWNrIDJcbisgICArMCBjbG9zZSgzKSA9IDBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3NjM4YjExYTgxNWJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3RcbkBAIC0wLDAgKzEsNjcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8vXG4rLy8gVGVzdCB0aGF0IElQdjYgYWR2ZXJ0aXNlZCBNU1MgaW4gU1lOLUFDSyBpcyBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWRcbisvLyBpbnRlcmZhY2UgTVRVICgxNTIwIC1cdTAwM2UgTVNTIDE0NjApLCBub3QgdGhlIElDTVB2Ni1sZWFybmVkIFBhdGggTVRVLlxuK1xuKy0taXBfdmVyc2lvbj1pcHY2XG4rXG4rYC4vZGVmYXVsdHMuc2hcbitldGh0b29sIC1LIHR1bjAgdHNvIG9mZlxuK2BcbitcbisvL1xuKy8vIENvbm5lY3Rpb24gMTogTGVhcm4gUE1UVSBleGNlcHRpb24gKE1UVSAxMjgwIC1cdTAwM2UgTVNTIDEyMjApXG4rLy9cbisgICAgMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcbitcbisgICArMCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuKyAgICswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4rICArLjEgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50XG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcbisgICArMCBcdTAwM2UgUC4gMToxNDYxKDE0NjApIGFjayAxXG4rXG4rLy8gSUNNUHY2IFBhY2tldCBUb28gQmlnIGFycml2ZXMgaW5kaWNhdGluZyBuZXh0LWhvcCBNVFUgMTI4MFxuKyAgICswIFx1MDAzYyBpY21wIHBhY2tldF90b29fYmlnIG10dSAxMjgwIFsxOjE0NjEoMTQ2MCldXG4rXG4rLy8gTG9jYWwgaG9zdCByZXRyYW5zbWl0cyB1c2luZyB0aGUgbGVhcm5lZCBNVFUgMTI4MCAoTVNTID0gMTI4MCAtIDQwIC0gMjAgPSAxMjIwKVxuKyAgICswIFx1MDAzZSAuIDE6MTIyMSgxMjIwKSBhY2sgMVxuKyAgICswIFx1MDAzZSBQLiAxMjIxOjE0NjEoMjQwKSBhY2sgMVxuKyAgICswIFx1MDAzYyBSIDE6MSgwKSBhY2sgMTQ2MSB3aW4gMFxuK1xuKy8vIENsb3NlIGNvbm5lY3Rpb24gMSBhbmQgbGlzdGVuZXJcbisgICArMCBjbG9zZSg0KSA9IDBcbisgICArMCBjbG9zZSgzKSA9IDBcbitcbisvL1xuKy8vIENvbm5lY3Rpb24gMjogTmV3IGNvbm5lY3Rpb24gZnJvbSB0aGUgc2FtZSBwZWVyXG4rLy9cbisgICArMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcbitcbisgICArMCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuK1xuKy8vIFZlcmlmeTogU1lOLUFDSyBNVVNUIGFkdmVydGlzZSBjb25maWd1cmVkIE1TUyAxNDYwLCBOT1QgdGhlIGxlYXJuZWQgUE1UVSBNU1MgMTIyMFxuKyAgICswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4rICAgKzAgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFZlcmlmeTogT3V0Z29pbmcgdHJhbnNtaXQgTVNTIGlzIHN0aWxsIGNvbnN0cmFpbmVkIGJ5IHRoZSBsZWFybmVkIFBNVFUgMTI4MFxuKyAgICswIHdyaXRlKDQsIC4uLiwgMTQ2MCkgPSAxNDYwXG4rICAgKzAgXHUwMDNlIC4gMToxMjIxKDEyMjApIGFjayAxXG4rICAgKzAgXHUwMDNlIFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxXG4rICAgKzAgXHUwMDNjIC4gMToxKDApIGFjayAxNDYxIHdpbiAyNTdcbitcbisvLyBDbGVhbiB1cFxuKyAgICswIGNsb3NlKDQpID0gMFxuKyAgICswIFx1MDAzZSBGLiAxNDYxOjE0NjEoMCkgYWNrIDFcbisgICArMCBcdTAwM2MgRi4gMToxKDApIGFjayAxNDYyIHdpbiAyNTdcbisgICArMCBcdTAwM2UgLiAxNDYyOjE0NjIoMCkgYWNrIDJcbisgICArMCBjbG9zZSgzKSA9IDBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjIyLjczMzU4MDc5OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDc3MzU3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgTVNTIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgaG93IHdlIGhhbmRsZSB0aGUgYWR2ZXJ0aXNlZCBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBjYWxjdWxhdGlvbnMsIHNwZWNpZmljYWxseSBmb3IgSVB2NCBhbmQgSVB2NiByb3V0ZXMuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLiBUaGUgaW50ZW50aW9uIGlzIHRvIGZhdm9yIHRoZSBjb25maWd1cmVkLCBhZG1pbmlzdHJhdGl2ZSBNVFUgb3ZlciB0aGUgZHluYW1pY2FsbHkgbGVhcm5lZCBQYXRoIE1UVSAoUE1UVSksIHdoaWNoIGlzIGEgZGVmaW5pdGUgZGVwYXJ0dXJlIGZyb20gdGhlIGN1cnJlbnQgYmVoYXZpb3IuIFRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHRoZW4gcGx1Z2dlZCBpbnRvIGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AsIHdoaWNoIGlzIHdoZXJlIHRoZSBjaGFuZ2Ugd2lsbCBtYW5pZmVzdC5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgdGhlc2Uga2V5IGZ1bmN0aW9ucywgYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCwgYXJlIGN1cnJlbnRseSB1c2VkIGluIHRoZSBjb2RlYmFzZS4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgaXQgc2VlbXMgdGhhdCBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgcmVzaWRlcyB3aXRoaW4gYG5ldC9pcHY0L3JvdXRlLmNgLCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AgcmVzaWRlcyBpbiBgbmV0L2lwdjYvcm91dGUuY2AuIFRoaXMgaXMgd2hhdCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQsIHNvLCBzbyBmYXIsIHNvIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0NzoyNi43NDEzMTk0NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDU3ODc4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY0X2RlZmF1bHRfYWR2bXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3JvdXRlLmM9MTI5PXN0cnVjdCBkc3RfZW50cnlcXHQqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcXG5uZXQvaXB2NC9yb3V0ZS5jOjEzMDpzdGF0aWMgdW5zaWduZWQgaW50XFx0IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMS1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xNTQ9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU2LVxcdC5jaGVjayA9XFx0XFx0aXB2NF9kc3RfY2hlY2ssXFxubmV0L2lwdjQvcm91dGUuYzoxNTc6XFx0LmRlZmF1bHRfYWR2bXNzID1cXHRpcHY0X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY0L3JvdXRlLmMtMTU4LVxcdC5tdHUgPVxcdFxcdFxcdGlwdjRfbXR1LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xMzIwPXN0YXRpYyB2b2lkIHNldF9jbGFzc190YWcoc3RydWN0IHJ0YWJsZSAqcnQsIHUzMiB0YWcpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMjgtXFxubmV0L2lwdjQvcm91dGUuYzoxMzI5OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L2lwdjQvcm91dGUuYy0xMzMwLXtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9Mjg4MT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3RfYmxhY2tob2xlX29wcyA9IHtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXFx0LmZhbWlseVxcdFxcdFxcdD0gQUZfSU5FVCxcXG5uZXQvaXB2NC9yb3V0ZS5jOjI4ODM6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PSBpcHY0X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cXHQubmVpZ2hfbG9va3VwXFx0XFx0PSBpcHY0X25laWdoX2xvb2t1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6MjguNzE1OTA5MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzUyOTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfZGVmYXVsdF9hZHZtc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz04Nj1zdHJ1Y3QgZHN0X2VudHJ5XFx0KmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnRcXHQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XFxubmV0L2lwdjYvcm91dGUuYy04OC1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0yNDk9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3Rfb3BzX3RlbXBsYXRlID0ge1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yNTMtXFx0LmNoZWNrXFx0XFx0XFx0PVxcdGlwNl9kc3RfY2hlY2ssXFxubmV0L2lwdjYvcm91dGUuYzoyNTQ6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PVxcdGlwNl9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1NS1cXHQubXR1XFx0XFx0XFx0PVxcdGlwNl9tdHUsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xcbm5ldC9pcHY2L3JvdXRlLmMtMjY5LVxcdC5mYW1pbHlcXHRcXHRcXHQ9IEFGX0lORVQ2LFxcbm5ldC9pcHY2L3JvdXRlLmM6MjcwOlxcdC5kZWZhdWx0X2Fkdm1zc1xcdFxcdD0gaXA2X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY2L3JvdXRlLmMtMjcxLVxcdC5uZWlnaF9sb29rdXBcXHRcXHQ9IGlwNl9kc3RfbmVpZ2hfbG9va3VwLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjU2PXZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI2MS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNjI6c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI2My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjMwLjUzMzQ0NDU5NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODE5OTEyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJvbGUgb2YgYC5kZWZhdWx0X2Fkdm1zc2AgaW4gYGRzdF9vcHNgKipcblxuUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGAuZGVmYXVsdF9hZHZtc3NgIHdpdGhpbiB0aGUgYGRzdF9vcHNgIGNvbnRleHQuIEkga25vdyB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGEgZGVmYXVsdC4gTm93LCBJIGhhdmUgdG8gcGlucG9pbnQgKndoZXJlKiBpdCdzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdC4gSXMgaXQgYmVpbmcgdXNlZCBhcyBhIGhhcmRjb2RlZCBkZWZhdWx0IHZhbHVlLCBvciBpcyBpdCBkeW5hbWljYWxseSBtb2RpZmllZCBiYXNlZCBvbiBvdGhlciBmYWN0b3JzPyBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIGhlbHBzIGNsYXJpZnkgaXRzIHJvbGUgd2l0aGluIGFueSByZWxldmFudCBhbGdvcml0aG1zIG9yIGNvbmZpZ3VyYXRpb25zLiBJdCBhbHNvIGhlbHBzIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBuZWVkIHRvIGJlIGFkanVzdGVkIG9yIGN1c3RvbWl6ZWQgYmFzZWQgb24gdGhlIHN5c3RlbSBpbiBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0NzozMy41MTU0Mzc5OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MTE4MTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmRlZmF1bHRfYWR2bXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3JvdXRlLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1Ni1cXHQuY2hlY2sgPVxcdFxcdGlwdjRfZHN0X2NoZWNrLFxcbm5ldC9pcHY0L3JvdXRlLmM6MTU3OlxcdC5kZWZhdWx0X2Fkdm1zcyA9XFx0aXB2NF9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OC1cXHQubXR1ID1cXHRcXHRcXHRpcHY0X210dSxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9Mjg4MT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3RfYmxhY2tob2xlX29wcyA9IHtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXFx0LmZhbWlseVxcdFxcdFxcdD0gQUZfSU5FVCxcXG5uZXQvaXB2NC9yb3V0ZS5jOjI4ODM6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PSBpcHY0X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cXHQubmVpZ2hfbG9va3VwXFx0XFx0PSBpcHY0X25laWdoX2xvb2t1cCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjUzLVxcdC5jaGVja1xcdFxcdFxcdD1cXHRpcDZfZHN0X2NoZWNrLFxcbm5ldC9pcHY2L3JvdXRlLmM6MjU0OlxcdC5kZWZhdWx0X2Fkdm1zc1xcdFxcdD1cXHRpcDZfZGVmYXVsdF9hZHZtc3MsXFxubmV0L2lwdjYvcm91dGUuYy0yNTUtXFx0Lm10dVxcdFxcdFxcdD1cXHRpcDZfbXR1LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0yNjg9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3RfYmxhY2tob2xlX29wcyA9IHtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTI2OS1cXHQuZmFtaWx5XFx0XFx0XFx0PSBBRl9JTkVUNixcXG5uZXQvaXB2Ni9yb3V0ZS5jOjI3MDpcXHQuZGVmYXVsdF9hZHZtc3NcXHRcXHQ9IGlwNl9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTI3MS1cXHQubmVpZ2hfbG9va3VwXFx0XFx0PSBpcDZfZHN0X25laWdoX2xvb2t1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6MzUuNDU2NjI3MTg5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNDM4MTQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTZWFyY2ggVGVybSoqXG5cbkFscmlnaHQsIG15IGludGVybmFsIHByb2Nlc3NpbmcganVzdCBmbGFnZ2VkIHNvbWV0aGluZy4gSSB3YXMgb24gYSB0cmFjaywgYnV0IEkgbmVlZCB0byBwaXZvdCBzbGlnaHRseS4gVGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdhcyBsZWFkaW5nIG1lIGluIGEgZGlyZWN0aW9uLCBidXQgbm93IEknbSB0aGlua2luZyBJIG5lZWQgdG8gcmVmaW5lIG15IHNlYXJjaCBjcml0ZXJpYS4gSW5zdGVhZCBvZiBhIGdlbmVyYWwgYXBwcm9hY2gsIGl0IGZlZWxzIGxpa2UgSSBzaG91bGQgYmUgbW9yZSBwcmVjaXNlLiBMZXQncyBzZWUuLi4gd2hhdCBzcGVjaWZpY2FsbHkgYW0gSSBsb29raW5nIGZvcj8gVGhlIG1lbnRpb24gb2YgXCJkZWZhdWx0X2Fkdm1zc1wiIGZlZWxzIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuIEl0J3MgYWxtb3N0IGxpa2UgYSBrZXkgdGVybS4gU28sIEkgbmVlZCB0byBzdGFydCB1c2luZyB0b29scyBvbiBteSBleGlzdGluZyBkYXRhc2V0IGFuZCBzdGFydCBsb29raW5nIHdpdGggbW9yZSBwcmVjaXNpb24uIEkgbmVlZCB0byByZWFjaCBmb3IgYSBgZ3JlcGAgY29tbWFuZCwgdXNpbmcgYC1cdTAwM2VkZWZhdWx0X2Fkdm1zc2AgYXMgdGhlIGV4YWN0IHNlYXJjaCB0ZXJtLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBob25lIGluIG9uIHRoZSBwYXJ0aWN1bGFyIGluc3RhbmNlcyBJJ20gaW50ZXJlc3RlZCBpbi4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGlzb2xhdGUgdGhvc2Ugc3BlY2lmaWMgb2NjdXJyZW5jZXMgaW4gdGhlIGNvZGUgb3IgZGF0YSBJJ20gY3VycmVudGx5IHdvcmtpbmcgd2l0aC4gSG9wZWZ1bGx5IHRoaXMgd2lsbCByZXZlYWwgdGhlIGluZm9ybWF0aW9uIEkgd2FzIGhvcGluZyB0byBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6MzguNTgxMDEwODk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkxNTk1NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLVxcdTAwM2VkZWZhdWx0X2Fkdm1zc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9kc3QuaD0xODU9ZHN0X21ldHJpY19hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxuaW5jbHVkZS9uZXQvZHN0LmgtMTg5LVxcdGlmICghYWR2bXNzKVxcbmluY2x1ZGUvbmV0L2RzdC5oOjE5MDpcXHRcXHRhZHZtc3MgPSBkc3QtXFx1MDAzZW9wcy1cXHUwMDNlZGVmYXVsdF9hZHZtc3MoZHN0KTtcXG5pbmNsdWRlL25ldC9kc3QuaC0xOTEtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTE9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxMjYtXFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlY2hlY2sgPSB4ZnJtX2RzdF9jaGVjaztcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjc6XFx0XFx0aWYgKGxpa2VseShkc3Rfb3BzLVxcdTAwM2VkZWZhdWx0X2Fkdm1zcyA9PSBOVUxMKSlcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjg6XFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlZGVmYXVsdF9hZHZtc3MgPSB4ZnJtX2RlZmF1bHRfYWR2bXNzO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEyOS1cXHRcXHRpZiAobGlrZWx5KGRzdF9vcHMtXFx1MDAzZW10dSA9PSBOVUxMKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6NDAuMTcwMTc5NjE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODA0MjIyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkZpbmRpbmcgdGhlIFVzYWdlIG9mIGRzdF9tZXRyaWNfYWR2bXNzKipcblxuT2theSwgc28gSSBzZWUgYGRzdF9tZXRyaWNfYWR2bXNzYCBtZW50aW9uZWQuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRoZSB0ZXh0IGluZGljYXRlcyB0aGF0IEkgc2hvdWxkIGZvY3VzIG9uIHdoZXJlIGBkc3RfbWV0cmljX2Fkdm1zc2AgaXMgKnVzZWQqLiAgVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24uIFRpbWUgdG8gc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSBjb2RlIHRvIGlkZW50aWZ5IHRob3NlIGxvY2F0aW9ucyBhbmQgYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZWxhdGlvbnNoaXBzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0Nzo0Mi43NTA2MDY3MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTY1MzMxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHN0X21ldHJpY19hZHZtc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM9MTA5OD11bnNpZ25lZCBpbnQgY3hnYmlfc29ja19zZWxlY3RfbXNzKHN0cnVjdCBjeGdiaV9zb2NrICpjc2ssIHVuc2lnbmVkIGludCBwbXR1KVxcbi0tXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMtMTEwMi1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYzoxMTAzOlxcdGNzay1cXHUwMDNlYWR2bXNzID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTtcXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy0xMTA0LVxcbi0tXFxuaW5jbHVkZS9uZXQvZHN0Lmg9MTg0PXN0YXRpYyBpbmxpbmUgdTMyXFxuaW5jbHVkZS9uZXQvZHN0Lmg6MTg1OmRzdF9tZXRyaWNfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5pbmNsdWRlL25ldC9kc3QuaC0xODYte1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjc0PXN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE3MzgtXFx0dGNwX3N5bmNfbXNzKG5ld3NrLCBkc3Q0X210dShkc3QpKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE3Mzk6XFx0bmV3dHAtXFx1MDAzZWFkdm1zcyA9IHRjcF9tc3NfY2xhbXAodGNwX3NrKHNrKSwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNzQwLVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQzMT12b2lkIHRjcF9vcGVucmVxX2luaXRfcndpbihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDQyLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo0NDM6XFx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ0NC1cXHR3aW5kb3dfY2xhbXAgPSBSRUFEX09OQ0UodHAtXFx1MDAzZXdpbmRvd19jbGFtcCk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTM5PXN0YXRpYyBfX3UxNiB0Y3BfYWR2ZXJ0aXNlX21zcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTQ1LVxcdGlmIChkc3QpIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTQ2OlxcdFxcdHVuc2lnbmVkIGludCBtZXRyaWMgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDctXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzkzMT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5NzQtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM5NzU6XFx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5NzYtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTMwLVxcdFxcdFdSSVRFX09OQ0UodHAtXFx1MDAzZXdpbmRvd19jbGFtcCwgZHN0X21ldHJpYyhkc3QsIFJUQVhfV0lORE9XKSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMzE6XFx0dHAtXFx1MDAzZWFkdm1zcyA9IHRjcF9tc3NfY2xhbXAodHAsIGRzdF9tZXRyaWNfYWR2bXNzKGRzdCkpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTMyLVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzgyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDg5LVxcdHRjcF9zeW5jX21zcyhuZXdzaywgZHN0Nl9tdHUoZHN0KSk7XFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxNDkwOlxcdG5ld3RwLVxcdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRjcF9zayhzayksIGRzdF9tZXRyaWNfYWR2bXNzKGRzdCkpO1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQ5MS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDA2Mj1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2My17XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MDY0OlxcdHJldHVybiBkc3RfbWV0cmljX2Fkdm1zcyh4ZnJtX2RzdF9wYXRoKGRzdCkpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjQ0LjM2NzE1MDc3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDYzNTUyMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVNTIEFkdmVydGlzZW1lbnQgTG9naWMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyBob3cgdGhlIGRlZmF1bHQgTVNTIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBmb3IgSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IHVzaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgaW5zdGVhZCBvZiBzb21ldGhpbmcgZWxzZSAocHJlc3VtYWJseSwgdGhlIG9sZCBsb2dpYykuIFRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBUQ1AgTVNTIGFkdmVydGlzZW1lbnQ6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBgdGNwX2FkdmVydGlzZV9tc3NgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF9jb25uZWN0X2luaXRgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gIERlZmluaXRlbHkgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgIGFyZSBzdGF0aWMsIGJ1dCB0aGUgZnVuY3Rpb25zIHRoZXkgdXNlIGFyZSBzdGF0aWMgaW5saW5lLiBUaGUgcmVhbCBjYWxsIHNpdGUgZm9yIGRzdF9tZXRyaWNfYWR2bXNzIGlzIGNhbGxlZCBmcm9tIHRoZSBmdW5jdGlvbnMgSSBsaXN0ZWQgYWJvdmUuIFxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gdG8gZmluZCB0aGUgYmVzdCBlbnRyeSBwb2ludHMuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgd291bGQgZ2l2ZSBtZSB0aGUgYmVzdCBiYW5nIGZvciB0aGUgYnVjayBpbiB0ZXJtcyBvZiBjb3ZlcmFnZS4gSSdtIGRpc2NhcmRpbmcgYHRjcF9hZHZlcnRpc2VfbXNzYCBhbmQgYHRjcF9jb25uZWN0X2luaXRgIHJpZ2h0IGF3YXkgYmVjYXVzZSB0aGV5J3JlIHN0YXRpYyBhbmQgbGlrZWx5IHRvIGJlIGxlc3MgaW50ZXJlc3RpbmcgYXMgZGlyZWN0IGZ1enppbmcgdGFyZ2V0cy4gSSBzZWUgdGhhdCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBgdGNwX29wZW5yZXFfaW5pdF9yd2luYCwgYW5kIGB0Y3BfbWFrZV9zeW5hY2tgIGFyZW4ndCBzdGF0aWMuIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYXBwZWFyIHRvIGJlIHN0cm9uZyBjYW5kaWRhdGVzIGFzIGluaXRpYWwgZm9jdXMgcG9pbnRzLiBUaGV5IHNlZW0gbGlrZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MTYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6NTAuODMwNzA1ODI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM3NjEwMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTU2MD12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcXG5pbmNsdWRlL25ldC90Y3AuaDo1NjE6c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC90Y3AuaC01NjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NTU9aW50IHRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjczLSAqL1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTY3NDpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY3NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM1OD1jb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNjItXFx0LmNvbm5fcmVxdWVzdFxcdCAgID0gdGNwX3Y0X2Nvbm5fcmVxdWVzdCxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjIzNjM6XFx0LnN5bl9yZWN2X3NvY2tcXHQgICA9IHRjcF92NF9zeW5fcmVjdl9zb2NrLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM2NC1cXHQubmV0X2hlYWRlcl9sZW5cXHQgICA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzM3PXN0YXRpYyB2b2lkIHRjcF92Nl9yZXN0b3JlX2NiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzNDYtXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzQ3Oi8qIENhbGxlZCBmcm9tIHRjcF92NF9zeW5fcmVjdl9zb2NrKCkgZm9yIHY2X21hcHBlZCBjaGlsZHJlbi4gKi9cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzNDgtc3RhdGljIHZvaWQgdGNwX3Y2X21hcHBlZF9jaGlsZF9pbml0KHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzcyLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTM3MzpcXHQvKiB0Y3BfdjRfc3luX3JlY3Zfc29jaygpIGhhcyBpbml0aWFsaXplZCBuZXdpbmV0LVxcdTAwM2VtY197aW5kZXgsdHRsfSAqL1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM3NC1cXHRuZXducC1cXHUwMDNlbWNhc3Rfb2lmICAgPSBuZXdpbmV0LVxcdTAwM2VtY19pbmRleDtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQwNC1cXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxNDA1OlxcdFxcdHJldHVybiB0Y3BfdjRfc3luX3JlY3Zfc29jayhzaywgc2tiLCByZXEsIGRzdCxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0MDYtXFx0XFx0XFx0XFx0XFx0ICAgIHJlcV91bmhhc2gsIG93bl9yZXEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ3OjUyLjQ2ODMyNjI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4MjEwOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF92Nl9zeW5fcmVjdl9zb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjI5LVxcdCAqIFdlIG5lZWQgdG8gbG9va3VwIHRoZSBkc3RfZW50cnkgdG8gZ2V0IHRoZSBjb3JyZWN0IHdpbmRvdyBzaXplLlxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoyMzA6XFx0ICogVGhpcyBpcyB0YWtlbiBmcm9tIHRjcF92Nl9zeW5fcmVjdl9zb2NrLiAgU29tZWJvZHkgcGxlYXNlIGVubGlnaHRlblxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yMzEtXFx0ICogbWUgaWYgdGhlcmUgaXMgYSBwcmVmZXJyZWQgd2F5Llxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzQ4PXN0YXRpYyB2b2lkIHRjcF92Nl9tYXBwZWRfY2hpbGRfaW5pdChzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM4MS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjEzODI6c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfdjZfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzgzLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIwMDc9Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDExLVxcdC5jb25uX3JlcXVlc3RcXHQgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMDEyOlxcdC5zeW5fcmVjdl9zb2NrXFx0ICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jayxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIwMTMtXFx0Lm5ldF9oZWFkZXJfbGVuXFx0ICAgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfbWFwcGVkID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDQyLVxcdC5jb25uX3JlcXVlc3RcXHQgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMDQzOlxcdC5zeW5fcmVjdl9zb2NrXFx0ICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jayxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIwNDQtXFx0Lm5ldF9oZWFkZXJfbGVuXFx0ICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6NTMuOTY2NTQzMjQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjM5MzUwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHMsIGtlZXBpbmcgaW4gbWluZCBteSBvd24gZXhwZXJ0IHVuZGVyc3RhbmRpbmc6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBUQ1AgU1lOIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGNydWNpYWwgcG9pbnRzIGluIHRoZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBhbmQgbXkgaW5pdGlhbCBodW5jaCBpcyBjb25maXJtZWQ6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgYXJlIGV4YWN0bHkgdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGRpc3NlY3QgZm9yIGEgZGVlcCBkaXZlIGludG8gSVB2NCBhbmQgSVB2NiBTWU4gaGFuZGxpbmcgcmVzcGVjdGl2ZWx5LiBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBmb3IgYSBsaXN0ZW5pbmcgc29ja2V0IHJlY2VpdmluZyBhIFNZTiBwYWNrZXQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBzb2NrZXQgc3RhdGUgdHJhbnNpdGlvbnMsIHF1ZXVlaW5nLCBhbmQgYW55IHNwZWNpZmljIElQdjQvSVB2Ni1yZWxhdGVkIGRpZmZlcmVuY2VzLlxuXG5Ob3csIEkgbmVlZCB0byBleHBhbmQgbXkgc2NvcGUgc2xpZ2h0bHkuIFdoYXQgYWJvdXQgYHRjcF9tYWtlX3N5bmFja2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJdCBwcm9iYWJseSBoYXMgYSBjcml0aWNhbCBwYXJ0IHRvIHBsYXkgdG9vLCBwb3NzaWJseSBidWlsZGluZyB0aGUgU1lOLUFDSyByZXNwb25zZSBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWNlaXZlZCBTWU4uIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzdGF0ZSBpdCBidWlsZHMsIGFuZCBob3cgaXQgZGlmZmVycyBpbiBJUHY0IGFuZCBJUHY2IGNvbnRleHRzLiBJcyBpdCBhIGNlbnRyYWwgZnVuY3Rpb24sIG9yIGFyZSB0aGVyZSBzZXBhcmF0ZSBJUHY0IGFuZCBJUHY2IHZhcmlhbnRzPyBJdCdzIGFsbCBhYm91dCBob3cgdGhlIFNZTi1BQ0sgaXMgY3JhZnRlZCBhbmQgc2VudCBiYWNrIHRvIHRoZSBjbGllbnQuIEFuZCwgY3J1Y2lhbGx5LCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmVzIGF0IHRoaXMgc3RhZ2U/IFRoYXQncyB3aGF0IEknbGwgbmVlZCB0byBmaWd1cmUgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0Nzo1Ny42OTA0ODA2MjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM5Mjg5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX21ha2Vfc3luYWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTU3MT1lbnVtIHRjcF9zeW5hY2tfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC01NzYtfTtcXG5pbmNsdWRlL25ldC90Y3AuaDo1Nzc6c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG5pbmNsdWRlL25ldC90Y3AuaC01NzgtXFx0XFx0XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0xMTYyPXN0YXRpYyBpbnQgdGNwX3Y0X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTc4LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTE3OTpcXHRza2IgPSB0Y3BfbWFrZV9zeW5hY2soc2ssIGRzdCwgcmVxLCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExODAtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mzg4Nz1pbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTIxLS8qKlxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTIyOiAqIHRjcF9tYWtlX3N5bmFjayAtIEFsbG9jYXRlIG9uZSBza2IgYW5kIGJ1aWxkIGEgU1lOQUNLIHBhY2tldC5cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkyMy0gKiBAc2s6IGxpc3RlbmVyIHNvY2tldFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MzAtICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM5MzE6c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkzMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTU1MD1zdGF0aWMgaW50IHRjcF92Nl9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNTY5LVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6NTcwOlxcdHNrYiA9IHRjcF9tYWtlX3N5bmFjayhzaywgZHN0LCByZXEsIGZvYywgc3luYWNrX3R5cGUsIHN5bl9za2IpO1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNTcxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYz0yMjE9c3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QtZGVueS5jLTI0OS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmM6MjUwOlxcdCAqIFhYWDogVGhlIHRlc3QgZG9lc24ndCBpbmNyZWFzZSBhbnkgY291bnRlcnMsIHNlZSB0Y3BfbWFrZV9zeW5hY2soKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QtZGVueS5jLTI1MS1cXHQgKiBQb3RlbnRpYWxseSwgaXQgY2FuIGJlIHNwZWVkIHVwIGJ5IHNldHRpbmcgc2tfcGFpciA9IC1FVElNRURPVVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDc6NTkuMjU0NDE1ODI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODAxMjEwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gVENQIFNZTkFDSyBHZW5lcmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcF9tYWtlX3N5bmFja2AuIEl0J3MgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgU1lOLUFDSyBwYWNrZXRzLCBhbmQgaXQncyB1c2VkIGRpcmVjdGx5IGJ5IGJvdGggdGhlIElQdjQgYW5kIElQdjYgdmFyaWFudHMsIGB0Y3BfdjRfc2VuZF9zeW5hY2tgIGFuZCBgdGNwX3Y2X3NlbmRfc3luYWNrYC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHN5bWJvbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgU1lOLUFDSyBwcm9jZXNzLiBJdCdzIHRoZSBjZW50cmFsIHBvaW50LCB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC5cblxuTm93LCBhIHJlbGF0ZWQgdGhvdWdodCBwb3BwZWQgdXA6IFdoYXQncyB0aGUgcm9sZSBvZiBgdGNwX29wZW5yZXFfaW5pdF9yd2luYCBpbiB0aGlzIHdob2xlIGRhbmNlPyBJdCBzb3VuZHMgbGlrZSBpdCdzIGludm9sdmVkIGluIGluaXRpYWxpemluZyB0aGUgcmVjZWl2ZSB3aW5kb3cgd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIG9wZW4gcmVxdWVzdC4gSXMgaXQgYSBwcmUtcmVxdWlzaXRlIGZvciBgdGNwX21ha2Vfc3luYWNrYCwgYW4gYWRqYWNlbnQgZnVuY3Rpb24sIG9yIGlzIGl0IHdvcmtpbmcgaW4gcGFyYWxsZWwgdG8gaW5pdGlhbGl6ZSBhbm90aGVyIGFzcGVjdCBvZiB0aGUgY29ubmVjdGlvbi4gSSdsbCBuZWVkIHRvIHJlc2VhcmNoIHRoYXQgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NjQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0ODowMi40MzQ1Mzk4NDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTYxNzA4MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX29wZW5yZXFfaW5pdF9yd2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTE4MjM9c3RhdGljIGlubGluZSBib29sIHRjcF9lcG9sbGluX3JlYWR5KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IHRhcmdldClcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzQtXFxuaW5jbHVkZS9uZXQvdGNwLmg6MTgzNTpleHRlcm4gdm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzYtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc1OS1cXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXN5bl90b3MgPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWlwX2RzZmllbGQ7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc2MDpcXHR0Y3Bfb3BlbnJlcV9pbml0X3J3aW4ocmVxLCBzaywgZHN0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzYxLVxcdHNrX3J4X3F1ZXVlX3NldChyZXFfdG9fc2socmVxKSwgc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MTI9dm9pZCB0Y3BfdHdza19wdXJnZShzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDMxOnZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MDQuMDUwNzE1OTczWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTMwOTc3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gIGlzIGp1bXBpbmcgb3V0IGF0IG1lIGFzIGEgcG90ZW50aWFsIGtleSBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0J3MgYSBzb2xpZCBmb2N1cyBzeW1ib2wsIHN1Z2dlc3RpbmcgaXQncyB3b3J0aCBhIGRlZXAgZGl2ZS4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBvdmVyYWxsIGZsb3csIGxldCdzIGFsc28gcHVsbCBpbiBgdGNwX2Nvbm5lY3RfaW5pdGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBhIFRDUCBjb25uZWN0aW9uIHN0YXJ0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjU5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MDcuMDAzODMxNjg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1MzAyMzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9jb25uZWN0X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0xNj1zdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgICAgICAgICBpY3NrX2tlZXBhbGl2ZV90aW1lclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MTc6dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19ydG8gICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3NjaGVkdWxlX2xvLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0xOC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0b19taW5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MjA9dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19kZWxhY2tfbWF4XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMTp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3BtdHVfY29va2llICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc3luY19tc3MsdGNwX2N1cnJlbnRfbXNzLHRjcF8uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIyOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgICAgICAgICAgIGljc2tfY2Ffb3BzICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jd25kX3ZhbGlkYXRlLHRjcF90c29fc2Vncyx0Yy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjM6c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyAgaWNza19hZl9vcHMgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9zZW5kX3N5bl9kLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0yNC1zdHJ1Y3QgdGNwX3VscF9vcHMqICAgICAgICAgICAgICAgICBpY3NrX3VscF9vcHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9Mjg9dTg6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9zZXRzb2Nrb3B0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyOTp1ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX2RzdF9sb2NrZWQgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY2FfZHN0X2luaXQsdGNwX2Nvbm5lY3RfaW5pdCwuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMwOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcmV0cmFuc21pdHMgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jb25uZWN0X2luaXQsdGNwX2Nvbm5lY3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTMxLXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcGVuZGluZyAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIsdGNwX2Nvbi4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzI6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19iYWNrb2ZmICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3dyaXRlX3F1ZXVlX3B1cmdlLHRjcF9jb25uZWN0Li4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMy11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3N5bl9yZXRyaWVzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTQxPXN0cnVjdCBpY3NrX2Fja191MzIgICAgICAgICAgICAgICAgIGxyY3Z0aW1lICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3BfY29ubmVjdCx0Yy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDI6c3RydWN0IGljc2tfYWNrX3UxNiAgICAgICAgICAgICAgICAgcmN2X21zcyAgICAgICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgX190Y3Bfc2VsZWN0X3dpbmRvdyxfX3RjcF9jbGVhbnVwLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MzpzdHJ1Y3QgaWNza19tdHVwX2ludCAgICAgICAgICAgICAgICBzZWFyY2hfaGlnaCAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9zeW5jX21zcyx0Y3BfY28uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ0OnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9sb3cgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVfcHJvYmUsdGNwX210dV9jaGVja19yZXByby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDU6c3RydWN0IGljc2tfbXR1cF91MzI6MzEgICAgICAgICAgICAgcHJvYmVfc2l6ZSAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LF9fLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NjpzdHJ1Y3QgaWNza19tdHVwX3UzMjoxICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9zeW5jX21zcyx0Y3BfY28uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ3OnN0cnVjdCBpY3NrX210dXBfdTMyICAgICAgICAgICAgICAgIHByb2JlX3RpbWVzdGFtcCAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX2Nvbm5lY3RfaW5pdCx0Yy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtNDgtdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wcm9iZXNfdHN0YW1wXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDA4MT1zdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwMC0vKiBEbyBhbGwgY29ubmVjdCBzb2NrZXQgc2V0dXBzIHRoYXQgY2FuIGJlIGRvbmUgQUYgaW5kZXBlbmRlbnQuICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMDE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDIte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzU5LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzYwOlxcdHRjcF9jb25uZWN0X2luaXQoc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0ODowOC42MTkxNDE2MTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MzU0NzI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgdGNwX2Nvbm5lY3RfaW5pdGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIE1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LCBjYWxsZWQgYnkgYHRjcF9jb25uZWN0YC4gUmlnaHQsIGFuZCBgdGNwX2Nvbm5lY3RgIGlzICpleHBvcnRlZCouIFNvIGB0Y3BfY29ubmVjdGAgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uIGZvciBpbml0aWF0aW5nIGEgVENQIGNvbm5lY3Rpb24sIGFuZCBgdGNwX2Nvbm5lY3RfaW5pdGAgaXMgaXRzIGludGVybmFsIGhlbHBlci4gVGhhdCBjbGFyaWZpZXMgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBjb25uZWN0aW9uIGluaXRpYXRpb24gcHJvY2Vzcy4gTm93LCB3aGF0J3MgbmV4dCBpbiB0aGUgY2hhaW4/IExldCdzIHRha2UgYSBsb29rIGF0IGB0Y3BfYWR2ZXJ0aXNlX21zc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgTWF4aW11bSBTZWdtZW50IFNpemUgaXMgaGFuZGxlZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTAyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MTEuNzEyNjkxNzI0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM2MDAwODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hZHZlcnRpc2VfbXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTUxNi0gKiBmb3IgdGhlIHdob2xlIGNvbm5lY3Rpb24uICBTZWUgUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlXFxuaW5jbHVkZS9uZXQvaXAuaDo1MTc6ICogdGNwX2FkdmVydGlzZV9tc3MoKS5cXG5pbmNsdWRlL25ldC9pcC5oLTUxOC0gKi9cXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTM2NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM5NC0gKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWVcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozOTU6ICogUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlIHRjcF9hZHZlcnRpc2VfbXNzKCkuXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk2LSAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTExMz1zdGF0aWMgaW5saW5lIF9fdTMyIHRjcF9hY2NlcHRhYmxlX3NlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTM4LSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMzk6c3RhdGljIF9fdTE2IHRjcF9hZHZlcnRpc2VfbXNzKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTQwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05NTk9c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTk5MS1cXHQgKiBnb2luZyBvdXQuICAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5OTI6XFx0b3B0cy1cXHUwMDNlbXNzID0gdGNwX2FkdmVydGlzZV9tc3Moc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05OTMtXFx0cmVtYWluaW5nIC09IFRDUE9MRU5fTVNTX0FMSUdORUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjEzLjM0ODY5ODE1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTg0MDI1NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdGNwX2FkdmVydGlzZV9tc3NgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgdGNwX2FkdmVydGlzZV9tc3NgIGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgY2FsbGVkIGJ5IGB0Y3Bfc3luX29wdGlvbnNgLiBBbmQgYHRjcF9zeW5fb3B0aW9uc2AgaXMgYWxzbyBzdGF0aWMsIHVzZWQgYnkgYm90aCBgdGNwX2Nvbm5lY3RgIGFuZCBgdGNwX21ha2Vfc3luYWNrYC4gIFNvLCBpZiBJJ20gZ29pbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMsIHRoZSBtb3N0IGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIGFuZCwgb2YgY291cnNlLCBgdGNwX2Nvbm5lY3RgLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGNyaXRpY2FsIGhlcmUuIEkgY2FuIHNlZSB0aGUgY29yZSBjb2RlIGlzIGluIGBuZXQvaXB2NC9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLiAgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgZXhwZWN0ZWQsIHNvIG5vdGhpbmcgc3BlY2lhbCBzbyBmYXIuIEFueXRoaW5nIGVsc2U/IEFoLCB0aGUgcGF0Y2ggYWRkcyB0ZXN0cy4gVGhlc2UgYXJlIGBwYWNrZXRkcmlsbGAgdGVzdHM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0YCBhbmQgYHRjcF9hZHZtc3NfcG10dV9pcHY2LnBrdGAuIFRoYXQncyBnb29kOyBpdCBtZWFucyB3ZSBoYXZlIHRlc3QgY292ZXJhZ2UuIEFuZCBpdCBhcHBlYXJzIHRoZSBwYXRjaCBtb2RpZmllcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLlxuXG5HaXZlbiB0aGUgZmlsZXMgaW52b2x2ZWQgYW5kIHRoZSBsYWNrIG9mIHVudXN1YWwgYENPTkZJR19gIHJlcXVpcmVtZW50cywgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGNvcmUgSVB2NC9JUHY2IHJvdXRpbmcgbG9naWMuIEFuZCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBoZWFkZXIgZmlsZSBgaW5jbHVkZS9uZXQvaXAuaGAgZm9yIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0ODoxOS4zMzI3MjY0MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODc2NjY4NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfZHN0X210dV9jb25maWd1cmVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTUxOC0gKi9cXG5pbmNsdWRlL25ldC9pcC5oOjUxOTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbmluY2x1ZGUvbmV0L2lwLmgtNTIwLXtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTMyOT1zdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xMzM2LVxcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xcbm5ldC9pcHY0L3JvdXRlLmM6MTMzNzpcXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXFxubmV0L2lwdjQvcm91dGUuYy0xMzM4LVxcdFxcdCAgICAgICBuZXQtXFx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjIwLjkyMDQyOTE1OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk0OTI3MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgSVB2NiBSb3V0aW5nIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gSVB2NiByb3V0aW5nIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhgLiBNeSBpbW1lZGlhdGUgbWVudGFsIGZsYWcgaXMgb24gdGhlIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJvbGUgaW4gdGhlIGxhcmdlciBwaWN0dXJlLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGlzIGZsYWcgaXMgKnVzZWQqLCBub3QganVzdCBkZWZpbmVkLiBJcyB0aGlzIGEgbG9jYWwgZmxhZyB3aXRoaW4gYSBkZXN0aW5hdGlvbiBlbnRyeSwgYSBnbG9iYWwgaW5kaWNhdG9yLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBtZWNoYW5pc21zIHNldCBhbmQgY2xlYXIgaXQ/IEtub3dpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGZsYWcgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiBob3cgTVRVIGRpc2NvdmVyeSBhbmQgcGF0aCBtYW5hZ2VtZW50IGZ1bmN0aW9uIHdpdGhpbiB0aGUgSVB2NiByb3V0aW5nIHN0YWNrLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1iczogaG93IGFuZCAqd2hlbiogaXMgdGhpcyB2YWx1ZSBjb25maWd1cmVkPyBNeSBuZXh0IG1vdmUgaXMgdG8gbG9jYXRlIHVzYWdlcyBvZiBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgaW4gdGhlIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Nzc2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MjMuODE1MzU5MzUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE4MDk5MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MzY1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk2LSAqL1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM5NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTgte1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjYyPXN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjMte1xcbm5ldC9pcHY2L3JvdXRlLmM6MzI2NDpcXHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMzI2NS1cXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjI1LjQzMzQ2ODAwNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA5ODIxODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIE1TUyBDYWxjdWxhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IHdlIGNhbGN1bGF0ZSB0aGUgTWF4aW11bSBTZWdtZW50IFNpemUgKE1TUykgdGhhdCdzIGFkdmVydGlzZWQgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIFRoYXQncyBjb3JlIFRDUC9JUCBsb2dpYywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AsIGB0Y3BfbWFrZV9zeW5hY2tgLCBgdGNwX29wZW5yZXFfaW5pdF9yd2luYCwgYW5kIGB0Y3BfY29ubmVjdGAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBTWU4vU1lOLUFDSyBoYW5kc2hha2UgYW5kIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiwgc28gdGhleSdsbCBiZSBjcml0aWNhbCB0byByZXZpZXcuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzZXQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYnVpbGQgZGVwZW5kZW5jaWVzLiBBaCwgcmlnaHQsIGBDT05GSUdfSVBWNmAgaXMgcmVxdWlyZWQgZm9yIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gU28sIEknbGwgYmUgc3VyZSB0byBpbmNsdWRlIHRoYXQgaW4gbXkgbWVudGFsIGNoZWNrbGlzdC5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhleSBsb29rIGltcG9ydGFudC4gWWVzLCB0aGV5IGFyZSBleHBvcnRlZCBhbmQgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBpcHY0X3NwZWNpZmljYCBhbmQgYGlwdjZfc3BlY2lmaWNgIHN0cnVjdHVyZXMsIHJlc3BlY3RpdmVseS4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvb2QgZm9jdXMgc3ltYm9scyBhbmQgdGhlIGNvZGUgaW52b2x2aW5nIHRoZXNlIG11c3QgYmUgcmV2aWV3ZWQgY2FyZWZ1bGx5LiBJIGNhbiBnbyBhaGVhZCBhbmQgaW5jb3Jwb3JhdGUgbXkgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjY0LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwNzo0ODozMC43NDMyOTIwNTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ0MjI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCIsXG4gICAgXCJ0Y3BfdjZfc3luX3JlY3Zfc29ja1wiLFxuICAgIFwidGNwX21ha2Vfc3luYWNrXCIsXG4gICAgXCJ0Y3Bfb3BlbnJlcV9pbml0X3J3aW5cIixcbiAgICBcInRjcF9jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIE1TUyBmb3IgSVB2NCBhbmQgSVB2NiByb3V0ZXMsIGlnbm9yaW5nIHRoZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNpbmcgdGhlIGNvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIHRoZSByb3V0ZSBvciBkZXZpY2UuIFRoaXMgYWZmZWN0cyBjb3JlIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgbG9naWMgKFNZTi9TWU4tQUNLIHByb2Nlc3NpbmcpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBTWU4gaGFuZGxpbmcgZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfdjRfc3luX3JlY3Zfc29ja1wiLFxuICAgIFwidGNwX3Y2X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcInRjcF9tYWtlX3N5bmFja1wiLFxuICAgIFwidGNwX29wZW5yZXFfaW5pdF9yd2luXCIsXG4gICAgXCJ0Y3BfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBNU1MgZm9yIElQdjQgYW5kIElQdjYgcm91dGVzLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzaW5nIHRoZSBjb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiB0aGUgcm91dGUgb3IgZGV2aWNlLiBUaGlzIGFmZmVjdHMgY29yZSBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljIChTWU4vU1lOLUFDSyBwcm9jZXNzaW5nKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgU1lOIGhhbmRsaW5nIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MzAuODE2NzQwOTA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwODYyMzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjMwLjgxNzMzMjY5NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjIwODAyNzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBjb25maWd1cmVkIE1UVSBvZiBhIHJvdXRlIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUywgaWdub3JpbmcgdGhlIElDTVAtbGVhcm5lZCBwYXRoIE1UVS4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHNpbXBsZSBhcml0aG1ldGljIGFuZCByZWFkaW5nIGluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGV4aXN0aW5nIG5ldHdvcmtpbmcgc3RydWN0dXJlcyAoZHN0X2VudHJ5LCBydDZfaW5mbywgZmliNl9pbmZvLCBpbmV0Nl9kZXYpLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMzVmYzY1MTQwMTE2ZWQ4ZjhiNDJmYzRmYzgwZDkyYmZiMTRkN2M4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDc6NDc6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaFxuaW5kZXggN2YyZmUxYTg0MDFiMS4uYThmNTdiNGY0YWEyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwLmhcbkBAIC01MDYsNiArNTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbisvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXG4rICpcbisgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXG4rICogSUNNUC1sZWFybmVkIHBhdGggTVRVIChydC1cdTAwM2VydF9wbXR1KS4gIFRoZSBhZHZlcnRpc2VkIE1TUyBib3VuZHMgd2hhdCB0aGVcbisgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvclxuKyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZClcbisgKiBkaXJlY3Rpb24sIHdoaWNoIG1heSBub3QgYXBwbHkgdG8gdGhlIHBlZXItXHUwMDNldXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGVcbisgKiBmb3IgdGhlIHdob2xlIGNvbm5lY3Rpb24uICBTZWUgUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlXG4rICogdGNwX2FkdmVydGlzZV9tc3MoKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuK3tcbitcdHVuc2lnbmVkIGludCBtdHUsIHJlcztcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xuK1x0aWYgKCFtdHUpXG4rXHRcdG10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLVx1MDAzZW10dSk7XG4rXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG4rXHRyZXMgPSBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiByZXM7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li5hYzFhY2MwYjc0MzY4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMzg1LDYgKzM4NSw0MyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdFxuIFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiB9XG4gXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuKyAqXG4rICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXG4rICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXG4rICogdGhlIHVuZGVybHlpbmcgcm91dGUgKGZpYjZfcG10dSkgb3IgdGhlIGVncmVzcyBkZXZpY2UuICBUaGUgYWR2ZXJ0aXNlZCBNU1NcbisgKiBib3VuZHMgd2hhdCB0aGUgcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlXG4rICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXG4rICogUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlIHRjcF9hZHZlcnRpc2VfbXNzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCA9IGRzdF9ydDZfaW5mbyhkc3QpO1xuK1x0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcbitcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XG4rXHR1bnNpZ25lZCBpbnQgbXR1ID0gMDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdC8qIElQdjYga2VlcHMgdGhlIGxlYXJuZWQgUE1UVSBhbmQgdGhlIGNvbmZpZ3VyZWQgTVRVIGluIHRoZSBzYW1lXG4rXHQgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSlcbitcdCAqIGRzdCwgdGhlIGNvbmZpZ3VyZWQgb25lIG9uIHRoZSB1bmRlcmx5aW5nIHJvdXRlLiAgUmVhY2ggdGhlIGxhdHRlclxuK1x0ICogdmlhIC1cdTAwM2Vmcm9tIChmaWI2X3BtdHUpLCBwb3B1bGF0ZWQgYnkgaXA2X3JvdXRlX2luZm9fY3JlYXRlKCkuXG4rXHQgKi9cbitcdGZyb20gPSByY3VfZGVyZWZlcmVuY2UocnQtXHUwMDNlZnJvbSk7XG4rXHRpZiAoZnJvbSlcbitcdFx0bXR1ID0gZnJvbS1cdTAwM2VmaWI2X3BtdHU7XG4rXHRpZiAoIW10dSkge1xuK1x0XHRtdHUgPSBJUFY2X01JTl9NVFU7XG4rXHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuK1x0XHRpZiAoaWRldilcbitcdFx0XHRtdHUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIG10dSwgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLm10dTYpKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbitcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4rfVxuK1xuIHUzMiBpcDZfbXR1X2Zyb21fZmliNihjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcbmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2NC9yb3V0ZS5jXG5AQCAtMTMzNCw4ICsxMzM0LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xuLVx0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcHY0X210dShkc3QpIC0gaGVhZGVyX3NpemUsXG4tXHRcdFx0XHQgICBuZXQtXHUwMDNlaXB2NC5pcF9ydF9taW5fYWR2bXNzKTtcbitcdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXBfZHN0X210dV9jb25maWd1cmVkKGRzdCkgLSBoZWFkZXJfc2l6ZSxcbitcdFx0ICAgICAgIG5ldC1cdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0zMjYxLDcgKzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBtdHUgPSBkc3Q2X210dShkc3QpO1xuK1x0dW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcbiBcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2NC5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjQucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjJlZjkzMWI3N2ExY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY0LnBrdFxuQEAgLTAsMCArMSw2NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLy9cbisvLyBUZXN0IHRoYXQgSVB2NCBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZFxuKy8vIGludGVyZmFjZSBNVFUgKDE1MDAgLVx1MDAzZSBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUC1sZWFybmVkIFBhdGggTVRVLlxuK1xuKy0taXBfdmVyc2lvbj1pcHY0XG4rXG4rYC4vZGVmYXVsdHMuc2hcbitldGh0b29sIC1LIHR1bjAgdHNvIG9mZlxuK2BcbitcbisvL1xuKy8vIENvbm5lY3Rpb24gMTogTGVhcm4gUE1UVSBleGNlcHRpb24gKE1UVSAxMjAwIC1cdTAwM2UgTVNTIDExNjApXG4rLy9cbisgICAgMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuKyAgICswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMFxuKyAgICswIGJpbmQoMywgLi4uLCAuLi4pID0gMFxuKyAgICswIGxpc3RlbigzLCAxKSA9IDBcbitcbisgICArMCBcdTAwM2MgUyAwOjAoMCkgd2luIDY1NTM1IFx1MDAzY21zcyAxNDYwLHNhY2tPSyxub3Asbm9wLG5vcCx3c2NhbGUgOFx1MDAzZVxuKyAgICswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjbXNzIDE0NjAsbm9wLG5vcCxzYWNrT0ssbm9wLHdzY2FsZSA4XHUwMDNlXG4rICArLjEgXHUwMDNjIC4gMToxKDApIGFjayAxIHdpbiAyNTdcbisgICArMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFNlbmQgYSBmdWxsIDE0NjAtYnl0ZSBzZWdtZW50XG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcbisgICArMCBcdTAwM2UgUC4gMToxNDYxKDE0NjApIGFjayAxXG4rXG4rLy8gSUNNUCBGcmFnbWVudGF0aW9uIE5lZWRlZCBhcnJpdmVzIGluZGljYXRpbmcgbmV4dC1ob3AgTVRVIDEyMDBcbisgICArMCBcdTAwM2MgaWNtcCB1bnJlYWNoYWJsZSBmcmFnX25lZWRlZCBtdHUgMTIwMCBbMToxNDYxKDE0NjApXVxuK1xuKy8vIExvY2FsIGhvc3QgcmV0cmFuc21pdHMgdXNpbmcgdGhlIGxlYXJuZWQgTVRVIDEyMDAgKE1TUyA9IDEyMDAgLSA0MCA9IDExNjApXG4rICAgKzAgXHUwMDNlIC4gMToxMTYxKDExNjApIGFjayAxXG4rICAgKzAgXHUwMDNlIFAuIDExNjE6MTQ2MSgzMDApIGFjayAxXG4rICAgKzAgXHUwMDNjIFIgMToxKDApIGFjayAxNDYxIHdpbiAwXG4rXG4rLy8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lclxuKyAgICswIGNsb3NlKDQpID0gMFxuKyAgICswIGNsb3NlKDMpID0gMFxuK1xuKy8vXG4rLy8gQ29ubmVjdGlvbiAyOiBOZXcgY29ubmVjdGlvbiBmcm9tIHRoZSBzYW1lIHBlZXJcbisvL1xuKyAgICswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXG4rICAgKzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4rICAgKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxuK1xuKyAgICswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXHUwMDNjbXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4XHUwMDNlXG4rXG4rLy8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMTYwXG4rICAgKzAgXHUwMDNlIFMuIDA6MCgwKSBhY2sgMSBcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcdTAwM2VcbisgICArMCBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XG4rXG4rLy8gVmVyaWZ5OiBPdXRnb2luZyB0cmFuc21pdCBNU1MgaXMgc3RpbGwgY29uc3RyYWluZWQgYnkgdGhlIGxlYXJuZWQgUE1UVSAxMjAwXG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcbisgICArMCBcdTAwM2UgLiAxOjExNjEoMTE2MCkgYWNrIDFcbisgICArMCBcdTAwM2UgUC4gMTE2MToxNDYxKDMwMCkgYWNrIDFcbisgICArMCBcdTAwM2MgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1N1xuK1xuKy8vIENsZWFuIHVwXG4rICAgKzAgY2xvc2UoNCkgPSAwXG4rICAgKzAgXHUwMDNlIEYuIDE0NjE6MTQ2MSgwKSBhY2sgMVxuKyAgICswIFx1MDAzYyBGLiAxOjEoMCkgYWNrIDE0NjIgd2luIDI1N1xuKyAgICswIFx1MDAzZSAuIDE0NjI6MTQ2MigwKSBhY2sgMlxuKyAgICswIGNsb3NlKDMpID0gMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfYWR2bXNzX3BtdHVfaXB2Ni5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX2Fkdm1zc19wbXR1X2lwdjYucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzc2MzhiMTFhODE1YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9hZHZtc3NfcG10dV9pcHY2LnBrdFxuQEAgLTAsMCArMSw2NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLy9cbisvLyBUZXN0IHRoYXQgSVB2NiBhZHZlcnRpc2VkIE1TUyBpbiBTWU4tQUNLIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJlZFxuKy8vIGludGVyZmFjZSBNVFUgKDE1MjAgLVx1MDAzZSBNU1MgMTQ2MCksIG5vdCB0aGUgSUNNUHY2LWxlYXJuZWQgUGF0aCBNVFUuXG4rXG4rLS1pcF92ZXJzaW9uPWlwdjZcbitcbitgLi9kZWZhdWx0cy5zaFxuK2V0aHRvb2wgLUsgdHVuMCB0c28gb2ZmXG4rYFxuK1xuKy8vXG4rLy8gQ29ubmVjdGlvbiAxOiBMZWFybiBQTVRVIGV4Y2VwdGlvbiAoTVRVIDEyODAgLVx1MDAzZSBNU1MgMTIyMClcbisvL1xuKyAgICAwIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXG4rICAgKzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4rICAgKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxuK1xuKyAgICswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXHUwMDNjbXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4XHUwMDNlXG4rICAgKzAgXHUwMDNlIFMuIDA6MCgwKSBhY2sgMSBcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcdTAwM2VcbisgICsuMSBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XG4rXG4rLy8gU2VuZCBhIGZ1bGwgMTQ2MC1ieXRlIHNlZ21lbnRcbisgICArMCB3cml0ZSg0LCAuLi4sIDE0NjApID0gMTQ2MFxuKyAgICswIFx1MDAzZSBQLiAxOjE0NjEoMTQ2MCkgYWNrIDFcbitcbisvLyBJQ01QdjYgUGFja2V0IFRvbyBCaWcgYXJyaXZlcyBpbmRpY2F0aW5nIG5leHQtaG9wIE1UVSAxMjgwXG4rICAgKzAgXHUwMDNjIGljbXAgcGFja2V0X3Rvb19iaWcgbXR1IDEyODAgWzE6MTQ2MSgxNDYwKV1cbitcbisvLyBMb2NhbCBob3N0IHJldHJhbnNtaXRzIHVzaW5nIHRoZSBsZWFybmVkIE1UVSAxMjgwIChNU1MgPSAxMjgwIC0gNDAgLSAyMCA9IDEyMjApXG4rICAgKzAgXHUwMDNlIC4gMToxMjIxKDEyMjApIGFjayAxXG4rICAgKzAgXHUwMDNlIFAuIDEyMjE6MTQ2MSgyNDApIGFjayAxXG4rICAgKzAgXHUwMDNjIFIgMToxKDApIGFjayAxNDYxIHdpbiAwXG4rXG4rLy8gQ2xvc2UgY29ubmVjdGlvbiAxIGFuZCBsaXN0ZW5lclxuKyAgICswIGNsb3NlKDQpID0gMFxuKyAgICswIGNsb3NlKDMpID0gMFxuK1xuKy8vXG4rLy8gQ29ubmVjdGlvbiAyOiBOZXcgY29ubmVjdGlvbiBmcm9tIHRoZSBzYW1lIHBlZXJcbisvL1xuKyAgICswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzXG4rICAgKzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4rICAgKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXG4rICAgKzAgbGlzdGVuKDMsIDEpID0gMFxuK1xuKyAgICswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzUgXHUwMDNjbXNzIDE0NjAsc2Fja09LLG5vcCxub3Asbm9wLHdzY2FsZSA4XHUwMDNlXG4rXG4rLy8gVmVyaWZ5OiBTWU4tQUNLIE1VU1QgYWR2ZXJ0aXNlIGNvbmZpZ3VyZWQgTVNTIDE0NjAsIE5PVCB0aGUgbGVhcm5lZCBQTVRVIE1TUyAxMjIwXG4rICAgKzAgXHUwMDNlIFMuIDA6MCgwKSBhY2sgMSBcdTAwM2Ntc3MgMTQ2MCxub3Asbm9wLHNhY2tPSyxub3Asd3NjYWxlIDhcdTAwM2VcbisgICArMCBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDI1N1xuKyAgICswIGFjY2VwdCgzLCAuLi4sIC4uLikgPSA0XG4rXG4rLy8gVmVyaWZ5OiBPdXRnb2luZyB0cmFuc21pdCBNU1MgaXMgc3RpbGwgY29uc3RyYWluZWQgYnkgdGhlIGxlYXJuZWQgUE1UVSAxMjgwXG4rICAgKzAgd3JpdGUoNCwgLi4uLCAxNDYwKSA9IDE0NjBcbisgICArMCBcdTAwM2UgLiAxOjEyMjEoMTIyMCkgYWNrIDFcbisgICArMCBcdTAwM2UgUC4gMTIyMToxNDYxKDI0MCkgYWNrIDFcbisgICArMCBcdTAwM2MgLiAxOjEoMCkgYWNrIDE0NjEgd2luIDI1N1xuK1xuKy8vIENsZWFuIHVwXG4rICAgKzAgY2xvc2UoNCkgPSAwXG4rICAgKzAgXHUwMDNlIEYuIDE0NjE6MTQ2MSgwKSBhY2sgMVxuKyAgICswIFx1MDAzYyBGLiAxOjEoMCkgYWNrIDE0NjIgd2luIDI1N1xuKyAgICswIFx1MDAzZSAuIDE0NjI6MTQ2MigwKSBhY2sgMlxuKyAgICswIGNsb3NlKDMpID0gMFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMDc6NDg6MzAuODE3MzMzNTE0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjA4MDAxNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVRVIENhbGN1bGF0aW9uIGZvciBUQ1AgTVNTIEFkdmVydGlzZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHR3byBuZXcgZnVuY3Rpb25zLCBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZ3VyZWQgTVRVIG9mIGEgcm91dGUsIGRlbGliZXJhdGVseSAqaWdub3JpbmcqIGFueSBJQ01QLWxlYXJuZWQgUGF0aCBNVFUuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgYSBjb25zaXN0ZW50IGJhc2VsaW5lIGZvciBUQ1AgTVNTIGFkdmVydGlzZW1lbnQsIHNlcGFyYXRlIGZyb20gcG90ZW50aWFsbHkgZmx1Y3R1YXRpbmcgUE1UVSB2YWx1ZXMuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHRoZSB1c3VhbCBzdXNwZWN0czogYGlwLmhgLCBgaXA2X3JvdXRlLmhgLCBgcm91dGUuY2AgZm9yIElQdjQsIGFuZCBgcm91dGUuY2AgZm9yIElQdjYsIHdoaWNoIGlzIGFsbCBhcyBleHBlY3RlZC4gR29vZCB0byBzZWUgdGhleSd2ZSBhbHNvIGluY2x1ZGVkIHBhY2tldGRyaWxsIHRlc3RzIOKAkyBpbXBvcnRhbnQgZm9yIHZlcmlmeWluZyB0aGUgYmVoYXZpb3IuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMuIExvb2tpbmcgYXQgYGlwX2RzdF9tdHVfY29uZmlndXJlZGAsIHdlIGhhdmU6XG5cbmBgYGNcbnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG57XG5cdHVuc2lnbmVkIGludCBtdHUsIHJlcztcblxuXHRyY3VfcmVhZF9sb2NrKCk7XG5cdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xuXHRpZiAoIW10dSlcblx0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5cdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcblx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cblx0cmV0dXJuIHJlcztcbn1cbmBgYFxuXG5BbmQgZm9yIGBpcDZfZHN0X210dV9jb25maWd1cmVkYDpcblxuYGBgY1xuc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG57XG5cdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcblx0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcblx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcblx0dW5zaWduZWQgaW50IG10dSA9IDA7XG5cblx0cmN1X3JlYWRfbG9jaygpO1xuXHQvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZVxuXHQgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSlcblx0ICogZHN0LCB0aGUgY29uZmlndXJlZCBvbmUgb24gdGhlIHVuZGVybHlpbmcgcm91dGUuICBSZWFjaCB0aGUgbGF0dGVyXG5cdCAqIHZpYSAtXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxuXHQgKi9cblx0ZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC1cdTAwM2Vmcm9tKTtcblx0aWYgKGZyb20pXG5cdFx0bXR1ID0gZnJvbS1cdTAwM2VmaWI2X3BtdHU7XG5cdGlmICghbXR1KSB7XG5cdFx0bXR1ID0gSVBWNl9NSU5fTVRVO1xuXHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuXHRcdGlmIChpZGV2KVxuXHRcdFx0bXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KSk7XG5cdH1cblx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cblx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcblx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbn1cbmBgYFxuXG5UaGUgY29yZSBvZiB0aGUgbG9naWMgaXMgY2xlYXIuIEJvdGggZnVuY3Rpb25zIGdldCBhbiBNVFUsIGNhcHBpbmcgaXQgYXQgdGhlIGFwcHJvcHJpYXRlIG1heGltdW0sIGFuZCB0aGVuIHN1YnRyYWN0IHRoZSBMV1R1bm5lbCBoZWFkcm9vbS4gVGhlIHJlc3VsdHMgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGVuIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhZHZlcnRpc2VkIE1TUyBpbiBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgLlxuXG5NeSBjb25jZXJuIGhlcmUgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gSG93ZXZlciwgdGhlIGNvZGUgbG9va3Mgc291bmQuXG5cbkxldCdzIGRvdWJsZS1jaGVjay4gSW4gYGlwX2RzdF9tdHVfY29uZmlndXJlZGAsIGBtdHVgIGlzIGd1YXJhbnRlZWQgdG8gYmUgYXNzaWduZWQgYSB2YWx1ZTogZWl0aGVyIGZyb20gYGRzdF9tZXRyaWNfcmF3YCBvciBgZHN0X2Rldl9yY3UtXHUwMDNlbXR1YCwgYW5kIGByZXNgIGlzIGNvbXB1dGVkIGRpcmVjdGx5IGZyb20gYG10dWAuIE5vIGlzc3VlcyB0aGVyZS4gSW4gYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLCBgbXR1YCBzdGFydHMgYXQgMCwgYnV0IGlzIGltbWVkaWF0ZWx5IGFzc2lnbmVkIGVpdGhlciBgZnJvbS1cdTAwM2VmaWI2X3BtdHVgIG9yIGBpZGV2LVx1MDAzZWNuZi5tdHU2YCBvciBgSVBWNl9NSU5fTVRVYC4gQWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UuIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZTsgdGhlIGBOZWVkc0tNU0FOYCB0YWcgc2hvdWxkIGJlIGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgYW5kIHNhZmUgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODcyLCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDA3OjQ4OjQzLjAyNTMzODg3NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBjb25maWd1cmVkIE1UVSBvZiBhIHJvdXRlIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUywgaWdub3JpbmcgdGhlIElDTVAtbGVhcm5lZCBwYXRoIE1UVS4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHNpbXBsZSBhcml0aG1ldGljIGFuZCByZWFkaW5nIGluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGV4aXN0aW5nIG5ldHdvcmtpbmcgc3RydWN0dXJlcyAoZHN0X2VudHJ5LCBydDZfaW5mbywgZmliNl9pbmZvLCBpbmV0Nl9kZXYpLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZ3VyZWQgTVRVIG9mIGEgcm91dGUgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLCBpZ25vcmluZyB0aGUgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIHJlYWRpbmcgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gZXhpc3RpbmcgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIChkc3RfZW50cnksIHJ0Nl9pbmZvLCBmaWI2X2luZm8sIGluZXQ2X2RldikuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIG5ldyBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowx2mq5[1] Phase: Succeeded StartedAt: 2026-08-15 07:48:59 +0000 UTC FinishedAt: 2026-08-15 07:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 07:48:59 +0000 UTC FinishedAt: 2026-08-15 07:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2] Phase: Succeeded StartedAt: 2026-08-15 07:48:59 +0000 UTC FinishedAt: 2026-08-15 11:28:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-15 07:48:59 +0000 UTC FinishedAt: 2026-08-15 11:28:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-15 07:48:59 +0000 UTC FinishedAt: 2026-08-15 07:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-15 07:48:59 +0000 UTC FinishedAt: 2026-08-15 07:49:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx2mq5/series-workflowx2mq5-convert-artifact-4050639905/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-15 07:49:09 +0000 UTC FinishedAt: 2026-08-15 08:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-15 07:49:09 +0000 UTC FinishedAt: 2026-08-15 08:05:38 +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:*0c193cef-bcbc-4a5f-a5da-6d7a20493468,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-workflowx2mq5/series-workflowx2mq5-convert-artifact-4050639905/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": "585102ac-f42d-4843-a750-46bf2db270d6", "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-workflowx2mq5/series-workflowx2mq5-build-action-3522212687/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-15 07:49:09 +0000 UTC FinishedAt: 2026-08-15 08:05:28 +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:*0c193cef-bcbc-4a5f-a5da-6d7a20493468,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-workflowx2mq5/series-workflowx2mq5-convert-artifact-4050639905/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": "585102ac-f42d-4843-a750-46bf2db270d6", "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-workflowx2mq5/series-workflowx2mq5-build-action-3522212687/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-15 08:05:38 +0000 UTC FinishedAt: 2026-08-15 08:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-15 08:05:38 +0000 UTC FinishedAt: 2026-08-15 08:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-15 08:05:38 +0000 UTC FinishedAt: 2026-08-15 08:05:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-15 08:05:38 +0000 UTC FinishedAt: 2026-08-15 08:05:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx2mq5/series-workflowx2mq5-convert-artifact-2517475700/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-15 08:05:48 +0000 UTC FinishedAt: 2026-08-15 08:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-15 08:05:48 +0000 UTC FinishedAt: 2026-08-15 08:07:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*585102ac-f42d-4843-a750-46bf2db270d6,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-workflowx2mq5/series-workflowx2mq5-build-action-3522212687/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-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-15 08:07:37 +0000 UTC FinishedAt: 2026-08-15 08:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-15 08:07:37 +0000 UTC FinishedAt: 2026-08-15 08:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-15 08:07:37 +0000 UTC FinishedAt: 2026-08-15 08:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-15 08:07:37 +0000 UTC FinishedAt: 2026-08-15 08:23:53 +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:*0c193cef-bcbc-4a5f-a5da-6d7a20493468,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-workflowx2mq5/series-workflowx2mq5-convert-artifact-2517475700/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": "712e6243-cacb-4903-8ca7-2e7db33dcf44", "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-workflowx2mq5/series-workflowx2mq5-build-action-1246549568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-15 08:07:37 +0000 UTC FinishedAt: 2026-08-15 08:23:43 +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:*0c193cef-bcbc-4a5f-a5da-6d7a20493468,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-workflowx2mq5/series-workflowx2mq5-convert-artifact-2517475700/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": "712e6243-cacb-4903-8ca7-2e7db33dcf44", "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-workflowx2mq5/series-workflowx2mq5-build-action-1246549568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-15 08:23:53 +0000 UTC FinishedAt: 2026-08-15 08:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-15 08:23:53 +0000 UTC FinishedAt: 2026-08-15 08:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-15 08:23:53 +0000 UTC FinishedAt: 2026-08-15 08:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-15 08:23:53 +0000 UTC FinishedAt: 2026-08-15 08:25:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*712e6243-cacb-4903-8ca7-2e7db33dcf44,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-workflowx2mq5/series-workflowx2mq5-build-action-1246549568/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-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-15 08:25:43 +0000 UTC FinishedAt: 2026-08-15 11:28:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-15 08:25:43 +0000 UTC FinishedAt: 2026-08-15 11:28:49 +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":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"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:*585102ac-f42d-4843-a750-46bf2db270d6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*712e6243-cacb-4903-8ca7-2e7db33dcf44,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-workflowx2mq5/series-workflowx2mq5-build-action-3522212687/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-workflowx2mq5/series-workflowx2mq5-build-action-1246549568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-15 08:25:43 +0000 UTC FinishedAt: 2026-08-15 08:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-15 08:25:43 +0000 UTC FinishedAt: 2026-08-15 08:25:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"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-workflowx2mq5/series-workflowx2mq5-convert-artifact-3442956445/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-15 08:25:43 +0000 UTC FinishedAt: 2026-08-15 08:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-15 08:25:43 +0000 UTC FinishedAt: 2026-08-15 08:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-15 08:25:43 +0000 UTC FinishedAt: 2026-08-15 08:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-15 08:25:53 +0000 UTC FinishedAt: 2026-08-15 11:28:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2mq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_v4_syn_recv_sock","tcp_v6_syn_recv_sock","tcp_make_synack","tcp_openreq_init_rwin","tcp_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"b554ea1d-3678-4d16-8a31-4ea8d325f1e0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-15 08:25:53 +0000 UTC FinishedAt: 2026-08-15 11:28:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*585102ac-f42d-4843-a750-46bf2db270d6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*712e6243-cacb-4903-8ca7-2e7db33dcf44,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-workflowx2mq5/series-workflowx2mq5-build-action-3522212687/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-workflowx2mq5/series-workflowx2mq5-build-action-1246549568/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-workflowx2mq5/series-workflowx2mq5-convert-artifact-3442956445/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,}