Name: series-workflowzqnq4 Phase: Succeeded StartedAt: 2026-09-03 01:31:54 +0000 UTC FinishedAt: 2026-09-03 05:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[0] Phase: Succeeded StartedAt: 2026-09-03 01:31:54 +0000 UTC FinishedAt: 2026-09-03 01:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 01:31:54 +0000 UTC FinishedAt: 2026-09-03 01:34:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF" ], "series_id": "f381a314-0ffa-4a74-9d69-eed88da55572" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_prog_attach", "cgroup_bpf_link_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaCgpYCB3aGVuIGJvdGggYHByb2dgIGFuZCBgbGlua2AgYXJndW1lbnRzIGFyZSBOVUxMLiBJdCBndWFyZHMgdGhlIGRlcmVmZXJlbmNlIG9mIGBsaW5rLVx1MDAzZWxpbmsucHJvZ2AgYW5kIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGBpZiAoIW5ld19wcm9nKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBTaW5jZSB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHdoaWNoIGlzIGFscmVhZHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIGhhbmRsZXJzIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNncm91cCBCUEYgYXR0YWNobWVudCBwYXRoIChfX2Nncm91cF9icGZfYXR0YWNoKSB3aGVuIGRldGVybWluaW5nIHRoZSBuZXcgcHJvZ3JhbSB0byBhdHRhY2guIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgYW5kIGNncm91cCBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBzeXNjYWxsIG9wZXJhdGlvbnMgKGUuZy4sIEJQRl9QUk9HX0FUVEFDSCBhbmQgQlBGX0xJTktfQ1JFQVRFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY1ZTY5NTk3ODkzMjYxMGMzZmI0MzczMDJmYjk3YjA0YmMwYjA5ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCAxNDk2NzJjNzZjNDljLi4xNTZmYzRkNjBkYWY2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxNCw3ICYjNDM7ODE0LDcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbi1cdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZztcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuQEAgLTgzNCw2ICYjNDM7ODM0LDggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAoISFyZXBsYWNlX3Byb2cgIT0gISEoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpKVxuIFx0XHQvKiByZXBsYWNlX3Byb2cgaW1wbGllcyBCUEZfRl9SRVBMQUNFLCBhbmQgdmljZSB2ZXJzYSAqL1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIW5ld19wcm9nKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XG4gXHRpZiAoYXR5cGUgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY2dyb3VwIEJQRiBhdHRhY2htZW50IHBhdGggKF9fY2dyb3VwX2JwZl9hdHRhY2gpIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG5ldyBwcm9ncmFtIHRvIGF0dGFjaC4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBhbmQgY2dyb3VwIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHN5c2NhbGwgb3BlcmF0aW9ucyAoZS5nLiwgQlBGX1BST0dfQVRUQUNIIGFuZCBCUEZfTElOS19DUkVBVEUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjVlNjk1OTc4OTMyNjEwYzNmYjQzNzMwMmZiOTdiMDRiYzBiMDk4NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDE6MzM6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCAxNDk2NzJjNzZjNDljLi4xNTZmYzRkNjBkYWY2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKQEAgLTgxNCw3ICYjNDM7ODE0LDcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307CiAJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKLQlzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay0mZ3Q7bGluay5wcm9nOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLSZndDtsaW5rLnByb2cgOiBOVUxMKTsKIAllbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7CiAJdTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKQEAgLTgzNCw2ICYjNDM7ODM0LDggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzICZhbXA7IEJQRl9GX1JFUExBQ0UpKQogCQkvKiByZXBsYWNlX3Byb2cgaW1wbGllcyBCUEZfRl9SRVBMQUNFLCBhbmQgdmljZSB2ZXJzYSAqLwogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFuZXdfcHJvZykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCiAJYXR5cGUgPSBicGZfY2dyb3VwX2F0eXBlX2ZpbmQodHlwZSwgbmV3X3Byb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCk7CiAJaWYgKGF0eXBlICZsdDsgMCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byB0aGUgQlBGIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY2dyb3VwIGludGVncmF0aW9uLCBqdWRnaW5nIGJ5IHRoZSBwYXRoIHByb3ZpZGVkOiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHNlY3Rpb24gaW4gdGhhdCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBsaW5lIDgxNCBhcHByb3hpbWF0ZWx5LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNoYW5nZXMgbWlnaHQgcmVzaWRlLgoKR2l2ZW4gdGhpcyBjb250ZXh0LCBJJiMzOTtsbCBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRlbnQgb2YgYGtlcm5lbC9icGYvY2dyb3VwLmNgLCBzbyBJIGNhbiBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyBwcm9wb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdCAqIEBpZF9vcl9mZDogUmVsYXRpdmUgcHJvZyBpZCBvciBmZFxuIDgwMTpcdCAqIEByZXZpc2lvbjogYnBmX3Byb2dfbGlzdCByZXZpc2lvblxuIDgwMjpcdCAqXG4gODAzOlx0ICogRXhhY3RseSBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1udWxsLlxuIDgwNDpcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXG4gODA1Olx0ICovXG4gODA2Olx0c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gODA3Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXG4gODA4Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gODA5Olx0XHRcdFx0ICAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxuIDgxMDpcdFx0XHRcdCAgICAgICB1NjQgcmV2aXNpb24pXG4gODExOlx0e1xuIDgxMjpcdFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQUxMT1dfT1ZFUlJJREUgfCBCUEZfRl9BTExPV19NVUxUSSkpO1xuIDgxMzpcdFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XG4gODE0Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTU6XHRcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTY6XHRcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTc6XHRcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiAobGluayA/IGxpbmstXHUwMDNlbGluay5wcm9nIDogTlVMTCk7XG4gODE4Olx0XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4gODE5Olx0XHR1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7XG4gODIwOlx0XHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XG4gODIxOlx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XG4gODIyOlx0XHRpbnQgZXJyO1xuIDgyMzpcdFxuIDgyNDpcdFx0aWYgKCgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XG4gODI1Olx0XHQgICAgKChmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkpXG4gODI2Olx0XHRcdC8qIGludmFsaWQgY29tYmluYXRpb24gKi9cbiA4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODI4Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQkVGT1JFIHwgQlBGX0ZfQUZURVIpKSlcbiA4Mjk6XHRcdFx0Lyogb25seSBlaXRoZXIgcmVwbGFjZSBvciBpbnNlcnRpb24gd2l0aCBiZWZvcmUvYWZ0ZXIgKi9cbiA4MzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODMxOlx0XHRpZiAobGluayBcdTAwMjZcdTAwMjYgKHByb2cgfHwgcmVwbGFjZV9wcm9nKSlcbiA4MzI6XHRcdFx0Lyogb25seSBlaXRoZXIgbGluayBvciBwcm9nL3JlcGxhY2VfcHJvZyBjYW4gYmUgc3BlY2lmaWVkICovXG4gODMzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzNDpcdFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSlcbiA4MzU6XHRcdFx0LyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi9cbiA4MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM3Olx0XHRpZiAoIW5ld19wcm9nKVxuIDgzODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4Mzk6XHRcbiA4NDA6XHRcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKTtcbiA4NDE6XHRcdGlmIChhdHlwZSBcdTAwM2MgMClcbiA4NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODQzOlx0XHRpZiAocmV2aXNpb24gXHUwMDI2XHUwMDI2IHJldmlzaW9uICE9IGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0pXG4gODQ0Olx0XHRcdHJldHVybiAtRVNUQUxFO1xuIDg0NTpcdFxuIDg0NjpcdFx0cHJvZ3MgPSBcdTAwMjZjZ3JwLVx1MDAzZWJwZi5wcm9nc1thdHlwZV07XG4gODQ3Olx0XG4gODQ4Olx0XHRpZiAoIWhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKGNncnAsIGF0eXBlKSlcbiA4NDk6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4NTA6XHRcbiA4NTE6XHRcdGlmICghaGxpc3RfZW1wdHkocHJvZ3MpIFx1MDAyNlx1MDAyNiBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gIT0gc2F2ZWRfZmxhZ3MpXG4gODUyOlx0XHRcdC8qIERpc2FsbG93IGF0dGFjaGluZyBub24tb3ZlcnJpZGFibGUgb24gdG9wXG4gODUzOlx0XHRcdCAqIG9mIGV4aXN0aW5nIG92ZXJyaWRhYmxlIGluIHRoaXMgY2dyb3VwLlxuIDg1NDpcdFx0XHQgKiBEaXNhbGxvdyBhdHRhY2hpbmcgbXVsdGktcHJvZyBpZiBvdmVycmlkYWJsZSBvciBub25lXG4gODU1Olx0XHRcdCAqL1xuIDg1NjpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDg1NzpcdFxuIDg1ODpcdFx0aWYgKHByb2dfbGlzdF9sZW5ndGgocHJvZ3MsIE5VTEwpIFx1MDAzZT0gQlBGX0NHUk9VUF9NQVhfUFJPR1MpXG4gODU5Olx0XHRcdHJldHVybiAtRTJCSUc7XG4gODYwOlx0XG4gODYxOlx0XHRwbCA9IGZpbmRfYXR0YWNoX2VudHJ5KHByb2dzLCBwcm9nLCBsaW5rLCByZXBsYWNlX3Byb2csXG4gODYyOlx0XHRcdFx0ICAgICAgIGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSk7XG4gODYzOlx0XHRpZiAoSVNfRVJSKHBsKSlcbiA4NjQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGwpO1xuIDg2NTpcdFxuIDg2NjpcdFx0aWYgKGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RvcmFnZSwgbmV3X3N0b3JhZ2UsIHR5cGUsXG4gODY3Olx0XHRcdFx0XHQgICAgICBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZywgY2dycCkpXG4gODY4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IGNvZGUgcGF0aHMgaW52b2tlIGl0IHRvIGdyYXNwIGl0cyByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJhc2ljczogSSYjMzk7bGwgbmVlZCB0byBkbyBhIGNvZGUgc2VhcmNoLiBBIHNpbXBsZSBgZ3JlcGAgaXMgcGVyZmVjdCB0byBsb2NhdGUgdGhlIGNhbGwgc2l0ZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgbWFuYWdlYWJsZSBsaXN0IG9mIHRoZSBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgdGhhdCB1c2UgaXQsIGFuZCBJIGNhbiBkcmlsbCBkb3duIGZyb20gdGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGUgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Nncm91cF9icGZfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTM3PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NjpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ3LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBjZ3JvdXBfYnBmX2F0dGFjaCBDYWxsc2l0ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgYGNncm91cF9icGZfYXR0YWNoYCBpcyBiZWluZyB1c2VkLCBhbG9uZyB3aXRoIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gYWxsIHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IHRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgYmVpbmcgYXR0YWNoZWQgdG8gY2dyb3Vwcy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBkaXJlY3QgY2FsbGVycyBvZiBgY2dyb3VwX2JwZl9hdHRhY2hgIGl0c2VsZiwgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGVyZS4gSSBhbHNvIGtub3cgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBzbyBJIHdpbGwgZXhwbG9yZSB0aG9zZSBhcyB3ZWxsIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF0dGFjaG1lbnQgcHJvY2VzcyBhbmQgaG93IGl0IGlzIGVtcGxveWVkIGFjcm9zcyB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLWNncm91cC1kZWZzLmg9MTE9c3RydWN0IGJwZl9wcm9nX2FycmF5O1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC1kZWZzLmgtMTktXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAtZGVmcy5oOjIwOmVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSB7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAtZGVmcy5oLTIxLVx0Q0dST1VQX0JQRl9BVFRBQ0hfVFlQRV9JTlZBTElEID0gLTEsXG4tLVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MzA9dW5zaWduZWQgaW50IF9fY2dyb3VwX2JwZl9ydW5fbHNtX2N1cnJlbnQoY29uc3Qgdm9pZCAqY3R4LFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTM3LVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6Mzg6c3RhdGljIGlubGluZSBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjM5OnRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MC17XG4tLVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTE1PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9za2Ioc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTE2LVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjExNzpcdFx0XHRcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMTgtXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMTk9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEyMDpcdFx0XHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEyMS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyMj1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19hZGRyKHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMjQtXHRcdFx0XHQgICAgICBpbnQgKnVhZGRybGVuLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTI1Olx0XHRcdFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTI2LVx0XHRcdFx0ICAgICAgdm9pZCAqdF9jdHgsXG4tLVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTI5PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zb2NrX29wcyhzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzAtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqc29ja19vcHMsXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMzE6XHRcdFx0XHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzItXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMzM9aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMzQ6XHRcdFx0XHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzUtXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMzY9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzgtXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTM5Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTE0MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xODA9c3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjE4MTpcdFx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIHR5cGUpXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xODIte1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MTc0MT1zdHJ1Y3QgYnBmX3Byb2dfYXV4IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MTUtXHR1MzIgdmVyaWZpZWRfaW5zbnM7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE4MTY6XHRpbnQgY2dyb3VwX2F0eXBlOyAvKiBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgKi9cbmluY2x1ZGUvbGludXgvYnBmLmgtMTgxNy1cdHN0cnVjdCBicGZfbWFwICpjZ3JvdXBfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NjU9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIGNncm91cF9sc21fYXR5cGVbQ0dST1VQX0xTTV9OVU1dO1xua2VybmVsL2JwZi9jZ3JvdXAuYy02Ni1cbmtlcm5lbC9icGYvY2dyb3VwLmM6Njc6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy02OC17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy03My0jZWxzZVxua2VybmVsL2JwZi9jZ3JvdXAuYzo3NDpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc1LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTg0PWJwZl9wcm9nX3J1bl9hcnJheV9jZyhjb25zdCBzdHJ1Y3QgY2dyb3VwX2JwZiAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODU6XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODYtXHRcdCAgICAgIGNvbnN0IHZvaWQgKmN0eCwgYnBmX3Byb2dfcnVuX2ZuIHJ1bl9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYyPXVuc2lnbmVkIGludCBfX2Nncm91cF9icGZfcnVuX2xzbV9jdXJyZW50KGNvbnN0IHZvaWQgKmN0eCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4MS0jaWZkZWYgQ09ORklHX0JQRl9MU01cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgyOnN0YXRpYyBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgzLWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODktXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX0xTTV9DR1JPVVApXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE5MDpcdFx0cmV0dXJuIHRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoYXR0YWNoX3R5cGUpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTEtXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yMjA9dm9pZCBicGZfY2dyb3VwX2F0eXBlX3B1dChpbnQgY2dyb3VwX2F0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjMyLSNlbHNlXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzMzpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzNC1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM2LVx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9MU01fQ0dST1VQKVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzc6XHRcdHJldHVybiB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGF0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM4LVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NDI0PXN0YXRpYyBib29sIGhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQyNTpcdFx0XHRcdCAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQyNi17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz00NTM9c3RhdGljIGludCBjb21wdXRlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0NTQ6XHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQ1NS1cdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZ19hcnJheSAqKmFycmF5KVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NTExPXN0YXRpYyB2b2lkIGFjdGl2YXRlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1MTI6XHRcdFx0XHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNTEzLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKm9sZF9hcnJheSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTU5MT1zdGF0aWMgaW50IHVwZGF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NTkyOlx0XHRcdFx0ICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTU5My17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz03NzE9c3RhdGljIGludCBpbnNlcnRfcGxfdG9faGxpc3Qoc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3MsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjc5MjogKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTMtICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNS0gKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6ODA2OnN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MTctXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTg6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTgxOS1cdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzNi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM3OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM4LVx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NjpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ3LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTUyPXN0YXRpYyBpbnQgZWZmZWN0aXZlX3Byb2dfcG9zKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjk1MzpcdFx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1NC1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTAwND1zdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDU6XHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMDYtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDU1PXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNTgte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDU5Olx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDYwLVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTg9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTE1OTpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTYwLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExOTk9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyMDIte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjAzOlx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjA0LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEyNzQ9c3RhdGljIGludCBfX2Nncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjgwLVx0ZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSA9IGF0dHItXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyODE6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgZnJvbV9hdHlwZSwgdG9fYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyODI6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODMtXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzMDAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMzAxOlx0XHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTMwMi1cdFx0aWYgKGZyb21fYXR5cGUgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzkwPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTQwOS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTQxMDpcdHJldCA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTQxMS1cdFx0XHRcdGF0dHItXHUwMDNlYXR0YWNoX3R5cGUsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTU0Mj1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU3MC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU3MTpcdGVyciA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIE5VTEwsIE5VTEwsIGxpbmssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NzItXHRcdFx0XHRsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsIEJQRl9GX0FMTE9XX01VTFRJIHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2MjY9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MjctXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNjI4Olx0XHRcdFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjI5LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MDQ9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTcwNTpcdFx0XHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzA2LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MzI9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzM0LVx0XHRcdFx0ICAgICAgaW50ICp1YWRkcmxlbixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTczNTpcdFx0XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTczNi1cdFx0XHRcdCAgICAgIHZvaWQgKnRfY3R4LFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc4Nj1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzg3LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzg4Olx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3ODkte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc5Nz1pbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc5ODpcdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzk5LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5NTQ9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5NTYtXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTU3Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gQlBGIEF0dGFjaG1lbnQgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggZm9yIEJQRiBhdHRhY2htZW50IHBvaW50cywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZXkmIzM5O3JlIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLiBJIHNlZSB0aGF0IGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIGtub3cgdGhleSYjMzk7cmUgY2FsbGVkIGZyb20gYHN5c2NhbGwuY2AsIHRoZSB1c3VhbCBzdXNwZWN0IGZvciBzeXNjYWxsIGhhbmRsaW5nLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdGhlIGFjdHVhbCBhdHRhY2htZW50IHByb2Nlc3MuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSB3aXRoaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGF0IGZpbGUgYW5kIHNjYW4gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDEzOTAgdG8gMTU4MCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGxvZ2ljIGZvciBob3cgQlBGIHByb2dyYW1zIG9yIGxpbmtzIGdldCBhdHRhY2hlZCB0byBjZ3JvdXBzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciB3aGVyZSB0aGluZ3MgY291bGQgcG90ZW50aWFsbHkgZ28gd3JvbmcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHRpbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjEzOTE6XHRcdFx0XHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjEzOTI6XHR7XG4xMzkzOlx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyA9IE5VTEw7XG4xMzk0Olx0XHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xuMTM5NTpcdFx0aW50IHJldDtcbjEzOTY6XHRcbjEzOTc6XHRcdGNncnAgPSBjZ3JvdXBfZ2V0X2Zyb21fZmQoYXR0ci1cdTAwM2V0YXJnZXRfZmQpO1xuMTM5ODpcdFx0aWYgKElTX0VSUihjZ3JwKSlcbjEzOTk6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY2dycCk7XG4xNDAwOlx0XG4xNDAxOlx0XHRpZiAoKGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkgXHUwMDI2XHUwMDI2XG4xNDAyOlx0XHQgICAgKGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSkge1xuMTQwMzpcdFx0XHRyZXBsYWNlX3Byb2cgPSBicGZfcHJvZ19nZXRfdHlwZShhdHRyLVx1MDAzZXJlcGxhY2VfYnBmX2ZkLCBwdHlwZSk7XG4xNDA0Olx0XHRcdGlmIChJU19FUlIocmVwbGFjZV9wcm9nKSkge1xuMTQwNTpcdFx0XHRcdGNncm91cF9wdXQoY2dycCk7XG4xNDA2Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocmVwbGFjZV9wcm9nKTtcbjE0MDc6XHRcdFx0fVxuMTQwODpcdFx0fVxuMTQwOTpcdFxuMTQxMDpcdFx0cmV0ID0gY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBOVUxMLFxuMTQxMTpcdFx0XHRcdFx0YXR0ci1cdTAwM2VhdHRhY2hfdHlwZSwgYXR0ci1cdTAwM2VhdHRhY2hfZmxhZ3MsXG4xNDEyOlx0XHRcdFx0XHRhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbjE0MTM6XHRcbjE0MTQ6XHRcdGlmIChyZXBsYWNlX3Byb2cpXG4xNDE1Olx0XHRcdGJwZl9wcm9nX3B1dChyZXBsYWNlX3Byb2cpO1xuMTQxNjpcdFx0Y2dyb3VwX3B1dChjZ3JwKTtcbjE0MTc6XHRcdHJldHVybiByZXQ7XG4xNDE4Olx0fVxuMTQxOTpcdFxuMTQyMDpcdGludCBjZ3JvdXBfYnBmX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXG4xNDIxOlx0e1xuMTQyMjpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMTQyMzpcdFx0c3RydWN0IGNncm91cCAqY2dycDtcbjE0MjQ6XHRcdGludCByZXQ7XG4xNDI1Olx0XG4xNDI2Olx0XHRjZ3JwID0gY2dyb3VwX2dldF9mcm9tX2ZkKGF0dHItXHUwMDNldGFyZ2V0X2ZkKTtcbjE0Mjc6XHRcdGlmIChJU19FUlIoY2dycCkpXG4xNDI4Olx0XHRcdHJldHVybiBQVFJfRVJSKGNncnApO1xuMTQyOTpcdFxuMTQzMDpcdFx0cHJvZyA9IGJwZl9wcm9nX2dldF90eXBlKGF0dHItXHUwMDNlYXR0YWNoX2JwZl9mZCwgcHR5cGUpO1xuMTQzMTpcdFx0aWYgKElTX0VSUihwcm9nKSlcbjE0MzI6XHRcdFx0cHJvZyA9IE5VTEw7XG4xNDMzOlx0XG4xNDM0Olx0XHRyZXQgPSBjZ3JvdXBfYnBmX2RldGFjaChjZ3JwLCBwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbjE0MzU6XHRcdGlmIChwcm9nKVxuMTQzNjpcdFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4xNDM3Olx0XG4xNDM4Olx0XHRjZ3JvdXBfcHV0KGNncnApO1xuMTQzOTpcdFx0cmV0dXJuIHJldDtcbjE0NDA6XHR9XG4xNDQxOlx0XG4xNDQyOlx0c3RhdGljIHZvaWQgYnBmX2Nncm91cF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuMTQ0MzpcdHtcbjE0NDQ6XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmNnX2xpbmsgPVxuMTQ0NTpcdFx0XHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9jZ3JvdXBfbGluaywgbGluayk7XG4xNDQ2Olx0XHRzdHJ1Y3QgY2dyb3VwICpjZztcbjE0NDc6XHRcbjE0NDg6XHRcdC8qIGxpbmsgbWlnaHQgaGF2ZSBiZWVuIGF1dG8tZGV0YWNoZWQgYnkgZHlpbmcgY2dyb3VwIGFscmVhZHksXG4xNDQ5Olx0XHQgKiBpbiB0aGF0IGNhc2Ugb3VyIHdvcmsgaXMgZG9uZSBoZXJlXG4xNDUwOlx0XHQgKi9cbjE0NTE6XHRcdGlmICghY2dfbGluay1cdTAwM2VjZ3JvdXApXG4xNDUyOlx0XHRcdHJldHVybjtcbjE0NTM6XHRcbjE0NTQ6XHRcdGNncm91cF9sb2NrKCk7XG4xNDU1Olx0XG4xNDU2Olx0XHQvKiByZS1jaGVjayBjZ3JvdXAgdW5kZXIgbG9jayBhZ2FpbiAqL1xuMTQ1NzpcdFx0aWYgKCFjZ19saW5rLVx1MDAzZWNncm91cCkge1xuMTQ1ODpcdFx0XHRjZ3JvdXBfdW5sb2NrKCk7XG4xNDU5Olx0XHRcdHJldHVybjtcbjE0NjA6XHRcdH1cbjE0NjE6XHRcbjE0NjI6XHRcdFdBUk5fT04oX19jZ3JvdXBfYnBmX2RldGFjaChjZ19saW5rLVx1MDAzZWNncm91cCwgTlVMTCwgY2dfbGluayxcbjE0NjM6XHRcdFx0XHRcdCAgICBsaW5rLVx1MDAzZWF0dGFjaF90eXBlLCAwKSk7XG4xNDY0Olx0XHRpZiAobGluay1cdTAwM2VhdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcbjE0NjU6XHRcdFx0YnBmX3RyYW1wb2xpbmVfdW5saW5rX2Nncm91cF9zaGltKGNnX2xpbmstXHUwMDNlbGluay5wcm9nKTtcbjE0NjY6XHRcbjE0Njc6XHRcdGNnID0gY2dfbGluay1cdTAwM2VjZ3JvdXA7XG4xNDY4Olx0XHRjZ19saW5rLVx1MDAzZWNncm91cCA9IE5VTEw7XG4xNDY5Olx0XG4xNDcwOlx0XHRjZ3JvdXBfdW5sb2NrKCk7XG4xNDcxOlx0XG4xNDcyOlx0XHRjZ3JvdXBfcHV0KGNnKTtcbjE0NzM6XHR9XG4xNDc0Olx0XG4xNDc1Olx0c3RhdGljIHZvaWQgYnBmX2Nncm91cF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuMTQ3NjpcdHtcbjE0Nzc6XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmNnX2xpbmsgPVxuMTQ3ODpcdFx0XHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9jZ3JvdXBfbGluaywgbGluayk7XG4xNDc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzcyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gQlBGIENncm91cCBBdHRhY2htZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoZSBCUEYgY2dyb3VwIGF0dGFjaG1lbnQgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGluIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gVGhlIGNvcmUgaXNzdWUgc3RlbXMgZnJvbSBob3cgYG5ld19wcm9nYCBpcyBiZWluZyBhc3NpZ25lZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIGEgY3Jhc2ggaWYgYm90aCBgcHJvZ2AgYW5kIGBsaW5rYCB3ZXJlIE5VTEwuIFRoZSBwcm9ibGVtYXRpYyBsaW5lIHdhcyBgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstJmd0O2xpbmsucHJvZztgLiBJZiBib3RoIHdlcmUgTlVMTCwgdGhlIHRlcm5hcnkgb3BlcmF0b3Igd291bGQgZXZhbHVhdGUgdG8gYGxpbmstJmd0O2xpbmsucHJvZ2AsIGRlcmVmZXJlbmNpbmcgYSBOVUxMIGBsaW5rYCBwb2ludGVyIGFuZCBjYXVzaW5nIGEgY3Jhc2ggYmVmb3JlIGFueSBlcnJvciBjaGVja3Mgd2VyZSByZWFjaGVkLiBJIGNhbiBzZWUgdGhpcyBjbGVhcmx5LCB0aGUgY29kZSB3b3VsZCB0cnkgdG8gZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIgd2hlbiBgbGlua2Agd2FzIGBOVUxMYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGFkZGluZyBhIG5lc3RlZCBjb25kaXRpb25hbDogYHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiAobGluayA/IGxpbmstJmd0O2xpbmsucHJvZyA6IE5VTEwpO2AsIHdoaWNoIG5vdyBzYWZlbHkgaGFuZGxlcyB0aGUgTlVMTCBgbGlua2AgY2FzZSBieSBhc3NpZ25pbmcgYE5VTExgIHRvIGBuZXdfcHJvZ2AuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGF0dGFjayBzdXJmYWNlLiBJcyB0aGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBwYXRoLiBXaGF0IHN5bWJvbHMgc2hvdWxkIEkgZm9jdXMgb24/IEkgYWxzbyBuZWVkIHRvIGFzc2VzcyBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGFib3V0IHN5c3RlbSBjYWxscz8gVGhlIGZ1bmN0aW9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBjb21lcyB0byBtaW5kLiBJdCBjYWxscyBgY2dyb3VwX2JwZl9hdHRhY2hgIGRpcmVjdGx5LiBTbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIG1pZ2h0IHJldmVhbCBpZiB0aGUgdnVsbmVyYWJpbGl0eSBpcyBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlIHN5c2NhbGxzLiBTcGVjaWZpY2FsbHkgSSBuZWVkIHRvIGRldGVybWluZSB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgYHByb2dgIGNhbiBiZSBOVUxMIG9yIG5vdCBpbnNpZGUgdGhlIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTE4MD1zdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQxNy1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjQxODppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQxOS1cdFx0XHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4tLVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9NDMwPXN0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfYnBmX2xpZmV0aW1lX25vdGlmaWVyX2luaXQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MzQtXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0MzU6c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQzNi1cdFx0XHRcdFx0IGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEzNzk9c3RhdGljIGludCBjZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM4OS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MDppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5MS1cdFx0XHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NTc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MTQtXHRpZiAoaXNfY2dyb3VwX3Byb2dfdHlwZShwdHlwZSwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2MTU6XHRcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNi1cdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjI2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBCUEYgYW5kIGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBMaW5rIEF0dGFjaG1lbnQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGludG8gQlBGIGxpbmsgYXR0YWNobWVudHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIHRoaXMgY29kZSByZXNpZGVzLCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGlzIGZpbGUgb2Z0ZW4gY29udGFpbnMgdGhlIGNvcmUgc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb25zLCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIHNvdW5kcyBsaWtlIGl0JiMzOTtkIGZhbGwgdW5kZXIgdGhhdCBjYXRlZ29yeS4gQnV0LCBrbm93aW5nIGhvdyB0aGVzZSB0aGluZ3MgY2FuIHNvbWV0aW1lcyBiZSBkaXN0cmlidXRlZCwgYW5kIHdpdGggQlBGIGJlaW5nIHRoZSBicm9hZCB0aGluZyBpdCBpcywgSSBjYW4mIzM5O3QgYmUgKmNvbXBsZXRlbHkqIGNlcnRhaW4gaXQmIzM5O3MgaW4gdGhhdCBmaWxlLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEkgbmVlZCB0byBrZWVwIGFuIG9wZW4gbWluZCB0byB0aGUgcG9zc2liaWx0eSB0aGF0IGl0IGNvdWxkIGJlIGluIGEgc2libGluZyBvciBzdXBwb3J0IGZpbGUuIEkmIzM5O2xsIGNoZWNrIGBzeXNjYWxsLmNgIGZpcnN0LCBidXQgSSYjMzk7bGwgbWVudGFsbHkga2VlcCBvdGhlciBwb3RlbnRpYWwgbG9jYXRpb25zIG9wZW4uIEJlc3QgdG8gYmUgc3lzdGVtYXRpYyBmcm9tIHRoZSBvdXRzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9NDIwPWludCBjZ3JvdXBfYnBmX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtNDIxLVx0XHRcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0MjI6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MjMtaW50IGNncm91cF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD00NDI9c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00NDctXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0NDg6c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQ0OS1cdFx0XHRcdFx0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE1MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX2Nncm91cF9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTQxLVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNTQyOmludCBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NDMte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3OTM9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgyMC1cdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4MjE6XHRcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODIyLVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODQxLVx0XHRlbHNlIGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9MU01fQ0dST1VQKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg0MjpcdFx0XHRyZXQgPSBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg0My1cdFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgY2dyb3VwX2JwZl9hdHRhY2hgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbiwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBcmUgdGhlcmUgYW55IG90aGVyIGxvY2F0aW9ucyBjYWxsaW5nIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucz8gV2hlcmUgZWxzZSBhcmUgdGhleSBiZWluZyB1c2VkIGluIHRoZSBrZXJuZWw/JiMzNDsuCgpJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbjogYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBuZWFyIHRoZSBkZWZpbml0aW9uIG9mIGBjZ3JvdXBfYnBmX2F0dGFjaGAgaXRzZWxmLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGlmZmVyZW50IHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aGluIHRoZSBicm9hZGVyIGNncm91cCBhbmQgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkzMDpcdFx0XHRobGlzdF9kZWwoXHUwMDI2cGwtXHUwMDNlbm9kZSk7XG4gOTMxOlx0XHRcdGtmcmVlKHBsKTtcbiA5MzI6XHRcdH1cbiA5MzM6XHRcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcbiA5MzQ6XHRcdHJldHVybiBlcnI7XG4gOTM1Olx0fVxuIDkzNjpcdFxuIDkzNzpcdHN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiA5Mzg6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXG4gOTM5Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuIDk0MDpcdFx0XHRcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSxcbiA5NDE6XHRcdFx0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pXG4gOTQyOlx0e1xuIDk0MzpcdFx0aW50IHJldDtcbiA5NDQ6XHRcbiA5NDU6XHRcdGNncm91cF9sb2NrKCk7XG4gOTQ2Olx0XHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXG4gOTQ3Olx0XHRcdFx0XHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XG4gOTQ4Olx0XHRjZ3JvdXBfdW5sb2NrKCk7XG4gOTQ5Olx0XHRyZXR1cm4gcmV0O1xuIDk1MDpcdH1cbiA5NTE6XHRcbiA5NTI6XHRzdGF0aWMgaW50IGVmZmVjdGl2ZV9wcm9nX3BvcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIDk1MzpcdFx0XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbiA5NTQ6XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxuIDk1NTpcdHtcbiA5NTY6XHRcdGludCBjbnQgPSAwLCBwcmVvcmRlcl9jbnQgPSAwLCBmc3RhcnQsIGJzdGFydCwgaW5pdF9ic3RhcnQsIHBvcyA9IC0xO1xuIDk1NzpcdFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIDk1ODpcdFx0c3RydWN0IGNncm91cCAqcCA9IGNncnA7XG4gOTU5Olx0XG4gOTYwOlx0XHQvKiBjb3VudCBlZmZlY3RpdmUgcHJvZ3JhbXMgdG8gZmluZCB3aGVyZSB0aGUgcHJlb3JkZXIgcmVnaW9uIGVuZHMgKi9cbiA5NjE6XHRcdGRvIHtcbiA5NjI6XHRcdFx0aWYgKGNudCA9PSAwIHx8IChwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSlcbiA5NjM6XHRcdFx0XHRjbnQgJiM0Mzs9IHByb2dfbGlzdF9sZW5ndGgoXHUwMDI2cC1cdTAwM2VicGYucHJvZ3NbYXR5cGVdLCBcdTAwMjZwcmVvcmRlcl9jbnQpO1xuIDk2NDpcdFx0XHRwID0gY2dyb3VwX3BhcmVudChwKTtcbiA5NjU6XHRcdH0gd2hpbGUgKHApO1xuIDk2NjpcdFxuIDk2NzpcdFx0LyogcmVwbGF5IGNvbXB1dGVfZWZmZWN0aXZlX3Byb2dzKCkgcGxhY2VtZW50IGFuZCByZWNvcmQgdGFyZ2V0JiMzOTtzIHNsb3QgKi9cbiA5Njg6XHRcdGNudCA9IDA7XG4gOTY5Olx0XHRwID0gY2dycDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJQRiBDZ3JvdXAgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBDT05GSUdgIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBvYnZpb3VzIHBsYWNlcy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MuIFRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIG9yIHBvc3NpYmx5IGV2ZW4gYGluaXQvS2NvbmZpZ2Ag4oCTIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIOKAkyB0byBzZWUgaWYgdGhlIHJlbGV2YW50IGZlYXR1cmVzIGhhdmUgdGhlaXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZGVmaW5lZC4gR290dGEgdHJhY2sgZG93biB0aG9zZSBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICphY3R1YWxseSogZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Mzg9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS00MC1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTE1OD1zdGF0aWMgdm9pZCBwdXJnZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE3Mi1cdFx0cG9zID0gZWZmZWN0aXZlX3Byb2dfcG9zKGRlc2MsIGF0eXBlLCBwbCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjExNzM6XHRcdC8qIG5vIGxpbmsgb3IgcHJvZyBtYXRjaCwgc2tpcCB0aGUgY2dyb3VwIG9mIHRoaXMgbGF5ZXIgKi9cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE3NC1cdFx0aWYgKHBvcyBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMTUtICogIDMuIFdhbGsgdGhlIGFuY2VzdG9ycyBvZiBhIGNncm91cC5cbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoxNjogKiAgNC4gU2hvdyB0aGUgZ2l2ZW4gY2dyb3VwIG9ubHkuXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMTctICogIDUuIFdhbGsgdGhlIGNoaWxkcmVuIG9mIGEgZ2l2ZW4gcGFyZW50IGNncm91cC5cbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MTY3PXN0YXRpYyBpbnQgY2dyb3VwX2l0ZXJfc2VxX2luaXQodm9pZCAqcHJpdiwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTE4MC1cdHAtXHUwMDNldmlzaXRlZF9hbGwgPSBmYWxzZTtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoxODE6XHRwLVx1MDAzZW9yZGVyID0gYXV4LVx1MDAzZWNncm91cC5vcmRlcjtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0xODItXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MTk5PXN0YXRpYyBpbnQgYnBmX2l0ZXJfYXR0YWNoX2Nncm91cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTIwNC1cdHU2NCBpZCA9IGxpbmZvLVx1MDAzZWNncm91cC5jZ3JvdXBfaWQ7XG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjA1Olx0aW50IG9yZGVyID0gbGluZm8tXHUwMDNlY2dyb3VwLm9yZGVyO1xua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTIwNi1cdHN0cnVjdCBjZ3JvdXAgKmNncnA7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTIzMi1cdGF1eC1cdTAwM2VjZ3JvdXAuc3RhcnQgPSBjZ3JwO1xua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jOjIzMzpcdGF1eC1cdTAwM2VjZ3JvdXAub3JkZXIgPSBvcmRlcjtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yMzQtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MjQyPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2Nncm91cF9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjYzLXNob3dfb3JkZXI6XG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjY0Olx0aWYgKGF1eC1cdTAwM2VjZ3JvdXAub3JkZXIgPT0gQlBGX0NHUk9VUF9JVEVSX0RFU0NFTkRBTlRTX1BSRSlcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNjUtXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7b3JkZXI6IGRlc2NlbmRhbnRzX3ByZVxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjY2Olx0ZWxzZSBpZiAoYXV4LVx1MDAzZWNncm91cC5vcmRlciA9PSBCUEZfQ0dST1VQX0lURVJfREVTQ0VOREFOVFNfUE9TVClcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNjctXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7b3JkZXI6IGRlc2NlbmRhbnRzX3Bvc3RcXG5cJiMzNDspO1xua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jOjI2ODpcdGVsc2UgaWYgKGF1eC1cdTAwM2VjZ3JvdXAub3JkZXIgPT0gQlBGX0NHUk9VUF9JVEVSX0FOQ0VTVE9SU19VUClcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNjktXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7b3JkZXI6IGFuY2VzdG9yc191cFxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjcwOlx0ZWxzZSBpZiAoYXV4LVx1MDAzZWNncm91cC5vcmRlciA9PSBCUEZfQ0dST1VQX0lURVJfQ0hJTERSRU4pXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjcxLVx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O29yZGVyOiBjaGlsZHJlblxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jPTI3Nj1zdGF0aWMgaW50IGJwZl9pdGVyX2Nncm91cF9maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjc4LXtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyNzk6XHRpbmZvLVx1MDAzZWl0ZXIuY2dyb3VwLm9yZGVyID0gYXV4LVx1MDAzZWNncm91cC5vcmRlcjtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yODAtXHRpbmZvLVx1MDAzZWl0ZXIuY2dyb3VwLmNncm91cF9pZCA9IGNncm91cF9pZChhdXgtXHUwMDNlY2dyb3VwLnN0YXJ0KTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yODUwPUNGSV9OT1NFQUwoYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODU2LSAqIGNhbGxpbmcgYnBmX2Nncm91cF9yZWxlYXNlKCkuXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyODU3OiAqIEBjZ3JwOiBUaGUgY2dyb3VwIG9uIHdoaWNoIGEgcmVmZXJlbmNlIGlzIGJlaW5nIGFjcXVpcmVkLlxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjg1OC0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jPTI4NTk9X19icGZfa2Z1bmMgc3RydWN0IGNncm91cCAqYnBmX2Nncm91cF9hY3F1aXJlKHN0cnVjdCBjZ3JvdXAgKmNncnApXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjg2OC0gKiBkcm9wcyB0byAwLlxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg2OTogKiBAY2dycDogVGhlIGNncm91cCBvbiB3aGljaCBhIHJlZmVyZW5jZSBpcyBiZWluZyByZWxlYXNlZC5cbmtlcm5lbC9icGYvaGVscGVycy5jLTI4NzAtICovXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjk1NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2N1cnJlbnRfdGFza191bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjk2My0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjI5NjQ6ICogYnBmX3Rhc2tfZ2V0X2Nncm91cDEgLSBBY3F1aXJlcyB0aGUgYXNzb2NpYXRlZCBjZ3JvdXAgb2YgYSB0YXNrIHdpdGhpbiBhXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yOTY1LSAqIHNwZWNpZmljIGNncm91cDEgaGllcmFyY2h5LiBUaGUgY2dyb3VwMSBoaWVyYXJjaHkgaXMgaWRlbnRpZmllZCBieSBpdHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBUaGF0IGBDR1JPVVBfQlBGYCBLY29uZmlnIFN5bWJvbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgS2NvbmZpZyBkZWZpbml0aW9uIGZvciBgQ0dST1VQX0JQRmAuIEl04oCZcyBzb21ldGhpbmcgSSYjMzk7dmUgcHJvYmFibHkgY29uZmlndXJlZCBhIGRvemVuIHRpbWVzIGJlZm9yZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBleGFjdCBsb2NhdGlvbiBvciBhbnkgZGVwZW5kZW5jaWVzLiBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSeKAmWxsIHN0YXJ0IHdpdGggYSBgZmluZGAgb3IgYGdyZXBgIGFjcm9zcyB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyBzb21ldGhpbmcgbGlrZSBgZmluZCAuIC1uYW1lICYjMzQ7S2NvbmZpZyomIzM0OyAtcHJpbnQwIHwgeGFyZ3MgLTAgZ3JlcCBDR1JPVVBfQlBGYCBzaG91bGQgZG8gdGhlIHRyaWNrLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgS2NvbmZpZyBzdHJ1Y3R1cmUg4oCTIHRoZSBgY29uZmlnIENHUk9VUF9CUEZgLCBgYm9vbGAsIHRoZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCB0aGUgaGVscCB0ZXh0LCBhbmQgc28gb24uIEkgbmVlZCB0aGUgc3BlY2lmaWNzIHNvIEkgY2FuIHVuZGVyc3RhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBTb21ldGltZXMsIHRoZSBzeW1ib2wgaXMgZGVmaW5lZCBpbiBhIG1vcmUgZ2VuZXJpYyBjb25maWcgZmlsZSwgYW5kIGlzIHRoZW4gc2VsZWN0ZWQgZWxzZXdoZXJlLiBJdCYjMzk7cyBvZnRlbiBoZWxwZnVsIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMgdGhhdCBtaWdodCBiZSB0aWVkIHRvIGl0LgoKSWYgdGhlIGJhc2ljIHNlYXJjaCBpc24mIzM5O3QgZnJ1aXRmdWwsIHRoZW4gSSYjMzk7bGwgcHJvYmFibHkgYnJvYWRlbiBteSBzZWFyY2guIEkgY291bGQgYWxzbyByZW1lbWJlciB0aGF0IEkgY29uZmlndXJlZCBpdCByZWNlbnRseSwgc28gY2hlY2tpbmcgbXkgYC5jb25maWdgIGZpbGUgbWlnaHQgYmUgYSBzaG9ydGN1dC4gSSBtaWdodCBhbHNvIHRyeSBsb29raW5nIGZvciByZWxhdGVkIHRlcm1zLCBzdWNoIGFzICYjMzQ7QlBGJiMzNDssICYjMzQ7Y2dyb3VwJiMzNDssIG9yICYjMzQ7c2VjdXJpdHkmIzM0OyBpbiB0aGUgc2FtZSBLY29uZmlnIGZpbGVzLCBpbiBjYXNlIHRoZSBzeW1ib2wgaXMgaW5kaXJlY3RseSByZWxhdGVkLgoKT25jZSBJJiMzOTt2ZSBnb3QgdGhlIGRlZmluaXRpb24sIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGhlbHAgdGV4dCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzLCBvciBpZiBpdCBwb2ludHMgdG8gb3RoZXIgdXNlZnVsIGRvY3VtZW50YXRpb24uIEZpbmFsbHksIEkmIzM5O2xsIG1lbnRhbGx5IGZpbGUgdGhpcyBhd2F5IChvciBtYXliZSBqb3QgaXQgZG93biwgZGVwZW5kaW5nIG9uIGhvdyBvZnRlbiBJIG5lZWQgdG8gZG8gdGhpcykgdG8gc3RyZWFtbGluZSB0aGlzIHByb2Nlc3MgbmV4dCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX0JQRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTM0NT1jb25maWcgQ0dST1VQX1BFUkZcbi0tXG5pbml0L0tjb25maWctMTM1NS1cbmluaXQvS2NvbmZpZzoxMzU2OmNvbmZpZyBDR1JPVVBfQlBGXG5pbml0L0tjb25maWctMTM1Ny1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBuZXcgY29uZmlndXJhdGlvbiBpc3N1ZT8gUmlnaHQsIGBpbml0L0tjb25maWdgIOKAkyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCYjMzk7cyBhdmFpbGFibGUgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBib290IHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDEzNTYuIEkgZmlndXJlIHRoYXQgbG9jYXRpb24gaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGRlY2xhcmF0aW9ucyBvciBpbmNsdWRlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IEkmIzM5O20gZm9jdXNlZCBvbi4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25zIGFyZSBkZWZpbmVkIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc2hlZHMgYW55IGxpZ2h0IG9uIHRoZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MDpcdFx0ICB0byB0aHJlYWRzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2dyb3VwIHNwZWNpZmllZCBhbmQgcnVuIG9uIHRoZVxuMTM1MTpcdFx0ICBkZXNpZ25hdGVkIGNwdS4gIE9yIHRoaXMgY2FuIGJlIHVzZWQgdG8gaGF2ZSBjZ3JvdXAgSUQgaW4gc2FtcGxlc1xuMTM1MjpcdFx0ICBzbyB0aGF0IGl0IGNhbiBtb25pdG9yIHBlcmZvcm1hbmNlIGV2ZW50cyBhbW9uZyBjZ3JvdXBzLlxuMTM1MzpcdFxuMTM1NDpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMzU1Olx0XG4xMzU2Olx0Y29uZmlnIENHUk9VUF9CUEZcbjEzNTc6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4xMzU4Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4xMzU5Olx0XHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxuMTM2MDpcdFx0aGVscFxuMTM2MTpcdFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXG4xMzYyOlx0XHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXG4xMzYzOlx0XG4xMzY0Olx0XHQgIEluIHdoaWNoIGNvbnRleHQgdGhlc2UgcHJvZ3JhbXMgYXJlIGFjY2Vzc2VkIGRlcGVuZHMgb24gdGhlIHR5cGVcbjEzNjU6XHRcdCAgb2YgYXR0YWNobWVudC4gRm9yIGluc3RhbmNlLCBwcm9ncmFtcyB0aGF0IGFyZSBhdHRhY2hlZCB1c2luZ1xuMTM2NjpcdFx0ICBCUEZfQ0dST1VQX0lORVRfSU5HUkVTUyB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBpbmdyZXNzIHBhdGggb2ZcbjEzNjc6XHRcdCAgaW5ldCBzb2NrZXRzLlxuMTM2ODpcdFxuMTM2OTpcdGNvbmZpZyBDR1JPVVBfTUlTQ1xuMTM3MDpcdFx0Ym9vbCBcJiMzNDtNaXNjIHJlc291cmNlIGNvbnRyb2xsZXJcJiMzNDtcbjEzNzE6XHRcdGRlZmF1bHQgblxuMTM3MjpcdFx0aGVscFxuMTM3MzpcdFx0ICBQcm92aWRlcyBhIGNvbnRyb2xsZXIgZm9yIG1pc2NlbGxhbmVvdXMgcmVzb3VyY2VzIG9uIGEgaG9zdC5cbjEzNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgYENHUk9VUF9CUEZgIERlcGVuZGVuY3kqKgoKT2theSwgc28gYENHUk9VUF9CUEZgIGlzIGNsZWFybHkgcmVsaWFudCBvbiBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYGNncm91cC5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBpbiB0aGUgY29yZSBjZ3JvdXAgaW1wbGVtZW50YXRpb24gdGhhdCYjMzk7cyB0aWVkIHRvIHRoaXMuIFRoZW4sIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGJlZ2lubmluZyBvZiBga2VybmVsL2JwZi9jZ3JvdXAuY2AgZm9yIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MgdGhhdCBtaWdodCBpbXBhY3QgaG93IGBDR1JPVVBfQlBGYCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdldCBhIGhvbGlzdGljIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIEZ1bmN0aW9ucyB0byBtYW5hZ2UgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTYgRGFuaWVsIE1hY2tcbiAgIDY6XHQgKi9cbiAgIDc6XHRcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi1jZ3JvdXAuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY25ldC9icGZfc2tfc3RvcmFnZS5oXHUwMDNlXG4gIDIxOlx0XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7Li4vY2dyb3VwL2Nncm91cC1pbnRlcm5hbC5oXCYjMzQ7XG4gIDIzOlx0XG4gIDI0Olx0REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UoY2dyb3VwX2JwZl9lbmFibGVkX2tleSwgTUFYX0NHUk9VUF9CUEZfQVRUQUNIX1RZUEUpO1xuICAyNTpcdEVYUE9SVF9TWU1CT0woY2dyb3VwX2JwZl9lbmFibGVkX2tleSk7XG4gIDI2Olx0XG4gIDI3Olx0LypcbiAgMjg6XHQgKiBjZ3JvdXAgYnBmIGRlc3RydWN0aW9uIG1ha2VzIGhlYXZ5IHVzZSBvZiB3b3JrIGl0ZW1zIGFuZCB0aGVyZSBjYW4gYmUgYSBsb3RcbiAgMjk6XHQgKiBvZiBjb25jdXJyZW50IGRlc3RydWN0aW9ucy4gIFVzZSBhIHNlcGFyYXRlIHdvcmtxdWV1ZSBzbyB0aGF0IGNncm91cCBicGZcbiAgMzA6XHQgKiBkZXN0cnVjdGlvbiB3b3JrIGl0ZW1zIGRvbiYjMzk7dCBlbmQgdXAgZmlsbGluZyB1cCBtYXhfYWN0aXZlIG9mIHN5c3RlbV9wZXJjcHVfd3FcbiAgMzE6XHQgKiB3aGljaCBtYXkgbGVhZCB0byBkZWFkbG9jay5cbiAgMzI6XHQgKi9cbiAgMzM6XHRzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNncm91cF9icGZfZGVzdHJveV93cTtcbiAgMzQ6XHRcbiAgMzU6XHRzdGF0aWMgaW50IF9faW5pdCBjZ3JvdXBfYnBmX3dxX2luaXQodm9pZClcbiAgMzY6XHR7XG4gIDM3Olx0XHRjZ3JvdXBfYnBmX2Rlc3Ryb3lfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7Y2dyb3VwX2JwZl9kZXN0cm95XCYjMzQ7LFxuICAzODpcdFx0XHRcdFx0XHRcdFdRX1BFUkNQVSwgMSk7XG4gIDM5Olx0XHRpZiAoIWNncm91cF9icGZfZGVzdHJveV93cSlcbiAgNDA6XHRcdFx0cGFuaWMoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jIHdvcmtxdWV1ZSBmb3IgY2dyb3VwIGJwZiBkZXN0cm95LlxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzY4CgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDk0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBDZ3JvdXAgQlBGIEF0dGFjaCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyB0aGUgY29yZSBjZ3JvdXAgQlBGIGF0dGFjaCBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaXMgYmVpbmcgYWRkcmVzc2VkLiBUaGF0IGZ1bmN0aW9uIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFdlJiMzOTt2ZSBjb25maXJtZWQgdGhlc2UgZW50cnkgcG9pbnRzIGFyZSBpbmRlZWQgbm9uLXN0YXRpYyDigJMgZ29vZC4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBzYWZlbHkgZXZhbHVhdGVzIHRoZSBgbGlua2AgcG9pbnRlciBhbmQgcmV0dXJucyBhbiBlcnJvciBpZiBgbmV3X3Byb2dgIGlzIE5VTEwsIHByZXZlbnRpbmcgdGhlIGRlcmVmZXJlbmNlLiBJbXBvcnRhbnRseSwgdGhpcyAqZG9lcyogbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgd2l0aGluIHRoZSBicGYgc3lzY2FsbCwgZGVhbGluZyB3aXRoIHByb2dyYW0gYXR0YWNobWVudCBhbmQgY2dyb3VwIEJQRiBtYW5hZ2VtZW50LgoKTm93LCBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBjZ3JvdXAgQlBGIGludGVyYWN0aW9uIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgYGJwZmAgc3lzY2FsbCAoYEJQRl9QUk9HX0FUVEFDSGAsIGBCUEZfTElOS19DUkVBVEVgKSwgYW5kIHRoZXNlIGNhbiBiZSB0ZXN0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoZSBCUEYgYXR0YWNoIG1lY2hhbmlzbXMgd2l0aCB2YXJpb3VzIGZsYWcgYW5kIHBvaW50ZXIgY29tYmluYXRpb25zIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBzbyB0aGUgcG90ZW50aWFsIHBheW9mZiBpcyB3b3J0aCB0aGUgZWZmb3J0LgoKVG8gZW5hYmxlIHByb3BlciB0ZXN0aW5nLCB3ZSBuZWVkIGBDR1JPVVBfQlBGYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEJQRl9TWVNDQUxMYC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhlIEtjb25maWcgZmlsZXMsIGFuZCB0aGVzZSBzZWVtIHRvIGJlIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTm8gb3RoZXIgZGVwZW5kZW5jaWVzIGp1bXAgb3V0LgoKRm9yIGZ1enppbmcgZm9jdXMsIHdlJiMzOTtsbCB0YXJnZXQgdGhlIGVudHJ5IHBvaW50czogYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBleHBvc2UgYW5kIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuCgpGaW5hbGx5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgZmFsbCBpbnRvIGFueSBvZiB0aGUgZGlzcXVhbGlmeWluZyBjYXRlZ29yaWVzIGZvciBmdXp6aW5nIChkb2N1bWVudGF0aW9uIGNoYW5nZXMgb25seSwgbG9nZ2luZyBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlLCBldGMuKSBhbmQgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIGEgY3JpdGljYWwgcGF0aCB3aXRoIGEgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlLiBUaGVyZWZvcmUsIGl0IGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZ2AuCgpJbiBzdW1tYXJ5LCB0aGUgc3BlY2lmaWMgYEZvY3VzU3ltYm9sc2AgYXJlOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBCUEZfU1lTQ0FMTGAgYW5kIGBDR1JPVVBfQlBGYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNncm91cCBCUEYgYXR0YWNobWVudCBwYXRoIChfX2Nncm91cF9icGZfYXR0YWNoKSB3aGVuIGRldGVybWluaW5nIHRoZSBuZXcgcHJvZ3JhbSB0byBhdHRhY2guIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgYW5kIGNncm91cCBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBzeXNjYWxsIG9wZXJhdGlvbnMgKGUuZy4sIEJQRl9QUk9HX0FUVEFDSCBhbmQgQlBGX0xJTktfQ1JFQVRFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY2dyb3VwIEJQRiBhdHRhY2htZW50IHBhdGggKF9fY2dyb3VwX2JwZl9hdHRhY2gpIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG5ldyBwcm9ncmFtIHRvIGF0dGFjaC4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBhbmQgY2dyb3VwIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHN5c2NhbGwgb3BlcmF0aW9ucyAoZS5nLiwgQlBGX1BST0dfQVRUQUNIIGFuZCBCUEZfTElOS19DUkVBVEUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2goKWAgd2hlbiBib3RoIGBwcm9nYCBhbmQgYGxpbmtgIGFyZ3VtZW50cyBhcmUgTlVMTC4gSXQgZ3VhcmRzIHRoZSBkZXJlZmVyZW5jZSBvZiBgbGluay1cdTAwM2VsaW5rLnByb2dgIGFuZCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgaWYgKCFuZXdfcHJvZykgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gU2luY2UgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlICh3aGljaCBpcyBhbHJlYWR5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBoYW5kbGVycyBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzKSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1ZTY5NTk3ODkzMjYxMGMzZmI0MzczMDJmYjk3YjA0YmMwYjA5ODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKaW5kZXggMTQ5NjcyYzc2YzQ5Yy4uMTU2ZmM0ZDYwZGFmNiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jCkBAIC04MTQsNyAmIzQzOzgxNCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKIAlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307Ci0Jc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstJmd0O2xpbmsucHJvZzsKJiM0MzsJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IChsaW5rID8gbGluay0mZ3Q7bGluay5wcm9nIDogTlVMTCk7CiAJZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlOwogCXUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFnczsKIAlzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7CkBAIC04MzQsNiAmIzQzOzgzNCw4IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCWlmICghIXJlcGxhY2VfcHJvZyAhPSAhIShmbGFncyAmYW1wOyBCUEZfRl9SRVBMQUNFKSkKIAkJLyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghbmV3X3Byb2cpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCWF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLSZndDthdXgtJmd0O2F0dGFjaF9idGZfaWQpOwogCWlmIChhdHlwZSAmbHQ7IDApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIENncm91cCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGFuZCB0aGUgY2hhbmdlcyBtYWRlIHRvIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGhlIGBkaWZmYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2VlIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIGFyb3VuZCBsaW5lIDgxNC4gTG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXQgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIHRoZSBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIGNncm91cHMuIEkgc2VlIGNoYW5nZXMgcmVsYXRlZCB0byBgbmV3X3Byb2dgIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgbnVsbCB2YWx1ZXMuIFRoZSBhZGRpdGlvbiBvZiB0aGUgY2hlY2sgYGlmICghbmV3X3Byb2cpYCBpcyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIG5ldyB2YWxpZGF0aW9uIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoZWNrIHdhc24mIzM5O3QgcHJlc2VudCBiZWZvcmUuCgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgbmV3X3Byb2dgIG1pZ2h0IGJlIG51bGwgYW5kIGhvdyB0aGUgcGF0Y2ggYWRkcmVzc2VzIHRob3NlIHNjZW5hcmlvcy4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBPciBpcyB0aGlzIGNoYW5nZSBlbmFibGluZyBhIG5ldyBmdW5jdGlvbmFsaXR5LCBzdWNoIGFzIHN1cHBvcnRpbmcgZGV0YWNoZWQgY2dyb3VwIEJQRiBwcm9ncmFtcz8gVGhlIGNvZGUgY29tbWVudCAmIzM0O3JlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhJiMzNDsgaXMgYSBzdGFuZGFyZCB2YWxpZGF0aW9uIGNoZWNrLiBIb3dldmVyLCB0aGUgYWRkaXRpb24gb2YgdGhlIG5ldyBjaGVjayBtYXkgbWVhbiB0aGF0IHRoZSBjaGVjayBmb3IgdGhlIHJlcGxhY2UgZmxhZyBoYXMgYmVjb21lIGRlcGVuZGVudCBvbiBhbm90aGVyIGNvbmRpdGlvbiBhbmQgdGh1cyByZXF1aXJlZCBhIG5ldyB2YWxpZGF0aW9uLiBMZXQgbWUgcmVhZCBtb3JlIGFib3V0IHRoZSBjb250ZXh0IHVzaW5nIGByZWFkLWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdCAqIEBpZF9vcl9mZDogUmVsYXRpdmUgcHJvZyBpZCBvciBmZFxuIDgwMTpcdCAqIEByZXZpc2lvbjogYnBmX3Byb2dfbGlzdCByZXZpc2lvblxuIDgwMjpcdCAqXG4gODAzOlx0ICogRXhhY3RseSBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1udWxsLlxuIDgwNDpcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXG4gODA1Olx0ICovXG4gODA2Olx0c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gODA3Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXG4gODA4Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gODA5Olx0XHRcdFx0ICAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxuIDgxMDpcdFx0XHRcdCAgICAgICB1NjQgcmV2aXNpb24pXG4gODExOlx0e1xuIDgxMjpcdFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQUxMT1dfT1ZFUlJJREUgfCBCUEZfRl9BTExPV19NVUxUSSkpO1xuIDgxMzpcdFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XG4gODE0Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTU6XHRcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTY6XHRcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTc6XHRcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiAobGluayA/IGxpbmstXHUwMDNlbGluay5wcm9nIDogTlVMTCk7XG4gODE4Olx0XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4gODE5Olx0XHR1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7XG4gODIwOlx0XHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XG4gODIxOlx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XG4gODIyOlx0XHRpbnQgZXJyO1xuIDgyMzpcdFxuIDgyNDpcdFx0aWYgKCgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XG4gODI1Olx0XHQgICAgKChmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkpXG4gODI2Olx0XHRcdC8qIGludmFsaWQgY29tYmluYXRpb24gKi9cbiA4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODI4Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQkVGT1JFIHwgQlBGX0ZfQUZURVIpKSlcbiA4Mjk6XHRcdFx0Lyogb25seSBlaXRoZXIgcmVwbGFjZSBvciBpbnNlcnRpb24gd2l0aCBiZWZvcmUvYWZ0ZXIgKi9cbiA4MzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODMxOlx0XHRpZiAobGluayBcdTAwMjZcdTAwMjYgKHByb2cgfHwgcmVwbGFjZV9wcm9nKSlcbiA4MzI6XHRcdFx0Lyogb25seSBlaXRoZXIgbGluayBvciBwcm9nL3JlcGxhY2VfcHJvZyBjYW4gYmUgc3BlY2lmaWVkICovXG4gODMzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzNDpcdFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSlcbiA4MzU6XHRcdFx0LyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi9cbiA4MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM3Olx0XHRpZiAoIW5ld19wcm9nKVxuIDgzODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4Mzk6XHRcbiA4NDA6XHRcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKTtcbiA4NDE6XHRcdGlmIChhdHlwZSBcdTAwM2MgMClcbiA4NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODQzOlx0XHRpZiAocmV2aXNpb24gXHUwMDI2XHUwMDI2IHJldmlzaW9uICE9IGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0pXG4gODQ0Olx0XHRcdHJldHVybiAtRVNUQUxFO1xuIDg0NTpcdFxuIDg0NjpcdFx0cHJvZ3MgPSBcdTAwMjZjZ3JwLVx1MDAzZWJwZi5wcm9nc1thdHlwZV07XG4gODQ3Olx0XG4gODQ4Olx0XHRpZiAoIWhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKGNncnAsIGF0eXBlKSlcbiA4NDk6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4NTA6XHRcbiA4NTE6XHRcdGlmICghaGxpc3RfZW1wdHkocHJvZ3MpIFx1MDAyNlx1MDAyNiBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gIT0gc2F2ZWRfZmxhZ3MpXG4gODUyOlx0XHRcdC8qIERpc2FsbG93IGF0dGFjaGluZyBub24tb3ZlcnJpZGFibGUgb24gdG9wXG4gODUzOlx0XHRcdCAqIG9mIGV4aXN0aW5nIG92ZXJyaWRhYmxlIGluIHRoaXMgY2dyb3VwLlxuIDg1NDpcdFx0XHQgKiBEaXNhbGxvdyBhdHRhY2hpbmcgbXVsdGktcHJvZyBpZiBvdmVycmlkYWJsZSBvciBub25lXG4gODU1Olx0XHRcdCAqL1xuIDg1NjpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDg1NzpcdFxuIDg1ODpcdFx0aWYgKHByb2dfbGlzdF9sZW5ndGgocHJvZ3MsIE5VTEwpIFx1MDAzZT0gQlBGX0NHUk9VUF9NQVhfUFJPR1MpXG4gODU5Olx0XHRcdHJldHVybiAtRTJCSUc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyOTIKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvcmUgb2YgdGhlIGZpeCBpcyBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAuIFRoZSBvcmlnaW5hbCBjb2RlLCBgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstJmd0O2xpbmsucHJvZztgLCBoYWQgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBJZiAqYm90aCogYHByb2dgIGFuZCBgbGlua2Agd2VyZSBOVUxMLCBpdCB3b3VsZCB0cnkgdG8gYWNjZXNzIGBsaW5rLSZndDtsaW5rLnByb2dgLCBjYXVzaW5nIGEgY3Jhc2guIFRoZSBwYXRjaCBlbGVnYW50bHkgYWRkcmVzc2VzIHRoaXMgd2l0aCBgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IChsaW5rID8gbGluay0mZ3Q7bGluay5wcm9nIDogTlVMTCk7YCBhbmQgYSBzdWJzZXF1ZW50IGBpZiAoIW5ld19wcm9nKSByZXR1cm4gLUVJTlZBTDtgIGNoZWNrLiBDbGV2ZXIsIGNvbmNpc2UsIGFuZCBjcnVjaWFsLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgcGFydGljdWxhcmx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgdXN1YWwgY2hlY2tsaXN0OgoKKiAgICoqTm8ga2VybmVsIGRhdGEgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLioqIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KKiAgICoqTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLioqIEFsd2F5cyBhIHBvdGVudGlhbCBwaXRmYWxsLiBHbGFkIHRoYXQmIzM5O3MgY2xlYXIuCiogICAqKk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLioqIENoZWNrZWQuCiogICAqKk5vIGNoYW5nZXMgdGhhdCBjb3VsZCBjcmVhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZHVlIHRvIGNoYW5nZXMgaW4gYm91bmRzIG9yIGxlbmd0aHMuKiogR29vZC4KClRoZSBidWcgZml4ZWQgd2FzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIGtlcm5lbCBvb3BzLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXggYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIG5ldyB2dWxuZXJhYmlsaXRpZXMsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgaGFuZGxlIHRoZXNlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMsIGFuZCBLTVNBTiBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGNvbmNlcm5zIHRoYXQgd291bGQgdHJpZ2dlciBhIEtNU0FOIGNoZWNrLiBUaGlzIGlzIHNvdW5kIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2goKWAgd2hlbiBib3RoIGBwcm9nYCBhbmQgYGxpbmtgIGFyZ3VtZW50cyBhcmUgTlVMTC4gSXQgZ3VhcmRzIHRoZSBkZXJlZmVyZW5jZSBvZiBgbGluay1cdTAwM2VsaW5rLnByb2dgIGFuZCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgaWYgKCFuZXdfcHJvZykgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gU2luY2UgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlICh3aGljaCBpcyBhbHJlYWR5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBoYW5kbGVycyBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzKSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaCgpYCB3aGVuIGJvdGggYHByb2dgIGFuZCBgbGlua2AgYXJndW1lbnRzIGFyZSBOVUxMLiBJdCBndWFyZHMgdGhlIGRlcmVmZXJlbmNlIG9mIGBsaW5rLVx1MDAzZWxpbmsucHJvZ2AgYW5kIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGBpZiAoIW5ld19wcm9nKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBTaW5jZSB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHdoaWNoIGlzIGFscmVhZHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIGhhbmRsZXJzIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MTYuNzI4MjQxOTg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMzIwNTUwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaCgpYCB3aGVuIGJvdGggYHByb2dgIGFuZCBgbGlua2AgYXJndW1lbnRzIGFyZSBOVUxMLiBJdCBndWFyZHMgdGhlIGRlcmVmZXJlbmNlIG9mIGBsaW5rLVxcdTAwM2VsaW5rLnByb2dgIGFuZCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgaWYgKCFuZXdfcHJvZykgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gU2luY2UgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlICh3aGljaCBpcyBhbHJlYWR5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBoYW5kbGVycyBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzKSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNncm91cCBCUEYgYXR0YWNobWVudCBwYXRoIChfX2Nncm91cF9icGZfYXR0YWNoKSB3aGVuIGRldGVybWluaW5nIHRoZSBuZXcgcHJvZ3JhbSB0byBhdHRhY2guIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgYW5kIGNncm91cCBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBzeXNjYWxsIG9wZXJhdGlvbnMgKGUuZy4sIEJQRl9QUk9HX0FUVEFDSCBhbmQgQlBGX0xJTktfQ1JFQVRFKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MTYuNzI4MjQ2NjY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3ODczMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjVlNjk1OTc4OTMyNjEwYzNmYjQzNzMwMmZiOTdiMDRiYzBiMDk4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggMTQ5NjcyYzc2YzQ5Yy4uMTU2ZmM0ZDYwZGFmNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTQsNyArODE0LDcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4tXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXFx1MDAzZWxpbmsucHJvZztcXG4rXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IChsaW5rID8gbGluay1cXHUwMDNlbGluay5wcm9nIDogTlVMTCk7XFxuIFxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG4gXFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuQEAgLTgzNCw2ICs4MzQsOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpXFxuIFxcdFxcdC8qIHJlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhICovXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIW5ld19wcm9nKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQpO1xcbiBcXHRpZiAoYXR5cGUgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzoxNy45NTY3OTk5MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUyMjU0Njg0ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjZ3JvdXAgQlBGIGF0dGFjaG1lbnQgcGF0aCAoX19jZ3JvdXBfYnBmX2F0dGFjaCkgd2hlbiBkZXRlcm1pbmluZyB0aGUgbmV3IHByb2dyYW0gdG8gYXR0YWNoLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIGFuZCBjZ3JvdXAgbG9naWMgcmVhY2hhYmxlIHZpYSBCUEYgc3lzY2FsbCBvcGVyYXRpb25zIChlLmcuLCBCUEZfUFJPR19BVFRBQ0ggYW5kIEJQRl9MSU5LX0NSRUFURSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1ZTY5NTk3ODkzMjYxMGMzZmI0MzczMDJmYjk3YjA0YmMwYjA5ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDE0OTY3MmM3NmM0OWMuLjE1NmZjNGQ2MGRhZjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODE0LDcgKzgxNCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4rXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuQEAgLTgzNCw2ICs4MzQsOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghIXJlcGxhY2VfcHJvZyAhPSAhIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpXG4gXHRcdC8qIHJlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhICovXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFuZXdfcHJvZylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XG4gXHRpZiAoYXR5cGUgXHUwMDNjIDApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzoxNy45NTY4MDE1NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzIzOTA1NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNncm91cCBpbnRlZ3JhdGlvbiwganVkZ2luZyBieSB0aGUgcGF0aCBwcm92aWRlZDogYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9uIGluIHRoYXQgZmlsZS4gSSdsbCBuZWVkIHRvIGxvY2F0ZSBsaW5lIDgxNCBhcHByb3hpbWF0ZWx5LCB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBtaWdodCByZXNpZGUuXG5cbkdpdmVuIHRoaXMgY29udGV4dCwgSSdsbCBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRlbnQgb2YgYGtlcm5lbC9icGYvY2dyb3VwLmNgLCBzbyBJIGNhbiBzZWUgd2hhdCdzIGFjdHVhbGx5IGJlaW5nIHByb3Bvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzoyNy42ODA3MDg4NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0ICogQGlkX29yX2ZkOiBSZWxhdGl2ZSBwcm9nIGlkIG9yIGZkXFxuIDgwMTpcXHQgKiBAcmV2aXNpb246IGJwZl9wcm9nX2xpc3QgcmV2aXNpb25cXG4gODAyOlxcdCAqXFxuIDgwMzpcXHQgKiBFeGFjdGx5IG9uZSBvZiBAcHJvZyBvciBAbGluayBjYW4gYmUgbm9uLW51bGwuXFxuIDgwNDpcXHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLlxcbiA4MDU6XFx0ICovXFxuIDgwNjpcXHRzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gODA3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxcbiA4MDg6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIDgwOTpcXHRcXHRcXHRcXHQgICAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSwgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsXFxuIDgxMDpcXHRcXHRcXHRcXHQgICAgICAgdTY0IHJldmlzaW9uKVxcbiA4MTE6XFx0e1xcbiA4MTI6XFx0XFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFxcdTAwMjYgKEJQRl9GX0FMTE9XX09WRVJSSURFIHwgQlBGX0ZfQUxMT1dfTVVMVEkpKTtcXG4gODEzOlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xcbiA4MTQ6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNTpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNjpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNzpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVxcdTAwM2VsaW5rLnByb2cgOiBOVUxMKTtcXG4gODE4OlxcdFxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG4gODE5OlxcdFxcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcXG4gODIwOlxcdFxcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcXG4gODIxOlxcdFxcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcXG4gODIyOlxcdFxcdGludCBlcnI7XFxuIDgyMzpcXHRcXG4gODI0OlxcdFxcdGlmICgoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfT1ZFUlJJREUpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkgfHxcXG4gODI1OlxcdFxcdCAgICAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkpXFxuIDgyNjpcXHRcXHRcXHQvKiBpbnZhbGlkIGNvbWJpbmF0aW9uICovXFxuIDgyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODI4OlxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQkVGT1JFIHwgQlBGX0ZfQUZURVIpKSlcXG4gODI5OlxcdFxcdFxcdC8qIG9ubHkgZWl0aGVyIHJlcGxhY2Ugb3IgaW5zZXJ0aW9uIHdpdGggYmVmb3JlL2FmdGVyICovXFxuIDgzMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODMxOlxcdFxcdGlmIChsaW5rIFxcdTAwMjZcXHUwMDI2IChwcm9nIHx8IHJlcGxhY2VfcHJvZykpXFxuIDgzMjpcXHRcXHRcXHQvKiBvbmx5IGVpdGhlciBsaW5rIG9yIHByb2cvcmVwbGFjZV9wcm9nIGNhbiBiZSBzcGVjaWZpZWQgKi9cXG4gODMzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MzQ6XFx0XFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpXFxuIDgzNTpcXHRcXHRcXHQvKiByZXBsYWNlX3Byb2cgaW1wbGllcyBCUEZfRl9SRVBMQUNFLCBhbmQgdmljZSB2ZXJzYSAqL1xcbiA4MzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzNzpcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiA4Mzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzOTpcXHRcXG4gODQwOlxcdFxcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQpO1xcbiA4NDE6XFx0XFx0aWYgKGF0eXBlIFxcdTAwM2MgMClcXG4gODQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NDM6XFx0XFx0aWYgKHJldmlzaW9uIFxcdTAwMjZcXHUwMDI2IHJldmlzaW9uICE9IGNncnAtXFx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdKVxcbiA4NDQ6XFx0XFx0XFx0cmV0dXJuIC1FU1RBTEU7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdHByb2dzID0gXFx1MDAyNmNncnAtXFx1MDAzZWJwZi5wcm9nc1thdHlwZV07XFxuIDg0NzpcXHRcXG4gODQ4OlxcdFxcdGlmICghaGllcmFyY2h5X2FsbG93c19hdHRhY2goY2dycCwgYXR5cGUpKVxcbiA4NDk6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0aWYgKCFobGlzdF9lbXB0eShwcm9ncykgXFx1MDAyNlxcdTAwMjYgY2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSAhPSBzYXZlZF9mbGFncylcXG4gODUyOlxcdFxcdFxcdC8qIERpc2FsbG93IGF0dGFjaGluZyBub24tb3ZlcnJpZGFibGUgb24gdG9wXFxuIDg1MzpcXHRcXHRcXHQgKiBvZiBleGlzdGluZyBvdmVycmlkYWJsZSBpbiB0aGlzIGNncm91cC5cXG4gODU0OlxcdFxcdFxcdCAqIERpc2FsbG93IGF0dGFjaGluZyBtdWx0aS1wcm9nIGlmIG92ZXJyaWRhYmxlIG9yIG5vbmVcXG4gODU1OlxcdFxcdFxcdCAqL1xcbiA4NTY6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0aWYgKHByb2dfbGlzdF9sZW5ndGgocHJvZ3MsIE5VTEwpIFxcdTAwM2U9IEJQRl9DR1JPVVBfTUFYX1BST0dTKVxcbiA4NTk6XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0cGwgPSBmaW5kX2F0dGFjaF9lbnRyeShwcm9ncywgcHJvZywgbGluaywgcmVwbGFjZV9wcm9nLFxcbiA4NjI6XFx0XFx0XFx0XFx0ICAgICAgIGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpO1xcbiA4NjM6XFx0XFx0aWYgKElTX0VSUihwbCkpXFxuIDg2NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwbCk7XFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdGlmIChicGZfY2dyb3VwX3N0b3JhZ2VzX2FsbG9jKHN0b3JhZ2UsIG5ld19zdG9yYWdlLCB0eXBlLFxcbiA4Njc6XFx0XFx0XFx0XFx0XFx0ICAgICAgcHJvZyA/IDogbGluay1cXHUwMDNlbGluay5wcm9nLCBjZ3JwKSlcXG4gODY4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjMzOjI3LjY4MDg1MjkzN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MjQ5NzczMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCBjb2RlIHBhdGhzIGludm9rZSBpdCB0byBncmFzcCBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS5cblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYmFzaWNzOiBJJ2xsIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaC4gQSBzaW1wbGUgYGdyZXBgIGlzIHBlcmZlY3QgdG8gbG9jYXRlIHRoZSBjYWxsIHNpdGVzLiBJJ2xsIHNlYXJjaCBmb3IgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgbWFuYWdlYWJsZSBsaXN0IG9mIHRoZSBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgdGhhdCB1c2UgaXQsIGFuZCBJIGNhbiBkcmlsbCBkb3duIGZyb20gdGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGUgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MjkuNTA1ODMxODM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODEwODE2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTc3MT1zdGF0aWMgaW50IGluc2VydF9wbF90b19obGlzdChzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsIHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzkyOiAqIF9fY2dyb3VwX2JwZl9hdHRhY2goKSAtIEF0dGFjaCB0aGUgcHJvZ3JhbSBvciB0aGUgbGluayB0byBhIGNncm91cCwgYW5kXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTMtICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA1LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODA2OnN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz05Mzc9c3RhdGljIGludCBjZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy05NDUtXFx0Y2dyb3VwX2xvY2soKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NjpcXHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy05NDctXFx0XFx0XFx0XFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzozMS4wODY5MTc5NjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzkyNTY0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBjZ3JvdXBfYnBmX2F0dGFjaCBDYWxsc2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb2RlIGFuZCB1bmRlcnN0YW5kIGhvdyBgY2dyb3VwX2JwZl9hdHRhY2hgIGlzIGJlaW5nIHVzZWQsIGFsb25nIHdpdGggYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiBhbGwgdGhlIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdGhlc2UgQlBGIHByb2dyYW1zIGFyZSBiZWluZyBhdHRhY2hlZCB0byBjZ3JvdXBzLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBkaXJlY3QgY2FsbGVycyBvZiBgY2dyb3VwX2JwZl9hdHRhY2hgIGl0c2VsZiwgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGVyZS4gSSBhbHNvIGtub3cgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBzbyBJIHdpbGwgZXhwbG9yZSB0aG9zZSBhcyB3ZWxsIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF0dGFjaG1lbnQgcHJvY2VzcyBhbmQgaG93IGl0IGlzIGVtcGxveWVkIGFjcm9zcyB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQ4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MzIuODc5NDg1ODU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTM3MTU4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX2JwZl9hdHRhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLWRlZnMuaD0xMT1zdHJ1Y3QgYnBmX3Byb2dfYXJyYXk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAtZGVmcy5oLTE5LVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC1kZWZzLmg6MjA6ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIHtcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAtZGVmcy5oLTIxLVxcdENHUk9VUF9CUEZfQVRUQUNIX1RZUEVfSU5WQUxJRCA9IC0xLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MzA9dW5zaWduZWQgaW50IF9fY2dyb3VwX2JwZl9ydW5fbHNtX2N1cnJlbnQoY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMzctXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6Mzg6c3RhdGljIGlubGluZSBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDozOTp0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTExNT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMTYtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMTc6XFx0XFx0XFx0XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMTgtXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTE5PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zayhzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTIwOlxcdFxcdFxcdCAgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpO1xcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEyMS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMjI9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMjQtXFx0XFx0XFx0XFx0ICAgICAgaW50ICp1YWRkcmxlbixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMjU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEyNi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICp0X2N0eCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzMC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqc29ja19vcHMsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTMxOlxcdFxcdFxcdFxcdCAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzItXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTMzPWludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEzNDpcXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTM1LVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEzNj1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTM4LVxcdFxcdFxcdFxcdCAgIGNoYXIgKipidWYsIHNpemVfdCAqcGNvdW50LCBsb2ZmX3QgKnBwb3MsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTM5OlxcdFxcdFxcdFxcdCAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTQwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTgwPXN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTgxOlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTE4Mi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE3NDE9c3RydWN0IGJwZl9wcm9nX2F1eCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MTUtXFx0dTMyIHZlcmlmaWVkX2luc25zO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MTgxNjpcXHRpbnQgY2dyb3VwX2F0eXBlOyAvKiBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgKi9cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MTctXFx0c3RydWN0IGJwZl9tYXAgKmNncm91cF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV07XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTY1PXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX2xzbV9hdHlwZSBjZ3JvdXBfbHNtX2F0eXBlW0NHUk9VUF9MU01fTlVNXTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTY2LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6Njc6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjgte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03My0jZWxzZVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzQ6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzUte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz04ND1icGZfcHJvZ19ydW5fYXJyYXlfY2coY29uc3Qgc3RydWN0IGNncm91cF9icGYgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4NTpcXHRcXHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04Ni1cXHRcXHQgICAgICBjb25zdCB2b2lkICpjdHgsIGJwZl9wcm9nX3J1bl9mbiBydW5fcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYyPXVuc2lnbmVkIGludCBfX2Nncm91cF9icGZfcnVuX2xzbV9jdXJyZW50KGNvbnN0IHZvaWQgKmN0eCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgxLSNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgyOnN0YXRpYyBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4My1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODktXFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9MU01fQ0dST1VQKVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkwOlxcdFxcdHJldHVybiB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGF0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MS1cXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIwPXZvaWQgYnBmX2Nncm91cF9hdHlwZV9wdXQoaW50IGNncm91cF9hdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjMyLSNlbHNlXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzM6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM0LWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzNi1cXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX0xTTV9DR1JPVVApXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzc6XFx0XFx0cmV0dXJuIHRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM4LVxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NDI0PXN0YXRpYyBib29sIGhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0MjU6XFx0XFx0XFx0XFx0ICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQyNi17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTQ1Mz1zdGF0aWMgaW50IGNvbXB1dGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0NTQ6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNDU1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcHJvZ19hcnJheSAqKmFycmF5KVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz01MTE9c3RhdGljIHZvaWQgYWN0aXZhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1MTI6XFx0XFx0XFx0XFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy01MTMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKm9sZF9hcnJheSlcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NTkxPXN0YXRpYyBpbnQgdXBkYXRlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NTkyOlxcdFxcdFxcdFxcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNTkzLXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgxNy1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVxcdTAwM2VsaW5rLnByb2cgOiBOVUxMKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgxODpcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MTktXFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy05MzYtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo5Mzc6c3RhdGljIGludCBjZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM4LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ1LVxcdGNncm91cF9sb2NrKCk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo5NDY6XFx0cmV0ID0gX19jZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIGxpbmssIHR5cGUsIGZsYWdzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ3LVxcdFxcdFxcdFxcdCAgaWRfb3JfZmQsIHJldmlzaW9uKTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9OTUyPXN0YXRpYyBpbnQgZWZmZWN0aXZlX3Byb2dfcG9zKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo5NTM6XFx0XFx0XFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTU0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19saXN0ICp0YXJnZXRfcGwpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwMDQ9c3RhdGljIHZvaWQgcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTAwNTpcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDA2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTA1NT1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNTgte1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA1OTpcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDYwLVxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTg9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjExNTk6XFx0XFx0XFx0XFx0ICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTYwLXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTE5OT1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9kZXRhY2goc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjAyLXtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyMDM6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTIwNC1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMjc0PXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjgwLVxcdGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUgPSBhdHRyLVxcdTAwM2VxdWVyeS5hdHRhY2hfdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyODE6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGZyb21fYXR5cGUsIHRvX2F0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI4MjpcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjgzLVxcdHN0cnVjdCBicGZfcHJvZ19hcnJheSAqZWZmZWN0aXZlO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzAwLVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMzAxOlxcdFxcdGZyb21fYXR5cGUgPSB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKHR5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTMwMi1cXHRcXHRpZiAoZnJvbV9hdHlwZSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEzOTA9aW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE0MDktXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNDEwOlxcdHJldCA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgTlVMTCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE0MTEtXFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUsIGF0dHItXFx1MDAzZWF0dGFjaF9mbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTU0Mj1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTcwLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU3MTpcXHRlcnIgPSBjZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBOVUxMLCBOVUxMLCBsaW5rLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU3Mi1cXHRcXHRcXHRcXHRsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlLCBCUEZfRl9BTExPV19NVUxUSSB8IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNjI2PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9za2Ioc3RydWN0IHNvY2sgKnNrLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTYyNy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTYyODpcXHRcXHRcXHRcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjI5LXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTcwND1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2soc3RydWN0IHNvY2sgKnNrLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTcwNTpcXHRcXHRcXHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTcwNi17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MzI9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3MzQtXFx0XFx0XFx0XFx0ICAgICAgaW50ICp1YWRkcmxlbixcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE3MzU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTczNi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICp0X2N0eCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc4Nj1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc4Ny1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqc29ja19vcHMsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzg4OlxcdFxcdFxcdFxcdCAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc4OS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3OTc9aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzk4OlxcdFxcdFxcdFxcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc5OS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5NTQ9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTk1Ni1cXHRcXHRcXHRcXHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTk1NzpcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MzQuNDczMjA1NDc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1NDE5MDg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gQlBGIEF0dGFjaG1lbnQgUG9pbnRzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGZvciBCUEYgYXR0YWNobWVudCBwb2ludHMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGV5J3JlIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLiBJIHNlZSB0aGF0IGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIGtub3cgdGhleSdyZSBjYWxsZWQgZnJvbSBgc3lzY2FsbC5jYCwgdGhlIHVzdWFsIHN1c3BlY3QgZm9yIHN5c2NhbGwgaGFuZGxpbmcuIE5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiB0aGUgYWN0dWFsIGF0dGFjaG1lbnQgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIHdpdGhpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBzY2FuIHRoZSBhcmVhIGFyb3VuZCBsaW5lcyAxMzkwIHRvIDE1ODAsIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGxvZ2ljIGZvciBob3cgQlBGIHByb2dyYW1zIG9yIGxpbmtzIGdldCBhdHRhY2hlZCB0byBjZ3JvdXBzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciB3aGVyZSB0aGluZ3MgY291bGQgcG90ZW50aWFsbHkgZ28gd3JvbmcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzozNy40MjczOTkyNDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5MDpcXHRpbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4xMzkxOlxcdFxcdFxcdFxcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjEzOTI6XFx0e1xcbjEzOTM6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2cgPSBOVUxMO1xcbjEzOTQ6XFx0XFx0c3RydWN0IGNncm91cCAqY2dycDtcXG4xMzk1OlxcdFxcdGludCByZXQ7XFxuMTM5NjpcXHRcXG4xMzk3OlxcdFxcdGNncnAgPSBjZ3JvdXBfZ2V0X2Zyb21fZmQoYXR0ci1cXHUwMDNldGFyZ2V0X2ZkKTtcXG4xMzk4OlxcdFxcdGlmIChJU19FUlIoY2dycCkpXFxuMTM5OTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjZ3JwKTtcXG4xNDAwOlxcdFxcbjE0MDE6XFx0XFx0aWYgKChhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkgXFx1MDAyNlxcdTAwMjZcXG4xNDAyOlxcdFxcdCAgICAoYXR0ci1cXHUwMDNlYXR0YWNoX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpIHtcXG4xNDAzOlxcdFxcdFxcdHJlcGxhY2VfcHJvZyA9IGJwZl9wcm9nX2dldF90eXBlKGF0dHItXFx1MDAzZXJlcGxhY2VfYnBmX2ZkLCBwdHlwZSk7XFxuMTQwNDpcXHRcXHRcXHRpZiAoSVNfRVJSKHJlcGxhY2VfcHJvZykpIHtcXG4xNDA1OlxcdFxcdFxcdFxcdGNncm91cF9wdXQoY2dycCk7XFxuMTQwNjpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXBsYWNlX3Byb2cpO1xcbjE0MDc6XFx0XFx0XFx0fVxcbjE0MDg6XFx0XFx0fVxcbjE0MDk6XFx0XFxuMTQxMDpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIE5VTEwsXFxuMTQxMTpcXHRcXHRcXHRcXHRcXHRhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSwgYXR0ci1cXHUwMDNlYXR0YWNoX2ZsYWdzLFxcbjE0MTI6XFx0XFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlcmVsYXRpdmVfZmQsIGF0dHItXFx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcXG4xNDEzOlxcdFxcbjE0MTQ6XFx0XFx0aWYgKHJlcGxhY2VfcHJvZylcXG4xNDE1OlxcdFxcdFxcdGJwZl9wcm9nX3B1dChyZXBsYWNlX3Byb2cpO1xcbjE0MTY6XFx0XFx0Y2dyb3VwX3B1dChjZ3JwKTtcXG4xNDE3OlxcdFxcdHJldHVybiByZXQ7XFxuMTQxODpcXHR9XFxuMTQxOTpcXHRcXG4xNDIwOlxcdGludCBjZ3JvdXBfYnBmX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxuMTQyMTpcXHR7XFxuMTQyMjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuMTQyMzpcXHRcXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xcbjE0MjQ6XFx0XFx0aW50IHJldDtcXG4xNDI1OlxcdFxcbjE0MjY6XFx0XFx0Y2dycCA9IGNncm91cF9nZXRfZnJvbV9mZChhdHRyLVxcdTAwM2V0YXJnZXRfZmQpO1xcbjE0Mjc6XFx0XFx0aWYgKElTX0VSUihjZ3JwKSlcXG4xNDI4OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGNncnApO1xcbjE0Mjk6XFx0XFxuMTQzMDpcXHRcXHRwcm9nID0gYnBmX3Byb2dfZ2V0X3R5cGUoYXR0ci1cXHUwMDNlYXR0YWNoX2JwZl9mZCwgcHR5cGUpO1xcbjE0MzE6XFx0XFx0aWYgKElTX0VSUihwcm9nKSlcXG4xNDMyOlxcdFxcdFxcdHByb2cgPSBOVUxMO1xcbjE0MzM6XFx0XFxuMTQzNDpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX2RldGFjaChjZ3JwLCBwcm9nLCBhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSwgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24pO1xcbjE0MzU6XFx0XFx0aWYgKHByb2cpXFxuMTQzNjpcXHRcXHRcXHRicGZfcHJvZ19wdXQocHJvZyk7XFxuMTQzNzpcXHRcXG4xNDM4OlxcdFxcdGNncm91cF9wdXQoY2dycCk7XFxuMTQzOTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE0NDA6XFx0fVxcbjE0NDE6XFx0XFxuMTQ0MjpcXHRzdGF0aWMgdm9pZCBicGZfY2dyb3VwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuMTQ0MzpcXHR7XFxuMTQ0NDpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpjZ19saW5rID1cXG4xNDQ1OlxcdFxcdFxcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX2Nncm91cF9saW5rLCBsaW5rKTtcXG4xNDQ2OlxcdFxcdHN0cnVjdCBjZ3JvdXAgKmNnO1xcbjE0NDc6XFx0XFxuMTQ0ODpcXHRcXHQvKiBsaW5rIG1pZ2h0IGhhdmUgYmVlbiBhdXRvLWRldGFjaGVkIGJ5IGR5aW5nIGNncm91cCBhbHJlYWR5LFxcbjE0NDk6XFx0XFx0ICogaW4gdGhhdCBjYXNlIG91ciB3b3JrIGlzIGRvbmUgaGVyZVxcbjE0NTA6XFx0XFx0ICovXFxuMTQ1MTpcXHRcXHRpZiAoIWNnX2xpbmstXFx1MDAzZWNncm91cClcXG4xNDUyOlxcdFxcdFxcdHJldHVybjtcXG4xNDUzOlxcdFxcbjE0NTQ6XFx0XFx0Y2dyb3VwX2xvY2soKTtcXG4xNDU1OlxcdFxcbjE0NTY6XFx0XFx0LyogcmUtY2hlY2sgY2dyb3VwIHVuZGVyIGxvY2sgYWdhaW4gKi9cXG4xNDU3OlxcdFxcdGlmICghY2dfbGluay1cXHUwMDNlY2dyb3VwKSB7XFxuMTQ1ODpcXHRcXHRcXHRjZ3JvdXBfdW5sb2NrKCk7XFxuMTQ1OTpcXHRcXHRcXHRyZXR1cm47XFxuMTQ2MDpcXHRcXHR9XFxuMTQ2MTpcXHRcXG4xNDYyOlxcdFxcdFdBUk5fT04oX19jZ3JvdXBfYnBmX2RldGFjaChjZ19saW5rLVxcdTAwM2VjZ3JvdXAsIE5VTEwsIGNnX2xpbmssXFxuMTQ2MzpcXHRcXHRcXHRcXHRcXHQgICAgbGluay1cXHUwMDNlYXR0YWNoX3R5cGUsIDApKTtcXG4xNDY0OlxcdFxcdGlmIChsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcXG4xNDY1OlxcdFxcdFxcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShjZ19saW5rLVxcdTAwM2VsaW5rLnByb2cpO1xcbjE0NjY6XFx0XFxuMTQ2NzpcXHRcXHRjZyA9IGNnX2xpbmstXFx1MDAzZWNncm91cDtcXG4xNDY4OlxcdFxcdGNnX2xpbmstXFx1MDAzZWNncm91cCA9IE5VTEw7XFxuMTQ2OTpcXHRcXG4xNDcwOlxcdFxcdGNncm91cF91bmxvY2soKTtcXG4xNDcxOlxcdFxcbjE0NzI6XFx0XFx0Y2dyb3VwX3B1dChjZyk7XFxuMTQ3MzpcXHR9XFxuMTQ3NDpcXHRcXG4xNDc1OlxcdHN0YXRpYyB2b2lkIGJwZl9jZ3JvdXBfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4xNDc2OlxcdHtcXG4xNDc3OlxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmNnX2xpbmsgPVxcbjE0Nzg6XFx0XFx0XFx0Y29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfY2dyb3VwX2xpbmssIGxpbmspO1xcbjE0Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjMzOjM3LjQyNzU5ODAxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDU0NzA2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gQlBGIENncm91cCBBdHRhY2htZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoZSBCUEYgY2dyb3VwIGF0dGFjaG1lbnQgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGluIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gVGhlIGNvcmUgaXNzdWUgc3RlbXMgZnJvbSBob3cgYG5ld19wcm9nYCBpcyBiZWluZyBhc3NpZ25lZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIGEgY3Jhc2ggaWYgYm90aCBgcHJvZ2AgYW5kIGBsaW5rYCB3ZXJlIE5VTEwuIFRoZSBwcm9ibGVtYXRpYyBsaW5lIHdhcyBgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO2AuIElmIGJvdGggd2VyZSBOVUxMLCB0aGUgdGVybmFyeSBvcGVyYXRvciB3b3VsZCBldmFsdWF0ZSB0byBgbGluay1cdTAwM2VsaW5rLnByb2dgLCBkZXJlZmVyZW5jaW5nIGEgTlVMTCBgbGlua2AgcG9pbnRlciBhbmQgY2F1c2luZyBhIGNyYXNoIGJlZm9yZSBhbnkgZXJyb3IgY2hlY2tzIHdlcmUgcmVhY2hlZC4gSSBjYW4gc2VlIHRoaXMgY2xlYXJseSwgdGhlIGNvZGUgd291bGQgdHJ5IHRvIGRlcmVmZXJlbmNlIGEgbnVsbCBwb2ludGVyIHdoZW4gYGxpbmtgIHdhcyBgTlVMTGAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBuZXN0ZWQgY29uZGl0aW9uYWw6IGBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO2AsIHdoaWNoIG5vdyBzYWZlbHkgaGFuZGxlcyB0aGUgTlVMTCBgbGlua2AgY2FzZSBieSBhc3NpZ25pbmcgYE5VTExgIHRvIGBuZXdfcHJvZ2AuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UuIElzIHRoaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgaWYgc28sIGhvdz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIHBhdGguIFdoYXQgc3ltYm9scyBzaG91bGQgSSBmb2N1cyBvbj8gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy5cblxuTGV0J3Mgc2VlLCB3aGF0IGFib3V0IHN5c3RlbSBjYWxscz8gVGhlIGZ1bmN0aW9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBjb21lcyB0byBtaW5kLiBJdCBjYWxscyBgY2dyb3VwX2JwZl9hdHRhY2hgIGRpcmVjdGx5LiBTbyBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaG93IGl0J3MgdXNlZC4gVGhpcyBtaWdodCByZXZlYWwgaWYgdGhlIHZ1bG5lcmFiaWxpdHkgaXMgZGlyZWN0bHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSBzeXNjYWxscy4gU3BlY2lmaWNhbGx5IEkgbmVlZCB0byBkZXRlcm1pbmUgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIGBwcm9nYCBjYW4gYmUgTlVMTCBvciBub3QgaW5zaWRlIHRoZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo0MS40ODIzMTE2ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTI3MTQ1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xODA9c3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQxNy1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0MTg6aW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtNDE5LVxcdFxcdFxcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTQzMD1zdGF0aWMgaW5saW5lIHZvaWQgY2dyb3VwX2JwZl9saWZldGltZV9ub3RpZmllcl9pbml0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MzQtXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6NDM1OnN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtNDM2LVxcdFxcdFxcdFxcdFxcdCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEzNzk9c3RhdGljIGludCBjZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzg5LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MDppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzOTEtXFx0XFx0XFx0ICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NTc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNC1cXHRpZiAoaXNfY2dyb3VwX3Byb2dfdHlwZShwdHlwZSwgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUsIHRydWUpKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDYxNTpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGF0dHIsIHB0eXBlLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjE2LVxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo0Mi45MzUwMzMyMTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUyMzIxNjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBCUEYgYW5kIGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIExpbmsgQXR0YWNobWVudCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGludG8gQlBGIGxpbmsgYXR0YWNobWVudHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBjb2RlIHJlc2lkZXMsIGFuZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoaXMgZmlsZSBvZnRlbiBjb250YWlucyB0aGUgY29yZSBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgc291bmRzIGxpa2UgaXQnZCBmYWxsIHVuZGVyIHRoYXQgY2F0ZWdvcnkuIEJ1dCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGNhbiBzb21ldGltZXMgYmUgZGlzdHJpYnV0ZWQsIGFuZCB3aXRoIEJQRiBiZWluZyB0aGUgYnJvYWQgdGhpbmcgaXQgaXMsIEkgY2FuJ3QgYmUgKmNvbXBsZXRlbHkqIGNlcnRhaW4gaXQncyBpbiB0aGF0IGZpbGUsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gSSBuZWVkIHRvIGtlZXAgYW4gb3BlbiBtaW5kIHRvIHRoZSBwb3NzaWJpbHR5IHRoYXQgaXQgY291bGQgYmUgaW4gYSBzaWJsaW5nIG9yIHN1cHBvcnQgZmlsZS4gSSdsbCBjaGVjayBgc3lzY2FsbC5jYCBmaXJzdCwgYnV0IEknbGwgbWVudGFsbHkga2VlcCBvdGhlciBwb3RlbnRpYWwgbG9jYXRpb25zIG9wZW4uIEJlc3QgdG8gYmUgc3lzdGVtYXRpYyBmcm9tIHRoZSBvdXRzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjI2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6NDYuNDU4MjUzMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTcxMDI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTQyMD1pbnQgY2dyb3VwX2JwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MjEtXFx0XFx0XFx0ICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0MjI6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtNDIzLWludCBjZ3JvdXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD00NDI9c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQ0Ny1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0NDg6c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00NDktXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUyNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU0MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1NDI6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NDMte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTc5Mz1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MjAtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4MjE6XFx0XFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODIyLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg0MS1cXHRcXHRlbHNlIGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODQyOlxcdFxcdFxcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg0My1cXHRcXHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6NDcuOTEzOTcwMTc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzkyMjg0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgY2dyb3VwX2JwZl9hdHRhY2hgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbiwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBcmUgdGhlcmUgYW55IG90aGVyIGxvY2F0aW9ucyBjYWxsaW5nIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucz8gV2hlcmUgZWxzZSBhcmUgdGhleSBiZWluZyB1c2VkIGluIHRoZSBrZXJuZWw/XCIuXG5cbkknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG9idmlvdXMgbG9jYXRpb246IGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24sIGVzcGVjaWFsbHkgbmVhciB0aGUgZGVmaW5pdGlvbiBvZiBgY2dyb3VwX2JwZl9hdHRhY2hgIGl0c2VsZi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVudCBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGhpbiB0aGUgYnJvYWRlciBjZ3JvdXAgYW5kIEJQRiBmcmFtZXdvcmsuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBmdWxsZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo1MS45OTMyMDA5ODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMwOlxcdFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2cGwtXFx1MDAzZW5vZGUpO1xcbiA5MzE6XFx0XFx0XFx0a2ZyZWUocGwpO1xcbiA5MzI6XFx0XFx0fVxcbiA5MzM6XFx0XFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcXG4gOTM0OlxcdFxcdHJldHVybiBlcnI7XFxuIDkzNTpcXHR9XFxuIDkzNjpcXHRcXG4gOTM3OlxcdHN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gOTM4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4gOTM5OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcXG4gOTQwOlxcdFxcdFxcdFxcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSxcXG4gOTQxOlxcdFxcdFxcdFxcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbilcXG4gOTQyOlxcdHtcXG4gOTQzOlxcdFxcdGludCByZXQ7XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdFxcdGNncm91cF9sb2NrKCk7XFxuIDk0NjpcXHRcXHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXFxuIDk0NzpcXHRcXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuIDk0ODpcXHRcXHRjZ3JvdXBfdW5sb2NrKCk7XFxuIDk0OTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA5NTA6XFx0fVxcbiA5NTE6XFx0XFxuIDk1MjpcXHRzdGF0aWMgaW50IGVmZmVjdGl2ZV9wcm9nX3BvcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiA5NTM6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbiA5NTQ6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2xpc3QgKnRhcmdldF9wbClcXG4gOTU1OlxcdHtcXG4gOTU2OlxcdFxcdGludCBjbnQgPSAwLCBwcmVvcmRlcl9jbnQgPSAwLCBmc3RhcnQsIGJzdGFydCwgaW5pdF9ic3RhcnQsIHBvcyA9IC0xO1xcbiA5NTc6XFx0XFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xcbiA5NTg6XFx0XFx0c3RydWN0IGNncm91cCAqcCA9IGNncnA7XFxuIDk1OTpcXHRcXG4gOTYwOlxcdFxcdC8qIGNvdW50IGVmZmVjdGl2ZSBwcm9ncmFtcyB0byBmaW5kIHdoZXJlIHRoZSBwcmVvcmRlciByZWdpb24gZW5kcyAqL1xcbiA5NjE6XFx0XFx0ZG8ge1xcbiA5NjI6XFx0XFx0XFx0aWYgKGNudCA9PSAwIHx8IChwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKVxcbiA5NjM6XFx0XFx0XFx0XFx0Y250ICs9IHByb2dfbGlzdF9sZW5ndGgoXFx1MDAyNnAtXFx1MDAzZWJwZi5wcm9nc1thdHlwZV0sIFxcdTAwMjZwcmVvcmRlcl9jbnQpO1xcbiA5NjQ6XFx0XFx0XFx0cCA9IGNncm91cF9wYXJlbnQocCk7XFxuIDk2NTpcXHRcXHR9IHdoaWxlIChwKTtcXG4gOTY2OlxcdFxcbiA5Njc6XFx0XFx0LyogcmVwbGF5IGNvbXB1dGVfZWZmZWN0aXZlX3Byb2dzKCkgcGxhY2VtZW50IGFuZCByZWNvcmQgdGFyZ2V0J3Mgc2xvdCAqL1xcbiA5Njg6XFx0XFx0Y250ID0gMDtcXG4gOTY5OlxcdFxcdHAgPSBjZ3JwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo1MS45OTMzMjY5NDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1MDE1NTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBDZ3JvdXAgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYENPTkZJR2Agb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIG9idmlvdXMgcGxhY2VzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gc2VlIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncy4gVGhlbiwgSSdsbCBtb3ZlIG9uIHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLCBvciBwb3NzaWJseSBldmVuIGBpbml0L0tjb25maWdgIOKAkyB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSDigJMgdG8gc2VlIGlmIHRoZSByZWxldmFudCBmZWF0dXJlcyBoYXZlIHRoZWlyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGRlZmluZWQuIEdvdHRhIHRyYWNrIGRvd24gdGhvc2UgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgd2hhdCdzICphY3R1YWxseSogZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6NTMuOTQzNDg2MDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzk1NDYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTM4PWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfQ0dST1VQX0JQRikgKz0gY2dyb3VwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQwLWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTg9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE3Mi1cXHRcXHRwb3MgPSBlZmZlY3RpdmVfcHJvZ19wb3MoZGVzYywgYXR5cGUsIHBsKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjExNzM6XFx0XFx0Lyogbm8gbGluayBvciBwcm9nIG1hdGNoLCBza2lwIHRoZSBjZ3JvdXAgb2YgdGhpcyBsYXllciAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE3NC1cXHRcXHRpZiAocG9zIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0xNS0gKiAgMy4gV2FsayB0aGUgYW5jZXN0b3JzIG9mIGEgY2dyb3VwLlxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoxNjogKiAgNC4gU2hvdyB0aGUgZ2l2ZW4gY2dyb3VwIG9ubHkuXFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTE3LSAqICA1LiBXYWxrIHRoZSBjaGlsZHJlbiBvZiBhIGdpdmVuIHBhcmVudCBjZ3JvdXAuXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MTY3PXN0YXRpYyBpbnQgY2dyb3VwX2l0ZXJfc2VxX2luaXQodm9pZCAqcHJpdiwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMTgwLVxcdHAtXFx1MDAzZXZpc2l0ZWRfYWxsID0gZmFsc2U7XFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jOjE4MTpcXHRwLVxcdTAwM2VvcmRlciA9IGF1eC1cXHUwMDNlY2dyb3VwLm9yZGVyO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0xODItXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MTk5PXN0YXRpYyBpbnQgYnBmX2l0ZXJfYXR0YWNoX2Nncm91cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjA0LVxcdHU2NCBpZCA9IGxpbmZvLVxcdTAwM2VjZ3JvdXAuY2dyb3VwX2lkO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyMDU6XFx0aW50IG9yZGVyID0gbGluZm8tXFx1MDAzZWNncm91cC5vcmRlcjtcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjA2LVxcdHN0cnVjdCBjZ3JvdXAgKmNncnA7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjMyLVxcdGF1eC1cXHUwMDNlY2dyb3VwLnN0YXJ0ID0gY2dycDtcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjMzOlxcdGF1eC1cXHUwMDNlY2dyb3VwLm9yZGVyID0gb3JkZXI7XFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTIzNC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYz0yNDI9c3RhdGljIHZvaWQgYnBmX2l0ZXJfY2dyb3VwX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4LFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTI2My1zaG93X29yZGVyOlxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyNjQ6XFx0aWYgKGF1eC1cXHUwMDNlY2dyb3VwLm9yZGVyID09IEJQRl9DR1JPVVBfSVRFUl9ERVNDRU5EQU5UU19QUkUpXFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTI2NS1cXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCJvcmRlcjogZGVzY2VuZGFudHNfcHJlXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjY2OlxcdGVsc2UgaWYgKGF1eC1cXHUwMDNlY2dyb3VwLm9yZGVyID09IEJQRl9DR1JPVVBfSVRFUl9ERVNDRU5EQU5UU19QT1NUKVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNjctXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwib3JkZXI6IGRlc2NlbmRhbnRzX3Bvc3RcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyNjg6XFx0ZWxzZSBpZiAoYXV4LVxcdTAwM2VjZ3JvdXAub3JkZXIgPT0gQlBGX0NHUk9VUF9JVEVSX0FOQ0VTVE9SU19VUClcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjY5LVxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIm9yZGVyOiBhbmNlc3RvcnNfdXBcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyNzA6XFx0ZWxzZSBpZiAoYXV4LVxcdTAwM2VjZ3JvdXAub3JkZXIgPT0gQlBGX0NHUk9VUF9JVEVSX0NISUxEUkVOKVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNzEtXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwib3JkZXI6IGNoaWxkcmVuXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYz0yNzY9c3RhdGljIGludCBicGZfaXRlcl9jZ3JvdXBfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjc4LXtcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6Mjc5OlxcdGluZm8tXFx1MDAzZWl0ZXIuY2dyb3VwLm9yZGVyID0gYXV4LVxcdTAwM2VjZ3JvdXAub3JkZXI7XFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTI4MC1cXHRpbmZvLVxcdTAwM2VpdGVyLmNncm91cC5jZ3JvdXBfaWQgPSBjZ3JvdXBfaWQoYXV4LVxcdTAwM2VjZ3JvdXAuc3RhcnQpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjg1MD1DRklfTk9TRUFMKGJwZl90YXNrX3JlbGVhc2VfZHRvcik7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODU2LSAqIGNhbGxpbmcgYnBmX2Nncm91cF9yZWxlYXNlKCkuXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg1NzogKiBAY2dycDogVGhlIGNncm91cCBvbiB3aGljaCBhIHJlZmVyZW5jZSBpcyBiZWluZyBhY3F1aXJlZC5cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODU4LSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jPTI4NTk9X19icGZfa2Z1bmMgc3RydWN0IGNncm91cCAqYnBmX2Nncm91cF9hY3F1aXJlKHN0cnVjdCBjZ3JvdXAgKmNncnApXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODY4LSAqIGRyb3BzIHRvIDAuXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg2OTogKiBAY2dycDogVGhlIGNncm91cCBvbiB3aGljaCBhIHJlZmVyZW5jZSBpcyBiZWluZyByZWxlYXNlZC5cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODcwLSAqL1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjk1NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2N1cnJlbnRfdGFza191bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yOTYzLS8qKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI5NjQ6ICogYnBmX3Rhc2tfZ2V0X2Nncm91cDEgLSBBY3F1aXJlcyB0aGUgYXNzb2NpYXRlZCBjZ3JvdXAgb2YgYSB0YXNrIHdpdGhpbiBhXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjk2NS0gKiBzcGVjaWZpYyBjZ3JvdXAxIGhpZXJhcmNoeS4gVGhlIGNncm91cDEgaGllcmFyY2h5IGlzIGlkZW50aWZpZWQgYnkgaXRzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjMzOjU0LjI2MTQ0Nzc0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTMyNDg2MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBUaGF0IGBDR1JPVVBfQlBGYCBLY29uZmlnIFN5bWJvbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBLY29uZmlnIGRlZmluaXRpb24gZm9yIGBDR1JPVVBfQlBGYC4gSXTigJlzIHNvbWV0aGluZyBJJ3ZlIHByb2JhYmx5IGNvbmZpZ3VyZWQgYSBkb3plbiB0aW1lcyBiZWZvcmUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgbG9jYXRpb24gb3IgYW55IGRlcGVuZGVuY2llcy4gVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEnigJlsbCBzdGFydCB3aXRoIGEgYGZpbmRgIG9yIGBncmVwYCBhY3Jvc3MgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc29tZXRoaW5nIGxpa2UgYGZpbmQgLiAtbmFtZSBcIktjb25maWcqXCIgLXByaW50MCB8IHhhcmdzIC0wIGdyZXAgQ0dST1VQX0JQRmAgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGUgdHlwaWNhbCBLY29uZmlnIHN0cnVjdHVyZSDigJMgdGhlIGBjb25maWcgQ0dST1VQX0JQRmAsIGBib29sYCwgdGhlIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIHRoZSBoZWxwIHRleHQsIGFuZCBzbyBvbi4gSSBuZWVkIHRoZSBzcGVjaWZpY3Mgc28gSSBjYW4gdW5kZXJzdGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFNvbWV0aW1lcywgdGhlIHN5bWJvbCBpcyBkZWZpbmVkIGluIGEgbW9yZSBnZW5lcmljIGNvbmZpZyBmaWxlLCBhbmQgaXMgdGhlbiBzZWxlY3RlZCBlbHNld2hlcmUuIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgdGllZCB0byBpdC5cblxuSWYgdGhlIGJhc2ljIHNlYXJjaCBpc24ndCBmcnVpdGZ1bCwgdGhlbiBJJ2xsIHByb2JhYmx5IGJyb2FkZW4gbXkgc2VhcmNoLiBJIGNvdWxkIGFsc28gcmVtZW1iZXIgdGhhdCBJIGNvbmZpZ3VyZWQgaXQgcmVjZW50bHksIHNvIGNoZWNraW5nIG15IGAuY29uZmlnYCBmaWxlIG1pZ2h0IGJlIGEgc2hvcnRjdXQuIEkgbWlnaHQgYWxzbyB0cnkgbG9va2luZyBmb3IgcmVsYXRlZCB0ZXJtcywgc3VjaCBhcyBcIkJQRlwiLCBcImNncm91cFwiLCBvciBcInNlY3VyaXR5XCIgaW4gdGhlIHNhbWUgS2NvbmZpZyBmaWxlcywgaW4gY2FzZSB0aGUgc3ltYm9sIGlzIGluZGlyZWN0bHkgcmVsYXRlZC5cblxuT25jZSBJJ3ZlIGdvdCB0aGUgZGVmaW5pdGlvbiwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBoZWxwIHRleHQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZ290Y2hhcywgb3IgaWYgaXQgcG9pbnRzIHRvIG90aGVyIHVzZWZ1bCBkb2N1bWVudGF0aW9uLiBGaW5hbGx5LCBJJ2xsIG1lbnRhbGx5IGZpbGUgdGhpcyBhd2F5IChvciBtYXliZSBqb3QgaXQgZG93biwgZGVwZW5kaW5nIG9uIGhvdyBvZnRlbiBJIG5lZWQgdG8gZG8gdGhpcykgdG8gc3RyZWFtbGluZSB0aGlzIHByb2Nlc3MgbmV4dCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjMzOjU3LjE5MzkzNzA4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzk3MzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0JQRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTM0NT1jb25maWcgQ0dST1VQX1BFUkZcXG4tLVxcbmluaXQvS2NvbmZpZy0xMzU1LVxcbmluaXQvS2NvbmZpZzoxMzU2OmNvbmZpZyBDR1JPVVBfQlBGXFxuaW5pdC9LY29uZmlnLTEzNTctXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo1OC42OTE5MTU4MThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwOTkzNzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBuZXcgY29uZmlndXJhdGlvbiBpc3N1ZT8gUmlnaHQsIGBpbml0L0tjb25maWdgIOKAkyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0J3MgYXZhaWxhYmxlIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgYm9vdCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDEzNTYuIEkgZmlndXJlIHRoYXQgbG9jYXRpb24gaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGRlY2xhcmF0aW9ucyBvciBpbmNsdWRlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IEknbSBmb2N1c2VkIG9uLiBUaW1lIHRvIHNlZSB3aGF0IGtpbmQgb2YgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbnMgYXJlIGRlZmluZWQgdGhlcmUuIExldCdzIHNlZSBpZiB0aGlzIHNoZWRzIGFueSBsaWdodCBvbiB0aGUgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjAwLjgwMTg1NjMyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTA6XFx0XFx0ICB0byB0aHJlYWRzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2dyb3VwIHNwZWNpZmllZCBhbmQgcnVuIG9uIHRoZVxcbjEzNTE6XFx0XFx0ICBkZXNpZ25hdGVkIGNwdS4gIE9yIHRoaXMgY2FuIGJlIHVzZWQgdG8gaGF2ZSBjZ3JvdXAgSUQgaW4gc2FtcGxlc1xcbjEzNTI6XFx0XFx0ICBzbyB0aGF0IGl0IGNhbiBtb25pdG9yIHBlcmZvcm1hbmNlIGV2ZW50cyBhbW9uZyBjZ3JvdXBzLlxcbjEzNTM6XFx0XFxuMTM1NDpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMzU1OlxcdFxcbjEzNTY6XFx0Y29uZmlnIENHUk9VUF9CUEZcXG4xMzU3OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG4xMzU4OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4xMzU5OlxcdFxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuMTM2MDpcXHRcXHRoZWxwXFxuMTM2MTpcXHRcXHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcXG4xMzYyOlxcdFxcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cXG4xMzYzOlxcdFxcbjEzNjQ6XFx0XFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXFxuMTM2NTpcXHRcXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcXG4xMzY2OlxcdFxcdCAgQlBGX0NHUk9VUF9JTkVUX0lOR1JFU1Mgd2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgaW5ncmVzcyBwYXRoIG9mXFxuMTM2NzpcXHRcXHQgIGluZXQgc29ja2V0cy5cXG4xMzY4OlxcdFxcbjEzNjk6XFx0Y29uZmlnIENHUk9VUF9NSVNDXFxuMTM3MDpcXHRcXHRib29sIFxcXCJNaXNjIHJlc291cmNlIGNvbnRyb2xsZXJcXFwiXFxuMTM3MTpcXHRcXHRkZWZhdWx0IG5cXG4xMzcyOlxcdFxcdGhlbHBcXG4xMzczOlxcdFxcdCAgUHJvdmlkZXMgYSBjb250cm9sbGVyIGZvciBtaXNjZWxsYW5lb3VzIHJlc291cmNlcyBvbiBhIGhvc3QuXFxuMTM3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzQ6MDAuODAyMDc4ODY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MzYwNzU2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGBDR1JPVVBfQlBGYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYENHUk9VUF9CUEZgIGlzIGNsZWFybHkgcmVsaWFudCBvbiBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgY2dyb3VwLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgaW4gdGhlIGNvcmUgY2dyb3VwIGltcGxlbWVudGF0aW9uIHRoYXQncyB0aWVkIHRvIHRoaXMuIFRoZW4sIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGJlZ2lubmluZyBvZiBga2VybmVsL2JwZi9jZ3JvdXAuY2AgZm9yIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MgdGhhdCBtaWdodCBpbXBhY3QgaG93IGBDR1JPVVBfQlBGYCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdldCBhIGhvbGlzdGljIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODczLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozNDowNC41MzgxNTcyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIEZ1bmN0aW9ucyB0byBtYW5hZ2UgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE2IERhbmllbCBNYWNrXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjdGwuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYtY2dyb3VwLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX2xzbS5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcXHUwMDNlXFxuICAyMTpcXHRcXG4gIDIyOlxcdCNpbmNsdWRlIFxcXCIuLi9jZ3JvdXAvY2dyb3VwLWludGVybmFsLmhcXFwiXFxuICAyMzpcXHRcXG4gIDI0OlxcdERFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGNncm91cF9icGZfZW5hYmxlZF9rZXksIE1BWF9DR1JPVVBfQlBGX0FUVEFDSF9UWVBFKTtcXG4gIDI1OlxcdEVYUE9SVF9TWU1CT0woY2dyb3VwX2JwZl9lbmFibGVkX2tleSk7XFxuICAyNjpcXHRcXG4gIDI3OlxcdC8qXFxuICAyODpcXHQgKiBjZ3JvdXAgYnBmIGRlc3RydWN0aW9uIG1ha2VzIGhlYXZ5IHVzZSBvZiB3b3JrIGl0ZW1zIGFuZCB0aGVyZSBjYW4gYmUgYSBsb3RcXG4gIDI5OlxcdCAqIG9mIGNvbmN1cnJlbnQgZGVzdHJ1Y3Rpb25zLiAgVXNlIGEgc2VwYXJhdGUgd29ya3F1ZXVlIHNvIHRoYXQgY2dyb3VwIGJwZlxcbiAgMzA6XFx0ICogZGVzdHJ1Y3Rpb24gd29yayBpdGVtcyBkb24ndCBlbmQgdXAgZmlsbGluZyB1cCBtYXhfYWN0aXZlIG9mIHN5c3RlbV9wZXJjcHVfd3FcXG4gIDMxOlxcdCAqIHdoaWNoIG1heSBsZWFkIHRvIGRlYWRsb2NrLlxcbiAgMzI6XFx0ICovXFxuICAzMzpcXHRzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNncm91cF9icGZfZGVzdHJveV93cTtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0c3RhdGljIGludCBfX2luaXQgY2dyb3VwX2JwZl93cV9pbml0KHZvaWQpXFxuICAzNjpcXHR7XFxuICAzNzpcXHRcXHRjZ3JvdXBfYnBmX2Rlc3Ryb3lfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcImNncm91cF9icGZfZGVzdHJveVxcXCIsXFxuICAzODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRXUV9QRVJDUFUsIDEpO1xcbiAgMzk6XFx0XFx0aWYgKCFjZ3JvdXBfYnBmX2Rlc3Ryb3lfd3EpXFxuICA0MDpcXHRcXHRcXHRwYW5pYyhcXFwiRmFpbGVkIHRvIGFsbG9jIHdvcmtxdWV1ZSBmb3IgY2dyb3VwIGJwZiBkZXN0cm95LlxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjA0LjUzODI5OTEyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1OTU3NTQxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogQ2dyb3VwIEJQRiBBdHRhY2ggSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIGNvcmUgY2dyb3VwIEJQRiBhdHRhY2ggaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGlzIGJlaW5nIGFkZHJlc3NlZC4gVGhhdCBmdW5jdGlvbiBpcyBzdGF0aWMsIGJ1dCBpdCdzIGNhbGxlZCBieSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFdlJ3ZlIGNvbmZpcm1lZCB0aGVzZSBlbnRyeSBwb2ludHMgYXJlIGluZGVlZCBub24tc3RhdGljIOKAkyBnb29kLlxuXG5UaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQgc2FmZWx5IGV2YWx1YXRlcyB0aGUgYGxpbmtgIHBvaW50ZXIgYW5kIHJldHVybnMgYW4gZXJyb3IgaWYgYG5ld19wcm9nYCBpcyBOVUxMLCBwcmV2ZW50aW5nIHRoZSBkZXJlZmVyZW5jZS4gSW1wb3J0YW50bHksIHRoaXMgKmRvZXMqIG1vZGlmeSByZWFjaGFibGUga2VybmVsIGxvZ2ljIHdpdGhpbiB0aGUgYnBmIHN5c2NhbGwsIGRlYWxpbmcgd2l0aCBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGNncm91cCBCUEYgbWFuYWdlbWVudC5cblxuTm93LCBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBjZ3JvdXAgQlBGIGludGVyYWN0aW9uIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgYGJwZmAgc3lzY2FsbCAoYEJQRl9QUk9HX0FUVEFDSGAsIGBCUEZfTElOS19DUkVBVEVgKSwgYW5kIHRoZXNlIGNhbiBiZSB0ZXN0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoZSBCUEYgYXR0YWNoIG1lY2hhbmlzbXMgd2l0aCB2YXJpb3VzIGZsYWcgYW5kIHBvaW50ZXIgY29tYmluYXRpb25zIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBzbyB0aGUgcG90ZW50aWFsIHBheW9mZiBpcyB3b3J0aCB0aGUgZWZmb3J0LlxuXG5UbyBlbmFibGUgcHJvcGVyIHRlc3RpbmcsIHdlIG5lZWQgYENHUk9VUF9CUEZgLCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBLY29uZmlnIGZpbGVzLCBhbmQgdGhlc2Ugc2VlbSB0byBiZSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIE5vIG90aGVyIGRlcGVuZGVuY2llcyBqdW1wIG91dC5cblxuRm9yIGZ1enppbmcgZm9jdXMsIHdlJ2xsIHRhcmdldCB0aGUgZW50cnkgcG9pbnRzOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4cG9zZSBhbmQgdGVzdCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy5cblxuRmluYWxseSwgSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gYW55IG9mIHRoZSBkaXNxdWFsaWZ5aW5nIGNhdGVnb3JpZXMgZm9yIGZ1enppbmcgKGRvY3VtZW50YXRpb24gY2hhbmdlcyBvbmx5LCBsb2dnaW5nIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUsIGV0Yy4pIGFuZCBpdCBkaXJlY3RseSBhZGRyZXNzZXMgYSBjcml0aWNhbCBwYXRoIHdpdGggYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUuIFRoZXJlZm9yZSwgaXQgaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nYC5cblxuSW4gc3VtbWFyeSwgdGhlIHNwZWNpZmljIGBGb2N1c1N5bWJvbHNgIGFyZTogYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlOiBgQlBGX1NZU0NBTExgIGFuZCBgQ0dST1VQX0JQRmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzY4LCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjEwLjEzNDA1NTMwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDI2NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY2dyb3VwIEJQRiBhdHRhY2htZW50IHBhdGggKF9fY2dyb3VwX2JwZl9hdHRhY2gpIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG5ldyBwcm9ncmFtIHRvIGF0dGFjaC4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBhbmQgY2dyb3VwIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHN5c2NhbGwgb3BlcmF0aW9ucyAoZS5nLiwgQlBGX1BST0dfQVRUQUNIIGFuZCBCUEZfTElOS19DUkVBVEUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjZ3JvdXAgQlBGIGF0dGFjaG1lbnQgcGF0aCAoX19jZ3JvdXBfYnBmX2F0dGFjaCkgd2hlbiBkZXRlcm1pbmluZyB0aGUgbmV3IHByb2dyYW0gdG8gYXR0YWNoLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIGFuZCBjZ3JvdXAgbG9naWMgcmVhY2hhYmxlIHZpYSBCUEYgc3lzY2FsbCBvcGVyYXRpb25zIChlLmcuLCBCUEZfUFJPR19BVFRBQ0ggYW5kIEJQRl9MSU5LX0NSRUFURSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjEwLjIxMTQ5MzU4MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NDg3ODg1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozNDoxMC4yMTIwMDY4NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzg0ODI3MTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2goKWAgd2hlbiBib3RoIGBwcm9nYCBhbmQgYGxpbmtgIGFyZ3VtZW50cyBhcmUgTlVMTC4gSXQgZ3VhcmRzIHRoZSBkZXJlZmVyZW5jZSBvZiBgbGluay1cXHUwMDNlbGluay5wcm9nYCBhbmQgYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgYGlmICghbmV3X3Byb2cpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFNpbmNlIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAod2hpY2ggaXMgYWxyZWFkeSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG9vcHMgaGFuZGxlcnMgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcyksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1ZTY5NTk3ODkzMjYxMGMzZmI0MzczMDJmYjk3YjA0YmMwYjA5ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDE0OTY3MmM3NmM0OWMuLjE1NmZjNGQ2MGRhZjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODE0LDcgKzgxNCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4rXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuQEAgLTgzNCw2ICs4MzQsOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghIXJlcGxhY2VfcHJvZyAhPSAhIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpXG4gXHRcdC8qIHJlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhICovXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFuZXdfcHJvZylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XG4gXHRpZiAoYXR5cGUgXHUwMDNjIDApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozNDoxMC4yMTIwMDkzNjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODc0OTcxMTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDZ3JvdXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIHRoZSBjaGFuZ2VzIG1hZGUgdG8gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBUaGUgYGRpZmZgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzZWUgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSA4MTQuIExvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0IGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byB0aGUgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGZ1bmN0aW9uLCB3aGljaCBpcywgb2YgY291cnNlLCBjcml0aWNhbCBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyB0byBjZ3JvdXBzLiBJIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG5ld19wcm9nYCBhbmQgaXRzIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIG51bGwgdmFsdWVzLiBUaGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIGBpZiAoIW5ld19wcm9nKWAgaXMgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBuZXcgdmFsaWRhdGlvbiBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGVjayB3YXNuJ3QgcHJlc2VudCBiZWZvcmUuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBuZXdfcHJvZ2AgbWlnaHQgYmUgbnVsbCBhbmQgaG93IHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhvc2Ugc2NlbmFyaW9zLiBJcyB0aGlzIGEgYnVnIGZpeD8gQSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IE9yIGlzIHRoaXMgY2hhbmdlIGVuYWJsaW5nIGEgbmV3IGZ1bmN0aW9uYWxpdHksIHN1Y2ggYXMgc3VwcG9ydGluZyBkZXRhY2hlZCBjZ3JvdXAgQlBGIHByb2dyYW1zPyBUaGUgY29kZSBjb21tZW50IFwicmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2FcIiBpcyBhIHN0YW5kYXJkIHZhbGlkYXRpb24gY2hlY2suIEhvd2V2ZXIsIHRoZSBhZGRpdGlvbiBvZiB0aGUgbmV3IGNoZWNrIG1heSBtZWFuIHRoYXQgdGhlIGNoZWNrIGZvciB0aGUgcmVwbGFjZSBmbGFnIGhhcyBiZWNvbWUgZGVwZW5kZW50IG9uIGFub3RoZXIgY29uZGl0aW9uIGFuZCB0aHVzIHJlcXVpcmVkIGEgbmV3IHZhbGlkYXRpb24uIExldCBtZSByZWFkIG1vcmUgYWJvdXQgdGhlIGNvbnRleHQgdXNpbmcgYHJlYWQtZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozNDoxOC45NjE3MjM1NTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODAwOlxcdCAqIEBpZF9vcl9mZDogUmVsYXRpdmUgcHJvZyBpZCBvciBmZFxcbiA4MDE6XFx0ICogQHJldmlzaW9uOiBicGZfcHJvZ19saXN0IHJldmlzaW9uXFxuIDgwMjpcXHQgKlxcbiA4MDM6XFx0ICogRXhhY3RseSBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1udWxsLlxcbiA4MDQ6XFx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC5cXG4gODA1OlxcdCAqL1xcbiA4MDY6XFx0c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIDgwNzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4gODA4OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbiA4MDk6XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxcbiA4MTA6XFx0XFx0XFx0XFx0ICAgICAgIHU2NCByZXZpc2lvbilcXG4gODExOlxcdHtcXG4gODEyOlxcdFxcdHUzMiBzYXZlZF9mbGFncyA9IChmbGFncyBcXHUwMDI2IChCUEZfRl9BTExPV19PVkVSUklERSB8IEJQRl9GX0FMTE9XX01VTFRJKSk7XFxuIDgxMzpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcXG4gODE0OlxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiA4MTU6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiA4MTY6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiA4MTc6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IChsaW5rID8gbGluay1cXHUwMDNlbGluay5wcm9nIDogTlVMTCk7XFxuIDgxODpcXHRcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxuIDgxOTpcXHRcXHR1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7XFxuIDgyMDpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuIDgyMTpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XFxuIDgyMjpcXHRcXHRpbnQgZXJyO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHRpZiAoKChmbGFncyBcXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XFxuIDgyNTpcXHRcXHQgICAgKChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpKVxcbiA4MjY6XFx0XFx0XFx0LyogaW52YWxpZCBjb21iaW5hdGlvbiAqL1xcbiA4Mjc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgyODpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgKEJQRl9GX0JFRk9SRSB8IEJQRl9GX0FGVEVSKSkpXFxuIDgyOTpcXHRcXHRcXHQvKiBvbmx5IGVpdGhlciByZXBsYWNlIG9yIGluc2VydGlvbiB3aXRoIGJlZm9yZS9hZnRlciAqL1xcbiA4MzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzMTpcXHRcXHRpZiAobGluayBcXHUwMDI2XFx1MDAyNiAocHJvZyB8fCByZXBsYWNlX3Byb2cpKVxcbiA4MzI6XFx0XFx0XFx0Lyogb25seSBlaXRoZXIgbGluayBvciBwcm9nL3JlcGxhY2VfcHJvZyBjYW4gYmUgc3BlY2lmaWVkICovXFxuIDgzMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODM0OlxcdFxcdGlmICghIXJlcGxhY2VfcHJvZyAhPSAhIShmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpKVxcbiA4MzU6XFx0XFx0XFx0LyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi9cXG4gODM2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Mzc6XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gODM4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkKTtcXG4gODQxOlxcdFxcdGlmIChhdHlwZSBcXHUwMDNjIDApXFxuIDg0MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODQzOlxcdFxcdGlmIChyZXZpc2lvbiBcXHUwMDI2XFx1MDAyNiByZXZpc2lvbiAhPSBjZ3JwLVxcdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSlcXG4gODQ0OlxcdFxcdFxcdHJldHVybiAtRVNUQUxFO1xcbiA4NDU6XFx0XFxuIDg0NjpcXHRcXHRwcm9ncyA9IFxcdTAwMjZjZ3JwLVxcdTAwM2VicGYucHJvZ3NbYXR5cGVdO1xcbiA4NDc6XFx0XFxuIDg0ODpcXHRcXHRpZiAoIWhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKGNncnAsIGF0eXBlKSlcXG4gODQ5OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg1MDpcXHRcXG4gODUxOlxcdFxcdGlmICghaGxpc3RfZW1wdHkocHJvZ3MpIFxcdTAwMjZcXHUwMDI2IGNncnAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gIT0gc2F2ZWRfZmxhZ3MpXFxuIDg1MjpcXHRcXHRcXHQvKiBEaXNhbGxvdyBhdHRhY2hpbmcgbm9uLW92ZXJyaWRhYmxlIG9uIHRvcFxcbiA4NTM6XFx0XFx0XFx0ICogb2YgZXhpc3Rpbmcgb3ZlcnJpZGFibGUgaW4gdGhpcyBjZ3JvdXAuXFxuIDg1NDpcXHRcXHRcXHQgKiBEaXNhbGxvdyBhdHRhY2hpbmcgbXVsdGktcHJvZyBpZiBvdmVycmlkYWJsZSBvciBub25lXFxuIDg1NTpcXHRcXHRcXHQgKi9cXG4gODU2OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdGlmIChwcm9nX2xpc3RfbGVuZ3RoKHByb2dzLCBOVUxMKSBcXHUwMDNlPSBCUEZfQ0dST1VQX01BWF9QUk9HUylcXG4gODU5OlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjE4Ljk2MTkyMDU4OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDk4MzM1NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSBmaXggaXMgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBUaGUgb3JpZ2luYWwgY29kZSwgYHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZztgLCBoYWQgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBJZiAqYm90aCogYHByb2dgIGFuZCBgbGlua2Agd2VyZSBOVUxMLCBpdCB3b3VsZCB0cnkgdG8gYWNjZXNzIGBsaW5rLVx1MDAzZWxpbmsucHJvZ2AsIGNhdXNpbmcgYSBjcmFzaC4gVGhlIHBhdGNoIGVsZWdhbnRseSBhZGRyZXNzZXMgdGhpcyB3aXRoIGBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO2AgYW5kIGEgc3Vic2VxdWVudCBgaWYgKCFuZXdfcHJvZykgcmV0dXJuIC1FSU5WQUw7YCBjaGVjay4gQ2xldmVyLCBjb25jaXNlLCBhbmQgY3J1Y2lhbC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgcGFydGljdWxhcmx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEkndmUgZ29uZSB0aHJvdWdoIHRoZSB1c3VhbCBjaGVja2xpc3Q6XG5cbiogICAqKk5vIGtlcm5lbCBkYXRhIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHZhbHVlcy4qKiBUaGF0J3MgYSBodWdlIHJlbGllZi5cbiogICAqKk5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4qKiBBbHdheXMgYSBwb3RlbnRpYWwgcGl0ZmFsbC4gR2xhZCB0aGF0J3MgY2xlYXIuXG4qICAgKipObyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4qKiBDaGVja2VkLlxuKiAgICoqTm8gY2hhbmdlcyB0aGF0IGNvdWxkIGNyZWF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBkdWUgdG8gY2hhbmdlcyBpbiBib3VuZHMgb3IgbGVuZ3Rocy4qKiBHb29kLlxuXG5UaGUgYnVnIGZpeGVkIHdhcyBhIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBrZXJuZWwgb29wcy5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXggYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIG5ldyB2dWxuZXJhYmlsaXRpZXMsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgaGFuZGxlIHRoZXNlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMsIGFuZCBLTVNBTiBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgY29uY2VybnMgdGhhdCB3b3VsZCB0cmlnZ2VyIGEgS01TQU4gY2hlY2suIFRoaXMgaXMgc291bmQgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkyLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjI0LjA2MDI1OTQwMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2goKWAgd2hlbiBib3RoIGBwcm9nYCBhbmQgYGxpbmtgIGFyZ3VtZW50cyBhcmUgTlVMTC4gSXQgZ3VhcmRzIHRoZSBkZXJlZmVyZW5jZSBvZiBgbGluay1cXHUwMDNlbGluay5wcm9nYCBhbmQgYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgYGlmICghbmV3X3Byb2cpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFNpbmNlIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAod2hpY2ggaXMgYWxyZWFkeSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG9vcHMgaGFuZGxlcnMgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcyksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBfX2Nncm91cF9icGZfYXR0YWNoKClgIHdoZW4gYm90aCBgcHJvZ2AgYW5kIGBsaW5rYCBhcmd1bWVudHMgYXJlIE5VTEwuIEl0IGd1YXJkcyB0aGUgZGVyZWZlcmVuY2Ugb2YgYGxpbmstXFx1MDAzZWxpbmsucHJvZ2AgYW5kIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGBpZiAoIW5ld19wcm9nKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBTaW5jZSB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHdoaWNoIGlzIGFscmVhZHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIGhhbmRsZXJzIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 01:31:54 +0000 UTC FinishedAt: 2026-09-03 01:34:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF" ], "series_id": "f381a314-0ffa-4a74-9d69-eed88da55572" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_prog_attach", "cgroup_bpf_link_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaCgpYCB3aGVuIGJvdGggYHByb2dgIGFuZCBgbGlua2AgYXJndW1lbnRzIGFyZSBOVUxMLiBJdCBndWFyZHMgdGhlIGRlcmVmZXJlbmNlIG9mIGBsaW5rLVx1MDAzZWxpbmsucHJvZ2AgYW5kIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGBpZiAoIW5ld19wcm9nKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBTaW5jZSB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHdoaWNoIGlzIGFscmVhZHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIGhhbmRsZXJzIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNncm91cCBCUEYgYXR0YWNobWVudCBwYXRoIChfX2Nncm91cF9icGZfYXR0YWNoKSB3aGVuIGRldGVybWluaW5nIHRoZSBuZXcgcHJvZ3JhbSB0byBhdHRhY2guIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgYW5kIGNncm91cCBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBzeXNjYWxsIG9wZXJhdGlvbnMgKGUuZy4sIEJQRl9QUk9HX0FUVEFDSCBhbmQgQlBGX0xJTktfQ1JFQVRFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY1ZTY5NTk3ODkzMjYxMGMzZmI0MzczMDJmYjk3YjA0YmMwYjA5ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCAxNDk2NzJjNzZjNDljLi4xNTZmYzRkNjBkYWY2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxNCw3ICYjNDM7ODE0LDcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbi1cdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZztcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuQEAgLTgzNCw2ICYjNDM7ODM0LDggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAoISFyZXBsYWNlX3Byb2cgIT0gISEoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpKVxuIFx0XHQvKiByZXBsYWNlX3Byb2cgaW1wbGllcyBCUEZfRl9SRVBMQUNFLCBhbmQgdmljZSB2ZXJzYSAqL1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIW5ld19wcm9nKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XG4gXHRpZiAoYXR5cGUgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY2dyb3VwIEJQRiBhdHRhY2htZW50IHBhdGggKF9fY2dyb3VwX2JwZl9hdHRhY2gpIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG5ldyBwcm9ncmFtIHRvIGF0dGFjaC4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBhbmQgY2dyb3VwIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHN5c2NhbGwgb3BlcmF0aW9ucyAoZS5nLiwgQlBGX1BST0dfQVRUQUNIIGFuZCBCUEZfTElOS19DUkVBVEUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjVlNjk1OTc4OTMyNjEwYzNmYjQzNzMwMmZiOTdiMDRiYzBiMDk4NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDE6MzM6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCAxNDk2NzJjNzZjNDljLi4xNTZmYzRkNjBkYWY2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKQEAgLTgxNCw3ICYjNDM7ODE0LDcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307CiAJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKLQlzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay0mZ3Q7bGluay5wcm9nOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLSZndDtsaW5rLnByb2cgOiBOVUxMKTsKIAllbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7CiAJdTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKQEAgLTgzNCw2ICYjNDM7ODM0LDggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzICZhbXA7IEJQRl9GX1JFUExBQ0UpKQogCQkvKiByZXBsYWNlX3Byb2cgaW1wbGllcyBCUEZfRl9SRVBMQUNFLCBhbmQgdmljZSB2ZXJzYSAqLwogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFuZXdfcHJvZykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCiAJYXR5cGUgPSBicGZfY2dyb3VwX2F0eXBlX2ZpbmQodHlwZSwgbmV3X3Byb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCk7CiAJaWYgKGF0eXBlICZsdDsgMCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byB0aGUgQlBGIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY2dyb3VwIGludGVncmF0aW9uLCBqdWRnaW5nIGJ5IHRoZSBwYXRoIHByb3ZpZGVkOiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHNlY3Rpb24gaW4gdGhhdCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBsaW5lIDgxNCBhcHByb3hpbWF0ZWx5LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNoYW5nZXMgbWlnaHQgcmVzaWRlLgoKR2l2ZW4gdGhpcyBjb250ZXh0LCBJJiMzOTtsbCBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRlbnQgb2YgYGtlcm5lbC9icGYvY2dyb3VwLmNgLCBzbyBJIGNhbiBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyBwcm9wb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdCAqIEBpZF9vcl9mZDogUmVsYXRpdmUgcHJvZyBpZCBvciBmZFxuIDgwMTpcdCAqIEByZXZpc2lvbjogYnBmX3Byb2dfbGlzdCByZXZpc2lvblxuIDgwMjpcdCAqXG4gODAzOlx0ICogRXhhY3RseSBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1udWxsLlxuIDgwNDpcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXG4gODA1Olx0ICovXG4gODA2Olx0c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gODA3Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXG4gODA4Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gODA5Olx0XHRcdFx0ICAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxuIDgxMDpcdFx0XHRcdCAgICAgICB1NjQgcmV2aXNpb24pXG4gODExOlx0e1xuIDgxMjpcdFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQUxMT1dfT1ZFUlJJREUgfCBCUEZfRl9BTExPV19NVUxUSSkpO1xuIDgxMzpcdFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XG4gODE0Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTU6XHRcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTY6XHRcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTc6XHRcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiAobGluayA/IGxpbmstXHUwMDNlbGluay5wcm9nIDogTlVMTCk7XG4gODE4Olx0XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4gODE5Olx0XHR1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7XG4gODIwOlx0XHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XG4gODIxOlx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XG4gODIyOlx0XHRpbnQgZXJyO1xuIDgyMzpcdFxuIDgyNDpcdFx0aWYgKCgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XG4gODI1Olx0XHQgICAgKChmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkpXG4gODI2Olx0XHRcdC8qIGludmFsaWQgY29tYmluYXRpb24gKi9cbiA4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODI4Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQkVGT1JFIHwgQlBGX0ZfQUZURVIpKSlcbiA4Mjk6XHRcdFx0Lyogb25seSBlaXRoZXIgcmVwbGFjZSBvciBpbnNlcnRpb24gd2l0aCBiZWZvcmUvYWZ0ZXIgKi9cbiA4MzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODMxOlx0XHRpZiAobGluayBcdTAwMjZcdTAwMjYgKHByb2cgfHwgcmVwbGFjZV9wcm9nKSlcbiA4MzI6XHRcdFx0Lyogb25seSBlaXRoZXIgbGluayBvciBwcm9nL3JlcGxhY2VfcHJvZyBjYW4gYmUgc3BlY2lmaWVkICovXG4gODMzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzNDpcdFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSlcbiA4MzU6XHRcdFx0LyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi9cbiA4MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM3Olx0XHRpZiAoIW5ld19wcm9nKVxuIDgzODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4Mzk6XHRcbiA4NDA6XHRcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKTtcbiA4NDE6XHRcdGlmIChhdHlwZSBcdTAwM2MgMClcbiA4NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODQzOlx0XHRpZiAocmV2aXNpb24gXHUwMDI2XHUwMDI2IHJldmlzaW9uICE9IGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0pXG4gODQ0Olx0XHRcdHJldHVybiAtRVNUQUxFO1xuIDg0NTpcdFxuIDg0NjpcdFx0cHJvZ3MgPSBcdTAwMjZjZ3JwLVx1MDAzZWJwZi5wcm9nc1thdHlwZV07XG4gODQ3Olx0XG4gODQ4Olx0XHRpZiAoIWhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKGNncnAsIGF0eXBlKSlcbiA4NDk6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4NTA6XHRcbiA4NTE6XHRcdGlmICghaGxpc3RfZW1wdHkocHJvZ3MpIFx1MDAyNlx1MDAyNiBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gIT0gc2F2ZWRfZmxhZ3MpXG4gODUyOlx0XHRcdC8qIERpc2FsbG93IGF0dGFjaGluZyBub24tb3ZlcnJpZGFibGUgb24gdG9wXG4gODUzOlx0XHRcdCAqIG9mIGV4aXN0aW5nIG92ZXJyaWRhYmxlIGluIHRoaXMgY2dyb3VwLlxuIDg1NDpcdFx0XHQgKiBEaXNhbGxvdyBhdHRhY2hpbmcgbXVsdGktcHJvZyBpZiBvdmVycmlkYWJsZSBvciBub25lXG4gODU1Olx0XHRcdCAqL1xuIDg1NjpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDg1NzpcdFxuIDg1ODpcdFx0aWYgKHByb2dfbGlzdF9sZW5ndGgocHJvZ3MsIE5VTEwpIFx1MDAzZT0gQlBGX0NHUk9VUF9NQVhfUFJPR1MpXG4gODU5Olx0XHRcdHJldHVybiAtRTJCSUc7XG4gODYwOlx0XG4gODYxOlx0XHRwbCA9IGZpbmRfYXR0YWNoX2VudHJ5KHByb2dzLCBwcm9nLCBsaW5rLCByZXBsYWNlX3Byb2csXG4gODYyOlx0XHRcdFx0ICAgICAgIGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSk7XG4gODYzOlx0XHRpZiAoSVNfRVJSKHBsKSlcbiA4NjQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGwpO1xuIDg2NTpcdFxuIDg2NjpcdFx0aWYgKGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RvcmFnZSwgbmV3X3N0b3JhZ2UsIHR5cGUsXG4gODY3Olx0XHRcdFx0XHQgICAgICBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZywgY2dycCkpXG4gODY4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IGNvZGUgcGF0aHMgaW52b2tlIGl0IHRvIGdyYXNwIGl0cyByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJhc2ljczogSSYjMzk7bGwgbmVlZCB0byBkbyBhIGNvZGUgc2VhcmNoLiBBIHNpbXBsZSBgZ3JlcGAgaXMgcGVyZmVjdCB0byBsb2NhdGUgdGhlIGNhbGwgc2l0ZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgbWFuYWdlYWJsZSBsaXN0IG9mIHRoZSBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgdGhhdCB1c2UgaXQsIGFuZCBJIGNhbiBkcmlsbCBkb3duIGZyb20gdGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGUgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Nncm91cF9icGZfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTM3PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NjpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ3LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBjZ3JvdXBfYnBmX2F0dGFjaCBDYWxsc2l0ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgYGNncm91cF9icGZfYXR0YWNoYCBpcyBiZWluZyB1c2VkLCBhbG9uZyB3aXRoIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gYWxsIHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IHRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgYmVpbmcgYXR0YWNoZWQgdG8gY2dyb3Vwcy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBkaXJlY3QgY2FsbGVycyBvZiBgY2dyb3VwX2JwZl9hdHRhY2hgIGl0c2VsZiwgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGVyZS4gSSBhbHNvIGtub3cgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBzbyBJIHdpbGwgZXhwbG9yZSB0aG9zZSBhcyB3ZWxsIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF0dGFjaG1lbnQgcHJvY2VzcyBhbmQgaG93IGl0IGlzIGVtcGxveWVkIGFjcm9zcyB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLWNncm91cC1kZWZzLmg9MTE9c3RydWN0IGJwZl9wcm9nX2FycmF5O1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC1kZWZzLmgtMTktXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAtZGVmcy5oOjIwOmVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSB7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAtZGVmcy5oLTIxLVx0Q0dST1VQX0JQRl9BVFRBQ0hfVFlQRV9JTlZBTElEID0gLTEsXG4tLVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MzA9dW5zaWduZWQgaW50IF9fY2dyb3VwX2JwZl9ydW5fbHNtX2N1cnJlbnQoY29uc3Qgdm9pZCAqY3R4LFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTM3LVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6Mzg6c3RhdGljIGlubGluZSBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjM5OnRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MC17XG4tLVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTE1PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9za2Ioc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTE2LVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjExNzpcdFx0XHRcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMTgtXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMTk9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEyMDpcdFx0XHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEyMS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyMj1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19hZGRyKHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMjQtXHRcdFx0XHQgICAgICBpbnQgKnVhZGRybGVuLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTI1Olx0XHRcdFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTI2LVx0XHRcdFx0ICAgICAgdm9pZCAqdF9jdHgsXG4tLVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTI5PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zb2NrX29wcyhzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzAtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqc29ja19vcHMsXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMzE6XHRcdFx0XHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzItXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMzM9aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMzQ6XHRcdFx0XHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzUtXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMzY9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzgtXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTM5Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTE0MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xODA9c3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjE4MTpcdFx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIHR5cGUpXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xODIte1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MTc0MT1zdHJ1Y3QgYnBmX3Byb2dfYXV4IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MTUtXHR1MzIgdmVyaWZpZWRfaW5zbnM7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE4MTY6XHRpbnQgY2dyb3VwX2F0eXBlOyAvKiBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgKi9cbmluY2x1ZGUvbGludXgvYnBmLmgtMTgxNy1cdHN0cnVjdCBicGZfbWFwICpjZ3JvdXBfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NjU9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIGNncm91cF9sc21fYXR5cGVbQ0dST1VQX0xTTV9OVU1dO1xua2VybmVsL2JwZi9jZ3JvdXAuYy02Ni1cbmtlcm5lbC9icGYvY2dyb3VwLmM6Njc6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy02OC17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy03My0jZWxzZVxua2VybmVsL2JwZi9jZ3JvdXAuYzo3NDpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc1LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTg0PWJwZl9wcm9nX3J1bl9hcnJheV9jZyhjb25zdCBzdHJ1Y3QgY2dyb3VwX2JwZiAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODU6XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODYtXHRcdCAgICAgIGNvbnN0IHZvaWQgKmN0eCwgYnBmX3Byb2dfcnVuX2ZuIHJ1bl9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYyPXVuc2lnbmVkIGludCBfX2Nncm91cF9icGZfcnVuX2xzbV9jdXJyZW50KGNvbnN0IHZvaWQgKmN0eCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4MS0jaWZkZWYgQ09ORklHX0JQRl9MU01cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgyOnN0YXRpYyBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgzLWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODktXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX0xTTV9DR1JPVVApXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE5MDpcdFx0cmV0dXJuIHRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoYXR0YWNoX3R5cGUpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTEtXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0yMjA9dm9pZCBicGZfY2dyb3VwX2F0eXBlX3B1dChpbnQgY2dyb3VwX2F0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjMyLSNlbHNlXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzMzpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzNC1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM2LVx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9MU01fQ0dST1VQKVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzc6XHRcdHJldHVybiB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGF0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM4LVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NDI0PXN0YXRpYyBib29sIGhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQyNTpcdFx0XHRcdCAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQyNi17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz00NTM9c3RhdGljIGludCBjb21wdXRlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0NTQ6XHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQ1NS1cdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZ19hcnJheSAqKmFycmF5KVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NTExPXN0YXRpYyB2b2lkIGFjdGl2YXRlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1MTI6XHRcdFx0XHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNTEzLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKm9sZF9hcnJheSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTU5MT1zdGF0aWMgaW50IHVwZGF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NTkyOlx0XHRcdFx0ICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTU5My17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz03NzE9c3RhdGljIGludCBpbnNlcnRfcGxfdG9faGxpc3Qoc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3MsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjc5MjogKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTMtICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNS0gKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6ODA2OnN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MTctXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTg6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTgxOS1cdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzNi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM3OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM4LVx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NjpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ3LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTUyPXN0YXRpYyBpbnQgZWZmZWN0aXZlX3Byb2dfcG9zKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjk1MzpcdFx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1NC1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTAwND1zdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDU6XHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMDYtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDU1PXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNTgte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDU5Olx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDYwLVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTg9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTE1OTpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTYwLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExOTk9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyMDIte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjAzOlx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjA0LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEyNzQ9c3RhdGljIGludCBfX2Nncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjgwLVx0ZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSA9IGF0dHItXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyODE6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgZnJvbV9hdHlwZSwgdG9fYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyODI6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODMtXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzMDAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMzAxOlx0XHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTMwMi1cdFx0aWYgKGZyb21fYXR5cGUgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzkwPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTQwOS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTQxMDpcdHJldCA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTQxMS1cdFx0XHRcdGF0dHItXHUwMDNlYXR0YWNoX3R5cGUsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTU0Mj1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU3MC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU3MTpcdGVyciA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIE5VTEwsIE5VTEwsIGxpbmssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NzItXHRcdFx0XHRsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsIEJQRl9GX0FMTE9XX01VTFRJIHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2MjY9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MjctXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNjI4Olx0XHRcdFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjI5LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MDQ9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTcwNTpcdFx0XHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzA2LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MzI9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzM0LVx0XHRcdFx0ICAgICAgaW50ICp1YWRkcmxlbixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTczNTpcdFx0XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTczNi1cdFx0XHRcdCAgICAgIHZvaWQgKnRfY3R4LFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc4Nj1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzg3LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzg4Olx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3ODkte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc5Nz1pbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc5ODpcdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzk5LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5NTQ9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5NTYtXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTU3Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gQlBGIEF0dGFjaG1lbnQgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggZm9yIEJQRiBhdHRhY2htZW50IHBvaW50cywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZXkmIzM5O3JlIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLiBJIHNlZSB0aGF0IGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIGtub3cgdGhleSYjMzk7cmUgY2FsbGVkIGZyb20gYHN5c2NhbGwuY2AsIHRoZSB1c3VhbCBzdXNwZWN0IGZvciBzeXNjYWxsIGhhbmRsaW5nLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdGhlIGFjdHVhbCBhdHRhY2htZW50IHByb2Nlc3MuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSB3aXRoaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGF0IGZpbGUgYW5kIHNjYW4gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDEzOTAgdG8gMTU4MCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGxvZ2ljIGZvciBob3cgQlBGIHByb2dyYW1zIG9yIGxpbmtzIGdldCBhdHRhY2hlZCB0byBjZ3JvdXBzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciB3aGVyZSB0aGluZ3MgY291bGQgcG90ZW50aWFsbHkgZ28gd3JvbmcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHRpbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjEzOTE6XHRcdFx0XHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjEzOTI6XHR7XG4xMzkzOlx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyA9IE5VTEw7XG4xMzk0Olx0XHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xuMTM5NTpcdFx0aW50IHJldDtcbjEzOTY6XHRcbjEzOTc6XHRcdGNncnAgPSBjZ3JvdXBfZ2V0X2Zyb21fZmQoYXR0ci1cdTAwM2V0YXJnZXRfZmQpO1xuMTM5ODpcdFx0aWYgKElTX0VSUihjZ3JwKSlcbjEzOTk6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY2dycCk7XG4xNDAwOlx0XG4xNDAxOlx0XHRpZiAoKGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkgXHUwMDI2XHUwMDI2XG4xNDAyOlx0XHQgICAgKGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSkge1xuMTQwMzpcdFx0XHRyZXBsYWNlX3Byb2cgPSBicGZfcHJvZ19nZXRfdHlwZShhdHRyLVx1MDAzZXJlcGxhY2VfYnBmX2ZkLCBwdHlwZSk7XG4xNDA0Olx0XHRcdGlmIChJU19FUlIocmVwbGFjZV9wcm9nKSkge1xuMTQwNTpcdFx0XHRcdGNncm91cF9wdXQoY2dycCk7XG4xNDA2Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocmVwbGFjZV9wcm9nKTtcbjE0MDc6XHRcdFx0fVxuMTQwODpcdFx0fVxuMTQwOTpcdFxuMTQxMDpcdFx0cmV0ID0gY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBOVUxMLFxuMTQxMTpcdFx0XHRcdFx0YXR0ci1cdTAwM2VhdHRhY2hfdHlwZSwgYXR0ci1cdTAwM2VhdHRhY2hfZmxhZ3MsXG4xNDEyOlx0XHRcdFx0XHRhdHRyLVx1MDAzZXJlbGF0aXZlX2ZkLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbjE0MTM6XHRcbjE0MTQ6XHRcdGlmIChyZXBsYWNlX3Byb2cpXG4xNDE1Olx0XHRcdGJwZl9wcm9nX3B1dChyZXBsYWNlX3Byb2cpO1xuMTQxNjpcdFx0Y2dyb3VwX3B1dChjZ3JwKTtcbjE0MTc6XHRcdHJldHVybiByZXQ7XG4xNDE4Olx0fVxuMTQxOTpcdFxuMTQyMDpcdGludCBjZ3JvdXBfYnBmX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXG4xNDIxOlx0e1xuMTQyMjpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMTQyMzpcdFx0c3RydWN0IGNncm91cCAqY2dycDtcbjE0MjQ6XHRcdGludCByZXQ7XG4xNDI1Olx0XG4xNDI2Olx0XHRjZ3JwID0gY2dyb3VwX2dldF9mcm9tX2ZkKGF0dHItXHUwMDNldGFyZ2V0X2ZkKTtcbjE0Mjc6XHRcdGlmIChJU19FUlIoY2dycCkpXG4xNDI4Olx0XHRcdHJldHVybiBQVFJfRVJSKGNncnApO1xuMTQyOTpcdFxuMTQzMDpcdFx0cHJvZyA9IGJwZl9wcm9nX2dldF90eXBlKGF0dHItXHUwMDNlYXR0YWNoX2JwZl9mZCwgcHR5cGUpO1xuMTQzMTpcdFx0aWYgKElTX0VSUihwcm9nKSlcbjE0MzI6XHRcdFx0cHJvZyA9IE5VTEw7XG4xNDMzOlx0XG4xNDM0Olx0XHRyZXQgPSBjZ3JvdXBfYnBmX2RldGFjaChjZ3JwLCBwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlLCBhdHRyLVx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcbjE0MzU6XHRcdGlmIChwcm9nKVxuMTQzNjpcdFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4xNDM3Olx0XG4xNDM4Olx0XHRjZ3JvdXBfcHV0KGNncnApO1xuMTQzOTpcdFx0cmV0dXJuIHJldDtcbjE0NDA6XHR9XG4xNDQxOlx0XG4xNDQyOlx0c3RhdGljIHZvaWQgYnBmX2Nncm91cF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuMTQ0MzpcdHtcbjE0NDQ6XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmNnX2xpbmsgPVxuMTQ0NTpcdFx0XHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9jZ3JvdXBfbGluaywgbGluayk7XG4xNDQ2Olx0XHRzdHJ1Y3QgY2dyb3VwICpjZztcbjE0NDc6XHRcbjE0NDg6XHRcdC8qIGxpbmsgbWlnaHQgaGF2ZSBiZWVuIGF1dG8tZGV0YWNoZWQgYnkgZHlpbmcgY2dyb3VwIGFscmVhZHksXG4xNDQ5Olx0XHQgKiBpbiB0aGF0IGNhc2Ugb3VyIHdvcmsgaXMgZG9uZSBoZXJlXG4xNDUwOlx0XHQgKi9cbjE0NTE6XHRcdGlmICghY2dfbGluay1cdTAwM2VjZ3JvdXApXG4xNDUyOlx0XHRcdHJldHVybjtcbjE0NTM6XHRcbjE0NTQ6XHRcdGNncm91cF9sb2NrKCk7XG4xNDU1Olx0XG4xNDU2Olx0XHQvKiByZS1jaGVjayBjZ3JvdXAgdW5kZXIgbG9jayBhZ2FpbiAqL1xuMTQ1NzpcdFx0aWYgKCFjZ19saW5rLVx1MDAzZWNncm91cCkge1xuMTQ1ODpcdFx0XHRjZ3JvdXBfdW5sb2NrKCk7XG4xNDU5Olx0XHRcdHJldHVybjtcbjE0NjA6XHRcdH1cbjE0NjE6XHRcbjE0NjI6XHRcdFdBUk5fT04oX19jZ3JvdXBfYnBmX2RldGFjaChjZ19saW5rLVx1MDAzZWNncm91cCwgTlVMTCwgY2dfbGluayxcbjE0NjM6XHRcdFx0XHRcdCAgICBsaW5rLVx1MDAzZWF0dGFjaF90eXBlLCAwKSk7XG4xNDY0Olx0XHRpZiAobGluay1cdTAwM2VhdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcbjE0NjU6XHRcdFx0YnBmX3RyYW1wb2xpbmVfdW5saW5rX2Nncm91cF9zaGltKGNnX2xpbmstXHUwMDNlbGluay5wcm9nKTtcbjE0NjY6XHRcbjE0Njc6XHRcdGNnID0gY2dfbGluay1cdTAwM2VjZ3JvdXA7XG4xNDY4Olx0XHRjZ19saW5rLVx1MDAzZWNncm91cCA9IE5VTEw7XG4xNDY5Olx0XG4xNDcwOlx0XHRjZ3JvdXBfdW5sb2NrKCk7XG4xNDcxOlx0XG4xNDcyOlx0XHRjZ3JvdXBfcHV0KGNnKTtcbjE0NzM6XHR9XG4xNDc0Olx0XG4xNDc1Olx0c3RhdGljIHZvaWQgYnBmX2Nncm91cF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuMTQ3NjpcdHtcbjE0Nzc6XHRcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmNnX2xpbmsgPVxuMTQ3ODpcdFx0XHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl9jZ3JvdXBfbGluaywgbGluayk7XG4xNDc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzcyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gQlBGIENncm91cCBBdHRhY2htZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoZSBCUEYgY2dyb3VwIGF0dGFjaG1lbnQgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGluIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gVGhlIGNvcmUgaXNzdWUgc3RlbXMgZnJvbSBob3cgYG5ld19wcm9nYCBpcyBiZWluZyBhc3NpZ25lZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIGEgY3Jhc2ggaWYgYm90aCBgcHJvZ2AgYW5kIGBsaW5rYCB3ZXJlIE5VTEwuIFRoZSBwcm9ibGVtYXRpYyBsaW5lIHdhcyBgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstJmd0O2xpbmsucHJvZztgLiBJZiBib3RoIHdlcmUgTlVMTCwgdGhlIHRlcm5hcnkgb3BlcmF0b3Igd291bGQgZXZhbHVhdGUgdG8gYGxpbmstJmd0O2xpbmsucHJvZ2AsIGRlcmVmZXJlbmNpbmcgYSBOVUxMIGBsaW5rYCBwb2ludGVyIGFuZCBjYXVzaW5nIGEgY3Jhc2ggYmVmb3JlIGFueSBlcnJvciBjaGVja3Mgd2VyZSByZWFjaGVkLiBJIGNhbiBzZWUgdGhpcyBjbGVhcmx5LCB0aGUgY29kZSB3b3VsZCB0cnkgdG8gZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIgd2hlbiBgbGlua2Agd2FzIGBOVUxMYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGFkZGluZyBhIG5lc3RlZCBjb25kaXRpb25hbDogYHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiAobGluayA/IGxpbmstJmd0O2xpbmsucHJvZyA6IE5VTEwpO2AsIHdoaWNoIG5vdyBzYWZlbHkgaGFuZGxlcyB0aGUgTlVMTCBgbGlua2AgY2FzZSBieSBhc3NpZ25pbmcgYE5VTExgIHRvIGBuZXdfcHJvZ2AuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGF0dGFjayBzdXJmYWNlLiBJcyB0aGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBwYXRoLiBXaGF0IHN5bWJvbHMgc2hvdWxkIEkgZm9jdXMgb24/IEkgYWxzbyBuZWVkIHRvIGFzc2VzcyBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGFib3V0IHN5c3RlbSBjYWxscz8gVGhlIGZ1bmN0aW9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBjb21lcyB0byBtaW5kLiBJdCBjYWxscyBgY2dyb3VwX2JwZl9hdHRhY2hgIGRpcmVjdGx5LiBTbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIG1pZ2h0IHJldmVhbCBpZiB0aGUgdnVsbmVyYWJpbGl0eSBpcyBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlIHN5c2NhbGxzLiBTcGVjaWZpY2FsbHkgSSBuZWVkIHRvIGRldGVybWluZSB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgYHByb2dgIGNhbiBiZSBOVUxMIG9yIG5vdCBpbnNpZGUgdGhlIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTE4MD1zdGF0aWMgaW5saW5lIGJvb2wgY2dyb3VwX2JwZl9zb2NrX2VuYWJsZWQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQxNy1cbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjQxODppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQxOS1cdFx0XHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4tLVxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9NDMwPXN0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfYnBmX2xpZmV0aW1lX25vdGlmaWVyX2luaXQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MzQtXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0MzU6c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQzNi1cdFx0XHRcdFx0IGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEzNzk9c3RhdGljIGludCBjZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM4OS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MDppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5MS1cdFx0XHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NTc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MTQtXHRpZiAoaXNfY2dyb3VwX3Byb2dfdHlwZShwdHlwZSwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2MTU6XHRcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNi1cdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjI2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBCUEYgYW5kIGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBMaW5rIEF0dGFjaG1lbnQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGludG8gQlBGIGxpbmsgYXR0YWNobWVudHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIHRoaXMgY29kZSByZXNpZGVzLCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGlzIGZpbGUgb2Z0ZW4gY29udGFpbnMgdGhlIGNvcmUgc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb25zLCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIHNvdW5kcyBsaWtlIGl0JiMzOTtkIGZhbGwgdW5kZXIgdGhhdCBjYXRlZ29yeS4gQnV0LCBrbm93aW5nIGhvdyB0aGVzZSB0aGluZ3MgY2FuIHNvbWV0aW1lcyBiZSBkaXN0cmlidXRlZCwgYW5kIHdpdGggQlBGIGJlaW5nIHRoZSBicm9hZCB0aGluZyBpdCBpcywgSSBjYW4mIzM5O3QgYmUgKmNvbXBsZXRlbHkqIGNlcnRhaW4gaXQmIzM5O3MgaW4gdGhhdCBmaWxlLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEkgbmVlZCB0byBrZWVwIGFuIG9wZW4gbWluZCB0byB0aGUgcG9zc2liaWx0eSB0aGF0IGl0IGNvdWxkIGJlIGluIGEgc2libGluZyBvciBzdXBwb3J0IGZpbGUuIEkmIzM5O2xsIGNoZWNrIGBzeXNjYWxsLmNgIGZpcnN0LCBidXQgSSYjMzk7bGwgbWVudGFsbHkga2VlcCBvdGhlciBwb3RlbnRpYWwgbG9jYXRpb25zIG9wZW4uIEJlc3QgdG8gYmUgc3lzdGVtYXRpYyBmcm9tIHRoZSBvdXRzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9NDIwPWludCBjZ3JvdXBfYnBmX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtNDIxLVx0XHRcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0MjI6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MjMtaW50IGNncm91cF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD00NDI9c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00NDctXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0NDg6c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQ0OS1cdFx0XHRcdFx0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE1MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX2Nncm91cF9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTQxLVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNTQyOmludCBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NDMte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3OTM9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgyMC1cdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4MjE6XHRcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODIyLVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODQxLVx0XHRlbHNlIGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9MU01fQ0dST1VQKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg0MjpcdFx0XHRyZXQgPSBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg0My1cdFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgY2dyb3VwX2JwZl9hdHRhY2hgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbiwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBcmUgdGhlcmUgYW55IG90aGVyIGxvY2F0aW9ucyBjYWxsaW5nIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucz8gV2hlcmUgZWxzZSBhcmUgdGhleSBiZWluZyB1c2VkIGluIHRoZSBrZXJuZWw/JiMzNDsuCgpJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbjogYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBuZWFyIHRoZSBkZWZpbml0aW9uIG9mIGBjZ3JvdXBfYnBmX2F0dGFjaGAgaXRzZWxmLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGlmZmVyZW50IHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aGluIHRoZSBicm9hZGVyIGNncm91cCBhbmQgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkzMDpcdFx0XHRobGlzdF9kZWwoXHUwMDI2cGwtXHUwMDNlbm9kZSk7XG4gOTMxOlx0XHRcdGtmcmVlKHBsKTtcbiA5MzI6XHRcdH1cbiA5MzM6XHRcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcbiA5MzQ6XHRcdHJldHVybiBlcnI7XG4gOTM1Olx0fVxuIDkzNjpcdFxuIDkzNzpcdHN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiA5Mzg6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXG4gOTM5Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuIDk0MDpcdFx0XHRcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSxcbiA5NDE6XHRcdFx0XHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pXG4gOTQyOlx0e1xuIDk0MzpcdFx0aW50IHJldDtcbiA5NDQ6XHRcbiA5NDU6XHRcdGNncm91cF9sb2NrKCk7XG4gOTQ2Olx0XHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXG4gOTQ3Olx0XHRcdFx0XHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XG4gOTQ4Olx0XHRjZ3JvdXBfdW5sb2NrKCk7XG4gOTQ5Olx0XHRyZXR1cm4gcmV0O1xuIDk1MDpcdH1cbiA5NTE6XHRcbiA5NTI6XHRzdGF0aWMgaW50IGVmZmVjdGl2ZV9wcm9nX3BvcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIDk1MzpcdFx0XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbiA5NTQ6XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxuIDk1NTpcdHtcbiA5NTY6XHRcdGludCBjbnQgPSAwLCBwcmVvcmRlcl9jbnQgPSAwLCBmc3RhcnQsIGJzdGFydCwgaW5pdF9ic3RhcnQsIHBvcyA9IC0xO1xuIDk1NzpcdFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIDk1ODpcdFx0c3RydWN0IGNncm91cCAqcCA9IGNncnA7XG4gOTU5Olx0XG4gOTYwOlx0XHQvKiBjb3VudCBlZmZlY3RpdmUgcHJvZ3JhbXMgdG8gZmluZCB3aGVyZSB0aGUgcHJlb3JkZXIgcmVnaW9uIGVuZHMgKi9cbiA5NjE6XHRcdGRvIHtcbiA5NjI6XHRcdFx0aWYgKGNudCA9PSAwIHx8IChwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSlcbiA5NjM6XHRcdFx0XHRjbnQgJiM0Mzs9IHByb2dfbGlzdF9sZW5ndGgoXHUwMDI2cC1cdTAwM2VicGYucHJvZ3NbYXR5cGVdLCBcdTAwMjZwcmVvcmRlcl9jbnQpO1xuIDk2NDpcdFx0XHRwID0gY2dyb3VwX3BhcmVudChwKTtcbiA5NjU6XHRcdH0gd2hpbGUgKHApO1xuIDk2NjpcdFxuIDk2NzpcdFx0LyogcmVwbGF5IGNvbXB1dGVfZWZmZWN0aXZlX3Byb2dzKCkgcGxhY2VtZW50IGFuZCByZWNvcmQgdGFyZ2V0JiMzOTtzIHNsb3QgKi9cbiA5Njg6XHRcdGNudCA9IDA7XG4gOTY5Olx0XHRwID0gY2dycDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJQRiBDZ3JvdXAgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBDT05GSUdgIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBvYnZpb3VzIHBsYWNlcy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MuIFRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIG9yIHBvc3NpYmx5IGV2ZW4gYGluaXQvS2NvbmZpZ2Ag4oCTIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIOKAkyB0byBzZWUgaWYgdGhlIHJlbGV2YW50IGZlYXR1cmVzIGhhdmUgdGhlaXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZGVmaW5lZC4gR290dGEgdHJhY2sgZG93biB0aG9zZSBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICphY3R1YWxseSogZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Mzg9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS00MC1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTE1OD1zdGF0aWMgdm9pZCBwdXJnZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE3Mi1cdFx0cG9zID0gZWZmZWN0aXZlX3Byb2dfcG9zKGRlc2MsIGF0eXBlLCBwbCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjExNzM6XHRcdC8qIG5vIGxpbmsgb3IgcHJvZyBtYXRjaCwgc2tpcCB0aGUgY2dyb3VwIG9mIHRoaXMgbGF5ZXIgKi9cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE3NC1cdFx0aWYgKHBvcyBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMTUtICogIDMuIFdhbGsgdGhlIGFuY2VzdG9ycyBvZiBhIGNncm91cC5cbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoxNjogKiAgNC4gU2hvdyB0aGUgZ2l2ZW4gY2dyb3VwIG9ubHkuXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMTctICogIDUuIFdhbGsgdGhlIGNoaWxkcmVuIG9mIGEgZ2l2ZW4gcGFyZW50IGNncm91cC5cbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MTY3PXN0YXRpYyBpbnQgY2dyb3VwX2l0ZXJfc2VxX2luaXQodm9pZCAqcHJpdiwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTE4MC1cdHAtXHUwMDNldmlzaXRlZF9hbGwgPSBmYWxzZTtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoxODE6XHRwLVx1MDAzZW9yZGVyID0gYXV4LVx1MDAzZWNncm91cC5vcmRlcjtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0xODItXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MTk5PXN0YXRpYyBpbnQgYnBmX2l0ZXJfYXR0YWNoX2Nncm91cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTIwNC1cdHU2NCBpZCA9IGxpbmZvLVx1MDAzZWNncm91cC5jZ3JvdXBfaWQ7XG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjA1Olx0aW50IG9yZGVyID0gbGluZm8tXHUwMDNlY2dyb3VwLm9yZGVyO1xua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTIwNi1cdHN0cnVjdCBjZ3JvdXAgKmNncnA7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTIzMi1cdGF1eC1cdTAwM2VjZ3JvdXAuc3RhcnQgPSBjZ3JwO1xua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jOjIzMzpcdGF1eC1cdTAwM2VjZ3JvdXAub3JkZXIgPSBvcmRlcjtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yMzQtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MjQyPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2Nncm91cF9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjYzLXNob3dfb3JkZXI6XG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjY0Olx0aWYgKGF1eC1cdTAwM2VjZ3JvdXAub3JkZXIgPT0gQlBGX0NHUk9VUF9JVEVSX0RFU0NFTkRBTlRTX1BSRSlcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNjUtXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7b3JkZXI6IGRlc2NlbmRhbnRzX3ByZVxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjY2Olx0ZWxzZSBpZiAoYXV4LVx1MDAzZWNncm91cC5vcmRlciA9PSBCUEZfQ0dST1VQX0lURVJfREVTQ0VOREFOVFNfUE9TVClcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNjctXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7b3JkZXI6IGRlc2NlbmRhbnRzX3Bvc3RcXG5cJiMzNDspO1xua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jOjI2ODpcdGVsc2UgaWYgKGF1eC1cdTAwM2VjZ3JvdXAub3JkZXIgPT0gQlBGX0NHUk9VUF9JVEVSX0FOQ0VTVE9SU19VUClcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNjktXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7b3JkZXI6IGFuY2VzdG9yc191cFxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjcwOlx0ZWxzZSBpZiAoYXV4LVx1MDAzZWNncm91cC5vcmRlciA9PSBCUEZfQ0dST1VQX0lURVJfQ0hJTERSRU4pXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjcxLVx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O29yZGVyOiBjaGlsZHJlblxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jPTI3Nj1zdGF0aWMgaW50IGJwZl9pdGVyX2Nncm91cF9maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjc4LXtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyNzk6XHRpbmZvLVx1MDAzZWl0ZXIuY2dyb3VwLm9yZGVyID0gYXV4LVx1MDAzZWNncm91cC5vcmRlcjtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yODAtXHRpbmZvLVx1MDAzZWl0ZXIuY2dyb3VwLmNncm91cF9pZCA9IGNncm91cF9pZChhdXgtXHUwMDNlY2dyb3VwLnN0YXJ0KTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yODUwPUNGSV9OT1NFQUwoYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODU2LSAqIGNhbGxpbmcgYnBmX2Nncm91cF9yZWxlYXNlKCkuXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyODU3OiAqIEBjZ3JwOiBUaGUgY2dyb3VwIG9uIHdoaWNoIGEgcmVmZXJlbmNlIGlzIGJlaW5nIGFjcXVpcmVkLlxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjg1OC0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jPTI4NTk9X19icGZfa2Z1bmMgc3RydWN0IGNncm91cCAqYnBmX2Nncm91cF9hY3F1aXJlKHN0cnVjdCBjZ3JvdXAgKmNncnApXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjg2OC0gKiBkcm9wcyB0byAwLlxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg2OTogKiBAY2dycDogVGhlIGNncm91cCBvbiB3aGljaCBhIHJlZmVyZW5jZSBpcyBiZWluZyByZWxlYXNlZC5cbmtlcm5lbC9icGYvaGVscGVycy5jLTI4NzAtICovXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjk1NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2N1cnJlbnRfdGFza191bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjk2My0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjI5NjQ6ICogYnBmX3Rhc2tfZ2V0X2Nncm91cDEgLSBBY3F1aXJlcyB0aGUgYXNzb2NpYXRlZCBjZ3JvdXAgb2YgYSB0YXNrIHdpdGhpbiBhXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yOTY1LSAqIHNwZWNpZmljIGNncm91cDEgaGllcmFyY2h5LiBUaGUgY2dyb3VwMSBoaWVyYXJjaHkgaXMgaWRlbnRpZmllZCBieSBpdHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBUaGF0IGBDR1JPVVBfQlBGYCBLY29uZmlnIFN5bWJvbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgS2NvbmZpZyBkZWZpbml0aW9uIGZvciBgQ0dST1VQX0JQRmAuIEl04oCZcyBzb21ldGhpbmcgSSYjMzk7dmUgcHJvYmFibHkgY29uZmlndXJlZCBhIGRvemVuIHRpbWVzIGJlZm9yZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBleGFjdCBsb2NhdGlvbiBvciBhbnkgZGVwZW5kZW5jaWVzLiBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSeKAmWxsIHN0YXJ0IHdpdGggYSBgZmluZGAgb3IgYGdyZXBgIGFjcm9zcyB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyBzb21ldGhpbmcgbGlrZSBgZmluZCAuIC1uYW1lICYjMzQ7S2NvbmZpZyomIzM0OyAtcHJpbnQwIHwgeGFyZ3MgLTAgZ3JlcCBDR1JPVVBfQlBGYCBzaG91bGQgZG8gdGhlIHRyaWNrLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgS2NvbmZpZyBzdHJ1Y3R1cmUg4oCTIHRoZSBgY29uZmlnIENHUk9VUF9CUEZgLCBgYm9vbGAsIHRoZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCB0aGUgaGVscCB0ZXh0LCBhbmQgc28gb24uIEkgbmVlZCB0aGUgc3BlY2lmaWNzIHNvIEkgY2FuIHVuZGVyc3RhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBTb21ldGltZXMsIHRoZSBzeW1ib2wgaXMgZGVmaW5lZCBpbiBhIG1vcmUgZ2VuZXJpYyBjb25maWcgZmlsZSwgYW5kIGlzIHRoZW4gc2VsZWN0ZWQgZWxzZXdoZXJlLiBJdCYjMzk7cyBvZnRlbiBoZWxwZnVsIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMgdGhhdCBtaWdodCBiZSB0aWVkIHRvIGl0LgoKSWYgdGhlIGJhc2ljIHNlYXJjaCBpc24mIzM5O3QgZnJ1aXRmdWwsIHRoZW4gSSYjMzk7bGwgcHJvYmFibHkgYnJvYWRlbiBteSBzZWFyY2guIEkgY291bGQgYWxzbyByZW1lbWJlciB0aGF0IEkgY29uZmlndXJlZCBpdCByZWNlbnRseSwgc28gY2hlY2tpbmcgbXkgYC5jb25maWdgIGZpbGUgbWlnaHQgYmUgYSBzaG9ydGN1dC4gSSBtaWdodCBhbHNvIHRyeSBsb29raW5nIGZvciByZWxhdGVkIHRlcm1zLCBzdWNoIGFzICYjMzQ7QlBGJiMzNDssICYjMzQ7Y2dyb3VwJiMzNDssIG9yICYjMzQ7c2VjdXJpdHkmIzM0OyBpbiB0aGUgc2FtZSBLY29uZmlnIGZpbGVzLCBpbiBjYXNlIHRoZSBzeW1ib2wgaXMgaW5kaXJlY3RseSByZWxhdGVkLgoKT25jZSBJJiMzOTt2ZSBnb3QgdGhlIGRlZmluaXRpb24sIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGhlbHAgdGV4dCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzLCBvciBpZiBpdCBwb2ludHMgdG8gb3RoZXIgdXNlZnVsIGRvY3VtZW50YXRpb24uIEZpbmFsbHksIEkmIzM5O2xsIG1lbnRhbGx5IGZpbGUgdGhpcyBhd2F5IChvciBtYXliZSBqb3QgaXQgZG93biwgZGVwZW5kaW5nIG9uIGhvdyBvZnRlbiBJIG5lZWQgdG8gZG8gdGhpcykgdG8gc3RyZWFtbGluZSB0aGlzIHByb2Nlc3MgbmV4dCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX0JQRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTM0NT1jb25maWcgQ0dST1VQX1BFUkZcbi0tXG5pbml0L0tjb25maWctMTM1NS1cbmluaXQvS2NvbmZpZzoxMzU2OmNvbmZpZyBDR1JPVVBfQlBGXG5pbml0L0tjb25maWctMTM1Ny1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBuZXcgY29uZmlndXJhdGlvbiBpc3N1ZT8gUmlnaHQsIGBpbml0L0tjb25maWdgIOKAkyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCYjMzk7cyBhdmFpbGFibGUgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBib290IHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDEzNTYuIEkgZmlndXJlIHRoYXQgbG9jYXRpb24gaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGRlY2xhcmF0aW9ucyBvciBpbmNsdWRlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IEkmIzM5O20gZm9jdXNlZCBvbi4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25zIGFyZSBkZWZpbmVkIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc2hlZHMgYW55IGxpZ2h0IG9uIHRoZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MDpcdFx0ICB0byB0aHJlYWRzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2dyb3VwIHNwZWNpZmllZCBhbmQgcnVuIG9uIHRoZVxuMTM1MTpcdFx0ICBkZXNpZ25hdGVkIGNwdS4gIE9yIHRoaXMgY2FuIGJlIHVzZWQgdG8gaGF2ZSBjZ3JvdXAgSUQgaW4gc2FtcGxlc1xuMTM1MjpcdFx0ICBzbyB0aGF0IGl0IGNhbiBtb25pdG9yIHBlcmZvcm1hbmNlIGV2ZW50cyBhbW9uZyBjZ3JvdXBzLlxuMTM1MzpcdFxuMTM1NDpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMzU1Olx0XG4xMzU2Olx0Y29uZmlnIENHUk9VUF9CUEZcbjEzNTc6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4xMzU4Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4xMzU5Olx0XHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxuMTM2MDpcdFx0aGVscFxuMTM2MTpcdFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXG4xMzYyOlx0XHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXG4xMzYzOlx0XG4xMzY0Olx0XHQgIEluIHdoaWNoIGNvbnRleHQgdGhlc2UgcHJvZ3JhbXMgYXJlIGFjY2Vzc2VkIGRlcGVuZHMgb24gdGhlIHR5cGVcbjEzNjU6XHRcdCAgb2YgYXR0YWNobWVudC4gRm9yIGluc3RhbmNlLCBwcm9ncmFtcyB0aGF0IGFyZSBhdHRhY2hlZCB1c2luZ1xuMTM2NjpcdFx0ICBCUEZfQ0dST1VQX0lORVRfSU5HUkVTUyB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBpbmdyZXNzIHBhdGggb2ZcbjEzNjc6XHRcdCAgaW5ldCBzb2NrZXRzLlxuMTM2ODpcdFxuMTM2OTpcdGNvbmZpZyBDR1JPVVBfTUlTQ1xuMTM3MDpcdFx0Ym9vbCBcJiMzNDtNaXNjIHJlc291cmNlIGNvbnRyb2xsZXJcJiMzNDtcbjEzNzE6XHRcdGRlZmF1bHQgblxuMTM3MjpcdFx0aGVscFxuMTM3MzpcdFx0ICBQcm92aWRlcyBhIGNvbnRyb2xsZXIgZm9yIG1pc2NlbGxhbmVvdXMgcmVzb3VyY2VzIG9uIGEgaG9zdC5cbjEzNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgYENHUk9VUF9CUEZgIERlcGVuZGVuY3kqKgoKT2theSwgc28gYENHUk9VUF9CUEZgIGlzIGNsZWFybHkgcmVsaWFudCBvbiBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYGNncm91cC5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBpbiB0aGUgY29yZSBjZ3JvdXAgaW1wbGVtZW50YXRpb24gdGhhdCYjMzk7cyB0aWVkIHRvIHRoaXMuIFRoZW4sIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGJlZ2lubmluZyBvZiBga2VybmVsL2JwZi9jZ3JvdXAuY2AgZm9yIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MgdGhhdCBtaWdodCBpbXBhY3QgaG93IGBDR1JPVVBfQlBGYCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdldCBhIGhvbGlzdGljIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIEZ1bmN0aW9ucyB0byBtYW5hZ2UgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTYgRGFuaWVsIE1hY2tcbiAgIDY6XHQgKi9cbiAgIDc6XHRcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi1jZ3JvdXAuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY25ldC9icGZfc2tfc3RvcmFnZS5oXHUwMDNlXG4gIDIxOlx0XG4gIDIyOlx0I2luY2x1ZGUgXCYjMzQ7Li4vY2dyb3VwL2Nncm91cC1pbnRlcm5hbC5oXCYjMzQ7XG4gIDIzOlx0XG4gIDI0Olx0REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UoY2dyb3VwX2JwZl9lbmFibGVkX2tleSwgTUFYX0NHUk9VUF9CUEZfQVRUQUNIX1RZUEUpO1xuICAyNTpcdEVYUE9SVF9TWU1CT0woY2dyb3VwX2JwZl9lbmFibGVkX2tleSk7XG4gIDI2Olx0XG4gIDI3Olx0LypcbiAgMjg6XHQgKiBjZ3JvdXAgYnBmIGRlc3RydWN0aW9uIG1ha2VzIGhlYXZ5IHVzZSBvZiB3b3JrIGl0ZW1zIGFuZCB0aGVyZSBjYW4gYmUgYSBsb3RcbiAgMjk6XHQgKiBvZiBjb25jdXJyZW50IGRlc3RydWN0aW9ucy4gIFVzZSBhIHNlcGFyYXRlIHdvcmtxdWV1ZSBzbyB0aGF0IGNncm91cCBicGZcbiAgMzA6XHQgKiBkZXN0cnVjdGlvbiB3b3JrIGl0ZW1zIGRvbiYjMzk7dCBlbmQgdXAgZmlsbGluZyB1cCBtYXhfYWN0aXZlIG9mIHN5c3RlbV9wZXJjcHVfd3FcbiAgMzE6XHQgKiB3aGljaCBtYXkgbGVhZCB0byBkZWFkbG9jay5cbiAgMzI6XHQgKi9cbiAgMzM6XHRzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNncm91cF9icGZfZGVzdHJveV93cTtcbiAgMzQ6XHRcbiAgMzU6XHRzdGF0aWMgaW50IF9faW5pdCBjZ3JvdXBfYnBmX3dxX2luaXQodm9pZClcbiAgMzY6XHR7XG4gIDM3Olx0XHRjZ3JvdXBfYnBmX2Rlc3Ryb3lfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7Y2dyb3VwX2JwZl9kZXN0cm95XCYjMzQ7LFxuICAzODpcdFx0XHRcdFx0XHRcdFdRX1BFUkNQVSwgMSk7XG4gIDM5Olx0XHRpZiAoIWNncm91cF9icGZfZGVzdHJveV93cSlcbiAgNDA6XHRcdFx0cGFuaWMoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jIHdvcmtxdWV1ZSBmb3IgY2dyb3VwIGJwZiBkZXN0cm95LlxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzY4CgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDk0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBDZ3JvdXAgQlBGIEF0dGFjaCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyB0aGUgY29yZSBjZ3JvdXAgQlBGIGF0dGFjaCBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaXMgYmVpbmcgYWRkcmVzc2VkLiBUaGF0IGZ1bmN0aW9uIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFdlJiMzOTt2ZSBjb25maXJtZWQgdGhlc2UgZW50cnkgcG9pbnRzIGFyZSBpbmRlZWQgbm9uLXN0YXRpYyDigJMgZ29vZC4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBzYWZlbHkgZXZhbHVhdGVzIHRoZSBgbGlua2AgcG9pbnRlciBhbmQgcmV0dXJucyBhbiBlcnJvciBpZiBgbmV3X3Byb2dgIGlzIE5VTEwsIHByZXZlbnRpbmcgdGhlIGRlcmVmZXJlbmNlLiBJbXBvcnRhbnRseSwgdGhpcyAqZG9lcyogbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgd2l0aGluIHRoZSBicGYgc3lzY2FsbCwgZGVhbGluZyB3aXRoIHByb2dyYW0gYXR0YWNobWVudCBhbmQgY2dyb3VwIEJQRiBtYW5hZ2VtZW50LgoKTm93LCBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBjZ3JvdXAgQlBGIGludGVyYWN0aW9uIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgYGJwZmAgc3lzY2FsbCAoYEJQRl9QUk9HX0FUVEFDSGAsIGBCUEZfTElOS19DUkVBVEVgKSwgYW5kIHRoZXNlIGNhbiBiZSB0ZXN0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoZSBCUEYgYXR0YWNoIG1lY2hhbmlzbXMgd2l0aCB2YXJpb3VzIGZsYWcgYW5kIHBvaW50ZXIgY29tYmluYXRpb25zIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBzbyB0aGUgcG90ZW50aWFsIHBheW9mZiBpcyB3b3J0aCB0aGUgZWZmb3J0LgoKVG8gZW5hYmxlIHByb3BlciB0ZXN0aW5nLCB3ZSBuZWVkIGBDR1JPVVBfQlBGYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEJQRl9TWVNDQUxMYC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhlIEtjb25maWcgZmlsZXMsIGFuZCB0aGVzZSBzZWVtIHRvIGJlIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTm8gb3RoZXIgZGVwZW5kZW5jaWVzIGp1bXAgb3V0LgoKRm9yIGZ1enppbmcgZm9jdXMsIHdlJiMzOTtsbCB0YXJnZXQgdGhlIGVudHJ5IHBvaW50czogYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBleHBvc2UgYW5kIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuCgpGaW5hbGx5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgZmFsbCBpbnRvIGFueSBvZiB0aGUgZGlzcXVhbGlmeWluZyBjYXRlZ29yaWVzIGZvciBmdXp6aW5nIChkb2N1bWVudGF0aW9uIGNoYW5nZXMgb25seSwgbG9nZ2luZyBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlLCBldGMuKSBhbmQgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIGEgY3JpdGljYWwgcGF0aCB3aXRoIGEgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlLiBUaGVyZWZvcmUsIGl0IGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZ2AuCgpJbiBzdW1tYXJ5LCB0aGUgc3BlY2lmaWMgYEZvY3VzU3ltYm9sc2AgYXJlOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBCUEZfU1lTQ0FMTGAgYW5kIGBDR1JPVVBfQlBGYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNncm91cCBCUEYgYXR0YWNobWVudCBwYXRoIChfX2Nncm91cF9icGZfYXR0YWNoKSB3aGVuIGRldGVybWluaW5nIHRoZSBuZXcgcHJvZ3JhbSB0byBhdHRhY2guIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgYW5kIGNncm91cCBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBzeXNjYWxsIG9wZXJhdGlvbnMgKGUuZy4sIEJQRl9QUk9HX0FUVEFDSCBhbmQgQlBGX0xJTktfQ1JFQVRFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY2dyb3VwIEJQRiBhdHRhY2htZW50IHBhdGggKF9fY2dyb3VwX2JwZl9hdHRhY2gpIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG5ldyBwcm9ncmFtIHRvIGF0dGFjaC4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBhbmQgY2dyb3VwIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHN5c2NhbGwgb3BlcmF0aW9ucyAoZS5nLiwgQlBGX1BST0dfQVRUQUNIIGFuZCBCUEZfTElOS19DUkVBVEUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2goKWAgd2hlbiBib3RoIGBwcm9nYCBhbmQgYGxpbmtgIGFyZ3VtZW50cyBhcmUgTlVMTC4gSXQgZ3VhcmRzIHRoZSBkZXJlZmVyZW5jZSBvZiBgbGluay1cdTAwM2VsaW5rLnByb2dgIGFuZCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgaWYgKCFuZXdfcHJvZykgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gU2luY2UgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlICh3aGljaCBpcyBhbHJlYWR5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBoYW5kbGVycyBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzKSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1ZTY5NTk3ODkzMjYxMGMzZmI0MzczMDJmYjk3YjA0YmMwYjA5ODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKaW5kZXggMTQ5NjcyYzc2YzQ5Yy4uMTU2ZmM0ZDYwZGFmNiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jCkBAIC04MTQsNyAmIzQzOzgxNCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKIAlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307Ci0Jc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstJmd0O2xpbmsucHJvZzsKJiM0MzsJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IChsaW5rID8gbGluay0mZ3Q7bGluay5wcm9nIDogTlVMTCk7CiAJZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlOwogCXUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFnczsKIAlzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7CkBAIC04MzQsNiAmIzQzOzgzNCw4IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCWlmICghIXJlcGxhY2VfcHJvZyAhPSAhIShmbGFncyAmYW1wOyBCUEZfRl9SRVBMQUNFKSkKIAkJLyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghbmV3X3Byb2cpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCWF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLSZndDthdXgtJmd0O2F0dGFjaF9idGZfaWQpOwogCWlmIChhdHlwZSAmbHQ7IDApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIENncm91cCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGFuZCB0aGUgY2hhbmdlcyBtYWRlIHRvIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGhlIGBkaWZmYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2VlIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIGFyb3VuZCBsaW5lIDgxNC4gTG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXQgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIHRoZSBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIGNncm91cHMuIEkgc2VlIGNoYW5nZXMgcmVsYXRlZCB0byBgbmV3X3Byb2dgIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgbnVsbCB2YWx1ZXMuIFRoZSBhZGRpdGlvbiBvZiB0aGUgY2hlY2sgYGlmICghbmV3X3Byb2cpYCBpcyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIG5ldyB2YWxpZGF0aW9uIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoZWNrIHdhc24mIzM5O3QgcHJlc2VudCBiZWZvcmUuCgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgbmV3X3Byb2dgIG1pZ2h0IGJlIG51bGwgYW5kIGhvdyB0aGUgcGF0Y2ggYWRkcmVzc2VzIHRob3NlIHNjZW5hcmlvcy4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBPciBpcyB0aGlzIGNoYW5nZSBlbmFibGluZyBhIG5ldyBmdW5jdGlvbmFsaXR5LCBzdWNoIGFzIHN1cHBvcnRpbmcgZGV0YWNoZWQgY2dyb3VwIEJQRiBwcm9ncmFtcz8gVGhlIGNvZGUgY29tbWVudCAmIzM0O3JlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhJiMzNDsgaXMgYSBzdGFuZGFyZCB2YWxpZGF0aW9uIGNoZWNrLiBIb3dldmVyLCB0aGUgYWRkaXRpb24gb2YgdGhlIG5ldyBjaGVjayBtYXkgbWVhbiB0aGF0IHRoZSBjaGVjayBmb3IgdGhlIHJlcGxhY2UgZmxhZyBoYXMgYmVjb21lIGRlcGVuZGVudCBvbiBhbm90aGVyIGNvbmRpdGlvbiBhbmQgdGh1cyByZXF1aXJlZCBhIG5ldyB2YWxpZGF0aW9uLiBMZXQgbWUgcmVhZCBtb3JlIGFib3V0IHRoZSBjb250ZXh0IHVzaW5nIGByZWFkLWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdCAqIEBpZF9vcl9mZDogUmVsYXRpdmUgcHJvZyBpZCBvciBmZFxuIDgwMTpcdCAqIEByZXZpc2lvbjogYnBmX3Byb2dfbGlzdCByZXZpc2lvblxuIDgwMjpcdCAqXG4gODAzOlx0ICogRXhhY3RseSBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1udWxsLlxuIDgwNDpcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuXG4gODA1Olx0ICovXG4gODA2Olx0c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gODA3Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXG4gODA4Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXG4gODA5Olx0XHRcdFx0ICAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxuIDgxMDpcdFx0XHRcdCAgICAgICB1NjQgcmV2aXNpb24pXG4gODExOlx0e1xuIDgxMjpcdFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQUxMT1dfT1ZFUlJJREUgfCBCUEZfRl9BTExPV19NVUxUSSkpO1xuIDgxMzpcdFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XG4gODE0Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTU6XHRcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTY6XHRcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiA4MTc6XHRcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiAobGluayA/IGxpbmstXHUwMDNlbGluay5wcm9nIDogTlVMTCk7XG4gODE4Olx0XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4gODE5Olx0XHR1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7XG4gODIwOlx0XHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XG4gODIxOlx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XG4gODIyOlx0XHRpbnQgZXJyO1xuIDgyMzpcdFxuIDgyNDpcdFx0aWYgKCgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XG4gODI1Olx0XHQgICAgKChmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkpXG4gODI2Olx0XHRcdC8qIGludmFsaWQgY29tYmluYXRpb24gKi9cbiA4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODI4Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQkVGT1JFIHwgQlBGX0ZfQUZURVIpKSlcbiA4Mjk6XHRcdFx0Lyogb25seSBlaXRoZXIgcmVwbGFjZSBvciBpbnNlcnRpb24gd2l0aCBiZWZvcmUvYWZ0ZXIgKi9cbiA4MzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODMxOlx0XHRpZiAobGluayBcdTAwMjZcdTAwMjYgKHByb2cgfHwgcmVwbGFjZV9wcm9nKSlcbiA4MzI6XHRcdFx0Lyogb25seSBlaXRoZXIgbGluayBvciBwcm9nL3JlcGxhY2VfcHJvZyBjYW4gYmUgc3BlY2lmaWVkICovXG4gODMzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzNDpcdFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSlcbiA4MzU6XHRcdFx0LyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi9cbiA4MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM3Olx0XHRpZiAoIW5ld19wcm9nKVxuIDgzODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4Mzk6XHRcbiA4NDA6XHRcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKTtcbiA4NDE6XHRcdGlmIChhdHlwZSBcdTAwM2MgMClcbiA4NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODQzOlx0XHRpZiAocmV2aXNpb24gXHUwMDI2XHUwMDI2IHJldmlzaW9uICE9IGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0pXG4gODQ0Olx0XHRcdHJldHVybiAtRVNUQUxFO1xuIDg0NTpcdFxuIDg0NjpcdFx0cHJvZ3MgPSBcdTAwMjZjZ3JwLVx1MDAzZWJwZi5wcm9nc1thdHlwZV07XG4gODQ3Olx0XG4gODQ4Olx0XHRpZiAoIWhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKGNncnAsIGF0eXBlKSlcbiA4NDk6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4NTA6XHRcbiA4NTE6XHRcdGlmICghaGxpc3RfZW1wdHkocHJvZ3MpIFx1MDAyNlx1MDAyNiBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gIT0gc2F2ZWRfZmxhZ3MpXG4gODUyOlx0XHRcdC8qIERpc2FsbG93IGF0dGFjaGluZyBub24tb3ZlcnJpZGFibGUgb24gdG9wXG4gODUzOlx0XHRcdCAqIG9mIGV4aXN0aW5nIG92ZXJyaWRhYmxlIGluIHRoaXMgY2dyb3VwLlxuIDg1NDpcdFx0XHQgKiBEaXNhbGxvdyBhdHRhY2hpbmcgbXVsdGktcHJvZyBpZiBvdmVycmlkYWJsZSBvciBub25lXG4gODU1Olx0XHRcdCAqL1xuIDg1NjpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDg1NzpcdFxuIDg1ODpcdFx0aWYgKHByb2dfbGlzdF9sZW5ndGgocHJvZ3MsIE5VTEwpIFx1MDAzZT0gQlBGX0NHUk9VUF9NQVhfUFJPR1MpXG4gODU5Olx0XHRcdHJldHVybiAtRTJCSUc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAxOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyOTIKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvcmUgb2YgdGhlIGZpeCBpcyBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAuIFRoZSBvcmlnaW5hbCBjb2RlLCBgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstJmd0O2xpbmsucHJvZztgLCBoYWQgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBJZiAqYm90aCogYHByb2dgIGFuZCBgbGlua2Agd2VyZSBOVUxMLCBpdCB3b3VsZCB0cnkgdG8gYWNjZXNzIGBsaW5rLSZndDtsaW5rLnByb2dgLCBjYXVzaW5nIGEgY3Jhc2guIFRoZSBwYXRjaCBlbGVnYW50bHkgYWRkcmVzc2VzIHRoaXMgd2l0aCBgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IChsaW5rID8gbGluay0mZ3Q7bGluay5wcm9nIDogTlVMTCk7YCBhbmQgYSBzdWJzZXF1ZW50IGBpZiAoIW5ld19wcm9nKSByZXR1cm4gLUVJTlZBTDtgIGNoZWNrLiBDbGV2ZXIsIGNvbmNpc2UsIGFuZCBjcnVjaWFsLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgcGFydGljdWxhcmx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgdXN1YWwgY2hlY2tsaXN0OgoKKiAgICoqTm8ga2VybmVsIGRhdGEgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLioqIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KKiAgICoqTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLioqIEFsd2F5cyBhIHBvdGVudGlhbCBwaXRmYWxsLiBHbGFkIHRoYXQmIzM5O3MgY2xlYXIuCiogICAqKk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLioqIENoZWNrZWQuCiogICAqKk5vIGNoYW5nZXMgdGhhdCBjb3VsZCBjcmVhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZHVlIHRvIGNoYW5nZXMgaW4gYm91bmRzIG9yIGxlbmd0aHMuKiogR29vZC4KClRoZSBidWcgZml4ZWQgd2FzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIGtlcm5lbCBvb3BzLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXggYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIG5ldyB2dWxuZXJhYmlsaXRpZXMsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgaGFuZGxlIHRoZXNlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMsIGFuZCBLTVNBTiBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGNvbmNlcm5zIHRoYXQgd291bGQgdHJpZ2dlciBhIEtNU0FOIGNoZWNrLiBUaGlzIGlzIHNvdW5kIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDE6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2goKWAgd2hlbiBib3RoIGBwcm9nYCBhbmQgYGxpbmtgIGFyZ3VtZW50cyBhcmUgTlVMTC4gSXQgZ3VhcmRzIHRoZSBkZXJlZmVyZW5jZSBvZiBgbGluay1cdTAwM2VsaW5rLnByb2dgIGFuZCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgaWYgKCFuZXdfcHJvZykgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gU2luY2UgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlICh3aGljaCBpcyBhbHJlYWR5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBoYW5kbGVycyBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzKSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaCgpYCB3aGVuIGJvdGggYHByb2dgIGFuZCBgbGlua2AgYXJndW1lbnRzIGFyZSBOVUxMLiBJdCBndWFyZHMgdGhlIGRlcmVmZXJlbmNlIG9mIGBsaW5rLVx1MDAzZWxpbmsucHJvZ2AgYW5kIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGBpZiAoIW5ld19wcm9nKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBTaW5jZSB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHdoaWNoIGlzIGFscmVhZHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIGhhbmRsZXJzIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MTYuNzI4MjQxOTg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMzIwNTUwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaCgpYCB3aGVuIGJvdGggYHByb2dgIGFuZCBgbGlua2AgYXJndW1lbnRzIGFyZSBOVUxMLiBJdCBndWFyZHMgdGhlIGRlcmVmZXJlbmNlIG9mIGBsaW5rLVxcdTAwM2VsaW5rLnByb2dgIGFuZCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBgaWYgKCFuZXdfcHJvZykgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gU2luY2UgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlICh3aGljaCBpcyBhbHJlYWR5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBoYW5kbGVycyBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzKSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGNncm91cCBCUEYgYXR0YWNobWVudCBwYXRoIChfX2Nncm91cF9icGZfYXR0YWNoKSB3aGVuIGRldGVybWluaW5nIHRoZSBuZXcgcHJvZ3JhbSB0byBhdHRhY2guIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgYW5kIGNncm91cCBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBzeXNjYWxsIG9wZXJhdGlvbnMgKGUuZy4sIEJQRl9QUk9HX0FUVEFDSCBhbmQgQlBGX0xJTktfQ1JFQVRFKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MTYuNzI4MjQ2NjY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3ODczMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjVlNjk1OTc4OTMyNjEwYzNmYjQzNzMwMmZiOTdiMDRiYzBiMDk4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggMTQ5NjcyYzc2YzQ5Yy4uMTU2ZmM0ZDYwZGFmNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTQsNyArODE0LDcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4tXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXFx1MDAzZWxpbmsucHJvZztcXG4rXFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IChsaW5rID8gbGluay1cXHUwMDNlbGluay5wcm9nIDogTlVMTCk7XFxuIFxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG4gXFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuQEAgLTgzNCw2ICs4MzQsOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpXFxuIFxcdFxcdC8qIHJlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhICovXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIW5ld19wcm9nKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQpO1xcbiBcXHRpZiAoYXR5cGUgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzoxNy45NTY3OTk5MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUyMjU0Njg0ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjZ3JvdXAgQlBGIGF0dGFjaG1lbnQgcGF0aCAoX19jZ3JvdXBfYnBmX2F0dGFjaCkgd2hlbiBkZXRlcm1pbmluZyB0aGUgbmV3IHByb2dyYW0gdG8gYXR0YWNoLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIGFuZCBjZ3JvdXAgbG9naWMgcmVhY2hhYmxlIHZpYSBCUEYgc3lzY2FsbCBvcGVyYXRpb25zIChlLmcuLCBCUEZfUFJPR19BVFRBQ0ggYW5kIEJQRl9MSU5LX0NSRUFURSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1ZTY5NTk3ODkzMjYxMGMzZmI0MzczMDJmYjk3YjA0YmMwYjA5ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDE0OTY3MmM3NmM0OWMuLjE1NmZjNGQ2MGRhZjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODE0LDcgKzgxNCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4rXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuQEAgLTgzNCw2ICs4MzQsOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghIXJlcGxhY2VfcHJvZyAhPSAhIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpXG4gXHRcdC8qIHJlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhICovXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFuZXdfcHJvZylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XG4gXHRpZiAoYXR5cGUgXHUwMDNjIDApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzoxNy45NTY4MDE1NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzIzOTA1NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNncm91cCBpbnRlZ3JhdGlvbiwganVkZ2luZyBieSB0aGUgcGF0aCBwcm92aWRlZDogYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9uIGluIHRoYXQgZmlsZS4gSSdsbCBuZWVkIHRvIGxvY2F0ZSBsaW5lIDgxNCBhcHByb3hpbWF0ZWx5LCB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBtaWdodCByZXNpZGUuXG5cbkdpdmVuIHRoaXMgY29udGV4dCwgSSdsbCBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRlbnQgb2YgYGtlcm5lbC9icGYvY2dyb3VwLmNgLCBzbyBJIGNhbiBzZWUgd2hhdCdzIGFjdHVhbGx5IGJlaW5nIHByb3Bvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzoyNy42ODA3MDg4NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0ICogQGlkX29yX2ZkOiBSZWxhdGl2ZSBwcm9nIGlkIG9yIGZkXFxuIDgwMTpcXHQgKiBAcmV2aXNpb246IGJwZl9wcm9nX2xpc3QgcmV2aXNpb25cXG4gODAyOlxcdCAqXFxuIDgwMzpcXHQgKiBFeGFjdGx5IG9uZSBvZiBAcHJvZyBvciBAbGluayBjYW4gYmUgbm9uLW51bGwuXFxuIDgwNDpcXHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLlxcbiA4MDU6XFx0ICovXFxuIDgwNjpcXHRzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gODA3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxcbiA4MDg6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIDgwOTpcXHRcXHRcXHRcXHQgICAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSwgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsXFxuIDgxMDpcXHRcXHRcXHRcXHQgICAgICAgdTY0IHJldmlzaW9uKVxcbiA4MTE6XFx0e1xcbiA4MTI6XFx0XFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFxcdTAwMjYgKEJQRl9GX0FMTE9XX09WRVJSSURFIHwgQlBGX0ZfQUxMT1dfTVVMVEkpKTtcXG4gODEzOlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xcbiA4MTQ6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNTpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNjpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNzpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVxcdTAwM2VsaW5rLnByb2cgOiBOVUxMKTtcXG4gODE4OlxcdFxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG4gODE5OlxcdFxcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcXG4gODIwOlxcdFxcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcXG4gODIxOlxcdFxcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcXG4gODIyOlxcdFxcdGludCBlcnI7XFxuIDgyMzpcXHRcXG4gODI0OlxcdFxcdGlmICgoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfT1ZFUlJJREUpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkgfHxcXG4gODI1OlxcdFxcdCAgICAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkpXFxuIDgyNjpcXHRcXHRcXHQvKiBpbnZhbGlkIGNvbWJpbmF0aW9uICovXFxuIDgyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODI4OlxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQkVGT1JFIHwgQlBGX0ZfQUZURVIpKSlcXG4gODI5OlxcdFxcdFxcdC8qIG9ubHkgZWl0aGVyIHJlcGxhY2Ugb3IgaW5zZXJ0aW9uIHdpdGggYmVmb3JlL2FmdGVyICovXFxuIDgzMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODMxOlxcdFxcdGlmIChsaW5rIFxcdTAwMjZcXHUwMDI2IChwcm9nIHx8IHJlcGxhY2VfcHJvZykpXFxuIDgzMjpcXHRcXHRcXHQvKiBvbmx5IGVpdGhlciBsaW5rIG9yIHByb2cvcmVwbGFjZV9wcm9nIGNhbiBiZSBzcGVjaWZpZWQgKi9cXG4gODMzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MzQ6XFx0XFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpXFxuIDgzNTpcXHRcXHRcXHQvKiByZXBsYWNlX3Byb2cgaW1wbGllcyBCUEZfRl9SRVBMQUNFLCBhbmQgdmljZSB2ZXJzYSAqL1xcbiA4MzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzNzpcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiA4Mzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzOTpcXHRcXG4gODQwOlxcdFxcdGF0eXBlID0gYnBmX2Nncm91cF9hdHlwZV9maW5kKHR5cGUsIG5ld19wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQpO1xcbiA4NDE6XFx0XFx0aWYgKGF0eXBlIFxcdTAwM2MgMClcXG4gODQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NDM6XFx0XFx0aWYgKHJldmlzaW9uIFxcdTAwMjZcXHUwMDI2IHJldmlzaW9uICE9IGNncnAtXFx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdKVxcbiA4NDQ6XFx0XFx0XFx0cmV0dXJuIC1FU1RBTEU7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdHByb2dzID0gXFx1MDAyNmNncnAtXFx1MDAzZWJwZi5wcm9nc1thdHlwZV07XFxuIDg0NzpcXHRcXG4gODQ4OlxcdFxcdGlmICghaGllcmFyY2h5X2FsbG93c19hdHRhY2goY2dycCwgYXR5cGUpKVxcbiA4NDk6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0aWYgKCFobGlzdF9lbXB0eShwcm9ncykgXFx1MDAyNlxcdTAwMjYgY2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSAhPSBzYXZlZF9mbGFncylcXG4gODUyOlxcdFxcdFxcdC8qIERpc2FsbG93IGF0dGFjaGluZyBub24tb3ZlcnJpZGFibGUgb24gdG9wXFxuIDg1MzpcXHRcXHRcXHQgKiBvZiBleGlzdGluZyBvdmVycmlkYWJsZSBpbiB0aGlzIGNncm91cC5cXG4gODU0OlxcdFxcdFxcdCAqIERpc2FsbG93IGF0dGFjaGluZyBtdWx0aS1wcm9nIGlmIG92ZXJyaWRhYmxlIG9yIG5vbmVcXG4gODU1OlxcdFxcdFxcdCAqL1xcbiA4NTY6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0aWYgKHByb2dfbGlzdF9sZW5ndGgocHJvZ3MsIE5VTEwpIFxcdTAwM2U9IEJQRl9DR1JPVVBfTUFYX1BST0dTKVxcbiA4NTk6XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0cGwgPSBmaW5kX2F0dGFjaF9lbnRyeShwcm9ncywgcHJvZywgbGluaywgcmVwbGFjZV9wcm9nLFxcbiA4NjI6XFx0XFx0XFx0XFx0ICAgICAgIGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpO1xcbiA4NjM6XFx0XFx0aWYgKElTX0VSUihwbCkpXFxuIDg2NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwbCk7XFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdGlmIChicGZfY2dyb3VwX3N0b3JhZ2VzX2FsbG9jKHN0b3JhZ2UsIG5ld19zdG9yYWdlLCB0eXBlLFxcbiA4Njc6XFx0XFx0XFx0XFx0XFx0ICAgICAgcHJvZyA/IDogbGluay1cXHUwMDNlbGluay5wcm9nLCBjZ3JwKSlcXG4gODY4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjMzOjI3LjY4MDg1MjkzN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MjQ5NzczMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCBjb2RlIHBhdGhzIGludm9rZSBpdCB0byBncmFzcCBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS5cblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYmFzaWNzOiBJJ2xsIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaC4gQSBzaW1wbGUgYGdyZXBgIGlzIHBlcmZlY3QgdG8gbG9jYXRlIHRoZSBjYWxsIHNpdGVzLiBJJ2xsIHNlYXJjaCBmb3IgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgbWFuYWdlYWJsZSBsaXN0IG9mIHRoZSBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgdGhhdCB1c2UgaXQsIGFuZCBJIGNhbiBkcmlsbCBkb3duIGZyb20gdGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGUgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MjkuNTA1ODMxODM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODEwODE2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTc3MT1zdGF0aWMgaW50IGluc2VydF9wbF90b19obGlzdChzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsIHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzkyOiAqIF9fY2dyb3VwX2JwZl9hdHRhY2goKSAtIEF0dGFjaCB0aGUgcHJvZ3JhbSBvciB0aGUgbGluayB0byBhIGNncm91cCwgYW5kXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTMtICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA1LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODA2OnN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz05Mzc9c3RhdGljIGludCBjZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy05NDUtXFx0Y2dyb3VwX2xvY2soKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NjpcXHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy05NDctXFx0XFx0XFx0XFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzozMS4wODY5MTc5NjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzkyNTY0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBjZ3JvdXBfYnBmX2F0dGFjaCBDYWxsc2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb2RlIGFuZCB1bmRlcnN0YW5kIGhvdyBgY2dyb3VwX2JwZl9hdHRhY2hgIGlzIGJlaW5nIHVzZWQsIGFsb25nIHdpdGggYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiBhbGwgdGhlIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdGhlc2UgQlBGIHByb2dyYW1zIGFyZSBiZWluZyBhdHRhY2hlZCB0byBjZ3JvdXBzLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBkaXJlY3QgY2FsbGVycyBvZiBgY2dyb3VwX2JwZl9hdHRhY2hgIGl0c2VsZiwgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGVyZS4gSSBhbHNvIGtub3cgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBzbyBJIHdpbGwgZXhwbG9yZSB0aG9zZSBhcyB3ZWxsIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF0dGFjaG1lbnQgcHJvY2VzcyBhbmQgaG93IGl0IGlzIGVtcGxveWVkIGFjcm9zcyB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQ4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MzIuODc5NDg1ODU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTM3MTU4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX2JwZl9hdHRhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLWRlZnMuaD0xMT1zdHJ1Y3QgYnBmX3Byb2dfYXJyYXk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAtZGVmcy5oLTE5LVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC1kZWZzLmg6MjA6ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIHtcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAtZGVmcy5oLTIxLVxcdENHUk9VUF9CUEZfQVRUQUNIX1RZUEVfSU5WQUxJRCA9IC0xLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MzA9dW5zaWduZWQgaW50IF9fY2dyb3VwX2JwZl9ydW5fbHNtX2N1cnJlbnQoY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMzctXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6Mzg6c3RhdGljIGlubGluZSBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDozOTp0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTExNT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMTYtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMTc6XFx0XFx0XFx0XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMTgtXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTE5PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zayhzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTIwOlxcdFxcdFxcdCAgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpO1xcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEyMS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xMjI9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMjQtXFx0XFx0XFx0XFx0ICAgICAgaW50ICp1YWRkcmxlbixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDoxMjU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEyNi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICp0X2N0eCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEyOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTEzMC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqc29ja19vcHMsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTMxOlxcdFxcdFxcdFxcdCAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC0xMzItXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTMzPWludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oOjEzNDpcXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTM1LVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTEzNj1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTM4LVxcdFxcdFxcdFxcdCAgIGNoYXIgKipidWYsIHNpemVfdCAqcGNvdW50LCBsb2ZmX3QgKnBwb3MsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTM5OlxcdFxcdFxcdFxcdCAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSk7XFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtMTQwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg9MTgwPXN0YXRpYyBpbmxpbmUgYm9vbCBjZ3JvdXBfYnBmX3NvY2tfZW5hYmxlZChzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6MTgxOlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTE4Mi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE3NDE9c3RydWN0IGJwZl9wcm9nX2F1eCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MTUtXFx0dTMyIHZlcmlmaWVkX2luc25zO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MTgxNjpcXHRpbnQgY2dyb3VwX2F0eXBlOyAvKiBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgKi9cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE4MTctXFx0c3RydWN0IGJwZl9tYXAgKmNncm91cF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV07XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTY1PXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX2xzbV9hdHlwZSBjZ3JvdXBfbHNtX2F0eXBlW0NHUk9VUF9MU01fTlVNXTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTY2LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6Njc6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjgte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03My0jZWxzZVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzQ6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzUte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz04ND1icGZfcHJvZ19ydW5fYXJyYXlfY2coY29uc3Qgc3RydWN0IGNncm91cF9icGYgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4NTpcXHRcXHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04Ni1cXHRcXHQgICAgICBjb25zdCB2b2lkICpjdHgsIGJwZl9wcm9nX3J1bl9mbiBydW5fcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYyPXVuc2lnbmVkIGludCBfX2Nncm91cF9icGZfcnVuX2xzbV9jdXJyZW50KGNvbnN0IHZvaWQgKmN0eCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgxLSNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgyOnN0YXRpYyBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4My1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODktXFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9MU01fQ0dST1VQKVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkwOlxcdFxcdHJldHVybiB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGF0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MS1cXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIwPXZvaWQgYnBmX2Nncm91cF9hdHlwZV9wdXQoaW50IGNncm91cF9hdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjMyLSNlbHNlXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzM6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM0LWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzNi1cXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX0xTTV9DR1JPVVApXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzc6XFx0XFx0cmV0dXJuIHRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM4LVxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NDI0PXN0YXRpYyBib29sIGhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0MjU6XFx0XFx0XFx0XFx0ICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQyNi17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTQ1Mz1zdGF0aWMgaW50IGNvbXB1dGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0NTQ6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNDU1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcHJvZ19hcnJheSAqKmFycmF5KVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz01MTE9c3RhdGljIHZvaWQgYWN0aXZhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1MTI6XFx0XFx0XFx0XFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy01MTMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKm9sZF9hcnJheSlcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NTkxPXN0YXRpYyBpbnQgdXBkYXRlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NTkyOlxcdFxcdFxcdFxcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNTkzLXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgxNy1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVxcdTAwM2VsaW5rLnByb2cgOiBOVUxMKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgxODpcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MTktXFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy05MzYtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo5Mzc6c3RhdGljIGludCBjZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM4LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ1LVxcdGNncm91cF9sb2NrKCk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo5NDY6XFx0cmV0ID0gX19jZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIGxpbmssIHR5cGUsIGZsYWdzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ3LVxcdFxcdFxcdFxcdCAgaWRfb3JfZmQsIHJldmlzaW9uKTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9OTUyPXN0YXRpYyBpbnQgZWZmZWN0aXZlX3Byb2dfcG9zKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo5NTM6XFx0XFx0XFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTU0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19saXN0ICp0YXJnZXRfcGwpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwMDQ9c3RhdGljIHZvaWQgcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTAwNTpcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDA2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTA1NT1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNTgte1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA1OTpcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDYwLVxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTg9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjExNTk6XFx0XFx0XFx0XFx0ICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTYwLXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTE5OT1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9kZXRhY2goc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjAyLXtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyMDM6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTIwNC1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMjc0PXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjgwLVxcdGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUgPSBhdHRyLVxcdTAwM2VxdWVyeS5hdHRhY2hfdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyODE6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGZyb21fYXR5cGUsIHRvX2F0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI4MjpcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjgzLVxcdHN0cnVjdCBicGZfcHJvZ19hcnJheSAqZWZmZWN0aXZlO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzAwLVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMzAxOlxcdFxcdGZyb21fYXR5cGUgPSB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKHR5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTMwMi1cXHRcXHRpZiAoZnJvbV9hdHlwZSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEzOTA9aW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE0MDktXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNDEwOlxcdHJldCA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgTlVMTCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE0MTEtXFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUsIGF0dHItXFx1MDAzZWF0dGFjaF9mbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTU0Mj1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTcwLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU3MTpcXHRlcnIgPSBjZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBOVUxMLCBOVUxMLCBsaW5rLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU3Mi1cXHRcXHRcXHRcXHRsaW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlLCBCUEZfRl9BTExPV19NVUxUSSB8IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNjI2PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9za2Ioc3RydWN0IHNvY2sgKnNrLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTYyNy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTYyODpcXHRcXHRcXHRcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjI5LXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTcwND1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2soc3RydWN0IHNvY2sgKnNrLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTcwNTpcXHRcXHRcXHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTcwNi17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MzI9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3MzQtXFx0XFx0XFx0XFx0ICAgICAgaW50ICp1YWRkcmxlbixcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE3MzU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTczNi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICp0X2N0eCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc4Nj1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc4Ny1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqc29ja19vcHMsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzg4OlxcdFxcdFxcdFxcdCAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc4OS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3OTc9aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzk4OlxcdFxcdFxcdFxcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc5OS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5NTQ9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTk1Ni1cXHRcXHRcXHRcXHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTk1NzpcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6MzQuNDczMjA1NDc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1NDE5MDg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gQlBGIEF0dGFjaG1lbnQgUG9pbnRzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGZvciBCUEYgYXR0YWNobWVudCBwb2ludHMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGV5J3JlIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLiBJIHNlZSB0aGF0IGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIGtub3cgdGhleSdyZSBjYWxsZWQgZnJvbSBgc3lzY2FsbC5jYCwgdGhlIHVzdWFsIHN1c3BlY3QgZm9yIHN5c2NhbGwgaGFuZGxpbmcuIE5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiB0aGUgYWN0dWFsIGF0dGFjaG1lbnQgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIHdpdGhpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBzY2FuIHRoZSBhcmVhIGFyb3VuZCBsaW5lcyAxMzkwIHRvIDE1ODAsIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGxvZ2ljIGZvciBob3cgQlBGIHByb2dyYW1zIG9yIGxpbmtzIGdldCBhdHRhY2hlZCB0byBjZ3JvdXBzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciB3aGVyZSB0aGluZ3MgY291bGQgcG90ZW50aWFsbHkgZ28gd3JvbmcuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzozNy40MjczOTkyNDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5MDpcXHRpbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4xMzkxOlxcdFxcdFxcdFxcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbjEzOTI6XFx0e1xcbjEzOTM6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2cgPSBOVUxMO1xcbjEzOTQ6XFx0XFx0c3RydWN0IGNncm91cCAqY2dycDtcXG4xMzk1OlxcdFxcdGludCByZXQ7XFxuMTM5NjpcXHRcXG4xMzk3OlxcdFxcdGNncnAgPSBjZ3JvdXBfZ2V0X2Zyb21fZmQoYXR0ci1cXHUwMDNldGFyZ2V0X2ZkKTtcXG4xMzk4OlxcdFxcdGlmIChJU19FUlIoY2dycCkpXFxuMTM5OTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjZ3JwKTtcXG4xNDAwOlxcdFxcbjE0MDE6XFx0XFx0aWYgKChhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkgXFx1MDAyNlxcdTAwMjZcXG4xNDAyOlxcdFxcdCAgICAoYXR0ci1cXHUwMDNlYXR0YWNoX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpIHtcXG4xNDAzOlxcdFxcdFxcdHJlcGxhY2VfcHJvZyA9IGJwZl9wcm9nX2dldF90eXBlKGF0dHItXFx1MDAzZXJlcGxhY2VfYnBmX2ZkLCBwdHlwZSk7XFxuMTQwNDpcXHRcXHRcXHRpZiAoSVNfRVJSKHJlcGxhY2VfcHJvZykpIHtcXG4xNDA1OlxcdFxcdFxcdFxcdGNncm91cF9wdXQoY2dycCk7XFxuMTQwNjpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXBsYWNlX3Byb2cpO1xcbjE0MDc6XFx0XFx0XFx0fVxcbjE0MDg6XFx0XFx0fVxcbjE0MDk6XFx0XFxuMTQxMDpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIE5VTEwsXFxuMTQxMTpcXHRcXHRcXHRcXHRcXHRhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSwgYXR0ci1cXHUwMDNlYXR0YWNoX2ZsYWdzLFxcbjE0MTI6XFx0XFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlcmVsYXRpdmVfZmQsIGF0dHItXFx1MDAzZWV4cGVjdGVkX3JldmlzaW9uKTtcXG4xNDEzOlxcdFxcbjE0MTQ6XFx0XFx0aWYgKHJlcGxhY2VfcHJvZylcXG4xNDE1OlxcdFxcdFxcdGJwZl9wcm9nX3B1dChyZXBsYWNlX3Byb2cpO1xcbjE0MTY6XFx0XFx0Y2dyb3VwX3B1dChjZ3JwKTtcXG4xNDE3OlxcdFxcdHJldHVybiByZXQ7XFxuMTQxODpcXHR9XFxuMTQxOTpcXHRcXG4xNDIwOlxcdGludCBjZ3JvdXBfYnBmX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxuMTQyMTpcXHR7XFxuMTQyMjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuMTQyMzpcXHRcXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwO1xcbjE0MjQ6XFx0XFx0aW50IHJldDtcXG4xNDI1OlxcdFxcbjE0MjY6XFx0XFx0Y2dycCA9IGNncm91cF9nZXRfZnJvbV9mZChhdHRyLVxcdTAwM2V0YXJnZXRfZmQpO1xcbjE0Mjc6XFx0XFx0aWYgKElTX0VSUihjZ3JwKSlcXG4xNDI4OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGNncnApO1xcbjE0Mjk6XFx0XFxuMTQzMDpcXHRcXHRwcm9nID0gYnBmX3Byb2dfZ2V0X3R5cGUoYXR0ci1cXHUwMDNlYXR0YWNoX2JwZl9mZCwgcHR5cGUpO1xcbjE0MzE6XFx0XFx0aWYgKElTX0VSUihwcm9nKSlcXG4xNDMyOlxcdFxcdFxcdHByb2cgPSBOVUxMO1xcbjE0MzM6XFx0XFxuMTQzNDpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX2RldGFjaChjZ3JwLCBwcm9nLCBhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSwgYXR0ci1cXHUwMDNlZXhwZWN0ZWRfcmV2aXNpb24pO1xcbjE0MzU6XFx0XFx0aWYgKHByb2cpXFxuMTQzNjpcXHRcXHRcXHRicGZfcHJvZ19wdXQocHJvZyk7XFxuMTQzNzpcXHRcXG4xNDM4OlxcdFxcdGNncm91cF9wdXQoY2dycCk7XFxuMTQzOTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE0NDA6XFx0fVxcbjE0NDE6XFx0XFxuMTQ0MjpcXHRzdGF0aWMgdm9pZCBicGZfY2dyb3VwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuMTQ0MzpcXHR7XFxuMTQ0NDpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpjZ19saW5rID1cXG4xNDQ1OlxcdFxcdFxcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX2Nncm91cF9saW5rLCBsaW5rKTtcXG4xNDQ2OlxcdFxcdHN0cnVjdCBjZ3JvdXAgKmNnO1xcbjE0NDc6XFx0XFxuMTQ0ODpcXHRcXHQvKiBsaW5rIG1pZ2h0IGhhdmUgYmVlbiBhdXRvLWRldGFjaGVkIGJ5IGR5aW5nIGNncm91cCBhbHJlYWR5LFxcbjE0NDk6XFx0XFx0ICogaW4gdGhhdCBjYXNlIG91ciB3b3JrIGlzIGRvbmUgaGVyZVxcbjE0NTA6XFx0XFx0ICovXFxuMTQ1MTpcXHRcXHRpZiAoIWNnX2xpbmstXFx1MDAzZWNncm91cClcXG4xNDUyOlxcdFxcdFxcdHJldHVybjtcXG4xNDUzOlxcdFxcbjE0NTQ6XFx0XFx0Y2dyb3VwX2xvY2soKTtcXG4xNDU1OlxcdFxcbjE0NTY6XFx0XFx0LyogcmUtY2hlY2sgY2dyb3VwIHVuZGVyIGxvY2sgYWdhaW4gKi9cXG4xNDU3OlxcdFxcdGlmICghY2dfbGluay1cXHUwMDNlY2dyb3VwKSB7XFxuMTQ1ODpcXHRcXHRcXHRjZ3JvdXBfdW5sb2NrKCk7XFxuMTQ1OTpcXHRcXHRcXHRyZXR1cm47XFxuMTQ2MDpcXHRcXHR9XFxuMTQ2MTpcXHRcXG4xNDYyOlxcdFxcdFdBUk5fT04oX19jZ3JvdXBfYnBmX2RldGFjaChjZ19saW5rLVxcdTAwM2VjZ3JvdXAsIE5VTEwsIGNnX2xpbmssXFxuMTQ2MzpcXHRcXHRcXHRcXHRcXHQgICAgbGluay1cXHUwMDNlYXR0YWNoX3R5cGUsIDApKTtcXG4xNDY0OlxcdFxcdGlmIChsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcXG4xNDY1OlxcdFxcdFxcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShjZ19saW5rLVxcdTAwM2VsaW5rLnByb2cpO1xcbjE0NjY6XFx0XFxuMTQ2NzpcXHRcXHRjZyA9IGNnX2xpbmstXFx1MDAzZWNncm91cDtcXG4xNDY4OlxcdFxcdGNnX2xpbmstXFx1MDAzZWNncm91cCA9IE5VTEw7XFxuMTQ2OTpcXHRcXG4xNDcwOlxcdFxcdGNncm91cF91bmxvY2soKTtcXG4xNDcxOlxcdFxcbjE0NzI6XFx0XFx0Y2dyb3VwX3B1dChjZyk7XFxuMTQ3MzpcXHR9XFxuMTQ3NDpcXHRcXG4xNDc1OlxcdHN0YXRpYyB2b2lkIGJwZl9jZ3JvdXBfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4xNDc2OlxcdHtcXG4xNDc3OlxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmNnX2xpbmsgPVxcbjE0Nzg6XFx0XFx0XFx0Y29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfY2dyb3VwX2xpbmssIGxpbmspO1xcbjE0Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjMzOjM3LjQyNzU5ODAxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDU0NzA2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gQlBGIENncm91cCBBdHRhY2htZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoZSBCUEYgY2dyb3VwIGF0dGFjaG1lbnQgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGluIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gVGhlIGNvcmUgaXNzdWUgc3RlbXMgZnJvbSBob3cgYG5ld19wcm9nYCBpcyBiZWluZyBhc3NpZ25lZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIGEgY3Jhc2ggaWYgYm90aCBgcHJvZ2AgYW5kIGBsaW5rYCB3ZXJlIE5VTEwuIFRoZSBwcm9ibGVtYXRpYyBsaW5lIHdhcyBgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO2AuIElmIGJvdGggd2VyZSBOVUxMLCB0aGUgdGVybmFyeSBvcGVyYXRvciB3b3VsZCBldmFsdWF0ZSB0byBgbGluay1cdTAwM2VsaW5rLnByb2dgLCBkZXJlZmVyZW5jaW5nIGEgTlVMTCBgbGlua2AgcG9pbnRlciBhbmQgY2F1c2luZyBhIGNyYXNoIGJlZm9yZSBhbnkgZXJyb3IgY2hlY2tzIHdlcmUgcmVhY2hlZC4gSSBjYW4gc2VlIHRoaXMgY2xlYXJseSwgdGhlIGNvZGUgd291bGQgdHJ5IHRvIGRlcmVmZXJlbmNlIGEgbnVsbCBwb2ludGVyIHdoZW4gYGxpbmtgIHdhcyBgTlVMTGAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBuZXN0ZWQgY29uZGl0aW9uYWw6IGBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO2AsIHdoaWNoIG5vdyBzYWZlbHkgaGFuZGxlcyB0aGUgTlVMTCBgbGlua2AgY2FzZSBieSBhc3NpZ25pbmcgYE5VTExgIHRvIGBuZXdfcHJvZ2AuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UuIElzIHRoaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgaWYgc28sIGhvdz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIHBhdGguIFdoYXQgc3ltYm9scyBzaG91bGQgSSBmb2N1cyBvbj8gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy5cblxuTGV0J3Mgc2VlLCB3aGF0IGFib3V0IHN5c3RlbSBjYWxscz8gVGhlIGZ1bmN0aW9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBjb21lcyB0byBtaW5kLiBJdCBjYWxscyBgY2dyb3VwX2JwZl9hdHRhY2hgIGRpcmVjdGx5LiBTbyBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaG93IGl0J3MgdXNlZC4gVGhpcyBtaWdodCByZXZlYWwgaWYgdGhlIHZ1bG5lcmFiaWxpdHkgaXMgZGlyZWN0bHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSBzeXNjYWxscy4gU3BlY2lmaWNhbGx5IEkgbmVlZCB0byBkZXRlcm1pbmUgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIGBwcm9nYCBjYW4gYmUgTlVMTCBvciBub3QgaW5zaWRlIHRoZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo0MS40ODIzMTE2ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTI3MTQ1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD0xODA9c3RhdGljIGlubGluZSBib29sIGNncm91cF9icGZfc29ja19lbmFibGVkKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQxNy1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0MTg6aW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtNDE5LVxcdFxcdFxcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTQzMD1zdGF0aWMgaW5saW5lIHZvaWQgY2dyb3VwX2JwZl9saWZldGltZV9ub3RpZmllcl9pbml0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MzQtXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmg6NDM1OnN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtNDM2LVxcdFxcdFxcdFxcdFxcdCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEzNzk9c3RhdGljIGludCBjZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzg5LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MDppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzOTEtXFx0XFx0XFx0ICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NTc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNC1cXHRpZiAoaXNfY2dyb3VwX3Byb2dfdHlwZShwdHlwZSwgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUsIHRydWUpKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDYxNTpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGF0dHIsIHB0eXBlLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjE2LVxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo0Mi45MzUwMzMyMTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUyMzIxNjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBCUEYgYW5kIGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIExpbmsgQXR0YWNobWVudCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGludG8gQlBGIGxpbmsgYXR0YWNobWVudHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBjb2RlIHJlc2lkZXMsIGFuZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoaXMgZmlsZSBvZnRlbiBjb250YWlucyB0aGUgY29yZSBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgc291bmRzIGxpa2UgaXQnZCBmYWxsIHVuZGVyIHRoYXQgY2F0ZWdvcnkuIEJ1dCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGNhbiBzb21ldGltZXMgYmUgZGlzdHJpYnV0ZWQsIGFuZCB3aXRoIEJQRiBiZWluZyB0aGUgYnJvYWQgdGhpbmcgaXQgaXMsIEkgY2FuJ3QgYmUgKmNvbXBsZXRlbHkqIGNlcnRhaW4gaXQncyBpbiB0aGF0IGZpbGUsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gSSBuZWVkIHRvIGtlZXAgYW4gb3BlbiBtaW5kIHRvIHRoZSBwb3NzaWJpbHR5IHRoYXQgaXQgY291bGQgYmUgaW4gYSBzaWJsaW5nIG9yIHN1cHBvcnQgZmlsZS4gSSdsbCBjaGVjayBgc3lzY2FsbC5jYCBmaXJzdCwgYnV0IEknbGwgbWVudGFsbHkga2VlcCBvdGhlciBwb3RlbnRpYWwgbG9jYXRpb25zIG9wZW4uIEJlc3QgdG8gYmUgc3lzdGVtYXRpYyBmcm9tIHRoZSBvdXRzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjI2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6NDYuNDU4MjUzMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTcxMDI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oPTQyMD1pbnQgY2dyb3VwX2JwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00MjEtXFx0XFx0XFx0ICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0MjI6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYtY2dyb3VwLmgtNDIzLWludCBjZ3JvdXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaD00NDI9c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLWNncm91cC5oLTQ0Ny1cXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaDo0NDg6c3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi1jZ3JvdXAuaC00NDktXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUyNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU0MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1NDI6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NDMte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTc5Mz1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MjAtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4MjE6XFx0XFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODIyLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg0MS1cXHRcXHRlbHNlIGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODQyOlxcdFxcdFxcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg0My1cXHRcXHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6NDcuOTEzOTcwMTc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzkyMjg0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFuZHNjYXBlIGFyb3VuZCBgY2dyb3VwX2JwZl9hdHRhY2hgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbiwgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBcmUgdGhlcmUgYW55IG90aGVyIGxvY2F0aW9ucyBjYWxsaW5nIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucz8gV2hlcmUgZWxzZSBhcmUgdGhleSBiZWluZyB1c2VkIGluIHRoZSBrZXJuZWw/XCIuXG5cbkknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG9idmlvdXMgbG9jYXRpb246IGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24sIGVzcGVjaWFsbHkgbmVhciB0aGUgZGVmaW5pdGlvbiBvZiBgY2dyb3VwX2JwZl9hdHRhY2hgIGl0c2VsZi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVudCBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGhpbiB0aGUgYnJvYWRlciBjZ3JvdXAgYW5kIEJQRiBmcmFtZXdvcmsuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBmdWxsZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo1MS45OTMyMDA5ODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMwOlxcdFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2cGwtXFx1MDAzZW5vZGUpO1xcbiA5MzE6XFx0XFx0XFx0a2ZyZWUocGwpO1xcbiA5MzI6XFx0XFx0fVxcbiA5MzM6XFx0XFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcXG4gOTM0OlxcdFxcdHJldHVybiBlcnI7XFxuIDkzNTpcXHR9XFxuIDkzNjpcXHRcXG4gOTM3OlxcdHN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gOTM4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4gOTM5OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcXG4gOTQwOlxcdFxcdFxcdFxcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSxcXG4gOTQxOlxcdFxcdFxcdFxcdCAgICAgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsIHU2NCByZXZpc2lvbilcXG4gOTQyOlxcdHtcXG4gOTQzOlxcdFxcdGludCByZXQ7XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdFxcdGNncm91cF9sb2NrKCk7XFxuIDk0NjpcXHRcXHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXFxuIDk0NzpcXHRcXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuIDk0ODpcXHRcXHRjZ3JvdXBfdW5sb2NrKCk7XFxuIDk0OTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA5NTA6XFx0fVxcbiA5NTE6XFx0XFxuIDk1MjpcXHRzdGF0aWMgaW50IGVmZmVjdGl2ZV9wcm9nX3BvcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiA5NTM6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbiA5NTQ6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2xpc3QgKnRhcmdldF9wbClcXG4gOTU1OlxcdHtcXG4gOTU2OlxcdFxcdGludCBjbnQgPSAwLCBwcmVvcmRlcl9jbnQgPSAwLCBmc3RhcnQsIGJzdGFydCwgaW5pdF9ic3RhcnQsIHBvcyA9IC0xO1xcbiA5NTc6XFx0XFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xcbiA5NTg6XFx0XFx0c3RydWN0IGNncm91cCAqcCA9IGNncnA7XFxuIDk1OTpcXHRcXG4gOTYwOlxcdFxcdC8qIGNvdW50IGVmZmVjdGl2ZSBwcm9ncmFtcyB0byBmaW5kIHdoZXJlIHRoZSBwcmVvcmRlciByZWdpb24gZW5kcyAqL1xcbiA5NjE6XFx0XFx0ZG8ge1xcbiA5NjI6XFx0XFx0XFx0aWYgKGNudCA9PSAwIHx8IChwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKVxcbiA5NjM6XFx0XFx0XFx0XFx0Y250ICs9IHByb2dfbGlzdF9sZW5ndGgoXFx1MDAyNnAtXFx1MDAzZWJwZi5wcm9nc1thdHlwZV0sIFxcdTAwMjZwcmVvcmRlcl9jbnQpO1xcbiA5NjQ6XFx0XFx0XFx0cCA9IGNncm91cF9wYXJlbnQocCk7XFxuIDk2NTpcXHRcXHR9IHdoaWxlIChwKTtcXG4gOTY2OlxcdFxcbiA5Njc6XFx0XFx0LyogcmVwbGF5IGNvbXB1dGVfZWZmZWN0aXZlX3Byb2dzKCkgcGxhY2VtZW50IGFuZCByZWNvcmQgdGFyZ2V0J3Mgc2xvdCAqL1xcbiA5Njg6XFx0XFx0Y250ID0gMDtcXG4gOTY5OlxcdFxcdHAgPSBjZ3JwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo1MS45OTMzMjY5NDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1MDE1NTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBDZ3JvdXAgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYENPTkZJR2Agb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIG9idmlvdXMgcGxhY2VzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gc2VlIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncy4gVGhlbiwgSSdsbCBtb3ZlIG9uIHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLCBvciBwb3NzaWJseSBldmVuIGBpbml0L0tjb25maWdgIOKAkyB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSDigJMgdG8gc2VlIGlmIHRoZSByZWxldmFudCBmZWF0dXJlcyBoYXZlIHRoZWlyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGRlZmluZWQuIEdvdHRhIHRyYWNrIGRvd24gdGhvc2UgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgd2hhdCdzICphY3R1YWxseSogZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzM6NTMuOTQzNDg2MDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzk1NDYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTM4PWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfQ0dST1VQX0JQRikgKz0gY2dyb3VwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQwLWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNTg9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE3Mi1cXHRcXHRwb3MgPSBlZmZlY3RpdmVfcHJvZ19wb3MoZGVzYywgYXR5cGUsIHBsKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjExNzM6XFx0XFx0Lyogbm8gbGluayBvciBwcm9nIG1hdGNoLCBza2lwIHRoZSBjZ3JvdXAgb2YgdGhpcyBsYXllciAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE3NC1cXHRcXHRpZiAocG9zIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0xNS0gKiAgMy4gV2FsayB0aGUgYW5jZXN0b3JzIG9mIGEgY2dyb3VwLlxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoxNjogKiAgNC4gU2hvdyB0aGUgZ2l2ZW4gY2dyb3VwIG9ubHkuXFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTE3LSAqICA1LiBXYWxrIHRoZSBjaGlsZHJlbiBvZiBhIGdpdmVuIHBhcmVudCBjZ3JvdXAuXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MTY3PXN0YXRpYyBpbnQgY2dyb3VwX2l0ZXJfc2VxX2luaXQodm9pZCAqcHJpdiwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMTgwLVxcdHAtXFx1MDAzZXZpc2l0ZWRfYWxsID0gZmFsc2U7XFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jOjE4MTpcXHRwLVxcdTAwM2VvcmRlciA9IGF1eC1cXHUwMDNlY2dyb3VwLm9yZGVyO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0xODItXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MTk5PXN0YXRpYyBpbnQgYnBmX2l0ZXJfYXR0YWNoX2Nncm91cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjA0LVxcdHU2NCBpZCA9IGxpbmZvLVxcdTAwM2VjZ3JvdXAuY2dyb3VwX2lkO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyMDU6XFx0aW50IG9yZGVyID0gbGluZm8tXFx1MDAzZWNncm91cC5vcmRlcjtcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjA2LVxcdHN0cnVjdCBjZ3JvdXAgKmNncnA7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjMyLVxcdGF1eC1cXHUwMDNlY2dyb3VwLnN0YXJ0ID0gY2dycDtcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjMzOlxcdGF1eC1cXHUwMDNlY2dyb3VwLm9yZGVyID0gb3JkZXI7XFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTIzNC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYz0yNDI9c3RhdGljIHZvaWQgYnBmX2l0ZXJfY2dyb3VwX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4LFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTI2My1zaG93X29yZGVyOlxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyNjQ6XFx0aWYgKGF1eC1cXHUwMDNlY2dyb3VwLm9yZGVyID09IEJQRl9DR1JPVVBfSVRFUl9ERVNDRU5EQU5UU19QUkUpXFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTI2NS1cXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCJvcmRlcjogZGVzY2VuZGFudHNfcHJlXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6MjY2OlxcdGVsc2UgaWYgKGF1eC1cXHUwMDNlY2dyb3VwLm9yZGVyID09IEJQRl9DR1JPVVBfSVRFUl9ERVNDRU5EQU5UU19QT1NUKVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNjctXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwib3JkZXI6IGRlc2NlbmRhbnRzX3Bvc3RcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyNjg6XFx0ZWxzZSBpZiAoYXV4LVxcdTAwM2VjZ3JvdXAub3JkZXIgPT0gQlBGX0NHUk9VUF9JVEVSX0FOQ0VTVE9SU19VUClcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjY5LVxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIm9yZGVyOiBhbmNlc3RvcnNfdXBcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyNzA6XFx0ZWxzZSBpZiAoYXV4LVxcdTAwM2VjZ3JvdXAub3JkZXIgPT0gQlBGX0NHUk9VUF9JVEVSX0NISUxEUkVOKVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yNzEtXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwib3JkZXI6IGNoaWxkcmVuXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYz0yNzY9c3RhdGljIGludCBicGZfaXRlcl9jZ3JvdXBfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMjc4LXtcXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM6Mjc5OlxcdGluZm8tXFx1MDAzZWl0ZXIuY2dyb3VwLm9yZGVyID0gYXV4LVxcdTAwM2VjZ3JvdXAub3JkZXI7XFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTI4MC1cXHRpbmZvLVxcdTAwM2VpdGVyLmNncm91cC5jZ3JvdXBfaWQgPSBjZ3JvdXBfaWQoYXV4LVxcdTAwM2VjZ3JvdXAuc3RhcnQpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjg1MD1DRklfTk9TRUFMKGJwZl90YXNrX3JlbGVhc2VfZHRvcik7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODU2LSAqIGNhbGxpbmcgYnBmX2Nncm91cF9yZWxlYXNlKCkuXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg1NzogKiBAY2dycDogVGhlIGNncm91cCBvbiB3aGljaCBhIHJlZmVyZW5jZSBpcyBiZWluZyBhY3F1aXJlZC5cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODU4LSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jPTI4NTk9X19icGZfa2Z1bmMgc3RydWN0IGNncm91cCAqYnBmX2Nncm91cF9hY3F1aXJlKHN0cnVjdCBjZ3JvdXAgKmNncnApXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODY4LSAqIGRyb3BzIHRvIDAuXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg2OTogKiBAY2dycDogVGhlIGNncm91cCBvbiB3aGljaCBhIHJlZmVyZW5jZSBpcyBiZWluZyByZWxlYXNlZC5cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODcwLSAqL1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjk1NT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2N1cnJlbnRfdGFza191bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yOTYzLS8qKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI5NjQ6ICogYnBmX3Rhc2tfZ2V0X2Nncm91cDEgLSBBY3F1aXJlcyB0aGUgYXNzb2NpYXRlZCBjZ3JvdXAgb2YgYSB0YXNrIHdpdGhpbiBhXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjk2NS0gKiBzcGVjaWZpYyBjZ3JvdXAxIGhpZXJhcmNoeS4gVGhlIGNncm91cDEgaGllcmFyY2h5IGlzIGlkZW50aWZpZWQgYnkgaXRzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjMzOjU0LjI2MTQ0Nzc0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTMyNDg2MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBUaGF0IGBDR1JPVVBfQlBGYCBLY29uZmlnIFN5bWJvbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBLY29uZmlnIGRlZmluaXRpb24gZm9yIGBDR1JPVVBfQlBGYC4gSXTigJlzIHNvbWV0aGluZyBJJ3ZlIHByb2JhYmx5IGNvbmZpZ3VyZWQgYSBkb3plbiB0aW1lcyBiZWZvcmUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgbG9jYXRpb24gb3IgYW55IGRlcGVuZGVuY2llcy4gVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEnigJlsbCBzdGFydCB3aXRoIGEgYGZpbmRgIG9yIGBncmVwYCBhY3Jvc3MgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc29tZXRoaW5nIGxpa2UgYGZpbmQgLiAtbmFtZSBcIktjb25maWcqXCIgLXByaW50MCB8IHhhcmdzIC0wIGdyZXAgQ0dST1VQX0JQRmAgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGUgdHlwaWNhbCBLY29uZmlnIHN0cnVjdHVyZSDigJMgdGhlIGBjb25maWcgQ0dST1VQX0JQRmAsIGBib29sYCwgdGhlIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIHRoZSBoZWxwIHRleHQsIGFuZCBzbyBvbi4gSSBuZWVkIHRoZSBzcGVjaWZpY3Mgc28gSSBjYW4gdW5kZXJzdGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFNvbWV0aW1lcywgdGhlIHN5bWJvbCBpcyBkZWZpbmVkIGluIGEgbW9yZSBnZW5lcmljIGNvbmZpZyBmaWxlLCBhbmQgaXMgdGhlbiBzZWxlY3RlZCBlbHNld2hlcmUuIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgdGllZCB0byBpdC5cblxuSWYgdGhlIGJhc2ljIHNlYXJjaCBpc24ndCBmcnVpdGZ1bCwgdGhlbiBJJ2xsIHByb2JhYmx5IGJyb2FkZW4gbXkgc2VhcmNoLiBJIGNvdWxkIGFsc28gcmVtZW1iZXIgdGhhdCBJIGNvbmZpZ3VyZWQgaXQgcmVjZW50bHksIHNvIGNoZWNraW5nIG15IGAuY29uZmlnYCBmaWxlIG1pZ2h0IGJlIGEgc2hvcnRjdXQuIEkgbWlnaHQgYWxzbyB0cnkgbG9va2luZyBmb3IgcmVsYXRlZCB0ZXJtcywgc3VjaCBhcyBcIkJQRlwiLCBcImNncm91cFwiLCBvciBcInNlY3VyaXR5XCIgaW4gdGhlIHNhbWUgS2NvbmZpZyBmaWxlcywgaW4gY2FzZSB0aGUgc3ltYm9sIGlzIGluZGlyZWN0bHkgcmVsYXRlZC5cblxuT25jZSBJJ3ZlIGdvdCB0aGUgZGVmaW5pdGlvbiwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBoZWxwIHRleHQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZ290Y2hhcywgb3IgaWYgaXQgcG9pbnRzIHRvIG90aGVyIHVzZWZ1bCBkb2N1bWVudGF0aW9uLiBGaW5hbGx5LCBJJ2xsIG1lbnRhbGx5IGZpbGUgdGhpcyBhd2F5IChvciBtYXliZSBqb3QgaXQgZG93biwgZGVwZW5kaW5nIG9uIGhvdyBvZnRlbiBJIG5lZWQgdG8gZG8gdGhpcykgdG8gc3RyZWFtbGluZSB0aGlzIHByb2Nlc3MgbmV4dCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjMzOjU3LjE5MzkzNzA4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzk3MzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0JQRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTM0NT1jb25maWcgQ0dST1VQX1BFUkZcXG4tLVxcbmluaXQvS2NvbmZpZy0xMzU1LVxcbmluaXQvS2NvbmZpZzoxMzU2OmNvbmZpZyBDR1JPVVBfQlBGXFxuaW5pdC9LY29uZmlnLTEzNTctXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozMzo1OC42OTE5MTU4MThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwOTkzNzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBuZXcgY29uZmlndXJhdGlvbiBpc3N1ZT8gUmlnaHQsIGBpbml0L0tjb25maWdgIOKAkyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0J3MgYXZhaWxhYmxlIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgYm9vdCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDEzNTYuIEkgZmlndXJlIHRoYXQgbG9jYXRpb24gaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGRlY2xhcmF0aW9ucyBvciBpbmNsdWRlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IEknbSBmb2N1c2VkIG9uLiBUaW1lIHRvIHNlZSB3aGF0IGtpbmQgb2YgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbnMgYXJlIGRlZmluZWQgdGhlcmUuIExldCdzIHNlZSBpZiB0aGlzIHNoZWRzIGFueSBsaWdodCBvbiB0aGUgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjAwLjgwMTg1NjMyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTA6XFx0XFx0ICB0byB0aHJlYWRzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2dyb3VwIHNwZWNpZmllZCBhbmQgcnVuIG9uIHRoZVxcbjEzNTE6XFx0XFx0ICBkZXNpZ25hdGVkIGNwdS4gIE9yIHRoaXMgY2FuIGJlIHVzZWQgdG8gaGF2ZSBjZ3JvdXAgSUQgaW4gc2FtcGxlc1xcbjEzNTI6XFx0XFx0ICBzbyB0aGF0IGl0IGNhbiBtb25pdG9yIHBlcmZvcm1hbmNlIGV2ZW50cyBhbW9uZyBjZ3JvdXBzLlxcbjEzNTM6XFx0XFxuMTM1NDpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMzU1OlxcdFxcbjEzNTY6XFx0Y29uZmlnIENHUk9VUF9CUEZcXG4xMzU3OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG4xMzU4OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4xMzU5OlxcdFxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuMTM2MDpcXHRcXHRoZWxwXFxuMTM2MTpcXHRcXHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcXG4xMzYyOlxcdFxcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cXG4xMzYzOlxcdFxcbjEzNjQ6XFx0XFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXFxuMTM2NTpcXHRcXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcXG4xMzY2OlxcdFxcdCAgQlBGX0NHUk9VUF9JTkVUX0lOR1JFU1Mgd2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgaW5ncmVzcyBwYXRoIG9mXFxuMTM2NzpcXHRcXHQgIGluZXQgc29ja2V0cy5cXG4xMzY4OlxcdFxcbjEzNjk6XFx0Y29uZmlnIENHUk9VUF9NSVNDXFxuMTM3MDpcXHRcXHRib29sIFxcXCJNaXNjIHJlc291cmNlIGNvbnRyb2xsZXJcXFwiXFxuMTM3MTpcXHRcXHRkZWZhdWx0IG5cXG4xMzcyOlxcdFxcdGhlbHBcXG4xMzczOlxcdFxcdCAgUHJvdmlkZXMgYSBjb250cm9sbGVyIGZvciBtaXNjZWxsYW5lb3VzIHJlc291cmNlcyBvbiBhIGhvc3QuXFxuMTM3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDE6MzQ6MDAuODAyMDc4ODY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MzYwNzU2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGBDR1JPVVBfQlBGYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYENHUk9VUF9CUEZgIGlzIGNsZWFybHkgcmVsaWFudCBvbiBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgY2dyb3VwLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgaW4gdGhlIGNvcmUgY2dyb3VwIGltcGxlbWVudGF0aW9uIHRoYXQncyB0aWVkIHRvIHRoaXMuIFRoZW4sIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIGJlZ2lubmluZyBvZiBga2VybmVsL2JwZi9jZ3JvdXAuY2AgZm9yIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MgdGhhdCBtaWdodCBpbXBhY3QgaG93IGBDR1JPVVBfQlBGYCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdldCBhIGhvbGlzdGljIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODczLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozNDowNC41MzgxNTcyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIEZ1bmN0aW9ucyB0byBtYW5hZ2UgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE2IERhbmllbCBNYWNrXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjdGwuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYtY2dyb3VwLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX2xzbS5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcXHUwMDNlXFxuICAyMTpcXHRcXG4gIDIyOlxcdCNpbmNsdWRlIFxcXCIuLi9jZ3JvdXAvY2dyb3VwLWludGVybmFsLmhcXFwiXFxuICAyMzpcXHRcXG4gIDI0OlxcdERFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGNncm91cF9icGZfZW5hYmxlZF9rZXksIE1BWF9DR1JPVVBfQlBGX0FUVEFDSF9UWVBFKTtcXG4gIDI1OlxcdEVYUE9SVF9TWU1CT0woY2dyb3VwX2JwZl9lbmFibGVkX2tleSk7XFxuICAyNjpcXHRcXG4gIDI3OlxcdC8qXFxuICAyODpcXHQgKiBjZ3JvdXAgYnBmIGRlc3RydWN0aW9uIG1ha2VzIGhlYXZ5IHVzZSBvZiB3b3JrIGl0ZW1zIGFuZCB0aGVyZSBjYW4gYmUgYSBsb3RcXG4gIDI5OlxcdCAqIG9mIGNvbmN1cnJlbnQgZGVzdHJ1Y3Rpb25zLiAgVXNlIGEgc2VwYXJhdGUgd29ya3F1ZXVlIHNvIHRoYXQgY2dyb3VwIGJwZlxcbiAgMzA6XFx0ICogZGVzdHJ1Y3Rpb24gd29yayBpdGVtcyBkb24ndCBlbmQgdXAgZmlsbGluZyB1cCBtYXhfYWN0aXZlIG9mIHN5c3RlbV9wZXJjcHVfd3FcXG4gIDMxOlxcdCAqIHdoaWNoIG1heSBsZWFkIHRvIGRlYWRsb2NrLlxcbiAgMzI6XFx0ICovXFxuICAzMzpcXHRzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNncm91cF9icGZfZGVzdHJveV93cTtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0c3RhdGljIGludCBfX2luaXQgY2dyb3VwX2JwZl93cV9pbml0KHZvaWQpXFxuICAzNjpcXHR7XFxuICAzNzpcXHRcXHRjZ3JvdXBfYnBmX2Rlc3Ryb3lfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcImNncm91cF9icGZfZGVzdHJveVxcXCIsXFxuICAzODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRXUV9QRVJDUFUsIDEpO1xcbiAgMzk6XFx0XFx0aWYgKCFjZ3JvdXBfYnBmX2Rlc3Ryb3lfd3EpXFxuICA0MDpcXHRcXHRcXHRwYW5pYyhcXFwiRmFpbGVkIHRvIGFsbG9jIHdvcmtxdWV1ZSBmb3IgY2dyb3VwIGJwZiBkZXN0cm95LlxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjA0LjUzODI5OTEyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1OTU3NTQxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogQ2dyb3VwIEJQRiBBdHRhY2ggSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIGNvcmUgY2dyb3VwIEJQRiBhdHRhY2ggaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGlzIGJlaW5nIGFkZHJlc3NlZC4gVGhhdCBmdW5jdGlvbiBpcyBzdGF0aWMsIGJ1dCBpdCdzIGNhbGxlZCBieSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFdlJ3ZlIGNvbmZpcm1lZCB0aGVzZSBlbnRyeSBwb2ludHMgYXJlIGluZGVlZCBub24tc3RhdGljIOKAkyBnb29kLlxuXG5UaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQgc2FmZWx5IGV2YWx1YXRlcyB0aGUgYGxpbmtgIHBvaW50ZXIgYW5kIHJldHVybnMgYW4gZXJyb3IgaWYgYG5ld19wcm9nYCBpcyBOVUxMLCBwcmV2ZW50aW5nIHRoZSBkZXJlZmVyZW5jZS4gSW1wb3J0YW50bHksIHRoaXMgKmRvZXMqIG1vZGlmeSByZWFjaGFibGUga2VybmVsIGxvZ2ljIHdpdGhpbiB0aGUgYnBmIHN5c2NhbGwsIGRlYWxpbmcgd2l0aCBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGNncm91cCBCUEYgbWFuYWdlbWVudC5cblxuTm93LCBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBjZ3JvdXAgQlBGIGludGVyYWN0aW9uIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgYGJwZmAgc3lzY2FsbCAoYEJQRl9QUk9HX0FUVEFDSGAsIGBCUEZfTElOS19DUkVBVEVgKSwgYW5kIHRoZXNlIGNhbiBiZSB0ZXN0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoZSBCUEYgYXR0YWNoIG1lY2hhbmlzbXMgd2l0aCB2YXJpb3VzIGZsYWcgYW5kIHBvaW50ZXIgY29tYmluYXRpb25zIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBzbyB0aGUgcG90ZW50aWFsIHBheW9mZiBpcyB3b3J0aCB0aGUgZWZmb3J0LlxuXG5UbyBlbmFibGUgcHJvcGVyIHRlc3RpbmcsIHdlIG5lZWQgYENHUk9VUF9CUEZgLCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBLY29uZmlnIGZpbGVzLCBhbmQgdGhlc2Ugc2VlbSB0byBiZSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIE5vIG90aGVyIGRlcGVuZGVuY2llcyBqdW1wIG91dC5cblxuRm9yIGZ1enppbmcgZm9jdXMsIHdlJ2xsIHRhcmdldCB0aGUgZW50cnkgcG9pbnRzOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4cG9zZSBhbmQgdGVzdCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy5cblxuRmluYWxseSwgSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gYW55IG9mIHRoZSBkaXNxdWFsaWZ5aW5nIGNhdGVnb3JpZXMgZm9yIGZ1enppbmcgKGRvY3VtZW50YXRpb24gY2hhbmdlcyBvbmx5LCBsb2dnaW5nIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUsIGV0Yy4pIGFuZCBpdCBkaXJlY3RseSBhZGRyZXNzZXMgYSBjcml0aWNhbCBwYXRoIHdpdGggYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUuIFRoZXJlZm9yZSwgaXQgaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nYC5cblxuSW4gc3VtbWFyeSwgdGhlIHNwZWNpZmljIGBGb2N1c1N5bWJvbHNgIGFyZTogYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlOiBgQlBGX1NZU0NBTExgIGFuZCBgQ0dST1VQX0JQRmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzY4LCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjEwLjEzNDA1NTMwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDI2NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgY2dyb3VwIEJQRiBhdHRhY2htZW50IHBhdGggKF9fY2dyb3VwX2JwZl9hdHRhY2gpIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIG5ldyBwcm9ncmFtIHRvIGF0dGFjaC4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBhbmQgY2dyb3VwIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHN5c2NhbGwgb3BlcmF0aW9ucyAoZS5nLiwgQlBGX1BST0dfQVRUQUNIIGFuZCBCUEZfTElOS19DUkVBVEUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBjZ3JvdXAgQlBGIGF0dGFjaG1lbnQgcGF0aCAoX19jZ3JvdXBfYnBmX2F0dGFjaCkgd2hlbiBkZXRlcm1pbmluZyB0aGUgbmV3IHByb2dyYW0gdG8gYXR0YWNoLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIGFuZCBjZ3JvdXAgbG9naWMgcmVhY2hhYmxlIHZpYSBCUEYgc3lzY2FsbCBvcGVyYXRpb25zIChlLmcuLCBCUEZfUFJPR19BVFRBQ0ggYW5kIEJQRl9MSU5LX0NSRUFURSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjEwLjIxMTQ5MzU4MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NDg3ODg1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozNDoxMC4yMTIwMDY4NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzg0ODI3MTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2goKWAgd2hlbiBib3RoIGBwcm9nYCBhbmQgYGxpbmtgIGFyZ3VtZW50cyBhcmUgTlVMTC4gSXQgZ3VhcmRzIHRoZSBkZXJlZmVyZW5jZSBvZiBgbGluay1cXHUwMDNlbGluay5wcm9nYCBhbmQgYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgYGlmICghbmV3X3Byb2cpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFNpbmNlIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAod2hpY2ggaXMgYWxyZWFkeSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG9vcHMgaGFuZGxlcnMgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcyksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1ZTY5NTk3ODkzMjYxMGMzZmI0MzczMDJmYjk3YjA0YmMwYjA5ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAxOjMzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDE0OTY3MmM3NmM0OWMuLjE1NmZjNGQ2MGRhZjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODE0LDcgKzgxNCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4rXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuQEAgLTgzNCw2ICs4MzQsOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghIXJlcGxhY2VfcHJvZyAhPSAhIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkpXG4gXHRcdC8qIHJlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhICovXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFuZXdfcHJvZylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XG4gXHRpZiAoYXR5cGUgXHUwMDNjIDApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozNDoxMC4yMTIwMDkzNjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODc0OTcxMTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDZ3JvdXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIHRoZSBjaGFuZ2VzIG1hZGUgdG8gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBUaGUgYGRpZmZgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzZWUgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSA4MTQuIExvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0IGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byB0aGUgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGZ1bmN0aW9uLCB3aGljaCBpcywgb2YgY291cnNlLCBjcml0aWNhbCBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyB0byBjZ3JvdXBzLiBJIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG5ld19wcm9nYCBhbmQgaXRzIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIG51bGwgdmFsdWVzLiBUaGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIGBpZiAoIW5ld19wcm9nKWAgaXMgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBuZXcgdmFsaWRhdGlvbiBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGVjayB3YXNuJ3QgcHJlc2VudCBiZWZvcmUuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBuZXdfcHJvZ2AgbWlnaHQgYmUgbnVsbCBhbmQgaG93IHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhvc2Ugc2NlbmFyaW9zLiBJcyB0aGlzIGEgYnVnIGZpeD8gQSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IE9yIGlzIHRoaXMgY2hhbmdlIGVuYWJsaW5nIGEgbmV3IGZ1bmN0aW9uYWxpdHksIHN1Y2ggYXMgc3VwcG9ydGluZyBkZXRhY2hlZCBjZ3JvdXAgQlBGIHByb2dyYW1zPyBUaGUgY29kZSBjb21tZW50IFwicmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2FcIiBpcyBhIHN0YW5kYXJkIHZhbGlkYXRpb24gY2hlY2suIEhvd2V2ZXIsIHRoZSBhZGRpdGlvbiBvZiB0aGUgbmV3IGNoZWNrIG1heSBtZWFuIHRoYXQgdGhlIGNoZWNrIGZvciB0aGUgcmVwbGFjZSBmbGFnIGhhcyBiZWNvbWUgZGVwZW5kZW50IG9uIGFub3RoZXIgY29uZGl0aW9uIGFuZCB0aHVzIHJlcXVpcmVkIGEgbmV3IHZhbGlkYXRpb24uIExldCBtZSByZWFkIG1vcmUgYWJvdXQgdGhlIGNvbnRleHQgdXNpbmcgYHJlYWQtZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMTozNDoxOC45NjE3MjM1NTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODAwOlxcdCAqIEBpZF9vcl9mZDogUmVsYXRpdmUgcHJvZyBpZCBvciBmZFxcbiA4MDE6XFx0ICogQHJldmlzaW9uOiBicGZfcHJvZ19saXN0IHJldmlzaW9uXFxuIDgwMjpcXHQgKlxcbiA4MDM6XFx0ICogRXhhY3RseSBvbmUgb2YgQHByb2cgb3IgQGxpbmsgY2FuIGJlIG5vbi1udWxsLlxcbiA4MDQ6XFx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC5cXG4gODA1OlxcdCAqL1xcbiA4MDY6XFx0c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIDgwNzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4gODA4OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbiA4MDk6XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLFxcbiA4MTA6XFx0XFx0XFx0XFx0ICAgICAgIHU2NCByZXZpc2lvbilcXG4gODExOlxcdHtcXG4gODEyOlxcdFxcdHUzMiBzYXZlZF9mbGFncyA9IChmbGFncyBcXHUwMDI2IChCUEZfRl9BTExPV19PVkVSUklERSB8IEJQRl9GX0FMTE9XX01VTFRJKSk7XFxuIDgxMzpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcXG4gODE0OlxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiA4MTU6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiA4MTY6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiA4MTc6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IChsaW5rID8gbGluay1cXHUwMDNlbGluay5wcm9nIDogTlVMTCk7XFxuIDgxODpcXHRcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxuIDgxOTpcXHRcXHR1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7XFxuIDgyMDpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuIDgyMTpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XFxuIDgyMjpcXHRcXHRpbnQgZXJyO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHRpZiAoKChmbGFncyBcXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XFxuIDgyNTpcXHRcXHQgICAgKChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpKVxcbiA4MjY6XFx0XFx0XFx0LyogaW52YWxpZCBjb21iaW5hdGlvbiAqL1xcbiA4Mjc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgyODpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgKEJQRl9GX0JFRk9SRSB8IEJQRl9GX0FGVEVSKSkpXFxuIDgyOTpcXHRcXHRcXHQvKiBvbmx5IGVpdGhlciByZXBsYWNlIG9yIGluc2VydGlvbiB3aXRoIGJlZm9yZS9hZnRlciAqL1xcbiA4MzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzMTpcXHRcXHRpZiAobGluayBcXHUwMDI2XFx1MDAyNiAocHJvZyB8fCByZXBsYWNlX3Byb2cpKVxcbiA4MzI6XFx0XFx0XFx0Lyogb25seSBlaXRoZXIgbGluayBvciBwcm9nL3JlcGxhY2VfcHJvZyBjYW4gYmUgc3BlY2lmaWVkICovXFxuIDgzMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODM0OlxcdFxcdGlmICghIXJlcGxhY2VfcHJvZyAhPSAhIShmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpKVxcbiA4MzU6XFx0XFx0XFx0LyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi9cXG4gODM2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Mzc6XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gODM4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkKTtcXG4gODQxOlxcdFxcdGlmIChhdHlwZSBcXHUwMDNjIDApXFxuIDg0MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODQzOlxcdFxcdGlmIChyZXZpc2lvbiBcXHUwMDI2XFx1MDAyNiByZXZpc2lvbiAhPSBjZ3JwLVxcdTAwM2VicGYucmV2aXNpb25zW2F0eXBlXSlcXG4gODQ0OlxcdFxcdFxcdHJldHVybiAtRVNUQUxFO1xcbiA4NDU6XFx0XFxuIDg0NjpcXHRcXHRwcm9ncyA9IFxcdTAwMjZjZ3JwLVxcdTAwM2VicGYucHJvZ3NbYXR5cGVdO1xcbiA4NDc6XFx0XFxuIDg0ODpcXHRcXHRpZiAoIWhpZXJhcmNoeV9hbGxvd3NfYXR0YWNoKGNncnAsIGF0eXBlKSlcXG4gODQ5OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg1MDpcXHRcXG4gODUxOlxcdFxcdGlmICghaGxpc3RfZW1wdHkocHJvZ3MpIFxcdTAwMjZcXHUwMDI2IGNncnAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gIT0gc2F2ZWRfZmxhZ3MpXFxuIDg1MjpcXHRcXHRcXHQvKiBEaXNhbGxvdyBhdHRhY2hpbmcgbm9uLW92ZXJyaWRhYmxlIG9uIHRvcFxcbiA4NTM6XFx0XFx0XFx0ICogb2YgZXhpc3Rpbmcgb3ZlcnJpZGFibGUgaW4gdGhpcyBjZ3JvdXAuXFxuIDg1NDpcXHRcXHRcXHQgKiBEaXNhbGxvdyBhdHRhY2hpbmcgbXVsdGktcHJvZyBpZiBvdmVycmlkYWJsZSBvciBub25lXFxuIDg1NTpcXHRcXHRcXHQgKi9cXG4gODU2OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdGlmIChwcm9nX2xpc3RfbGVuZ3RoKHByb2dzLCBOVUxMKSBcXHUwMDNlPSBCUEZfQ0dST1VQX01BWF9QUk9HUylcXG4gODU5OlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjE4Ljk2MTkyMDU4OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDk4MzM1NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSBmaXggaXMgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBUaGUgb3JpZ2luYWwgY29kZSwgYHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZztgLCBoYWQgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBJZiAqYm90aCogYHByb2dgIGFuZCBgbGlua2Agd2VyZSBOVUxMLCBpdCB3b3VsZCB0cnkgdG8gYWNjZXNzIGBsaW5rLVx1MDAzZWxpbmsucHJvZ2AsIGNhdXNpbmcgYSBjcmFzaC4gVGhlIHBhdGNoIGVsZWdhbnRseSBhZGRyZXNzZXMgdGhpcyB3aXRoIGBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogKGxpbmsgPyBsaW5rLVx1MDAzZWxpbmsucHJvZyA6IE5VTEwpO2AgYW5kIGEgc3Vic2VxdWVudCBgaWYgKCFuZXdfcHJvZykgcmV0dXJuIC1FSU5WQUw7YCBjaGVjay4gQ2xldmVyLCBjb25jaXNlLCBhbmQgY3J1Y2lhbC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgcGFydGljdWxhcmx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEkndmUgZ29uZSB0aHJvdWdoIHRoZSB1c3VhbCBjaGVja2xpc3Q6XG5cbiogICAqKk5vIGtlcm5lbCBkYXRhIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIHZhbHVlcy4qKiBUaGF0J3MgYSBodWdlIHJlbGllZi5cbiogICAqKk5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4qKiBBbHdheXMgYSBwb3RlbnRpYWwgcGl0ZmFsbC4gR2xhZCB0aGF0J3MgY2xlYXIuXG4qICAgKipObyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucy4qKiBDaGVja2VkLlxuKiAgICoqTm8gY2hhbmdlcyB0aGF0IGNvdWxkIGNyZWF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBkdWUgdG8gY2hhbmdlcyBpbiBib3VuZHMgb3IgbGVuZ3Rocy4qKiBHb29kLlxuXG5UaGUgYnVnIGZpeGVkIHdhcyBhIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBrZXJuZWwgb29wcy5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXggYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIG5ldyB2dWxuZXJhYmlsaXRpZXMsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgaGFuZGxlIHRoZXNlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMsIGFuZCBLTVNBTiBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgY29uY2VybnMgdGhhdCB3b3VsZCB0cmlnZ2VyIGEgS01TQU4gY2hlY2suIFRoaXMgaXMgc291bmQgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkyLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAxOjM0OjI0LjA2MDI1OTQwMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2goKWAgd2hlbiBib3RoIGBwcm9nYCBhbmQgYGxpbmtgIGFyZ3VtZW50cyBhcmUgTlVMTC4gSXQgZ3VhcmRzIHRoZSBkZXJlZmVyZW5jZSBvZiBgbGluay1cXHUwMDNlbGluay5wcm9nYCBhbmQgYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgYGlmICghbmV3X3Byb2cpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFNpbmNlIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAod2hpY2ggaXMgYWxyZWFkeSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG9vcHMgaGFuZGxlcnMgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcyksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBfX2Nncm91cF9icGZfYXR0YWNoKClgIHdoZW4gYm90aCBgcHJvZ2AgYW5kIGBsaW5rYCBhcmd1bWVudHMgYXJlIE5VTEwuIEl0IGd1YXJkcyB0aGUgZGVyZWZlcmVuY2Ugb2YgYGxpbmstXFx1MDAzZWxpbmsucHJvZ2AgYW5kIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGBpZiAoIW5ld19wcm9nKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBTaW5jZSB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHdoaWNoIGlzIGFscmVhZHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIGhhbmRsZXJzIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[1] Phase: Succeeded StartedAt: 2026-09-03 01:34:35 +0000 UTC FinishedAt: 2026-09-03 01:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 01:34:35 +0000 UTC FinishedAt: 2026-09-03 01:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2] Phase: Succeeded StartedAt: 2026-09-03 01:34:35 +0000 UTC FinishedAt: 2026-09-03 05:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 01:34:35 +0000 UTC FinishedAt: 2026-09-03 05:16:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 01:34:35 +0000 UTC FinishedAt: 2026-09-03 01:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 01:34:35 +0000 UTC FinishedAt: 2026-09-03 01:34:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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-workflowzqnq4/series-workflowzqnq4-convert-artifact-1646928432/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 01:34:45 +0000 UTC FinishedAt: 2026-09-03 01:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 01:34:45 +0000 UTC FinishedAt: 2026-09-03 01:50:41 +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:*166af7d8-2396-45fe-984f-99daad61d610,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-workflowzqnq4/series-workflowzqnq4-convert-artifact-1646928432/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": "deff5a4f-02b4-4d9b-8c05-db70a16910ec", "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-workflowzqnq4/series-workflowzqnq4-build-action-4071231286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 01:34:45 +0000 UTC FinishedAt: 2026-09-03 01:50:31 +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:*166af7d8-2396-45fe-984f-99daad61d610,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-workflowzqnq4/series-workflowzqnq4-convert-artifact-1646928432/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": "deff5a4f-02b4-4d9b-8c05-db70a16910ec", "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-workflowzqnq4/series-workflowzqnq4-build-action-4071231286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 01:50:41 +0000 UTC FinishedAt: 2026-09-03 01:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 01:50:41 +0000 UTC FinishedAt: 2026-09-03 01:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 01:50:41 +0000 UTC FinishedAt: 2026-09-03 01:50:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 01:50:41 +0000 UTC FinishedAt: 2026-09-03 01:50:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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-workflowzqnq4/series-workflowzqnq4-convert-artifact-2228096279/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 01:50:51 +0000 UTC FinishedAt: 2026-09-03 01:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 01:50:51 +0000 UTC FinishedAt: 2026-09-03 01:52:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*deff5a4f-02b4-4d9b-8c05-db70a16910ec,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-workflowzqnq4/series-workflowzqnq4-build-action-4071231286/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-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 01:52:54 +0000 UTC FinishedAt: 2026-09-03 01:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:52:54 +0000 UTC FinishedAt: 2026-09-03 01:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 01:52:54 +0000 UTC FinishedAt: 2026-09-03 02:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 01:52:54 +0000 UTC FinishedAt: 2026-09-03 02:12:32 +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:*166af7d8-2396-45fe-984f-99daad61d610,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-workflowzqnq4/series-workflowzqnq4-convert-artifact-2228096279/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": "a43c8725-c6f2-4a21-9266-0ec1a00d6221", "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-workflowzqnq4/series-workflowzqnq4-build-action-3568911195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 01:52:54 +0000 UTC FinishedAt: 2026-09-03 02:12:22 +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:*166af7d8-2396-45fe-984f-99daad61d610,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-workflowzqnq4/series-workflowzqnq4-convert-artifact-2228096279/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": "a43c8725-c6f2-4a21-9266-0ec1a00d6221", "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-workflowzqnq4/series-workflowzqnq4-build-action-3568911195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 02:12:32 +0000 UTC FinishedAt: 2026-09-03 02:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 02:12:32 +0000 UTC FinishedAt: 2026-09-03 02:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 02:12:32 +0000 UTC FinishedAt: 2026-09-03 02:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 02:12:32 +0000 UTC FinishedAt: 2026-09-03 02:14:25 +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:*a43c8725-c6f2-4a21-9266-0ec1a00d6221,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-workflowzqnq4/series-workflowzqnq4-build-action-3568911195/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-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 02:14:35 +0000 UTC FinishedAt: 2026-09-03 05:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 02:14:35 +0000 UTC FinishedAt: 2026-09-03 05:16:00 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"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:*deff5a4f-02b4-4d9b-8c05-db70a16910ec,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a43c8725-c6f2-4a21-9266-0ec1a00d6221,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-workflowzqnq4/series-workflowzqnq4-build-action-4071231286/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-workflowzqnq4/series-workflowzqnq4-build-action-3568911195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 02:14:35 +0000 UTC FinishedAt: 2026-09-03 02:14:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 02:14:35 +0000 UTC FinishedAt: 2026-09-03 02:14:40 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"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-workflowzqnq4/series-workflowzqnq4-convert-artifact-210343376/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 02:14:35 +0000 UTC FinishedAt: 2026-09-03 02:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 02:14:35 +0000 UTC FinishedAt: 2026-09-03 02:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 02:14:36 +0000 UTC FinishedAt: 2026-09-03 02:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 02:14:46 +0000 UTC FinishedAt: 2026-09-03 05:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqnq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF"],"series_id":"f381a314-0ffa-4a74-9d69-eed88da55572","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 02:14:46 +0000 UTC FinishedAt: 2026-09-03 05:15:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*deff5a4f-02b4-4d9b-8c05-db70a16910ec,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a43c8725-c6f2-4a21-9266-0ec1a00d6221,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-workflowzqnq4/series-workflowzqnq4-build-action-4071231286/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-workflowzqnq4/series-workflowzqnq4-build-action-3568911195/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-workflowzqnq4/series-workflowzqnq4-convert-artifact-210343376/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,}