Name: series-workflowg47q6 Phase: Succeeded StartedAt: 2026-07-02 06:18:06 +0000 UTC FinishedAt: 2026-07-02 10:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[0] Phase: Succeeded StartedAt: 2026-07-02 06:18:06 +0000 UTC FinishedAt: 2026-07-02 06:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 06:18:06 +0000 UTC FinishedAt: 2026-07-02 06:31:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b72e29e0f7ee329d89f86db8700c8ea99b4a370a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b72e29e0f7ee329d89f86db8700c8ea99b4a370a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "b323738f-ad42-4f1e-a46d-1a9912cdfc54" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_update_elem_sys", "sock_map_update_elem", "sock_map_sk_state_allowed" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW1fc3lzJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgc29ja21hcCBsb2dpYyB0byByZWplY3QgdW5ib3VuZCBVRFAgc29ja2V0cyBmcm9tIGJlaW5nIGFkZGVkIHRvIGEgc29ja21hcC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgYnVncyBvciBjcmFzaGVzIGNhdXNlZCBieSB1bmluaXRpYWxpemVkIG9yIHVuaGFzaGVkIHNvY2tldHMgaW50ZXJhY3Rpbmcgd2l0aCBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cuIEZ1enppbmcgdGhlIG1hcCB1cGRhdGUgZnVuY3Rpb25zIHdpdGggdmFyaW91cyBzb2NrZXQgc3RhdGVzIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM1YjEyYjIxNGNmNzZhYTlkOGNmOGU2MmVhNjIwOGQxYzA2N2VkYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDA2OjI5OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5pbmRleCBjNjBiYTZkMjkyZjlhZS4uOWVmYmQ4Y2E3ZGI4MzIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5AQCAtNTQyLDYgJiM0Mzs1NDIsOCBAQCBzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRpZiAoc2tfaXNfdGNwKHNrKSlcbiBcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xuJiM0MztcdGlmIChza19pc191ZHAoc2spKVxuJiM0MztcdFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XG4gXHRpZiAoc2tfaXNfc3RyZWFtX3VuaXgoc2spKVxuIFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIFJFQURfT05DRShzay1cdTAwM2Vza19zdGF0ZSkpIFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xuIFx0aWYgKHNrX2lzX3Zzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbmluZGV4IGNiMzIyOTcxMWY5M2EzLi4yZDIyYTkwNThhOGU5MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5AQCAtODUzLDcgJiM0Mzs4NTMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfbWFueV9zb2NrZXQodm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XG4mIzQzO1x0dWRwID0gc29ja2V0X2xvb3BiYWNrKEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLKTtcbiBcdGlmICh1ZHAgXHUwMDNjIDApIHtcbiBcdFx0Y2xvc2UoZGdyYW0pO1xuIFx0XHRjbG9zZSh0Y3ApO1xuQEAgLTkyMiw3ICYjNDM7OTIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX21hbnlfbWFwcyh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHR1ZHAgPSB4c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLLCAwKTtcbiYjNDM7XHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xuIFx0aWYgKHVkcCBcdTAwM2MgMCkge1xuIFx0XHRjbG9zZShkZ3JhbSk7XG4gXHRcdGNsb3NlKHRjcCk7XG5AQCAtOTkzLDcgJiM0Mzs5OTMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc2FtZV9zb2NrKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHVkcCA9IHhzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApO1xuJiM0MztcdHVkcCA9IHNvY2tldF9sb29wYmFjayhBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSyk7XG4gXHRpZiAodWRwIFx1MDAzYyAwKSB7XG4gXHRcdGNsb3NlKGRncmFtKTtcbiBcdFx0Y2xvc2UodGNwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xuaW5kZXggY2MwYzY4YmFiOTA3OTYuLmI4NzExOGFhYjdjNGEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xuQEAgLTUzLDggJiM0Mzs1Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXG4gXHRcdFx0ICAgICAgIGludCBmYW1pbHksIGludCBzb3R5cGUsIGludCBtYXBmZClcbiB7XG4gXHR1MzIga2V5ID0gMDtcbi1cdHU2NCB2YWx1ZTtcbiBcdGludCBlcnIsIHM7XG4mIzQzO1x0dTY0IHZhbHVlO1xuIFxuIFx0cyA9IHhzb2NrZXQoZmFtaWx5LCBzb3R5cGUsIDApO1xuIFx0aWYgKHMgPT0gLTEpXG5AQCAtNjMsMTEgJiM0Mzs2Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXG4gXHRlcnJubyA9IDA7XG4gXHR2YWx1ZSA9IHM7XG4gXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcGZkLCBcdTAwMjZrZXksIFx1MDAyNnZhbHVlLCBCUEZfTk9FWElTVCk7XG4tXHRpZiAoc290eXBlID09IFNPQ0tfU1RSRUFNKSB7XG4tXHRcdGlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXG4tXHRcdFx0RkFJTF9FUlJOTyhcJiMzNDttYXBfdXBkYXRlOiBleHBlY3RlZCBFT1BOT1RTVVBQXCYjMzQ7KTtcbi1cdH0gZWxzZSBpZiAoZXJyKVxuLVx0XHRGQUlMX0VSUk5PKFwmIzM0O21hcF91cGRhdGU6IGV4cGVjdGVkIHN1Y2Nlc3NcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUlIoZXJyLCBcJiMzNDttYXBfdXBkYXRlXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFAsIFwmIzM0O2Vycm5vXCYjMzQ7KTtcbiBcdHhjbG9zZShzKTtcbiB9XG4gXG5AQCAtNzcsOCAmIzQzOzc0LDggQEAgc3RhdGljIHZvaWQgdGVzdF9pbnNlcnRfYm91bmQoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwgX19hbHdheXNfdW51c2VkLFxuIFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjtcbiBcdHNvY2tsZW5fdCBsZW4gPSAwO1xuIFx0dTMyIGtleSA9IDA7XG4tXHR1NjQgdmFsdWU7XG4gXHRpbnQgZXJyLCBzO1xuJiM0MztcdHU2NCB2YWx1ZTtcbiBcbiBcdGluaXRfYWRkcl9sb29wYmFjayhmYW1pbHksIFx1MDAyNmFkZHIsIFx1MDAyNmxlbik7XG4gXG5AQCAtOTMsOCAmIzQzOzkwLDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X2JvdW5kKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsIF9fYWx3YXlzX3VudXNlZCxcbiBcdGVycm5vID0gMDtcbiBcdHZhbHVlID0gcztcbiBcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwZmQsIFx1MDAyNmtleSwgXHUwMDI2dmFsdWUsIEJQRl9OT0VYSVNUKTtcbi1cdGlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXG4tXHRcdEZBSUxfRVJSTk8oXCYjMzQ7bWFwX3VwZGF0ZTogZXhwZWN0ZWQgRU9QTk9UU1VQUFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHNvdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuJiM0MztcdFx0QVNTRVJUX0VSUihlcnIsIFwmIzM0O21hcF91cGRhdGVcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQLCBcJiMzNDtlcnJub1wmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIGlmIChlcnIpIHtcbiYjNDM7XHRcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O21hcF91cGRhdGVcJiMzNDspO1xuJiM0MztcdH1cbiBjbG9zZTpcbiBcdHhjbG9zZShzKTtcbiB9XG5AQCAtMTI4OSw3ICYjNDM7MTI5MCw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfb3BzKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHQvKiBpbnNlcnQgKi9cbiBcdFx0VEVTVCh0ZXN0X2luc2VydF9pbnZhbGlkKSxcbiBcdFx0VEVTVCh0ZXN0X2luc2VydF9vcGVuZWQpLFxuLVx0XHRURVNUKHRlc3RfaW5zZXJ0X2JvdW5kLCBTT0NLX1NUUkVBTSksXG4mIzQzO1x0XHRURVNUKHRlc3RfaW5zZXJ0X2JvdW5kKSxcbiBcdFx0VEVTVCh0ZXN0X2luc2VydCksXG4gXHRcdC8qIGRlbGV0ZSAqL1xuIFx0XHRURVNUKHRlc3RfZGVsZXRlX2FmdGVyX2luc2VydCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jXG5pbmRleCBjMzJkYTdiZDhiZTI3Ni4uNmEyNjQxZWU3ODk3NTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuY1xuQEAgLTc1OSwxNiAmIzQzOzc1OSwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXAodW5zaWduZWQgaW50IHRhc2tzLCB2b2lkICpkYXRhKVxuIFx0XHRnb3RvIG91dF9zb2NrbWFwO1xuIFx0fVxuIFxuLVx0LyogVGVzdCB1cGRhdGUgd2l0aCB1bnN1cHBvcnRlZCBVRFAgc29ja2V0ICovXG4mIzQzO1x0LyogVGVzdCB1cGRhdGUgd2l0aCB1bnN1cHBvcnRlZCB1bmJvdW5kIFVEUCBzb2NrZXQgKi9cbiBcdHVkcCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTtcbi1cdGkgPSAwO1xuLVx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShmZCwgXHUwMDI2aSwgXHUwMDI2dWRwLCBCUEZfQU5ZKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0cHJpbnRmKFwmIzM0O0ZhaWxlZCBzb2NrZXQgdXBkYXRlIFNPQ0tfREdSQU0gJiMzOTslaTolaSYjMzk7XFxuXCYjMzQ7LFxuLVx0XHQgICAgICAgaSwgdWRwKTtcbiYjNDM7XHRDSEVDSyh1ZHAgXHUwMDNjIDAsIFwmIzM0O3NvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKVwmIzM0OywgXCYjMzQ7ZXJybm86JWRcXG5cJiMzNDssIGVycm5vKTtcbiYjNDM7XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCBcdTAwMjYoaW50KXswfSwgXHUwMDI2dWRwLCBCUEZfQU5ZKTtcbiYjNDM7XHRjbG9zZSh1ZHApO1xuJiM0MztcdGlmICghZXJyKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7VW5leHBlY3RlZGx5IHN1Y2NlZWRlZCB1bmJvdW5kIFVEUCB1cGRhdGUgJiMzOTswOiVpJiMzOTtcXG5cJiMzNDssIHVkcCk7XG4gXHRcdGdvdG8gb3V0X3NvY2ttYXA7XG4gXHR9XG4tXHRjbG9zZSh1ZHApO1xuIFxuIFx0LyogVGVzdCB1cGRhdGUgd2l0aG91dCBwcm9ncmFtcyAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNjsgaSYjNDM7JiM0MzspIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHNvY2ttYXAgbG9naWMgdG8gcmVqZWN0IHVuYm91bmQgVURQIHNvY2tldHMgZnJvbSBiZWluZyBhZGRlZCB0byBhIHNvY2ttYXAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGJ1Z3Mgb3IgY3Jhc2hlcyBjYXVzZWQgYnkgdW5pbml0aWFsaXplZCBvciB1bmhhc2hlZCBzb2NrZXRzIGludGVyYWN0aW5nIHdpdGggQlBGIHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93LiBGdXp6aW5nIHRoZSBtYXAgdXBkYXRlIGZ1bmN0aW9ucyB3aXRoIHZhcmlvdXMgc29ja2V0IHN0YXRlcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM1YjEyYjIxNGNmNzZhYTlkOGNmOGU2MmVhNjIwOGQxYzA2N2VkYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDA2OjI5OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKaW5kZXggYzYwYmE2ZDI5MmY5YWUuLjllZmJkOGNhN2RiODMyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKQEAgLTU0Miw2ICYjNDM7NTQyLDggQEAgc3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaWYgKHNrX2lzX3RjcChzaykpCiAJCXJldHVybiAoMSAmbHQ7Jmx0OyBzay0mZ3Q7c2tfc3RhdGUpICZhbXA7IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pOwomIzQzOwlpZiAoc2tfaXNfdWRwKHNrKSkKJiM0MzsJCXJldHVybiBza19oYXNoZWQoc2spOwogCWlmIChza19pc19zdHJlYW1fdW5peChzaykpCiAJCXJldHVybiAoMSAmbHQ7Jmx0OyBSRUFEX09OQ0Uoc2stJmd0O3NrX3N0YXRlKSkgJmFtcDsgVENQRl9FU1RBQkxJU0hFRDsKIAlpZiAoc2tfaXNfdnNvY2soc2spICZhbXA7JmFtcDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwppbmRleCBjYjMyMjk3MTFmOTNhMy4uMmQyMmE5MDU4YThlOTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMKQEAgLTg1Myw3ICYjNDM7ODUzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX21hbnlfc29ja2V0KHZvaWQpCiAJCXJldHVybjsKIAl9CiAKLQl1ZHAgPSB4c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLLCAwKTsKJiM0MzsJdWRwID0gc29ja2V0X2xvb3BiYWNrKEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLKTsKIAlpZiAodWRwICZsdDsgMCkgewogCQljbG9zZShkZ3JhbSk7CiAJCWNsb3NlKHRjcCk7CkBAIC05MjIsNyAmIzQzOzkyMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tYW55X21hcHModm9pZCkKIAkJcmV0dXJuOwogCX0KIAotCXVkcCA9IHhzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApOwomIzQzOwl1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spOwogCWlmICh1ZHAgJmx0OyAwKSB7CiAJCWNsb3NlKGRncmFtKTsKIAkJY2xvc2UodGNwKTsKQEAgLTk5Myw3ICYjNDM7OTkzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3NhbWVfc29jayh2b2lkKQogCQlyZXR1cm47CiAJfQogCi0JdWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7CiYjNDM7CXVkcCA9IHNvY2tldF9sb29wYmFjayhBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSyk7CiAJaWYgKHVkcCAmbHQ7IDApIHsKIAkJY2xvc2UoZGdyYW0pOwogCQljbG9zZSh0Y3ApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMKaW5kZXggY2MwYzY4YmFiOTA3OTYuLmI4NzExOGFhYjdjNGEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMKQEAgLTUzLDggJiM0Mzs1Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsCiAJCQkgICAgICAgaW50IGZhbWlseSwgaW50IHNvdHlwZSwgaW50IG1hcGZkKQogewogCXUzMiBrZXkgPSAwOwotCXU2NCB2YWx1ZTsKIAlpbnQgZXJyLCBzOwomIzQzOwl1NjQgdmFsdWU7CiAKIAlzID0geHNvY2tldChmYW1pbHksIHNvdHlwZSwgMCk7CiAJaWYgKHMgPT0gLTEpCkBAIC02MywxMSAmIzQzOzYzLDggQEAgc3RhdGljIHZvaWQgdGVzdF9pbnNlcnRfb3BlbmVkKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsIF9fYWx3YXlzX3VudXNlZCwKIAllcnJubyA9IDA7CiAJdmFsdWUgPSBzOwogCWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwZmQsICZhbXA7a2V5LCAmYW1wO3ZhbHVlLCBCUEZfTk9FWElTVCk7Ci0JaWYgKHNvdHlwZSA9PSBTT0NLX1NUUkVBTSkgewotCQlpZiAoIWVyciB8fCBlcnJubyAhPSBFT1BOT1RTVVBQKQotCQkJRkFJTF9FUlJOTygmIzM0O21hcF91cGRhdGU6IGV4cGVjdGVkIEVPUE5PVFNVUFAmIzM0Oyk7Ci0JfSBlbHNlIGlmIChlcnIpCi0JCUZBSUxfRVJSTk8oJiMzNDttYXBfdXBkYXRlOiBleHBlY3RlZCBzdWNjZXNzJiMzNDspOwomIzQzOwlBU1NFUlRfRVJSKGVyciwgJiMzNDttYXBfdXBkYXRlJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFAsICYjMzQ7ZXJybm8mIzM0Oyk7CiAJeGNsb3NlKHMpOwogfQogCkBAIC03Nyw4ICYjNDM7NzQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsCiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKIAlzb2NrbGVuX3QgbGVuID0gMDsKIAl1MzIga2V5ID0gMDsKLQl1NjQgdmFsdWU7CiAJaW50IGVyciwgczsKJiM0MzsJdTY0IHZhbHVlOwogCiAJaW5pdF9hZGRyX2xvb3BiYWNrKGZhbWlseSwgJmFtcDthZGRyLCAmYW1wO2xlbik7CiAKQEAgLTkzLDggJiM0Mzs5MCwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsCiAJZXJybm8gPSAwOwogCXZhbHVlID0gczsKIAllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcGZkLCAmYW1wO2tleSwgJmFtcDt2YWx1ZSwgQlBGX05PRVhJU1QpOwotCWlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApCi0JCUZBSUxfRVJSTk8oJiMzNDttYXBfdXBkYXRlOiBleHBlY3RlZCBFT1BOT1RTVVBQJiMzNDspOwomIzQzOwlpZiAoc290eXBlID09IFNPQ0tfU1RSRUFNKSB7CiYjNDM7CQlBU1NFUlRfRVJSKGVyciwgJiMzNDttYXBfdXBkYXRlJiMzNDspOwomIzQzOwkJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQLCAmIzM0O2Vycm5vJiMzNDspOwomIzQzOwl9IGVsc2UgaWYgKGVycikgewomIzQzOwkJQVNTRVJUX09LKGVyciwgJiMzNDttYXBfdXBkYXRlJiMzNDspOwomIzQzOwl9CiBjbG9zZToKIAl4Y2xvc2Uocyk7CiB9CkBAIC0xMjg5LDcgJiM0MzsxMjkwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9vcHMoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsIHN0cnVjdCBicGZfbWFwICptYXAsCiAJCS8qIGluc2VydCAqLwogCQlURVNUKHRlc3RfaW5zZXJ0X2ludmFsaWQpLAogCQlURVNUKHRlc3RfaW5zZXJ0X29wZW5lZCksCi0JCVRFU1QodGVzdF9pbnNlcnRfYm91bmQsIFNPQ0tfU1RSRUFNKSwKJiM0MzsJCVRFU1QodGVzdF9pbnNlcnRfYm91bmQpLAogCQlURVNUKHRlc3RfaW5zZXJ0KSwKIAkJLyogZGVsZXRlICovCiAJCVRFU1QodGVzdF9kZWxldGVfYWZ0ZXJfaW5zZXJ0KSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYwppbmRleCBjMzJkYTdiZDhiZTI3Ni4uNmEyNjQxZWU3ODk3NTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMKQEAgLTc1OSwxNiAmIzQzOzc1OSwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXAodW5zaWduZWQgaW50IHRhc2tzLCB2b2lkICpkYXRhKQogCQlnb3RvIG91dF9zb2NrbWFwOwogCX0KIAotCS8qIFRlc3QgdXBkYXRlIHdpdGggdW5zdXBwb3J0ZWQgVURQIHNvY2tldCAqLwomIzQzOwkvKiBUZXN0IHVwZGF0ZSB3aXRoIHVuc3VwcG9ydGVkIHVuYm91bmQgVURQIHNvY2tldCAqLwogCXVkcCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKLQlpID0gMDsKLQllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCAmYW1wO2ksICZhbXA7dWRwLCBCUEZfQU5ZKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ZigmIzM0O0ZhaWxlZCBzb2NrZXQgdXBkYXRlIFNPQ0tfREdSQU0gJiMzOTslaTolaSYjMzk7XG4mIzM0OywKLQkJICAgICAgIGksIHVkcCk7CiYjNDM7CUNIRUNLKHVkcCAmbHQ7IDAsICYjMzQ7c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pJiMzNDssICYjMzQ7ZXJybm86JWRcbiYjMzQ7LCBlcnJubyk7CiYjNDM7CWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0oZmQsICZhbXA7KGludCl7MH0sICZhbXA7dWRwLCBCUEZfQU5ZKTsKJiM0MzsJY2xvc2UodWRwKTsKJiM0MzsJaWYgKCFlcnIpIHsKJiM0MzsJCXByaW50ZigmIzM0O1VuZXhwZWN0ZWRseSBzdWNjZWVkZWQgdW5ib3VuZCBVRFAgdXBkYXRlICYjMzk7MDolaSYjMzk7XG4mIzM0OywgdWRwKTsKIAkJZ290byBvdXRfc29ja21hcDsKIAl9Ci0JY2xvc2UodWRwKTsKIAogCS8qIFRlc3QgdXBkYXRlIHdpdGhvdXQgcHJvZ3JhbXMgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgNjsgaSYjNDM7JiM0MzspIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzOQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNvY2ttYXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgc29tZSBhc3NvY2lhdGVkIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQgZXhwbGljaXQgaGFuZGxpbmcgZm9yIFVEUCBzb2NrZXRzLiBCZWZvcmUsIGl0IGxvb2tzIGxpa2UgVURQIHNvY2tldHMgd2VyZSBpbXBsaWNpdGx5ICpkaXNhbGxvd2VkKiBiZWNhdXNlIHRoZXkgd2VyZW4mIzM5O3QgZXhwbGljaXRseSBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24uIElmIGl0IHdhc24mIzM5O3QgVENQLCBzdHJlYW0gVW5peCBzb2NrZXRzIG9yIHZzb2NrIGl0IHdvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdCBvZiByZXR1cm5pbmcgZmFsc2UuCgpOb3csIHdpdGggdGhpcyBuZXcgY29kZSwgYSBVRFAgc29ja2V0IGlzIGFsbG93ZWQgaW4gdGhlIHNvY2ttYXAgaWYgaXQmIzM5O3MgaGFzaGVkLCBpbmRpY2F0ZWQgYnkgYHNrX2hhc2hlZChzaylgLiBUaGlzIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIHdhbnRpbmcgdG8gYWRkIGEgVURQIHNvY2tldCB0byBhIHNvY2ttYXA7IHR5cGljYWxseSwgeW91JiMzOTtkIG9ubHkgd2FudCB0byB0cmFjayBzb2NrZXRzIHRoYXQgYXJlIGFjdGl2ZWx5IHBhcnRpY2lwYXRpbmcgaW4gY29tbXVuaWNhdGlvbi4gSGFzaGluZyBpbXBsaWVzIHRoYXQgdGhlIHNvY2tldCBpcyBib3VuZCBhbmQgbGlrZWx5IHJlY2VpdmluZyB0cmFmZmljLiBJIHNob3VsZCBjb25maXJtIHRoYXQgYHNrX2hhc2hlZGAgbWVhbnMgd2hhdCBJIHRoaW5rIGl0IG1lYW5zIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gaW4gdGhlIGtlcm5lbCBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuIFRoaXMgYXBwcm9hY2ggc2VlbXMgcmVhc29uYWJsZS4gTGV0IG1lIHB1bGwgdXAgdGhlIHJlbGV2YW50IGNvZGUgYW5kIGNvbmZpcm0gdGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIHRoaXMgd2FzbiYjMzk7dCBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTUzNj1zdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NDAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjU0MTpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQyLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1OD1pbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXHRzb2NrX21hcF9za19hY3F1aXJlKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg3Olx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTg4LVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU5OT1zdGF0aWMgbG9uZyBzb2NrX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MTItXHRiaF9sb2NrX3NvY2soc2spO1xubmV0L2NvcmUvc29ja19tYXAuYzo2MTM6XHRpZiAoIXNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoc2spKVxubmV0L2NvcmUvc29ja19tYXAuYy02MTQtXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgbWFrZSBhbnkganVkZ2VtZW50cyBvciBkcmF3IGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uLCBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAuIEkgbmVlZCB0byBzZWUgKmV2ZXJ5dGhpbmcqLiBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0JiMzOTtzIHRoZSBjb3JlIGxvZ2ljPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGV4aXQgcGF0aHMgYW5kIGVycm9yIGNvbmRpdGlvbnM/IFdpdGhvdXQgdGhhdCBob2xpc3RpYyB2aWV3LCBJJiMzOTttIGp1c3Qgc2hvb3RpbmcgaW4gdGhlIGRhcmsuIFNvLCBsZXQmIzM5O3MgZ2V0IHRoZSB3aG9sZSBkZWZpbml0aW9uLCBhbmQgdGhlbiB3ZSYjMzk7bGwgc3RhcnQgcGlja2luZyBpdCBhcGFydCBwaWVjZSBieSBwaWVjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0MDpcdFxuIDU0MTpcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDU0MjpcdHtcbiA1NDM6XHRcdGlmIChza19pc190Y3Aoc2spKVxuIDU0NDpcdFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgKFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0xJU1RFTik7XG4gNTQ1Olx0XHRpZiAoc2tfaXNfdWRwKHNrKSlcbiA1NDY6XHRcdFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XG4gNTQ3Olx0XHRpZiAoc2tfaXNfc3RyZWFtX3VuaXgoc2spKVxuIDU0ODpcdFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIFJFQURfT05DRShzay1cdTAwM2Vza19zdGF0ZSkpIFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xuIDU0OTpcdFx0aWYgKHNrX2lzX3Zzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbiA1NTA6XHRcdCAgICAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSB8fCBzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSlcbiA1NTE6XHRcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IFRDUEZfRVNUQUJMSVNIRUQ7XG4gNTUyOlx0XHRyZXR1cm4gdHJ1ZTtcbiA1NTM6XHR9XG4gNTU0Olx0XG4gNTU1Olx0c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gNTU2Olx0XHRcdFx0XHQgICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncyk7XG4gNTU3Olx0XG4gNTU4Olx0aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIDU1OTpcdFx0XHRcdCAgICAgdTY0IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNvY2tldCBMb2dpYyoqCgpSaWdodCwgc28gdGhlIGNvZGUmIzM5O3MgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBzaW1wbHkgYHJldHVybiB0cnVlO2AuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd29uZGVyLi4uIGlmIHRoYXQmIzM5O3MgdGhlIGJhc2UgY2FzZSwgd2hhdCB3YXMgaGFwcGVuaW5nIHdpdGggVURQIHNvY2tldHMgYmVmb3JlPyBBIHNpbXBsZSAmIzM0O3RydWUmIzM0OyByZXR1cm4gd291bGQgaGF2ZSBwZXJtaXR0ZWQgVURQIHNvY2tldHMgcmVnYXJkbGVzcyBvZiB0aGVpciBzdGF0ZSBvciBhbnkgb3RoZXIgc3BlY2lmaWMgY3JpdGVyaWEuIFRoYXQgc2VlbXMgbGlrZSBhIHByZXR0eSBicm9hZCBhbGxvd2FuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgd2FzIHNwZWNpZmljYWxseSBhbGxvd2luZyBvciBkaXNhbGxvd2luZyBzb2NrZXRzLgoKSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY2hlY2tzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBzb2NrX21hcF9za19pc19zdWl0YWJsZWAsIGJ1dCBJIHNob3VsZCBicm9hZGVuIHRoZSBzZWFyY2ggdG8gb3RoZXIgZnVuY3Rpb25zIGFuZCBjaGVja3MgbmVhcmJ5LiBJdCBjb3VsZCBiZSB0aGF0IHNvbWV0aGluZyBlbHNlIGluIHRoZSBsb2dpYyB3YXMgc2lsZW50bHkgb3ZlcnJ1bGluZyB0aGF0IGRlZmF1bHQsIG9yIHByb3ZpZGluZyBjb250ZXh0IHRvIHRoZSBgcmV0dXJuIHRydWU7YC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2lzX3VkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zb2NrLmg9Mjk2NT1zdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfdGNwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMjk3MS1cbmluY2x1ZGUvbmV0L3NvY2suaDoyOTcyOnN0YXRpYyBpbmxpbmUgYm9vbCBza19pc191ZHAoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvc29jay5oLTI5NzMte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExODE0PUJQRl9DQUxMXzMoYnBmX3NrX2xvb2t1cF9hc3NpZ24sIHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4gKiwgY3R4LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODIzLVx0XHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsgLyogb25seSBhY2NlcHQgVENQIHNvY2tldCBpbiBMSVNURU4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjExODI0Olx0aWYgKHVubGlrZWx5KHNrIFx1MDAyNlx1MDAyNiBza19pc191ZHAoc2spIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0UpKVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MjUtXHRcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUOyAvKiBvbmx5IGFjY2VwdCBVRFAgc29ja2V0IGluIENMT1NFICovXG4tLVxubmV0L2NvcmUvc29jay5jPTQ0NjM9Ym9vbCBza19idXN5X2xvb3BfZW5kKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSlcbi0tXG5uZXQvY29yZS9zb2NrLmMtNDQ2OS1cbm5ldC9jb3JlL3NvY2suYzo0NDcwOlx0aWYgKHNrX2lzX3VkcChzaykgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9zb2NrLmMtNDQ3MS1cdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnVkcF9zayhzayktXHUwMDNlcmVhZGVyX3F1ZXVlKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU0MT1zdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0NC1cdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xubmV0L2NvcmUvc29ja19tYXAuYzo1NDU6XHRpZiAoc2tfaXNfdWRwKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQ2LVx0XHRyZXR1cm4gc2tfaGFzaGVkKHNrKTtcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zMDE9c3RhdGljIGludCBob29rX3NvY2tldF9iaW5kKHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzA3LVx0XHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQklORF9UQ1A7XG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYzozMDg6XHRlbHNlIGlmIChza19pc191ZHAoc29jay1cdTAwM2VzaykpXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMDktXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9CSU5EX1VEUDtcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zMTc9c3RhdGljIGludCBob29rX3NvY2tldF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzI1LVx0XHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQ09OTkVDVF9UQ1A7XG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYzozMjY6XHRlbHNlIGlmIChza19pc191ZHAoc29jay1cdTAwM2VzaykpXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMjctXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9DT05ORUNUX1NFTkRfVURQO1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMzNy1cdCAqL1xuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzM4Olx0aWYgKHJldCA9PSAwIFx1MDAyNlx1MDAyNiBza19pc191ZHAoc29jay1cdTAwM2VzaykgXHUwMDI2XHUwMDI2XG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMzktXHQgICAgYWRkcmxlbiBcdTAwM2U9IG9mZnNldG9mZW5kKHR5cGVvZigqYWRkcmVzcyksIHNhX2ZhbWlseSkgXHUwMDI2XHUwMDI2XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM9MzQ2PXN0YXRpYyBpbnQgaG9va19zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpjb25zdCBzb2NrLFxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTM1My1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjM1NDpcdGlmIChza19pc191ZHAoc29jay1cdTAwM2VzaykpXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zNTUtXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9DT05ORUNUX1NFTkRfVURQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFAgU29ja2V0IFJlc3RyaWN0aW9uIGluIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGlmIHRoZSBvcmlnaW5hbCBiZWhhdmlvciBkZWZhdWx0ZWQgdG8gYHJldHVybiB0cnVlO2AsIHRoYXQgbWVhbnQgKnVuYm91bmQqIFVEUCBzb2NrZXRzIHdlcmUgcHJldmlvdXNseSBhbGxvd2VkIGluIHRoaXMgc2NlbmFyaW8/JiMzNDsgSW50ZXJlc3RpbmcuLi4KCk5vdyB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIHNwZWNpZmljIGNoZWNrOgoKYGBgYwoJaWYgKHNrX2lzX3VkcChzaykpCgkJcmV0dXJuIHNrX2hhc2hlZChzayk7CmBgYAoKVGhpcyAqZXhwbGljaXRseSogcmVzdHJpY3RzIFVEUCBzb2NrZXRzIHRvIG9ubHkgdGhvc2UgdGhhdCBhcmUgaGFzaGVkIOKAkyBtZWFuaW5nLCBib3VuZCB0byBhbiBhZGRyZXNzIGFuZCBwb3J0LCBjb3JyZWN0PyBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGxpbWl0aW5nIHRoZSBmbGV4aWJpbGl0eSBpbiBob3cgVURQIHNvY2tldHMgYXJlIGhhbmRsZWQuCgpUaGUgc2VsZnRlc3QgY2hhbmdlcyBhcmUgd2hlcmUgaXQgYmVjb21lcyBjbGVhcmVyLiBUaGV5IGFyZSBkZXNpZ25lZCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgY2hhbmdlLiBCZWZvcmUgaXQgbG9va3MgbGlrZSB0aGUgdGVzdCBleHBlY3RlZCB0aGF0IHVwZGF0aW5nIHdpdGggYW4gdW5zdXBwb3J0ZWQgVURQIHNvY2tldCB3b3VsZCBmYWlsLiBOb3csIHRoZSBjb21tZW50IHNwZWNpZmljYWxseSBzYXlzIGl0JiMzOTtzIHRlc3Rpbmcgd2l0aCBhbiAmIzM0O3VuYm91bmQgVURQIHNvY2tldCYjMzQ7LiBUaGUgdGVzdCBub3cgY3JlYXRlcyBhIFVEUCBzb2NrZXQsIGF0dGVtcHRzIHRoZSBtYXAgdXBkYXRlLCBjbG9zZXMgdGhlIHNvY2tldCBhbmQgY2hlY2tzIGZvciBhbiBlcnJvci4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgYENIRUNLKHVkcCAmbHQ7IDAsICYjMzQ7c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pJiMzNDssICYjMzQ7ZXJybm86JWRcbiYjMzQ7LCBlcnJubyk7YCBsaW5lLCBhbmQgdGhlIHN1YnNlcXVlbnQgZXJyb3IgY2hlY2tpbmcgaW4gdGhlIGBpZiAoIWVycilgIHN0YXRlbWVudC4gSXQgKmV4cGVjdHMqIGFuIGVycm9yLCBidXQgaWYgdGhlIHVwZGF0ZSB1bmV4cGVjdGVkbHkgc3VjY2VlZHMsIGl0IHRocm93cyBhbiBlcnJvci4KCkJ1dCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgZnV6enkuIElmIHRoZSAqb2xkKiB0ZXN0IGFscmVhZHkgZXhwZWN0ZWQgZmFpbHVyZSAoYXMgaW5kaWNhdGVkIGJ5IHRoZSAmIzM0O3Vuc3VwcG9ydGVkIFVEUCBzb2NrZXQmIzM0OyBjb21tZW50KSwgdGhlbiAqd2h5KiBkaWQgaXQgZmFpbCAqYmVmb3JlKiB0aGUgcGF0Y2g/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gRGlkIHRoZSBvbGRlciBpbXBsZW1lbnRhdGlvbiBoYXZlIHNvbWUgdW5pbnRlbmRlZCBiZWhhdmlvcj8KCkkgbmVlZCB0byBkaWcgaW50byBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBvciBtYXliZSBgc29ja19tYXBfc2tfaXNfc3VpdGFibGVgIHRvIHNlZSB3aGF0IGV4YWN0bHkgd2FzIGdvaW5nIG9uICpiZWZvcmUqIHRoaXMgcmVzdHJpY3Rpb24gd2FzIGludHJvZHVjZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgd2FzIHByZXZlbnRpbmcgYW4gdW5ib3VuZCBVRFAgc29ja2V0IGZyb20gYmVpbmcgJiMzNDtzdWl0YWJsZSYjMzQ7IGluIHRoZSBmaXJzdCBwbGFjZSwgb3IgaWYgc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgd2FzIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRcbiA1MjE6XHRzdGF0aWMgYm9vbCBzb2NrX21hcF9vcF9va2F5KGNvbnN0IHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqb3BzKVxuIDUyMjpcdHtcbiA1MjM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX1BBU1NJVkVfRVNUQUJMSVNIRURfQ0IgfHxcbiA1MjQ6XHRcdCAgICAgICBvcHMtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQiB8fFxuIDUyNTpcdFx0ICAgICAgIG9wcy1cdTAwM2VvcCA9PSBCUEZfU09DS19PUFNfVENQX0xJU1RFTl9DQjtcbiA1MjY6XHR9XG4gNTI3Olx0XG4gNTI4Olx0c3RhdGljIGJvb2wgc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gNTI5Olx0e1xuIDUzMDpcdFx0aWYgKHNrX2lzX3RjcChzaykpXG4gNTMxOlx0XHRcdHJldHVybiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOO1xuIDUzMjpcdFx0ZWxzZVxuIDUzMzpcdFx0XHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3N0YXRlKSA9PSBUQ1BfRVNUQUJMSVNIRUQ7XG4gNTM0Olx0fVxuIDUzNTpcdFxuIDUzNjpcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiA1Mzc6XHR7XG4gNTM4Olx0XHRyZXR1cm4gISFzay1cdTAwM2Vza19wcm90LVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90O1xuIDUzOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUxMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJhdmVsaW5nIHRoZSBVRFAgU29ja21hcCBNeXN0ZXJ5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgc29ja19tYXBfc2tfaXNfc3VpdGFibGVgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggVURQIHNvY2tldHMuIEkgc2VlIHRoYXQgaXQgY2hlY2tzIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7cHNvY2tfdXBkYXRlX3NrX3Byb3RgLCBhbmQgZm9yIFVEUCwgdGhhdCBmdW5jdGlvbiBpcyBpbmRlZWQgc2V0LiBUaGF0JiMzOTtzIGdvb2QsIHNlZW1zIGxpa2UgdGhlIHBpZWNlcyBhcmUgaW4gcGxhY2UuIEJ1dCB3YWl0LCBzb21ldGhpbmcmIzM5O3Mgbm90IGFkZGluZyB1cC4gSSByZW1lbWJlciBzZWVpbmcgYSBjb21tZW50IGluIGFuIG9sZCBzZWxmdGVzdCBhYm91dCAmIzM0O3Vuc3VwcG9ydGVkIFVEUCBzb2NrZXQmIzM0OyBhbmQgdGhhdCYjMzk7cyB0aHJvd2luZyBtZSBvZmYuIElmIGBwc29ja191cGRhdGVfc2tfcHJvdGAgaXMgcHJlc2VudCwgd2h5IHdhcyBVRFAgY29uc2lkZXJlZCB1bnN1cHBvcnRlZCBhdCBzb21lIHBvaW50PwoKTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IG9sZCBzZWxmdGVzdCBjb2RlLi4uIEFoYSEgSXQgdXNlZCB0byB0cnkgYWRkaW5nIGEgVURQIHNvY2tldCBsaWtlIHRoaXM6IGBlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCAmYW1wO2ksICZhbXA7dWRwLCBCUEZfQU5ZKTtgIGFuZCAqZXhwZWN0ZWQqIGl0IHRvIHN1Y2NlZWQhIFRoZSBjb2RlIGV4cGxpY2l0bHkgY2hlY2tlZCBgaWYgKGVycikgeyBwcmludGYoJiMzNDtGYWlsZWQgc29ja2V0IHVwZGF0ZS4uLiYjMzQ7KTsgZ290byBvdXRfc29ja21hcDsgfWAsIGluZGljYXRpbmcgYSBzdWNjZXNzZnVsIHVwZGF0ZSB3YXMgdGhlIGV4cGVjdGF0aW9uLiBUaGUgY29tbWVudCBzYWlkICYjMzQ7dW5zdXBwb3J0ZWQmIzM0OywgYnV0IHRoZSB0ZXN0IHdhcyBleHBlY3Rpbmcgc3VjY2Vzcz8gVGhpcyBpcyBjb25mdXNpbmcuCgpObywgd2FpdCwgSSYjMzk7bSBtaXNyZWFkaW5nIHRoZSBsb2dpYy4gQSBub24temVybyBgZXJyYCBtZWFudCBpdCAqZmFpbGVkKi4gU28gaXQgKmRpZCogZXhwZWN0IHN1Y2Nlc3Mgb3JpZ2luYWxseSwgd2hpY2ggY29udHJhZGljdHMgdGhlICYjMzQ7dW5zdXBwb3J0ZWQmIzM0OyBjb21tZW50LiBPa2F5LCBJIHRoaW5rIEkmIzM5O20gZm9sbG93aW5nIG5vdy4gTG9va2luZyBhdCB0aGUgcGF0Y2gsIHRoZSB0ZXN0IGhhcyBjaGFuZ2VkLiBOb3csIGl0IGV4cGxpY2l0bHkgKmV4cGVjdHMqIGZhaWx1cmU6IGBpZiAoIWVycikgeyBwcmludGYoJiMzNDtVbmV4cGVjdGVkbHkgc3VjY2VlZGVkIHVuYm91bmQgVURQIHVwZGF0ZSAmIzM5OzA6JWkmIzM5O1xuJiMzNDssIHVkcCk7IGdvdG8gb3V0X3NvY2ttYXA7IH1gLiBTbywgdW5ib3VuZCBVRFAgc29ja2V0cyAqdXNlZCogdG8gYmUgYWRkZWQgc3VjY2Vzc2Z1bGx5LgoKU28sIHByZXZpb3VzbHksIHVuYm91bmQgVURQIHNvY2tldHMgKmNvdWxkKiBiZSBhZGRlZD8gQnV0IHdoeSB3YXMgdGhpcyBjb25zaWRlcmVkIGEgcHJvYmxlbT8gSSYjMzk7bSBndWVzc2luZyB0aGF0IHVuYm91bmQgVURQIHNvY2tldHMsIGJlaW5nIGluIGFuIGluY29tcGxldGUgc3RhdGUgYmVmb3JlIHRoZXkmIzM5O3JlIGZ1bGx5IGluaXRpYWxpemVkIG9yIGhhc2hlZCwgbWlnaHQgY2F1c2UgaXNzdWVzIHdoZW4gQlBGIHByb2dyYW1zIHRyeSB0byBpbnRlcmFjdCB3aXRoIHRoZW0gdGhyb3VnaCB0aGUgc29ja21hcC4gSXQmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yLgoKSSYjMzk7bSBwcmV0dHkgc3VyZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBtZXNzYWdlIG9yIHRoZSBhc3NvY2lhdGVkIGlzc3VlIHRyYWNrZXIgdG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQgb24gKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Mi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTg9aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTg2LVx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjU4NzpcdGlmICghc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OC1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01OTk9c3RhdGljIGxvbmcgc29ja19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjEyLVx0YmhfbG9ja19zb2NrKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjEzOlx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjE0LVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDY2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIFRoaXMgUGF0Y2g/IFllcy4qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYCwgc3BlY2lmaWNhbGx5IGBpZiAoc2tfaXNfdWRwKHNrKSkgcmV0dXJuIHNrX2hhc2hlZChzayk7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIGxpa2UgYSBtaW5vciByZXN0cmljdGlvbiBvbiB0aGUgdHlwZXMgb2YgVURQIHNvY2tldHMgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBzb2NrbWFwLiBJJiMzOTtkIGJlIGxvb2tpbmcgYXQgZnV6emluZyBgYnBmX21hcF91cGRhdGVfZWxlbWAgb24gYSBzb2NrbWFwLCB0YXJnZXRpbmcgYSBVRFAgc29ja2V0LiBCdXQsIGFzIGEgYnVnIGZpeCB0aGF0IHJlc3RyaWN0cyBiZWhhdmlvciwgdGhlIHByaW1hcnkgZ29hbCAqaXNuJiMzOTt0KiB0byB1bmNvdmVyIGJyYW5kIG5ldyBjb2RlIHBhdGhzLCBhbmQgbWF5ICpwcmV2ZW50KiBzb21lIHVuZGVmaW5lZCBiZWhhdmlvci4KClRoZSBwYXRjaCYjMzk7cyBnb2FsIGFwcGVhcnMgdG8gcHJldmVudCBhIGJ1ZyByZWxhdGVkIHRvIHVzaW5nIHVuYm91bmQgVURQIHNvY2tldHMgaW4gYSBzb2NrbWFwLCBwZXJoYXBzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHNpbWlsYXIuIFRoZSBwYXRjaCBpcyAqYWxyZWFkeSogYXBwbGllZCwgc28gYW55IGltbWVkaWF0ZSBidWcgd29uJiMzOTt0IGJlIGV4cG9zZWQgZHVyaW5nIGZ1enppbmcuIEJ1dCB0aGUga2V5IGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyAqbmV3KiBmdW5jdGlvbmFsIGxvZ2ljIHdvcnRoIHRlc3RpbmcuCgpUaGUgYWRkaXRpb24gb2YgYHNrX2hhc2hlZChzaylgIGZvciBVRFAgc29ja2V0cyBzZWVtZWQgc2ltcGxlIG9uIHRoZSBzdXJmYWNlOgoKYGBgYwpzdGF0aWMgaW5saW5lIGludCBza19oYXNoZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQp7CglyZXR1cm4gIXNrX3VuaGFzaGVkKHNrKTsKfQpgYGAKCkl0IGlzIGEgYmFzaWMgc3RhdGUgY2hlY2suIFR5cGljYWxseSwgdGhlc2Ugc2ltcGxlIGNoZWNrc+KAlGBpZiAoIWZvbykgcmV0dXJuIC1FSU5WQUw7YOKAlGRvbiYjMzk7dCBuZWNlc3NhcmlseSBpbnRyb2R1Y2UgY29tcGxleCBmdXp6aW5nIHRhcmdldHMuCgpIb3dldmVyLCB0aGUgYmlnZ2VyIHBpY3R1cmUgaXMgdGhhdCB0aGlzIGNvZGUgbW9kaWZpZXMgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLCB3aGljaCBpcyAqY29yZSogQlBGIHNvY2ttYXAgbG9naWMuIFRoYXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gdGhlIGtlcm5lbCBhbmQgc29tZXRoaW5nIHRoYXQgKmlzKiByZWFjaGFibGUuCgpUaGVuIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEgcmVhbGx5IGNsYXJpZmllcyBpdDoKCiogICBOb3QganVzdCBkb2N1bWVudGF0aW9uLCBsb2dnaW5nLCBvciBjb25zdGFudHMuCiogICBJdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIHVuYm91bmQgVURQIHNvY2tldHMgKHdoaWNoIGNhbiBhbHRlciAqYmVoYXZpb3VyKiksICphbmQqIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIChgbmV0L2NvcmUvc29ja19tYXAuY2ApLgoKVGhlcmVmb3JlLCBldmVuIHRob3VnaCBpdCYjMzk7cyBhIGJ1ZyBmaXgsIGFuZCBkb2VzbiYjMzk7dCBpbmhlcmVudGx5IHVuY292ZXIgbmV3IGNvZGUgcGF0aHMsIGl0ICpkb2VzKiBjaGFuZ2UgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBkb2VzIHdhcnJhbnQgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGZ1bmN0aW9uIGNhbGxzLiBUaGUgcGF0Y2ggdGFyZ2V0cyBhIHN0YXRpYyBmdW5jdGlvbiBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAsIGFuZCBpdCBsb29rcyBsaWtlIHRoYXQgaXMgY2FsbGVkIGJ5IGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgIGFuZCBgc29ja19tYXBfdXBkYXRlX2VsZW1gLiBTbyBub3cgSSB3b3VsZCBiZSBsb29raW5nIGZvciB3aGVyZSAqdGhvc2UqIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0zNjU5PWludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2MDppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NjEtaW50IHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9Mzc0NT1zdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTAtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3NTE6c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTItXHRcdFx0XHRcdCAgIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNTE9c3RhdGljIGludCBicGZfbWFwX3VwZGF0ZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY0LVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI2NTpcdFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI2Ni1cdH0gZWxzZSBpZiAoSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cdFx0XHQgICAgIHU2NCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MzkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIFNPQ0tNQVAvU09DS0hBU0ggVXBkYXRlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyB0aGUgZmxvdyBvZiBkYXRhIHVwZGF0aW5nIGluIHRoZSBCUEYgd29ybGQsIHNwZWNpZmljYWxseSBhcm91bmQgU09DS01BUCBhbmQgU09DS0hBU0gsIGFuZCBJIHNlZSBhIGNsZWFyIGRpc3RpbmN0aW9uIGluIGhvdyB0aGlzIGhhcHBlbnMgZnJvbSB1c2Vyc3BhY2UgdmVyc3VzIHdpdGhpbiBCUEYgcHJvZ3JhbXMgdGhlbXNlbHZlcy4gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgaXMgdGhlIGtlcm5lbCBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHVwZGF0ZSBhIFNPQ0tNQVAgb3IgU09DS0hBU0guIEl0IHNlZW1zIGl0IGlzIGhvb2tlZCB0byBgYnBmX21hcF91cGRhdGVfdmFsdWVgIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmaWxlLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHN5c2NhbGxzIGFyZSB0aGUgZ2F0ZXdheSBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwuIEkgdW5kZXJzdGFuZCB0aGF0LgoKT24gdGhlIG90aGVyIGhhbmQsIHRoZSBgc29ja19tYXBfdXBkYXRlX2VsZW1gIGZ1bmN0aW9uIGlzIGEgQlBGIGhlbHBlciB0aGF0IEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzIHVzZSB0byB1cGRhdGUgdGhlc2UgbWFwcy4gVGhpcyBkaXN0aW5jdGlvbiBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgaGlnaGxpZ2h0cyB0aGUgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4gVXNlci1zcGFjZSBoYXMgYSBjb250cm9sbGVkIGludGVyZmFjZSB0aHJvdWdoIHN5c2NhbGxzLCB3aGlsZSBCUEYgcHJvZ3JhbXMsIHJ1bm5pbmcgd2l0aGluIHRoZSBCUEYgVk0sIGhhdmUgdGhlaXIgb3duIG9wdGltaXplZCBoZWxwZXJzIGZvciBtYXAgbWFuaXB1bGF0aW9uLiBUaGlzIHNldHVwIHN1Z2dlc3RzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBzZWN1cml0eSwgcGVyZm9ybWFuY2UsIGFuZCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBCUEYgZW52aXJvbm1lbnQuIEkmIzM5O20gbm90aW5nIHRoaXMgaXMgYSBzdGFuZGFyZCBwYXR0ZXJuLCBhbmQgdGhlIGNvZGUgbG9va3MgYXMgaXQgc2hvdWxkIGZvciB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTM2NTk9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpO1xuaW5jbHVkZS9saW51eC9icGYuaDozNjYwOmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY2MS1pbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zNzQ1PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1MC1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1Mi1cdFx0XHRcdFx0ICAgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI1MT1zdGF0aWMgaW50IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjQtXHRcdCAgIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MjY1Olx0XHRyZXR1cm4gc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKG1hcCwga2V5LCB2YWx1ZSwgZmxhZ3MpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY2LVx0fSBlbHNlIGlmIChJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1NT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU4OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU5LVx0XHRcdCAgICAgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk4LVxubmV0L2NvcmUvc29ja19tYXAuYzo1OTk6c3RhdGljIGxvbmcgc29ja19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYy02MDAtXHRcdFx0XHQgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM2LVx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHNvY2tfbWFwX2xvb2t1cF9zeXMsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcdC5tYXBfdXBkYXRlX2VsZW1cdD0gc29ja19tYXBfdXBkYXRlX2VsZW0sXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzOC1cdC5tYXBfZGVsZXRlX2VsZW1cdD0gc29ja19tYXBfZGVsZXRlX2VsZW0sXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQ3PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1MS1cdC5tYXBfZ2V0X25leHRfa2V5XHQ9IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXksXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTI6XHQubWFwX3VwZGF0ZV9lbGVtXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUzLVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX2hhc2hfZGVsZXRlX2VsZW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEJQRiBTb2NrbWFwIFVwZGF0ZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgaGVyZS4gRGVmaW5pdGVseSwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgYW5kIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgYXJlIHByaW1hcnkgdGFyZ2V0cy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGFjdHVhbGx5IGFzc2lnbmVkIHRvIGBtYXBfdXBkYXRlX2VsZW1gIHdpdGhpbiBib3RoIGBzb2NrX21hcF9vcHNgIGFuZCBgc29ja19oYXNoX29wc2AsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIHRyYWNpbmcgdGhlIGNhbGwgZmxvdy4KCkhtbSwgYW5kIHdoYXQgYWJvdXQgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgPyBUaGF0JiMzOTtzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgYWN0dWFsbHkgKm1vZGlmaWVkKiBhdCBydW50aW1lLCBtYWtpbmcgaXQgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBzdGF0ZSBjaGFuZ2VzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkgdGhpbmsgd2UgbmVlZCB0byBpbmNsdWRlIHRoYXQgaW4gb3VyIHNjb3BlIGFzIHdlbGwuCgpTbywgdG8gYmUgY2xlYXIsIHRoZSBwcmltYXJ5IHN5bWJvbHMgb2YgaW50ZXJlc3QgYXJlOiBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCwgYW5kIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYC4KCk5vdywgcmVnYXJkaW5nIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBmZWF0dXJlLiBUaGlzIGlzIEJQRiBzb2NrbWFwLCByaWdodD8gTGV0JiMzOTtzIGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgb3IgYG5ldC9jb3JlL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0aW5nIHRvIGBzb2NrX21hcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQmIzM5O3MgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhlcmUgaGluZ2VzIGVudGlyZWx5IG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXMgdGhhdCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW1wYWN0aW5nIHRoaXMgc2VjdGlvbiBvZiBjb2RlPyBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBvdGhlcnMuCgpBbHJpZ2h0LCBub3cgdGhhdCBJIGhhdmUgYSBoYW5kbGUgb24gdGhhdCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGFjdHVhbCBpbXBhY3RlZCBjb2RlIGlzLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgY29tYiB0aHJvdWdoIGl0LiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBjb2RlIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQuIFRoaXMgd2lsbCByZXZlYWwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIGlzIGNvbXBpbGVkIGFuZCwgdGhlcmVmb3JlLCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0XHRpZiAoc2tfaXNfdGNwKHNrKSlcbiA1MzE6XHRcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU47XG4gNTMyOlx0XHRlbHNlXG4gNTMzOlx0XHRcdHJldHVybiBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfc3RhdGUpID09IFRDUF9FU1RBQkxJU0hFRDtcbiA1MzQ6XHR9XG4gNTM1Olx0XG4gNTM2Olx0c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDUzNzpcdHtcbiA1Mzg6XHRcdHJldHVybiAhIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Q7XG4gNTM5Olx0fVxuIDU0MDpcdFxuIDU0MTpcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDU0MjpcdHtcbiA1NDM6XHRcdGlmIChza19pc190Y3Aoc2spKVxuIDU0NDpcdFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgKFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0xJU1RFTik7XG4gNTQ1Olx0XHRpZiAoc2tfaXNfdWRwKHNrKSlcbiA1NDY6XHRcdFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XG4gNTQ3Olx0XHRpZiAoc2tfaXNfc3RyZWFtX3VuaXgoc2spKVxuIDU0ODpcdFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIFJFQURfT05DRShzay1cdTAwM2Vza19zdGF0ZSkpIFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xuIDU0OTpcdFx0aWYgKHNrX2lzX3Zzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbiA1NTA6XHRcdCAgICAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSB8fCBzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSlcbiA1NTE6XHRcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IFRDUEZfRVNUQUJMSVNIRUQ7XG4gNTUyOlx0XHRyZXR1cm4gdHJ1ZTtcbiA1NTM6XHR9XG4gNTU0Olx0XG4gNTU1Olx0c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gNTU2Olx0XHRcdFx0XHQgICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncyk7XG4gNTU3Olx0XG4gNTU4Olx0aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIDU1OTpcdFx0XHRcdCAgICAgdTY0IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFVEUCBTb2NrbWFwIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJvdW5kIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYC4gVGhhdCBtZWFucyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSwgaWYgbm90IG9ubHksIGVuYWJsZXIgaGVyZS4gQnV0LCBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCBVRFAuIElzIHRoZXJlIGEgbW9yZSBzcGVjaWZpYyBjb25maWcgZm9yIFVEUCBiZXlvbmQgc29tZXRoaW5nIGxpa2UgYENPTkZJR19JTkVUYCB3aGljaCBpcyBqdXN0IHRvbyBicm9hZD8KCkhhbmcgb24gYSBzZWNvbmTigKYgdGhlIG9iamVjdCBmaWxlLCBgc29ja19tYXAub2AsIGdldHMgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhY3RpdmUuIEhtbSwgdGhhdCYjMzk7cyBwcm9taXNpbmcuIEJ1dCBkb2VzIHRoYXQgbWVhbiBpdCYjMzk7cyBhbGwgSSBuZWVkPyBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYWJvdXQgVURQIHNvY2ttYXAgc3VwcG9ydCwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGZpbGVzIGluIHRoZSBrZXJuZWwuIExldCBtZSBsb29rIGF0IGBuZXQvaXB2NC91ZHBfYnBmLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGZvciBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gVURQIHNwZWNpZmljYWxseS4gVGhhdCBzaG91bGQgY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRvIHRlc3QgVURQIHNvY2ttYXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcF9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9NDk3Mj1GOlx0bmV0L2lwdjQvdGNwX2JwZi5jXG5NQUlOVEFJTkVSUzo0OTczOkY6XHRuZXQvaXB2NC91ZHBfYnBmLmNcbk1BSU5UQUlORVJTLTQ5NzQtRjpcdG5ldC91bml4L3VuaXhfYnBmLmNcbi0tXG5pbmNsdWRlL25ldC91ZHAuaD02NTI9c3RydWN0IHNrX3Bzb2NrO1xuaW5jbHVkZS9uZXQvdWRwLmg6NjUzOmludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSk7XG5pbmNsdWRlL25ldC91ZHAuaC02NTQtI2VuZGlmXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjaXBzb19pcHY0Lm9cbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTEwPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC91ZHAuYy0zMTMxLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3VkcC5jOjMxMzI6XHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXG5uZXQvaXB2NC91ZHAuYy0zMTMzLSNlbmRpZlxuLS1cbm5ldC9pcHY0L3VkcF9icGYuYz0zNz1zdGF0aWMgaW50IHVkcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtNjItXG5uZXQvaXB2NC91ZHBfYnBmLmM6NjM6c3RhdGljIGludCB1ZHBfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC91ZHBfYnBmLmMtNjQtXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3VkcF9icGYuYz0xMTk9c3RhdGljIERFRklORV9TUElOTE9DSyh1ZHB2Nl9wcm90X2xvY2spO1xubmV0L2lwdjQvdWRwX2JwZi5jOjEyMDpzdGF0aWMgc3RydWN0IHByb3RvIHVkcF9icGZfcHJvdHNbVURQX0JQRl9OVU1fUFJPVFNdO1xubmV0L2lwdjQvdWRwX2JwZi5jLTEyMS1cbm5ldC9pcHY0L3VkcF9icGYuYzoxMjI6c3RhdGljIGludCB1ZHBfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxubmV0L2lwdjQvdWRwX2JwZi5jLTEyMy17XG4tLVxubmV0L2lwdjQvdWRwX2JwZi5jLTEzNC1cbm5ldC9pcHY0L3VkcF9icGYuYzoxMzU6c3RhdGljIHZvaWQgdWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGNvbnN0IHN0cnVjdCBwcm90byAqYmFzZSlcbm5ldC9pcHY0L3VkcF9icGYuYy0xMzYte1xuLS1cbm5ldC9pcHY0L3VkcF9icGYuYy0xMzgtXHRwcm90LVx1MDAzZWNsb3NlXHRcdD0gc29ja19tYXBfY2xvc2U7XG5uZXQvaXB2NC91ZHBfYnBmLmM6MTM5Olx0cHJvdC1cdTAwM2VyZWN2bXNnXHRcdD0gdWRwX2JwZl9yZWN2bXNnO1xubmV0L2lwdjQvdWRwX2JwZi5jLTE0MC1cdHByb3QtXHUwMDNlc29ja19pc19yZWFkYWJsZVx0PSBza19tc2dfaXNfcmVhZGFibGU7XG5uZXQvaXB2NC91ZHBfYnBmLmM6MTQxOlx0cHJvdC1cdTAwM2Vpb2N0bFx0XHQ9IHVkcF9icGZfaW9jdGw7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQyLX1cbm5ldC9pcHY0L3VkcF9icGYuYy0xNDMtXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTQ0OnN0YXRpYyB2b2lkIHVkcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChzdHJ1Y3QgcHJvdG8gKm9wcylcbm5ldC9pcHY0L3VkcF9icGYuYy0xNDUte1xuLS1cbm5ldC9pcHY0L3VkcF9icGYuYy0xNDgtXHRcdGlmIChsaWtlbHkob3BzICE9IHVkcHY2X3Byb3Rfc2F2ZWQpKSB7XG5uZXQvaXB2NC91ZHBfYnBmLmM6MTQ5Olx0XHRcdHVkcF9icGZfcmVidWlsZF9wcm90b3MoXHUwMDI2dWRwX2JwZl9wcm90c1tVRFBfQlBGX0lQVjZdLCBvcHMpO1xubmV0L2lwdjQvdWRwX2JwZi5jLTE1MC1cdFx0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ1ZHB2Nl9wcm90X3NhdmVkLCBvcHMpO1xuLS1cbm5ldC9pcHY0L3VkcF9icGYuYy0xNTUtXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTU2OnN0YXRpYyBpbnQgX19pbml0IHVkcF9icGZfdjRfYnVpbGRfcHJvdG8odm9pZClcbm5ldC9pcHY0L3VkcF9icGYuYy0xNTcte1xubmV0L2lwdjQvdWRwX2JwZi5jOjE1ODpcdHVkcF9icGZfcmVidWlsZF9wcm90b3MoXHUwMDI2dWRwX2JwZl9wcm90c1tVRFBfQlBGX0lQVjRdLCBcdTAwMjZ1ZHBfcHJvdCk7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTU5LVx0cmV0dXJuIDA7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTYwLX1cbm5ldC9pcHY0L3VkcF9icGYuYzoxNjE6bGF0ZV9pbml0Y2FsbCh1ZHBfYnBmX3Y0X2J1aWxkX3Byb3RvKTtcbm5ldC9pcHY0L3VkcF9icGYuYy0xNjItXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTYzOmludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbm5ldC9pcHY0L3VkcF9icGYuYy0xNjQte1xuLS1cbm5ldC9pcHY0L3VkcF9icGYuYy0xNzMtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxubmV0L2lwdjQvdWRwX2JwZi5jOjE3NDpcdFx0dWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVx1MDAzZXNrX3Byb3RvKTtcbm5ldC9pcHY0L3VkcF9icGYuYy0xNzUtXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTc2Olx0c29ja19yZXBsYWNlX3Byb3RvKHNrLCBcdTAwMjZ1ZHBfYnBmX3Byb3RzW2ZhbWlseV0pO1xubmV0L2lwdjQvdWRwX2JwZi5jLTE3Ny1cdHJldHVybiAwO1xubmV0L2lwdjQvdWRwX2JwZi5jLTE3OC19XG5uZXQvaXB2NC91ZHBfYnBmLmM6MTc5OkVYUE9SVF9TWU1CT0xfR1BMKHVkcF9icGZfdXBkYXRlX3Byb3RvKTtcbi0tXG5uZXQvaXB2Ni91ZHAuYz0xODc5PXN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3VkcC5jLTE5MDAtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjYvdWRwLmM6MTkwMTpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB1ZHBfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY2L3VkcC5jLTE5MDItI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjQzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU29ja2V0IE1hcCBVcGRhdGVzKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGFzIGV4cGVjdGVkLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBzb2NrZXQgbWFwIHVwZGF0ZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdG8gY29uc2lkZXIgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIHByaW1hcnkgZnVuY3Rpb25zIHRvIGNvbnNpZGVyIGFyZToKKiAgIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgCiogICBgc29ja19tYXBfdXBkYXRlX2VsZW1gCiogICBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAKCkhtbSwgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLi4uIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBzbWFsbC4gRGlyZWN0IGZ1enppbmcgbWlnaHQgYmUgdHJpY2t5IGlmIHRoZSBjb21waWxlciBpbmxpbmVzIGl0LCBidXQgc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGF0LiBJJiMzOTttIHByZXR0eSBzdXJlIHN5emthbGxlciBjYW4gZmlndXJlIHRoYXQgc3R1ZmYgb3V0LgoKSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgc29ja19oYXNoX3VwZGF0ZV9lbGVtYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvc29ja19tYXAuY2AgZm9yIHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgaWRlbnRpZmllZCBhbGwgdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX2hhc2hfdXBkYXRlX2VsZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY3MgoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrbWFwIFVwZGF0ZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNvY2tfaGFzaF9vcHNgIHN0cnVjdHVyZSBhbmQgaW1tZWRpYXRlbHkgc3BvdCB0aGF0IGl0IGxldmVyYWdlcyBgc29ja19tYXBfdXBkYXRlX2VsZW1gLCByaWdodD8gVGhhdCYjMzk7cyB0aGUga2V5IGVudHJ5IHBvaW50LiBBbmQgdGhlbiwgZnJvbSB0aGVyZSwgd2UgaGF2ZSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCB3aGljaCBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIEJQRiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgQlBGIHN5c2NhbGwsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aC4gSXQgbG9va3MgbGlrZSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyBhY3R1YWxseSBpbnZva2VkIGJ5IGBicGZfbWFwX3VwZGF0ZV92YWx1ZWAsIHNvIHRoZXkgYXJlIGFsbCBjb25uZWN0ZWQuCgpOb3csIGxldCYjMzk7cyB1bmRlcnN0YW5kICp3aHkqIHRoaXMgbWF0dGVycy4gVGhlIHBhdGNoJiMzOTtzIHJlYXNvbmluZyBpcyBjbGVhcjogaXQmIzM5O3MgYWJvdXQgcHJldmVudGluZyB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIHNvY2ttYXAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5zdGFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoaXMgZml4IGxpZXMgaW4gdGhlIGNoYW5nZXMgdG8gYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLiBUaGlzIGZ1bmN0aW9uIG5vdyBmaWx0ZXJzIG91dCB1bmJvdW5kIFVEUCBzb2NrZXRzLCBlbnN1cmluZyB0aGF0IG9ubHkgdmFsaWQgc3RhdGVzIGFyZSBwcm9jZXNzZWQgYnkgQlBGIHByb2dyYW1zLiBUaGlzIHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgaG93IHRoaW5ncyBhcmUgaGFuZGxlZC4gU28gZnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyByb2J1c3RuZXNzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLCBiZWNhdXNlIGl0JiMzOTtzIG1hcmtlZCBgc3RhdGljYC4gTG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbiwgaXQmIzM5O3Mgc3RhdGljIGJ1dCBub3QgZXhwbGljaXRseSBtYXJrZWQgYGlubGluZWAsIHNvIGl0JiMzOTtzIGZpbmUgdG8gbGlzdCBpdCBhbmQgaXQgc2hvdWxkIGJlIHZpc2libGUgdG8gdXMuCgpUaGUgY3JpdGljYWwgc3ltYm9scyBoZXJlIGFyZTogYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AsIGBzb2NrX21hcF91cGRhdGVfZWxlbWAsIGFuZCBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAuCgpMZXQmIzM5O3MgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIHRha2UgaXQgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW1fc3lzJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgc29ja21hcCBsb2dpYyB0byByZWplY3QgdW5ib3VuZCBVRFAgc29ja2V0cyBmcm9tIGJlaW5nIGFkZGVkIHRvIGEgc29ja21hcC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgYnVncyBvciBjcmFzaGVzIGNhdXNlZCBieSB1bmluaXRpYWxpemVkIG9yIHVuaGFzaGVkIHNvY2tldHMgaW50ZXJhY3Rpbmcgd2l0aCBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cuIEZ1enppbmcgdGhlIG1hcCB1cGRhdGUgZnVuY3Rpb25zIHdpdGggdmFyaW91cyBzb2NrZXQgc3RhdGVzIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7c29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBzb2NrbWFwIGxvZ2ljIHRvIHJlamVjdCB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWdzIG9yIGNyYXNoZXMgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgb3IgdW5oYXNoZWQgc29ja2V0cyBpbnRlcmFjdGluZyB3aXRoIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdy4gRnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MjMuMDA4MzcwMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEzOTc5NTY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBzb2NrbWFwIGxvZ2ljIHRvIHJlamVjdCB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWdzIG9yIGNyYXNoZXMgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgb3IgdW5oYXNoZWQgc29ja2V0cyBpbnRlcmFjdGluZyB3aXRoIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdy4gRnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjIzLjAwODM3MzkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDk4Mjg4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNWIxMmIyMTRjZjc2YWE5ZDhjZjhlNjJlYTYyMDhkMWMwNjdlZGM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDY6Mjk6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5pbmRleCBjNjBiYTZkMjkyZjlhZS4uOWVmYmQ4Y2E3ZGI4MzIgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5AQCAtNTQyLDYgKzU0Miw4IEBAIHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdGlmIChza19pc190Y3Aoc2spKVxcbiBcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xcbitcXHRpZiAoc2tfaXNfdWRwKHNrKSlcXG4rXFx0XFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XFxuIFxcdGlmIChza19pc19zdHJlYW1fdW5peChzaykpXFxuIFxcdFxcdHJldHVybiAoMSBcXHUwMDNjXFx1MDAzYyBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3N0YXRlKSkgXFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xcbiBcXHRpZiAoc2tfaXNfdnNvY2soc2spIFxcdTAwMjZcXHUwMDI2XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbmluZGV4IGNiMzIyOTcxMWY5M2EzLi4yZDIyYTkwNThhOGU5MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcXG5AQCAtODUzLDcgKzg1Myw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tYW55X3NvY2tldCh2b2lkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdHVkcCA9IHhzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApO1xcbitcXHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xcbiBcXHRpZiAodWRwIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRjbG9zZShkZ3JhbSk7XFxuIFxcdFxcdGNsb3NlKHRjcCk7XFxuQEAgLTkyMiw3ICs5MjIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfbWFueV9tYXBzKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XFxuK1xcdHVkcCA9IHNvY2tldF9sb29wYmFjayhBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSyk7XFxuIFxcdGlmICh1ZHAgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGNsb3NlKGRncmFtKTtcXG4gXFx0XFx0Y2xvc2UodGNwKTtcXG5AQCAtOTkzLDcgKzk5Myw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zYW1lX3NvY2sodm9pZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHR1ZHAgPSB4c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLLCAwKTtcXG4rXFx0dWRwID0gc29ja2V0X2xvb3BiYWNrKEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLKTtcXG4gXFx0aWYgKHVkcCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0Y2xvc2UoZGdyYW0pO1xcbiBcXHRcXHRjbG9zZSh0Y3ApO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xcbmluZGV4IGNjMGM2OGJhYjkwNzk2Li5iODcxMThhYWI3YzRhMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xcbkBAIC01Myw4ICs1Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXFxuIFxcdFxcdFxcdCAgICAgICBpbnQgZmFtaWx5LCBpbnQgc290eXBlLCBpbnQgbWFwZmQpXFxuIHtcXG4gXFx0dTMyIGtleSA9IDA7XFxuLVxcdHU2NCB2YWx1ZTtcXG4gXFx0aW50IGVyciwgcztcXG4rXFx0dTY0IHZhbHVlO1xcbiBcXG4gXFx0cyA9IHhzb2NrZXQoZmFtaWx5LCBzb3R5cGUsIDApO1xcbiBcXHRpZiAocyA9PSAtMSlcXG5AQCAtNjMsMTEgKzYzLDggQEAgc3RhdGljIHZvaWQgdGVzdF9pbnNlcnRfb3BlbmVkKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsIF9fYWx3YXlzX3VudXNlZCxcXG4gXFx0ZXJybm8gPSAwO1xcbiBcXHR2YWx1ZSA9IHM7XFxuIFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwZmQsIFxcdTAwMjZrZXksIFxcdTAwMjZ2YWx1ZSwgQlBGX05PRVhJU1QpO1xcbi1cXHRpZiAoc290eXBlID09IFNPQ0tfU1RSRUFNKSB7XFxuLVxcdFxcdGlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXFxuLVxcdFxcdFxcdEZBSUxfRVJSTk8oXFxcIm1hcF91cGRhdGU6IGV4cGVjdGVkIEVPUE5PVFNVUFBcXFwiKTtcXG4tXFx0fSBlbHNlIGlmIChlcnIpXFxuLVxcdFxcdEZBSUxfRVJSTk8oXFxcIm1hcF91cGRhdGU6IGV4cGVjdGVkIHN1Y2Nlc3NcXFwiKTtcXG4rXFx0QVNTRVJUX0VSUihlcnIsIFxcXCJtYXBfdXBkYXRlXFxcIik7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCwgXFxcImVycm5vXFxcIik7XFxuIFxcdHhjbG9zZShzKTtcXG4gfVxcbiBcXG5AQCAtNzcsOCArNzQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXFxuIFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuIFxcdHNvY2tsZW5fdCBsZW4gPSAwO1xcbiBcXHR1MzIga2V5ID0gMDtcXG4tXFx0dTY0IHZhbHVlO1xcbiBcXHRpbnQgZXJyLCBzO1xcbitcXHR1NjQgdmFsdWU7XFxuIFxcbiBcXHRpbml0X2FkZHJfbG9vcGJhY2soZmFtaWx5LCBcXHUwMDI2YWRkciwgXFx1MDAyNmxlbik7XFxuIFxcbkBAIC05Myw4ICs5MCwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXFxuIFxcdGVycm5vID0gMDtcXG4gXFx0dmFsdWUgPSBzO1xcbiBcXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcGZkLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsdWUsIEJQRl9OT0VYSVNUKTtcXG4tXFx0aWYgKCFlcnIgfHwgZXJybm8gIT0gRU9QTk9UU1VQUClcXG4tXFx0XFx0RkFJTF9FUlJOTyhcXFwibWFwX3VwZGF0ZTogZXhwZWN0ZWQgRU9QTk9UU1VQUFxcXCIpO1xcbitcXHRpZiAoc290eXBlID09IFNPQ0tfU1RSRUFNKSB7XFxuK1xcdFxcdEFTU0VSVF9FUlIoZXJyLCBcXFwibWFwX3VwZGF0ZVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFAsIFxcXCJlcnJub1xcXCIpO1xcbitcXHR9IGVsc2UgaWYgKGVycikge1xcbitcXHRcXHRBU1NFUlRfT0soZXJyLCBcXFwibWFwX3VwZGF0ZVxcXCIpO1xcbitcXHR9XFxuIGNsb3NlOlxcbiBcXHR4Y2xvc2Uocyk7XFxuIH1cXG5AQCAtMTI4OSw3ICsxMjkwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9vcHMoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcdFxcdC8qIGluc2VydCAqL1xcbiBcXHRcXHRURVNUKHRlc3RfaW5zZXJ0X2ludmFsaWQpLFxcbiBcXHRcXHRURVNUKHRlc3RfaW5zZXJ0X29wZW5lZCksXFxuLVxcdFxcdFRFU1QodGVzdF9pbnNlcnRfYm91bmQsIFNPQ0tfU1RSRUFNKSxcXG4rXFx0XFx0VEVTVCh0ZXN0X2luc2VydF9ib3VuZCksXFxuIFxcdFxcdFRFU1QodGVzdF9pbnNlcnQpLFxcbiBcXHRcXHQvKiBkZWxldGUgKi9cXG4gXFx0XFx0VEVTVCh0ZXN0X2RlbGV0ZV9hZnRlcl9pbnNlcnQpLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmNcXG5pbmRleCBjMzJkYTdiZDhiZTI3Ni4uNmEyNjQxZWU3ODk3NTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jXFxuQEAgLTc1OSwxNiArNzU5LDE1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcCh1bnNpZ25lZCBpbnQgdGFza3MsIHZvaWQgKmRhdGEpXFxuIFxcdFxcdGdvdG8gb3V0X3NvY2ttYXA7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFRlc3QgdXBkYXRlIHdpdGggdW5zdXBwb3J0ZWQgVURQIHNvY2tldCAqL1xcbitcXHQvKiBUZXN0IHVwZGF0ZSB3aXRoIHVuc3VwcG9ydGVkIHVuYm91bmQgVURQIHNvY2tldCAqL1xcbiBcXHR1ZHAgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7XFxuLVxcdGkgPSAwO1xcbi1cXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCBcXHUwMDI2aSwgXFx1MDAyNnVkcCwgQlBGX0FOWSk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJGYWlsZWQgc29ja2V0IHVwZGF0ZSBTT0NLX0RHUkFNICclaTolaSdcXFxcblxcXCIsXFxuLVxcdFxcdCAgICAgICBpLCB1ZHApO1xcbitcXHRDSEVDSyh1ZHAgXFx1MDAzYyAwLCBcXFwic29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pXFxcIiwgXFxcImVycm5vOiVkXFxcXG5cXFwiLCBlcnJubyk7XFxuK1xcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0oZmQsIFxcdTAwMjYoaW50KXswfSwgXFx1MDAyNnVkcCwgQlBGX0FOWSk7XFxuK1xcdGNsb3NlKHVkcCk7XFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiVW5leHBlY3RlZGx5IHN1Y2NlZWRlZCB1bmJvdW5kIFVEUCB1cGRhdGUgJzA6JWknXFxcXG5cXFwiLCB1ZHApO1xcbiBcXHRcXHRnb3RvIG91dF9zb2NrbWFwO1xcbiBcXHR9XFxuLVxcdGNsb3NlKHVkcCk7XFxuIFxcbiBcXHQvKiBUZXN0IHVwZGF0ZSB3aXRob3V0IHByb2dyYW1zICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA2OyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MjMuNzE4OTI4MTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQyOTIyOTM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBzb2NrbWFwIGxvZ2ljIHRvIHJlamVjdCB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWdzIG9yIGNyYXNoZXMgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgb3IgdW5oYXNoZWQgc29ja2V0cyBpbnRlcmFjdGluZyB3aXRoIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdy4gRnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzViMTJiMjE0Y2Y3NmFhOWQ4Y2Y4ZTYyZWE2MjA4ZDFjMDY3ZWRjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDY6Mjk6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuaW5kZXggYzYwYmE2ZDI5MmY5YWUuLjllZmJkOGNhN2RiODMyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xuKysrIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuQEAgLTU0Miw2ICs1NDIsOCBAQCBzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRpZiAoc2tfaXNfdGNwKHNrKSlcbiBcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xuK1x0aWYgKHNrX2lzX3VkcChzaykpXG4rXHRcdHJldHVybiBza19oYXNoZWQoc2spO1xuIFx0aWYgKHNrX2lzX3N0cmVhbV91bml4KHNrKSlcbiBcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfc3RhdGUpKSBcdTAwMjYgVENQRl9FU1RBQkxJU0hFRDtcbiBcdGlmIChza19pc192c29jayhzaykgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uMmQyMmE5MDU4YThlOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTg1Myw3ICs4NTMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfbWFueV9zb2NrZXQodm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XG4rXHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xuIFx0aWYgKHVkcCBcdTAwM2MgMCkge1xuIFx0XHRjbG9zZShkZ3JhbSk7XG4gXHRcdGNsb3NlKHRjcCk7XG5AQCAtOTIyLDcgKzkyMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tYW55X21hcHModm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XG4rXHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xuIFx0aWYgKHVkcCBcdTAwM2MgMCkge1xuIFx0XHRjbG9zZShkZ3JhbSk7XG4gXHRcdGNsb3NlKHRjcCk7XG5AQCAtOTkzLDcgKzk5Myw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zYW1lX3NvY2sodm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XG4rXHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xuIFx0aWYgKHVkcCBcdTAwM2MgMCkge1xuIFx0XHRjbG9zZShkZ3JhbSk7XG4gXHRcdGNsb3NlKHRjcCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmNcbmluZGV4IGNjMGM2OGJhYjkwNzk2Li5iODcxMThhYWI3YzRhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmNcbkBAIC01Myw4ICs1Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXG4gXHRcdFx0ICAgICAgIGludCBmYW1pbHksIGludCBzb3R5cGUsIGludCBtYXBmZClcbiB7XG4gXHR1MzIga2V5ID0gMDtcbi1cdHU2NCB2YWx1ZTtcbiBcdGludCBlcnIsIHM7XG4rXHR1NjQgdmFsdWU7XG4gXG4gXHRzID0geHNvY2tldChmYW1pbHksIHNvdHlwZSwgMCk7XG4gXHRpZiAocyA9PSAtMSlcbkBAIC02MywxMSArNjMsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9vcGVuZWQoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwgX19hbHdheXNfdW51c2VkLFxuIFx0ZXJybm8gPSAwO1xuIFx0dmFsdWUgPSBzO1xuIFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBmZCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWx1ZSwgQlBGX05PRVhJU1QpO1xuLVx0aWYgKHNvdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuLVx0XHRpZiAoIWVyciB8fCBlcnJubyAhPSBFT1BOT1RTVVBQKVxuLVx0XHRcdEZBSUxfRVJSTk8oXCJtYXBfdXBkYXRlOiBleHBlY3RlZCBFT1BOT1RTVVBQXCIpO1xuLVx0fSBlbHNlIGlmIChlcnIpXG4tXHRcdEZBSUxfRVJSTk8oXCJtYXBfdXBkYXRlOiBleHBlY3RlZCBzdWNjZXNzXCIpO1xuK1x0QVNTRVJUX0VSUihlcnIsIFwibWFwX3VwZGF0ZVwiKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCwgXCJlcnJub1wiKTtcbiBcdHhjbG9zZShzKTtcbiB9XG4gXG5AQCAtNzcsOCArNzQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXG4gXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuIFx0c29ja2xlbl90IGxlbiA9IDA7XG4gXHR1MzIga2V5ID0gMDtcbi1cdHU2NCB2YWx1ZTtcbiBcdGludCBlcnIsIHM7XG4rXHR1NjQgdmFsdWU7XG4gXG4gXHRpbml0X2FkZHJfbG9vcGJhY2soZmFtaWx5LCBcdTAwMjZhZGRyLCBcdTAwMjZsZW4pO1xuIFxuQEAgLTkzLDggKzkwLDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X2JvdW5kKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsIF9fYWx3YXlzX3VudXNlZCxcbiBcdGVycm5vID0gMDtcbiBcdHZhbHVlID0gcztcbiBcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwZmQsIFx1MDAyNmtleSwgXHUwMDI2dmFsdWUsIEJQRl9OT0VYSVNUKTtcbi1cdGlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXG4tXHRcdEZBSUxfRVJSTk8oXCJtYXBfdXBkYXRlOiBleHBlY3RlZCBFT1BOT1RTVVBQXCIpO1xuK1x0aWYgKHNvdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuK1x0XHRBU1NFUlRfRVJSKGVyciwgXCJtYXBfdXBkYXRlXCIpO1xuK1x0XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFAsIFwiZXJybm9cIik7XG4rXHR9IGVsc2UgaWYgKGVycikge1xuK1x0XHRBU1NFUlRfT0soZXJyLCBcIm1hcF91cGRhdGVcIik7XG4rXHR9XG4gY2xvc2U6XG4gXHR4Y2xvc2Uocyk7XG4gfVxuQEAgLTEyODksNyArMTI5MCw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfb3BzKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHQvKiBpbnNlcnQgKi9cbiBcdFx0VEVTVCh0ZXN0X2luc2VydF9pbnZhbGlkKSxcbiBcdFx0VEVTVCh0ZXN0X2luc2VydF9vcGVuZWQpLFxuLVx0XHRURVNUKHRlc3RfaW5zZXJ0X2JvdW5kLCBTT0NLX1NUUkVBTSksXG4rXHRcdFRFU1QodGVzdF9pbnNlcnRfYm91bmQpLFxuIFx0XHRURVNUKHRlc3RfaW5zZXJ0KSxcbiBcdFx0LyogZGVsZXRlICovXG4gXHRcdFRFU1QodGVzdF9kZWxldGVfYWZ0ZXJfaW5zZXJ0KSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmNcbmluZGV4IGMzMmRhN2JkOGJlMjc2Li42YTI2NDFlZTc4OTc1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jXG5AQCAtNzU5LDE2ICs3NTksMTUgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwKHVuc2lnbmVkIGludCB0YXNrcywgdm9pZCAqZGF0YSlcbiBcdFx0Z290byBvdXRfc29ja21hcDtcbiBcdH1cbiBcbi1cdC8qIFRlc3QgdXBkYXRlIHdpdGggdW5zdXBwb3J0ZWQgVURQIHNvY2tldCAqL1xuK1x0LyogVGVzdCB1cGRhdGUgd2l0aCB1bnN1cHBvcnRlZCB1bmJvdW5kIFVEUCBzb2NrZXQgKi9cbiBcdHVkcCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTtcbi1cdGkgPSAwO1xuLVx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShmZCwgXHUwMDI2aSwgXHUwMDI2dWRwLCBCUEZfQU5ZKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0cHJpbnRmKFwiRmFpbGVkIHNvY2tldCB1cGRhdGUgU09DS19ER1JBTSAnJWk6JWknXFxuXCIsXG4tXHRcdCAgICAgICBpLCB1ZHApO1xuK1x0Q0hFQ0sodWRwIFx1MDAzYyAwLCBcInNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKVwiLCBcImVycm5vOiVkXFxuXCIsIGVycm5vKTtcbitcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0oZmQsIFx1MDAyNihpbnQpezB9LCBcdTAwMjZ1ZHAsIEJQRl9BTlkpO1xuK1x0Y2xvc2UodWRwKTtcbitcdGlmICghZXJyKSB7XG4rXHRcdHByaW50ZihcIlVuZXhwZWN0ZWRseSBzdWNjZWVkZWQgdW5ib3VuZCBVRFAgdXBkYXRlICcwOiVpJ1xcblwiLCB1ZHApO1xuIFx0XHRnb3RvIG91dF9zb2NrbWFwO1xuIFx0fVxuLVx0Y2xvc2UodWRwKTtcbiBcbiBcdC8qIFRlc3QgdXBkYXRlIHdpdGhvdXQgcHJvZ3JhbXMgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkrKykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MjMuNzE4OTI5NTY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2NTY1ODQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNvY2ttYXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHNvbWUgYXNzb2NpYXRlZCBzZWxmdGVzdHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkndmUgYWRkZWQgZXhwbGljaXQgaGFuZGxpbmcgZm9yIFVEUCBzb2NrZXRzLiBCZWZvcmUsIGl0IGxvb2tzIGxpa2UgVURQIHNvY2tldHMgd2VyZSBpbXBsaWNpdGx5ICpkaXNhbGxvd2VkKiBiZWNhdXNlIHRoZXkgd2VyZW4ndCBleHBsaWNpdGx5IGhhbmRsZWQgaW4gdGhpcyBmdW5jdGlvbi4gSWYgaXQgd2Fzbid0IFRDUCwgc3RyZWFtIFVuaXggc29ja2V0cyBvciB2c29jayBpdCB3b3VsZCBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1bHQgb2YgcmV0dXJuaW5nIGZhbHNlLlxuXG5Ob3csIHdpdGggdGhpcyBuZXcgY29kZSwgYSBVRFAgc29ja2V0IGlzIGFsbG93ZWQgaW4gdGhlIHNvY2ttYXAgaWYgaXQncyBoYXNoZWQsIGluZGljYXRlZCBieSBgc2tfaGFzaGVkKHNrKWAuIFRoaXMgbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2Ygd2FudGluZyB0byBhZGQgYSBVRFAgc29ja2V0IHRvIGEgc29ja21hcDsgdHlwaWNhbGx5LCB5b3UnZCBvbmx5IHdhbnQgdG8gdHJhY2sgc29ja2V0cyB0aGF0IGFyZSBhY3RpdmVseSBwYXJ0aWNpcGF0aW5nIGluIGNvbW11bmljYXRpb24uIEhhc2hpbmcgaW1wbGllcyB0aGF0IHRoZSBzb2NrZXQgaXMgYm91bmQgYW5kIGxpa2VseSByZWNlaXZpbmcgdHJhZmZpYy4gSSBzaG91bGQgY29uZmlybSB0aGF0IGBza19oYXNoZWRgIG1lYW5zIHdoYXQgSSB0aGluayBpdCBtZWFucyBoZXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gaW4gdGhlIGtlcm5lbCBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuIFRoaXMgYXBwcm9hY2ggc2VlbXMgcmVhc29uYWJsZS4gTGV0IG1lIHB1bGwgdXAgdGhlIHJlbGV2YW50IGNvZGUgYW5kIGNvbmZpcm0gdGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIHRoaXMgd2Fzbid0IGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjI4Ljk4NDU4OTYyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI0MjU2MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NTg9aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXFx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODc6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTk5PXN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjEyLVxcdGJoX2xvY2tfc29jayhzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2MTM6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MzIuMzA4ODUyNDM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwNzQ5MDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBJIG1ha2UgYW55IGp1ZGdlbWVudHMgb3IgZHJhdyBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbiwgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLiBJIG5lZWQgdG8gc2VlICpldmVyeXRoaW5nKi4gV2hhdCBhcmUgdGhlIGlucHV0cz8gV2hhdCdzIHRoZSBjb3JlIGxvZ2ljPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGV4aXQgcGF0aHMgYW5kIGVycm9yIGNvbmRpdGlvbnM/IFdpdGhvdXQgdGhhdCBob2xpc3RpYyB2aWV3LCBJJ20ganVzdCBzaG9vdGluZyBpbiB0aGUgZGFyay4gU28sIGxldCdzIGdldCB0aGUgd2hvbGUgZGVmaW5pdGlvbiwgYW5kIHRoZW4gd2UnbGwgc3RhcnQgcGlja2luZyBpdCBhcGFydCBwaWVjZSBieSBwaWVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjM1LjExNjM0NDY0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRcXG4gNTQxOlxcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiA1NDI6XFx0e1xcbiA1NDM6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpXFxuIDU0NDpcXHRcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xcbiA1NDU6XFx0XFx0aWYgKHNrX2lzX3VkcChzaykpXFxuIDU0NjpcXHRcXHRcXHRyZXR1cm4gc2tfaGFzaGVkKHNrKTtcXG4gNTQ3OlxcdFxcdGlmIChza19pc19zdHJlYW1fdW5peChzaykpXFxuIDU0ODpcXHRcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2MgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zdGF0ZSkpIFxcdTAwMjYgVENQRl9FU1RBQkxJU0hFRDtcXG4gNTQ5OlxcdFxcdGlmIChza19pc192c29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4gNTUwOlxcdFxcdCAgICAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0gfHwgc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpKVxcbiA1NTE6XFx0XFx0XFx0cmV0dXJuICgxIFxcdTAwM2NcXHUwMDNjIHNrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xcbiA1NTI6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDU1MzpcXHR9XFxuIDU1NDpcXHRcXG4gNTU1OlxcdHN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiA1NTY6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNvY2sgKnNrLCB1NjQgZmxhZ3MpO1xcbiA1NTc6XFx0XFxuIDU1ODpcXHRpbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIDU1OTpcXHRcXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MzUuMTE2NDQ4NTQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NzIwOTM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTb2NrZXQgTG9naWMqKlxuXG5SaWdodCwgc28gdGhlIGNvZGUncyBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHNpbXBseSBgcmV0dXJuIHRydWU7YC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIuLi4gaWYgdGhhdCdzIHRoZSBiYXNlIGNhc2UsIHdoYXQgd2FzIGhhcHBlbmluZyB3aXRoIFVEUCBzb2NrZXRzIGJlZm9yZT8gQSBzaW1wbGUgXCJ0cnVlXCIgcmV0dXJuIHdvdWxkIGhhdmUgcGVybWl0dGVkIFVEUCBzb2NrZXRzIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgc3RhdGUgb3IgYW55IG90aGVyIHNwZWNpZmljIGNyaXRlcmlhLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmV0dHkgYnJvYWQgYWxsb3dhbmNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHdhcyBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgb3IgZGlzYWxsb3dpbmcgc29ja2V0cy5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY2hlY2tzLiBJJ2xsIHN0YXJ0IHdpdGggYHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlYCwgYnV0IEkgc2hvdWxkIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBvdGhlciBmdW5jdGlvbnMgYW5kIGNoZWNrcyBuZWFyYnkuIEl0IGNvdWxkIGJlIHRoYXQgc29tZXRoaW5nIGVsc2UgaW4gdGhlIGxvZ2ljIHdhcyBzaWxlbnRseSBvdmVycnVsaW5nIHRoYXQgZGVmYXVsdCwgb3IgcHJvdmlkaW5nIGNvbnRleHQgdG8gdGhlIGByZXR1cm4gdHJ1ZTtgLiBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE2MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MzguOTkzNjU5NTEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTIzMDM5NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfaXNfdWRwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NvY2suaD0yOTY1PXN0YXRpYyBpbmxpbmUgYm9vbCBza19pc190Y3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTI5NzEtXFxuaW5jbHVkZS9uZXQvc29jay5oOjI5NzI6c3RhdGljIGlubGluZSBib29sIHNrX2lzX3VkcChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvc29jay5oLTI5NzMte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE4MTQ9QlBGX0NBTExfMyhicGZfc2tfbG9va3VwX2Fzc2lnbiwgc3RydWN0IGJwZl9za19sb29rdXBfa2VybiAqLCBjdHgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTgyMy1cXHRcXHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsgLyogb25seSBhY2NlcHQgVENQIHNvY2tldCBpbiBMSVNURU4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgyNDpcXHRpZiAodW5saWtlbHkoc2sgXFx1MDAyNlxcdTAwMjYgc2tfaXNfdWRwKHNrKSBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTgyNS1cXHRcXHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsgLyogb25seSBhY2NlcHQgVURQIHNvY2tldCBpbiBDTE9TRSAqL1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTQ0NjM9Ym9vbCBza19idXN5X2xvb3BfZW5kKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSlcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy00NDY5LVxcbm5ldC9jb3JlL3NvY2suYzo0NDcwOlxcdGlmIChza19pc191ZHAoc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc29jay5jLTQ0NzEtXFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnVkcF9zayhzayktXFx1MDAzZXJlYWRlcl9xdWV1ZSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTU0MT1zdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQ0LVxcdFxcdHJldHVybiAoMSBcXHUwMDNjXFx1MDAzYyBzay1cXHUwMDNlc2tfc3RhdGUpIFxcdTAwMjYgKFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0xJU1RFTik7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1NDU6XFx0aWYgKHNrX2lzX3VkcChzaykpXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDYtXFx0XFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zMDE9c3RhdGljIGludCBob29rX3NvY2tldF9iaW5kKHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMDctXFx0XFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0JJTkRfVENQO1xcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMwODpcXHRlbHNlIGlmIChza19pc191ZHAoc29jay1cXHUwMDNlc2spKVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMwOS1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQklORF9VRFA7XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zMTc9c3RhdGljIGludCBob29rX3NvY2tldF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMjUtXFx0XFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0NPTk5FQ1RfVENQO1xcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMyNjpcXHRlbHNlIGlmIChza19pc191ZHAoc29jay1cXHUwMDNlc2spKVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMyNy1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQ09OTkVDVF9TRU5EX1VEUDtcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMzNy1cXHQgKi9cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYzozMzg6XFx0aWYgKHJldCA9PSAwIFxcdTAwMjZcXHUwMDI2IHNrX2lzX3VkcChzb2NrLVxcdTAwM2VzaykgXFx1MDAyNlxcdTAwMjZcXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMzktXFx0ICAgIGFkZHJsZW4gXFx1MDAzZT0gb2Zmc2V0b2ZlbmQodHlwZW9mKCphZGRyZXNzKSwgc2FfZmFtaWx5KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM9MzQ2PXN0YXRpYyBpbnQgaG9va19zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpjb25zdCBzb2NrLFxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzUzLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjM1NDpcXHRpZiAoc2tfaXNfdWRwKHNvY2stXFx1MDAzZXNrKSlcXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zNTUtXFx0XFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0NPTk5FQ1RfU0VORF9VRFA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjQxLjI0NTk2Nzk1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTk5OTI1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRFAgU29ja2V0IFJlc3RyaWN0aW9uIGluIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBpZiB0aGUgb3JpZ2luYWwgYmVoYXZpb3IgZGVmYXVsdGVkIHRvIGByZXR1cm4gdHJ1ZTtgLCB0aGF0IG1lYW50ICp1bmJvdW5kKiBVRFAgc29ja2V0cyB3ZXJlIHByZXZpb3VzbHkgYWxsb3dlZCBpbiB0aGlzIHNjZW5hcmlvP1wiIEludGVyZXN0aW5nLi4uXG5cbk5vdyB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIHNwZWNpZmljIGNoZWNrOlxuXG5gYGBjXG5cdGlmIChza19pc191ZHAoc2spKVxuXHRcdHJldHVybiBza19oYXNoZWQoc2spO1xuYGBgXG5cblRoaXMgKmV4cGxpY2l0bHkqIHJlc3RyaWN0cyBVRFAgc29ja2V0cyB0byBvbmx5IHRob3NlIHRoYXQgYXJlIGhhc2hlZCDigJMgbWVhbmluZywgYm91bmQgdG8gYW4gYWRkcmVzcyBhbmQgcG9ydCwgY29ycmVjdD8gVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBsaW1pdGluZyB0aGUgZmxleGliaWxpdHkgaW4gaG93IFVEUCBzb2NrZXRzIGFyZSBoYW5kbGVkLlxuXG5UaGUgc2VsZnRlc3QgY2hhbmdlcyBhcmUgd2hlcmUgaXQgYmVjb21lcyBjbGVhcmVyLiBUaGV5IGFyZSBkZXNpZ25lZCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgY2hhbmdlLiBCZWZvcmUgaXQgbG9va3MgbGlrZSB0aGUgdGVzdCBleHBlY3RlZCB0aGF0IHVwZGF0aW5nIHdpdGggYW4gdW5zdXBwb3J0ZWQgVURQIHNvY2tldCB3b3VsZCBmYWlsLiBOb3csIHRoZSBjb21tZW50IHNwZWNpZmljYWxseSBzYXlzIGl0J3MgdGVzdGluZyB3aXRoIGFuIFwidW5ib3VuZCBVRFAgc29ja2V0XCIuIFRoZSB0ZXN0IG5vdyBjcmVhdGVzIGEgVURQIHNvY2tldCwgYXR0ZW1wdHMgdGhlIG1hcCB1cGRhdGUsIGNsb3NlcyB0aGUgc29ja2V0IGFuZCBjaGVja3MgZm9yIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBgQ0hFQ0sodWRwIFx1MDAzYyAwLCBcInNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKVwiLCBcImVycm5vOiVkXFxuXCIsIGVycm5vKTtgIGxpbmUsIGFuZCB0aGUgc3Vic2VxdWVudCBlcnJvciBjaGVja2luZyBpbiB0aGUgYGlmICghZXJyKWAgc3RhdGVtZW50LiBJdCAqZXhwZWN0cyogYW4gZXJyb3IsIGJ1dCBpZiB0aGUgdXBkYXRlIHVuZXhwZWN0ZWRseSBzdWNjZWVkcywgaXQgdGhyb3dzIGFuIGVycm9yLlxuXG5CdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgZnV6enkuIElmIHRoZSAqb2xkKiB0ZXN0IGFscmVhZHkgZXhwZWN0ZWQgZmFpbHVyZSAoYXMgaW5kaWNhdGVkIGJ5IHRoZSBcInVuc3VwcG9ydGVkIFVEUCBzb2NrZXRcIiBjb21tZW50KSwgdGhlbiAqd2h5KiBkaWQgaXQgZmFpbCAqYmVmb3JlKiB0aGUgcGF0Y2g/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBEaWQgdGhlIG9sZGVyIGltcGxlbWVudGF0aW9uIGhhdmUgc29tZSB1bmludGVuZGVkIGJlaGF2aW9yP1xuXG5JIG5lZWQgdG8gZGlnIGludG8gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2Agb3IgbWF5YmUgYHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlYCB0byBzZWUgd2hhdCBleGFjdGx5IHdhcyBnb2luZyBvbiAqYmVmb3JlKiB0aGlzIHJlc3RyaWN0aW9uIHdhcyBpbnRyb2R1Y2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHdhcyBwcmV2ZW50aW5nIGFuIHVuYm91bmQgVURQIHNvY2tldCBmcm9tIGJlaW5nIFwic3VpdGFibGVcIiBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIGlmIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHdhcyB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6NDcuOTY1OTYyNTI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRcXG4gNTIxOlxcdHN0YXRpYyBib29sIHNvY2tfbWFwX29wX29rYXkoY29uc3Qgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICpvcHMpXFxuIDUyMjpcXHR7XFxuIDUyMzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcCA9PSBCUEZfU09DS19PUFNfUEFTU0lWRV9FU1RBQkxJU0hFRF9DQiB8fFxcbiA1MjQ6XFx0XFx0ICAgICAgIG9wcy1cXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQiB8fFxcbiA1MjU6XFx0XFx0ICAgICAgIG9wcy1cXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX1RDUF9MSVNURU5fQ0I7XFxuIDUyNjpcXHR9XFxuIDUyNzpcXHRcXG4gNTI4OlxcdHN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiA1Mjk6XFx0e1xcbiA1MzA6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpXFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU47XFxuIDUzMjpcXHRcXHRlbHNlXFxuIDUzMzpcXHRcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zdGF0ZSkgPT0gVENQX0VTVEFCTElTSEVEO1xcbiA1MzQ6XFx0fVxcbiA1MzU6XFx0XFxuIDUzNjpcXHRzdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuIDUzNzpcXHR7XFxuIDUzODpcXHRcXHRyZXR1cm4gISFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Q7XFxuIDUzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjQ3Ljk2NjA5MjY1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTU3MjQwNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmF2ZWxpbmcgdGhlIFVEUCBTb2NrbWFwIE15c3RlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc29ja19tYXBfc2tfaXNfc3VpdGFibGVgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggVURQIHNvY2tldHMuIEkgc2VlIHRoYXQgaXQgY2hlY2tzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90YCwgYW5kIGZvciBVRFAsIHRoYXQgZnVuY3Rpb24gaXMgaW5kZWVkIHNldC4gVGhhdCdzIGdvb2QsIHNlZW1zIGxpa2UgdGhlIHBpZWNlcyBhcmUgaW4gcGxhY2UuIEJ1dCB3YWl0LCBzb21ldGhpbmcncyBub3QgYWRkaW5nIHVwLiBJIHJlbWVtYmVyIHNlZWluZyBhIGNvbW1lbnQgaW4gYW4gb2xkIHNlbGZ0ZXN0IGFib3V0IFwidW5zdXBwb3J0ZWQgVURQIHNvY2tldFwiIGFuZCB0aGF0J3MgdGhyb3dpbmcgbWUgb2ZmLiBJZiBgcHNvY2tfdXBkYXRlX3NrX3Byb3RgIGlzIHByZXNlbnQsIHdoeSB3YXMgVURQIGNvbnNpZGVyZWQgdW5zdXBwb3J0ZWQgYXQgc29tZSBwb2ludD9cblxuTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IG9sZCBzZWxmdGVzdCBjb2RlLi4uIEFoYSEgSXQgdXNlZCB0byB0cnkgYWRkaW5nIGEgVURQIHNvY2tldCBsaWtlIHRoaXM6IGBlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCBcdTAwMjZpLCBcdTAwMjZ1ZHAsIEJQRl9BTlkpO2AgYW5kICpleHBlY3RlZCogaXQgdG8gc3VjY2VlZCEgVGhlIGNvZGUgZXhwbGljaXRseSBjaGVja2VkIGBpZiAoZXJyKSB7IHByaW50ZihcIkZhaWxlZCBzb2NrZXQgdXBkYXRlLi4uXCIpOyBnb3RvIG91dF9zb2NrbWFwOyB9YCwgaW5kaWNhdGluZyBhIHN1Y2Nlc3NmdWwgdXBkYXRlIHdhcyB0aGUgZXhwZWN0YXRpb24uIFRoZSBjb21tZW50IHNhaWQgXCJ1bnN1cHBvcnRlZFwiLCBidXQgdGhlIHRlc3Qgd2FzIGV4cGVjdGluZyBzdWNjZXNzPyBUaGlzIGlzIGNvbmZ1c2luZy5cblxuTm8sIHdhaXQsIEknbSBtaXNyZWFkaW5nIHRoZSBsb2dpYy4gQSBub24temVybyBgZXJyYCBtZWFudCBpdCAqZmFpbGVkKi4gU28gaXQgKmRpZCogZXhwZWN0IHN1Y2Nlc3Mgb3JpZ2luYWxseSwgd2hpY2ggY29udHJhZGljdHMgdGhlIFwidW5zdXBwb3J0ZWRcIiBjb21tZW50LiBPa2F5LCBJIHRoaW5rIEknbSBmb2xsb3dpbmcgbm93LiBMb29raW5nIGF0IHRoZSBwYXRjaCwgdGhlIHRlc3QgaGFzIGNoYW5nZWQuIE5vdywgaXQgZXhwbGljaXRseSAqZXhwZWN0cyogZmFpbHVyZTogYGlmICghZXJyKSB7IHByaW50ZihcIlVuZXhwZWN0ZWRseSBzdWNjZWVkZWQgdW5ib3VuZCBVRFAgdXBkYXRlICcwOiVpJ1xcblwiLCB1ZHApOyBnb3RvIG91dF9zb2NrbWFwOyB9YC4gU28sIHVuYm91bmQgVURQIHNvY2tldHMgKnVzZWQqIHRvIGJlIGFkZGVkIHN1Y2Nlc3NmdWxseS5cblxuU28sIHByZXZpb3VzbHksIHVuYm91bmQgVURQIHNvY2tldHMgKmNvdWxkKiBiZSBhZGRlZD8gQnV0IHdoeSB3YXMgdGhpcyBjb25zaWRlcmVkIGEgcHJvYmxlbT8gSSdtIGd1ZXNzaW5nIHRoYXQgdW5ib3VuZCBVRFAgc29ja2V0cywgYmVpbmcgaW4gYW4gaW5jb21wbGV0ZSBzdGF0ZSBiZWZvcmUgdGhleSdyZSBmdWxseSBpbml0aWFsaXplZCBvciBoYXNoZWQsIG1pZ2h0IGNhdXNlIGlzc3VlcyB3aGVuIEJQRiBwcm9ncmFtcyB0cnkgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtIHRocm91Z2ggdGhlIHNvY2ttYXAuIEl0J3MgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5JJ20gcHJldHR5IHN1cmUgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSBvciB0aGUgYXNzb2NpYXRlZCBpc3N1ZSB0cmFja2VyIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0IG9uICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTEwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6NTYuNTIzMzM0OTAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAzOTQ3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NTg9aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXFx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODc6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTk5PXN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjEyLVxcdGJoX2xvY2tfc29jayhzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2MTM6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6NTguNzI3Mjg2NTUzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzE4NDYyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgVGhpcyBQYXRjaD8gWWVzLioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYCwgc3BlY2lmaWNhbGx5IGBpZiAoc2tfaXNfdWRwKHNrKSkgcmV0dXJuIHNrX2hhc2hlZChzayk7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIGxpa2UgYSBtaW5vciByZXN0cmljdGlvbiBvbiB0aGUgdHlwZXMgb2YgVURQIHNvY2tldHMgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBzb2NrbWFwLiBJJ2QgYmUgbG9va2luZyBhdCBmdXp6aW5nIGBicGZfbWFwX3VwZGF0ZV9lbGVtYCBvbiBhIHNvY2ttYXAsIHRhcmdldGluZyBhIFVEUCBzb2NrZXQuIEJ1dCwgYXMgYSBidWcgZml4IHRoYXQgcmVzdHJpY3RzIGJlaGF2aW9yLCB0aGUgcHJpbWFyeSBnb2FsICppc24ndCogdG8gdW5jb3ZlciBicmFuZCBuZXcgY29kZSBwYXRocywgYW5kIG1heSAqcHJldmVudCogc29tZSB1bmRlZmluZWQgYmVoYXZpb3IuXG5cblRoZSBwYXRjaCdzIGdvYWwgYXBwZWFycyB0byBwcmV2ZW50IGEgYnVnIHJlbGF0ZWQgdG8gdXNpbmcgdW5ib3VuZCBVRFAgc29ja2V0cyBpbiBhIHNvY2ttYXAsIHBlcmhhcHMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igc2ltaWxhci4gVGhlIHBhdGNoIGlzICphbHJlYWR5KiBhcHBsaWVkLCBzbyBhbnkgaW1tZWRpYXRlIGJ1ZyB3b24ndCBiZSBleHBvc2VkIGR1cmluZyBmdXp6aW5nLiBCdXQgdGhlIGtleSBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgKm5ldyogZnVuY3Rpb25hbCBsb2dpYyB3b3J0aCB0ZXN0aW5nLlxuXG5UaGUgYWRkaXRpb24gb2YgYHNrX2hhc2hlZChzaylgIGZvciBVRFAgc29ja2V0cyBzZWVtZWQgc2ltcGxlIG9uIHRoZSBzdXJmYWNlOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIGludCBza19oYXNoZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxue1xuXHRyZXR1cm4gIXNrX3VuaGFzaGVkKHNrKTtcbn1cbmBgYFxuXG5JdCBpcyBhIGJhc2ljIHN0YXRlIGNoZWNrLiBUeXBpY2FsbHksIHRoZXNlIHNpbXBsZSBjaGVja3PigJRgaWYgKCFmb28pIHJldHVybiAtRUlOVkFMO2DigJRkb24ndCBuZWNlc3NhcmlseSBpbnRyb2R1Y2UgY29tcGxleCBmdXp6aW5nIHRhcmdldHMuXG5cbkhvd2V2ZXIsIHRoZSBiaWdnZXIgcGljdHVyZSBpcyB0aGF0IHRoaXMgY29kZSBtb2RpZmllcyBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAsIHdoaWNoIGlzICpjb3JlKiBCUEYgc29ja21hcCBsb2dpYy4gVGhhdCdzIGEga2V5IHBhcnQgb2YgdGhlIGV4ZWN1dGlvbiBmbG93IGluIHRoZSBrZXJuZWwgYW5kIHNvbWV0aGluZyB0aGF0ICppcyogcmVhY2hhYmxlLlxuXG5UaGVuIHRoZSBwcm9tcHQncyBjcml0ZXJpYSByZWFsbHkgY2xhcmlmaWVzIGl0OlxuXG4qICAgTm90IGp1c3QgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgb3IgY29uc3RhbnRzLlxuKiAgIEl0IGFsdGVycyBleGVjdXRpb24gZmxvdyBieSByZWplY3RpbmcgdW5ib3VuZCBVRFAgc29ja2V0cyAod2hpY2ggY2FuIGFsdGVyICpiZWhhdmlvdXIqKSwgKmFuZCogbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgKGBuZXQvY29yZS9zb2NrX21hcC5jYCkuXG5cblRoZXJlZm9yZSwgZXZlbiB0aG91Z2ggaXQncyBhIGJ1ZyBmaXgsIGFuZCBkb2Vzbid0IGluaGVyZW50bHkgdW5jb3ZlciBuZXcgY29kZSBwYXRocywgaXQgKmRvZXMqIGNoYW5nZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRvZXMgd2FycmFudCBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBmdW5jdGlvbiBjYWxscy4gVGhlIHBhdGNoIHRhcmdldHMgYSBzdGF0aWMgZnVuY3Rpb24gYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGF0IGlzIGNhbGxlZCBieSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBhbmQgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYC4gU28gbm93IEkgd291bGQgYmUgbG9va2luZyBmb3Igd2hlcmUgKnRob3NlKiBmdW5jdGlvbnMgYXJlIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMDowOS4wNDU3NTExMjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTUzMDkwMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MzY1OT1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNjYwOmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NjEtaW50IHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zNzQ1PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUwLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTItXFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUxPXN0YXRpYyBpbnQgYnBmX21hcF91cGRhdGVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY0LVxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNjU6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjYtXFx0fSBlbHNlIGlmIChJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTU1PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NTg6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU5LVxcdFxcdFxcdCAgICAgdTY0IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMDoxMC44NDEwNjU1MTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNDQ3NzkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBTT0NLTUFQL1NPQ0tIQVNIIFVwZGF0ZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoZSBmbG93IG9mIGRhdGEgdXBkYXRpbmcgaW4gdGhlIEJQRiB3b3JsZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBTT0NLTUFQIGFuZCBTT0NLSEFTSCwgYW5kIEkgc2VlIGEgY2xlYXIgZGlzdGluY3Rpb24gaW4gaG93IHRoaXMgaGFwcGVucyBmcm9tIHVzZXJzcGFjZSB2ZXJzdXMgd2l0aGluIEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzLiBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyB0aGUga2VybmVsIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhIHVzZXItc3BhY2UgYXBwbGljYXRpb24gd2FudHMgdG8gdXBkYXRlIGEgU09DS01BUCBvciBTT0NLSEFTSC4gSXQgc2VlbXMgaXQgaXMgaG9va2VkIHRvIGBicGZfbWFwX3VwZGF0ZV92YWx1ZWAgd2l0aGluIHRoZSBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3lzY2FsbHMgYXJlIHRoZSBnYXRld2F5IGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbC4gSSB1bmRlcnN0YW5kIHRoYXQuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCBmdW5jdGlvbiBpcyBhIEJQRiBoZWxwZXIgdGhhdCBCUEYgcHJvZ3JhbXMgdGhlbXNlbHZlcyB1c2UgdG8gdXBkYXRlIHRoZXNlIG1hcHMuIFRoaXMgZGlzdGluY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGhpZ2hsaWdodHMgdGhlIHNlcGFyYXRpb24gb2YgY29uY2VybnMuIFVzZXItc3BhY2UgaGFzIGEgY29udHJvbGxlZCBpbnRlcmZhY2UgdGhyb3VnaCBzeXNjYWxscywgd2hpbGUgQlBGIHByb2dyYW1zLCBydW5uaW5nIHdpdGhpbiB0aGUgQlBGIFZNLCBoYXZlIHRoZWlyIG93biBvcHRpbWl6ZWQgaGVscGVycyBmb3IgbWFwIG1hbmlwdWxhdGlvbi4gVGhpcyBzZXR1cCBzdWdnZXN0cyBjYXJlZnVsIGNvbnNpZGVyYXRpb24gb2Ygc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGludGVncml0eSBvZiB0aGUgQlBGIGVudmlyb25tZW50LiBJJ20gbm90aW5nIHRoaXMgaXMgYSBzdGFuZGFyZCBwYXR0ZXJuLCBhbmQgdGhlIGNvZGUgbG9va3MgYXMgaXQgc2hvdWxkIGZvciB0aGlzIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjMwOjE0LjU2NTU0NTY0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NzU1MjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX21hcF91cGRhdGVfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTM2NTk9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2MDppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjYxLWludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9Mzc0NT1zdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1MC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3NTE6c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUyLVxcdFxcdFxcdFxcdFxcdCAgIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI1MT1zdGF0aWMgaW50IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI2NC1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjY1OlxcdFxcdHJldHVybiBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMobWFwLCBrZXksIHZhbHVlLCBmbGFncyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY2LVxcdH0gZWxzZSBpZiAoSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1NT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU4OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk5OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYwMC1cXHRcXHRcXHRcXHQgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNi1cXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzOC1cXHQubWFwX2RlbGV0ZV9lbGVtXFx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1MS1cXHQubWFwX2dldF9uZXh0X2tleVxcdD0gc29ja19oYXNoX2dldF9uZXh0X2tleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTI6XFx0Lm1hcF91cGRhdGVfZWxlbVxcdD0gc29ja19tYXBfdXBkYXRlX2VsZW0sXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUzLVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfaGFzaF9kZWxldGVfZWxlbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MTYuNDEzMTAzMTYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjAwOTYwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQlBGIFNvY2ttYXAgVXBkYXRlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgaGVyZS4gRGVmaW5pdGVseSwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgYW5kIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgYXJlIHByaW1hcnkgdGFyZ2V0cy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgYWN0dWFsbHkgYXNzaWduZWQgdG8gYG1hcF91cGRhdGVfZWxlbWAgd2l0aGluIGJvdGggYHNvY2tfbWFwX29wc2AgYW5kIGBzb2NrX2hhc2hfb3BzYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3IgdHJhY2luZyB0aGUgY2FsbCBmbG93LlxuXG5IbW0sIGFuZCB3aGF0IGFib3V0IGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYD8gVGhhdCdzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCdzIHRoZSBvbmUgdGhhdCdzIGFjdHVhbGx5ICptb2RpZmllZCogYXQgcnVudGltZSwgbWFraW5nIGl0IGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgc3RhdGUgY2hhbmdlcyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIHRoaW5rIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGF0IGluIG91ciBzY29wZSBhcyB3ZWxsLlxuXG5TbywgdG8gYmUgY2xlYXIsIHRoZSBwcmltYXJ5IHN5bWJvbHMgb2YgaW50ZXJlc3QgYXJlOiBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCwgYW5kIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYC5cblxuTm93LCByZWdhcmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBvZiB0aGlzIGZlYXR1cmUuIFRoaXMgaXMgQlBGIHNvY2ttYXAsIHJpZ2h0PyBMZXQncyBjaGVjayBgbmV0L2NvcmUvTWFrZWZpbGVgIG9yIGBuZXQvY29yZS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGluZyB0byBgc29ja19tYXAuY2AuIFRoYXQgc2hvdWxkIGdpdmUgdXMgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3MgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjMwOjIyLjA3MzIwMTc3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4NTUzNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9za19zdG9yYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MjIuNDMxNzYxNDg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjAyOTk5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhlcmUgaGluZ2VzIGVudGlyZWx5IG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXMgdGhhdCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW1wYWN0aW5nIHRoaXMgc2VjdGlvbiBvZiBjb2RlPyBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIG90aGVycy5cblxuQWxyaWdodCwgbm93IHRoYXQgSSBoYXZlIGEgaGFuZGxlIG9uIHRoYXQsIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGFjdHVhbCBpbXBhY3RlZCBjb2RlIGlzLiBUbyBkbyB0aGF0LCBJJ2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGFuZCBjb21iIHRocm91Z2ggaXQuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyB0aGUgY29kZSB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBjb21waWxlZCBhbmQsIHRoZXJlZm9yZSwgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjMwOjI1LjQ1MjA2MzQwOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MzA6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpXFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU47XFxuIDUzMjpcXHRcXHRlbHNlXFxuIDUzMzpcXHRcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zdGF0ZSkgPT0gVENQX0VTVEFCTElTSEVEO1xcbiA1MzQ6XFx0fVxcbiA1MzU6XFx0XFxuIDUzNjpcXHRzdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuIDUzNzpcXHR7XFxuIDUzODpcXHRcXHRyZXR1cm4gISFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Q7XFxuIDUzOTpcXHR9XFxuIDU0MDpcXHRcXG4gNTQxOlxcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiA1NDI6XFx0e1xcbiA1NDM6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpXFxuIDU0NDpcXHRcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xcbiA1NDU6XFx0XFx0aWYgKHNrX2lzX3VkcChzaykpXFxuIDU0NjpcXHRcXHRcXHRyZXR1cm4gc2tfaGFzaGVkKHNrKTtcXG4gNTQ3OlxcdFxcdGlmIChza19pc19zdHJlYW1fdW5peChzaykpXFxuIDU0ODpcXHRcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2MgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zdGF0ZSkpIFxcdTAwMjYgVENQRl9FU1RBQkxJU0hFRDtcXG4gNTQ5OlxcdFxcdGlmIChza19pc192c29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4gNTUwOlxcdFxcdCAgICAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0gfHwgc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpKVxcbiA1NTE6XFx0XFx0XFx0cmV0dXJuICgxIFxcdTAwM2NcXHUwMDNjIHNrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xcbiA1NTI6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDU1MzpcXHR9XFxuIDU1NDpcXHRcXG4gNTU1OlxcdHN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiA1NTY6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNvY2sgKnNrLCB1NjQgZmxhZ3MpO1xcbiA1NTc6XFx0XFxuIDU1ODpcXHRpbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIDU1OTpcXHRcXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MjUuNDUyMzYzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTA2ODcwNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVURQIFNvY2ttYXAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEknbSBub3Qgc2VlaW5nIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcm91bmQgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLiBUaGF0IG1lYW5zIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBwcmltYXJ5LCBpZiBub3Qgb25seSwgZW5hYmxlciBoZXJlLiBCdXQsIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IFVEUC4gSXMgdGhlcmUgYSBtb3JlIHNwZWNpZmljIGNvbmZpZyBmb3IgVURQIGJleW9uZCBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0lORVRgIHdoaWNoIGlzIGp1c3QgdG9vIGJyb2FkP1xuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIHRoZSBvYmplY3QgZmlsZSwgYHNvY2tfbWFwLm9gLCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYWN0aXZlLiBIbW0sIHRoYXQncyBwcm9taXNpbmcuIEJ1dCBkb2VzIHRoYXQgbWVhbiBpdCdzIGFsbCBJIG5lZWQ/IFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBhYm91dCBVRFAgc29ja21hcCBzdXBwb3J0LCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZmlsZXMgaW4gdGhlIGtlcm5lbC4gTGV0IG1lIGxvb2sgYXQgYG5ldC9pcHY0L3VkcF9icGYuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgZm9yIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBVRFAgc3BlY2lmaWNhbGx5LiBUaGF0IHNob3VsZCBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdG8gdGVzdCBVRFAgc29ja21hcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMDoyOS41NTkyMzY3MTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDkzMzgzMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJNQUlOVEFJTkVSUz00OTcyPUY6XFx0bmV0L2lwdjQvdGNwX2JwZi5jXFxuTUFJTlRBSU5FUlM6NDk3MzpGOlxcdG5ldC9pcHY0L3VkcF9icGYuY1xcbk1BSU5UQUlORVJTLTQ5NzQtRjpcXHRuZXQvdW5peC91bml4X2JwZi5jXFxuLS1cXG5pbmNsdWRlL25ldC91ZHAuaD02NTI9c3RydWN0IHNrX3Bzb2NrO1xcbmluY2x1ZGUvbmV0L3VkcC5oOjY1MzppbnQgdWRwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpO1xcbmluY2x1ZGUvbmV0L3VkcC5oLTY1NC0jZW5kaWZcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVExBQkVMKSArPSBjaXBzb19pcHY0Lm9cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTMxMTA9c3RydWN0IHByb3RvIHVkcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzEzMS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdWRwLmM6MzEzMjpcXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcXHQ9IHVkcF9icGZfdXBkYXRlX3Byb3RvLFxcbm5ldC9pcHY0L3VkcC5jLTMxMzMtI2VuZGlmXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM9Mzc9c3RhdGljIGludCB1ZHBfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtNjItXFxubmV0L2lwdjQvdWRwX2JwZi5jOjYzOnN0YXRpYyBpbnQgdWRwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3VkcF9icGYuYy02NC1cXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTE5PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRwdjZfcHJvdF9sb2NrKTtcXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTIwOnN0YXRpYyBzdHJ1Y3QgcHJvdG8gdWRwX2JwZl9wcm90c1tVRFBfQlBGX05VTV9QUk9UU107XFxubmV0L2lwdjQvdWRwX2JwZi5jLTEyMS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTIyOnN0YXRpYyBpbnQgdWRwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTIzLXtcXG4tLVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xMzQtXFxubmV0L2lwdjQvdWRwX2JwZi5jOjEzNTpzdGF0aWMgdm9pZCB1ZHBfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqcHJvdCwgY29uc3Qgc3RydWN0IHByb3RvICpiYXNlKVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xMzYte1xcbi0tXFxubmV0L2lwdjQvdWRwX2JwZi5jLTEzOC1cXHRwcm90LVxcdTAwM2VjbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdWRwX2JwZi5jOjEzOTpcXHRwcm90LVxcdTAwM2VyZWN2bXNnXFx0XFx0PSB1ZHBfYnBmX3JlY3Ztc2c7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE0MC1cXHRwcm90LVxcdTAwM2Vzb2NrX2lzX3JlYWRhYmxlXFx0PSBza19tc2dfaXNfcmVhZGFibGU7XFxubmV0L2lwdjQvdWRwX2JwZi5jOjE0MTpcXHRwcm90LVxcdTAwM2Vpb2N0bFxcdFxcdD0gdWRwX2JwZl9pb2N0bDtcXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQyLX1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQzLVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNDQ6c3RhdGljIHZvaWQgdWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNDUte1xcbi0tXFxubmV0L2lwdjQvdWRwX2JwZi5jLTE0OC1cXHRcXHRpZiAobGlrZWx5KG9wcyAhPSB1ZHB2Nl9wcm90X3NhdmVkKSkge1xcbm5ldC9pcHY0L3VkcF9icGYuYzoxNDk6XFx0XFx0XFx0dWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhcXHUwMDI2dWRwX2JwZl9wcm90c1tVRFBfQlBGX0lQVjZdLCBvcHMpO1xcbm5ldC9pcHY0L3VkcF9icGYuYy0xNTAtXFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnVkcHY2X3Byb3Rfc2F2ZWQsIG9wcyk7XFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTU1LVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNTY6c3RhdGljIGludCBfX2luaXQgdWRwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNTcte1xcbm5ldC9pcHY0L3VkcF9icGYuYzoxNTg6XFx0dWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhcXHUwMDI2dWRwX2JwZl9wcm90c1tVRFBfQlBGX0lQVjRdLCBcXHUwMDI2dWRwX3Byb3QpO1xcbm5ldC9pcHY0L3VkcF9icGYuYy0xNTktXFx0cmV0dXJuIDA7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE2MC19XFxubmV0L2lwdjQvdWRwX2JwZi5jOjE2MTpsYXRlX2luaXRjYWxsKHVkcF9icGZfdjRfYnVpbGRfcHJvdG8pO1xcbm5ldC9pcHY0L3VkcF9icGYuYy0xNjItXFxubmV0L2lwdjQvdWRwX2JwZi5jOjE2MzppbnQgdWRwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxubmV0L2lwdjQvdWRwX2JwZi5jLTE2NC17XFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTczLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNzQ6XFx0XFx0dWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVxcdTAwM2Vza19wcm90byk7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE3NS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTc2OlxcdHNvY2tfcmVwbGFjZV9wcm90byhzaywgXFx1MDAyNnVkcF9icGZfcHJvdHNbZmFtaWx5XSk7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE3Ny1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTc4LX1cXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTc5OkVYUE9SVF9TWU1CT0xfR1BMKHVkcF9icGZfdXBkYXRlX3Byb3RvKTtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE4Nzk9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTAwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2Ni91ZHAuYzoxOTAxOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjYvdWRwLmMtMTkwMi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MzEuNDA4NTc5MzE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTUwMDQ5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTb2NrZXQgTWFwIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyBleHBlY3RlZC4gTm93LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBzb2NrZXQgbWFwIHVwZGF0ZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB0byBjb25zaWRlciB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0byBjb25zaWRlciBhcmU6XG4qICAgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2BcbiogICBgc29ja19tYXBfdXBkYXRlX2VsZW1gXG4qICAgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgXG5cbkhtbSwgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLi4uIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYW5kIGl0IGxvb2tzIHNtYWxsLiBEaXJlY3QgZnV6emluZyBtaWdodCBiZSB0cmlja3kgaWYgdGhlIGNvbXBpbGVyIGlubGluZXMgaXQsIGJ1dCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoYXQuIEknbSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgY2FuIGZpZ3VyZSB0aGF0IHN0dWZmIG91dC5cblxuSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgc29ja19oYXNoX3VwZGF0ZV9lbGVtYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvc29ja19tYXAuY2AgZm9yIHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBpZGVudGlmaWVkIGFsbCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI0MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMDozNS43MDM1ODY1ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzgyMTI4ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfaGFzaF91cGRhdGVfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MzcuNTQxODA2ODU3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjQxMTkxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrbWFwIFVwZGF0ZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBzb2NrX2hhc2hfb3BzYCBzdHJ1Y3R1cmUgYW5kIGltbWVkaWF0ZWx5IHNwb3QgdGhhdCBpdCBsZXZlcmFnZXMgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCwgcmlnaHQ/IFRoYXQncyB0aGUga2V5IGVudHJ5IHBvaW50LiBBbmQgdGhlbiwgZnJvbSB0aGVyZSwgd2UgaGF2ZSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCB3aGljaCBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIEJQRiwgaXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbCwgc28gaXQncyBhIGNyaXRpY2FsIHBhdGguIEl0IGxvb2tzIGxpa2UgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgaXMgYWN0dWFsbHkgaW52b2tlZCBieSBgYnBmX21hcF91cGRhdGVfdmFsdWVgLCBzbyB0aGV5IGFyZSBhbGwgY29ubmVjdGVkLlxuXG5Ob3csIGxldCdzIHVuZGVyc3RhbmQgKndoeSogdGhpcyBtYXR0ZXJzLiBUaGUgcGF0Y2gncyByZWFzb25pbmcgaXMgY2xlYXI6IGl0J3MgYWJvdXQgcHJldmVudGluZyB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIHNvY2ttYXAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5zdGFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoaXMgZml4IGxpZXMgaW4gdGhlIGNoYW5nZXMgdG8gYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLiBUaGlzIGZ1bmN0aW9uIG5vdyBmaWx0ZXJzIG91dCB1bmJvdW5kIFVEUCBzb2NrZXRzLCBlbnN1cmluZyB0aGF0IG9ubHkgdmFsaWQgc3RhdGVzIGFyZSBwcm9jZXNzZWQgYnkgQlBGIHByb2dyYW1zLiBUaGlzIHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgaG93IHRoaW5ncyBhcmUgaGFuZGxlZC4gU28gZnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyByb2J1c3RuZXNzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgdmlzaWJpbGl0eSBvZiBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAsIGJlY2F1c2UgaXQncyBtYXJrZWQgYHN0YXRpY2AuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIGl0J3Mgc3RhdGljIGJ1dCBub3QgZXhwbGljaXRseSBtYXJrZWQgYGlubGluZWAsIHNvIGl0J3MgZmluZSB0byBsaXN0IGl0IGFuZCBpdCBzaG91bGQgYmUgdmlzaWJsZSB0byB1cy5cblxuVGhlIGNyaXRpY2FsIHN5bWJvbHMgaGVyZSBhcmU6IGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgc29ja19tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLlxuXG5MZXQncyB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY3MiwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6NDUuMDY1OTI4NDU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyMjQ5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCIsXG4gICAgXCJzb2NrX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwic29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHNvY2ttYXAgbG9naWMgdG8gcmVqZWN0IHVuYm91bmQgVURQIHNvY2tldHMgZnJvbSBiZWluZyBhZGRlZCB0byBhIHNvY2ttYXAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGJ1Z3Mgb3IgY3Jhc2hlcyBjYXVzZWQgYnkgdW5pbml0aWFsaXplZCBvciB1bmhhc2hlZCBzb2NrZXRzIGludGVyYWN0aW5nIHdpdGggQlBGIHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93LiBGdXp6aW5nIHRoZSBtYXAgdXBkYXRlIGZ1bmN0aW9ucyB3aXRoIHZhcmlvdXMgc29ja2V0IHN0YXRlcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBzb2NrbWFwIGxvZ2ljIHRvIHJlamVjdCB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWdzIG9yIGNyYXNoZXMgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgb3IgdW5oYXNoZWQgc29ja2V0cyBpbnRlcmFjdGluZyB3aXRoIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdy4gRnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 06:18:06 +0000 UTC FinishedAt: 2026-07-02 06:30:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b72e29e0f7ee329d89f86db8700c8ea99b4a370a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "b72e29e0f7ee329d89f86db8700c8ea99b4a370a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "b323738f-ad42-4f1e-a46d-1a9912cdfc54" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_update_elem_sys", "sock_map_update_elem", "sock_map_sk_state_allowed" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW1fc3lzJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgc29ja21hcCBsb2dpYyB0byByZWplY3QgdW5ib3VuZCBVRFAgc29ja2V0cyBmcm9tIGJlaW5nIGFkZGVkIHRvIGEgc29ja21hcC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgYnVncyBvciBjcmFzaGVzIGNhdXNlZCBieSB1bmluaXRpYWxpemVkIG9yIHVuaGFzaGVkIHNvY2tldHMgaW50ZXJhY3Rpbmcgd2l0aCBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cuIEZ1enppbmcgdGhlIG1hcCB1cGRhdGUgZnVuY3Rpb25zIHdpdGggdmFyaW91cyBzb2NrZXQgc3RhdGVzIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM1YjEyYjIxNGNmNzZhYTlkOGNmOGU2MmVhNjIwOGQxYzA2N2VkYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDA2OjI5OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5pbmRleCBjNjBiYTZkMjkyZjlhZS4uOWVmYmQ4Y2E3ZGI4MzIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5AQCAtNTQyLDYgJiM0Mzs1NDIsOCBAQCBzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRpZiAoc2tfaXNfdGNwKHNrKSlcbiBcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xuJiM0MztcdGlmIChza19pc191ZHAoc2spKVxuJiM0MztcdFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XG4gXHRpZiAoc2tfaXNfc3RyZWFtX3VuaXgoc2spKVxuIFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIFJFQURfT05DRShzay1cdTAwM2Vza19zdGF0ZSkpIFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xuIFx0aWYgKHNrX2lzX3Zzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbmluZGV4IGNiMzIyOTcxMWY5M2EzLi4yZDIyYTkwNThhOGU5MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5AQCAtODUzLDcgJiM0Mzs4NTMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfbWFueV9zb2NrZXQodm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XG4mIzQzO1x0dWRwID0gc29ja2V0X2xvb3BiYWNrKEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLKTtcbiBcdGlmICh1ZHAgXHUwMDNjIDApIHtcbiBcdFx0Y2xvc2UoZGdyYW0pO1xuIFx0XHRjbG9zZSh0Y3ApO1xuQEAgLTkyMiw3ICYjNDM7OTIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX21hbnlfbWFwcyh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHR1ZHAgPSB4c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLLCAwKTtcbiYjNDM7XHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xuIFx0aWYgKHVkcCBcdTAwM2MgMCkge1xuIFx0XHRjbG9zZShkZ3JhbSk7XG4gXHRcdGNsb3NlKHRjcCk7XG5AQCAtOTkzLDcgJiM0Mzs5OTMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc2FtZV9zb2NrKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHVkcCA9IHhzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApO1xuJiM0MztcdHVkcCA9IHNvY2tldF9sb29wYmFjayhBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSyk7XG4gXHRpZiAodWRwIFx1MDAzYyAwKSB7XG4gXHRcdGNsb3NlKGRncmFtKTtcbiBcdFx0Y2xvc2UodGNwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xuaW5kZXggY2MwYzY4YmFiOTA3OTYuLmI4NzExOGFhYjdjNGEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xuQEAgLTUzLDggJiM0Mzs1Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXG4gXHRcdFx0ICAgICAgIGludCBmYW1pbHksIGludCBzb3R5cGUsIGludCBtYXBmZClcbiB7XG4gXHR1MzIga2V5ID0gMDtcbi1cdHU2NCB2YWx1ZTtcbiBcdGludCBlcnIsIHM7XG4mIzQzO1x0dTY0IHZhbHVlO1xuIFxuIFx0cyA9IHhzb2NrZXQoZmFtaWx5LCBzb3R5cGUsIDApO1xuIFx0aWYgKHMgPT0gLTEpXG5AQCAtNjMsMTEgJiM0Mzs2Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXG4gXHRlcnJubyA9IDA7XG4gXHR2YWx1ZSA9IHM7XG4gXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcGZkLCBcdTAwMjZrZXksIFx1MDAyNnZhbHVlLCBCUEZfTk9FWElTVCk7XG4tXHRpZiAoc290eXBlID09IFNPQ0tfU1RSRUFNKSB7XG4tXHRcdGlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXG4tXHRcdFx0RkFJTF9FUlJOTyhcJiMzNDttYXBfdXBkYXRlOiBleHBlY3RlZCBFT1BOT1RTVVBQXCYjMzQ7KTtcbi1cdH0gZWxzZSBpZiAoZXJyKVxuLVx0XHRGQUlMX0VSUk5PKFwmIzM0O21hcF91cGRhdGU6IGV4cGVjdGVkIHN1Y2Nlc3NcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUlIoZXJyLCBcJiMzNDttYXBfdXBkYXRlXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFAsIFwmIzM0O2Vycm5vXCYjMzQ7KTtcbiBcdHhjbG9zZShzKTtcbiB9XG4gXG5AQCAtNzcsOCAmIzQzOzc0LDggQEAgc3RhdGljIHZvaWQgdGVzdF9pbnNlcnRfYm91bmQoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwgX19hbHdheXNfdW51c2VkLFxuIFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjtcbiBcdHNvY2tsZW5fdCBsZW4gPSAwO1xuIFx0dTMyIGtleSA9IDA7XG4tXHR1NjQgdmFsdWU7XG4gXHRpbnQgZXJyLCBzO1xuJiM0MztcdHU2NCB2YWx1ZTtcbiBcbiBcdGluaXRfYWRkcl9sb29wYmFjayhmYW1pbHksIFx1MDAyNmFkZHIsIFx1MDAyNmxlbik7XG4gXG5AQCAtOTMsOCAmIzQzOzkwLDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X2JvdW5kKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsIF9fYWx3YXlzX3VudXNlZCxcbiBcdGVycm5vID0gMDtcbiBcdHZhbHVlID0gcztcbiBcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwZmQsIFx1MDAyNmtleSwgXHUwMDI2dmFsdWUsIEJQRl9OT0VYSVNUKTtcbi1cdGlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXG4tXHRcdEZBSUxfRVJSTk8oXCYjMzQ7bWFwX3VwZGF0ZTogZXhwZWN0ZWQgRU9QTk9UU1VQUFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHNvdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuJiM0MztcdFx0QVNTRVJUX0VSUihlcnIsIFwmIzM0O21hcF91cGRhdGVcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQLCBcJiMzNDtlcnJub1wmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIGlmIChlcnIpIHtcbiYjNDM7XHRcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O21hcF91cGRhdGVcJiMzNDspO1xuJiM0MztcdH1cbiBjbG9zZTpcbiBcdHhjbG9zZShzKTtcbiB9XG5AQCAtMTI4OSw3ICYjNDM7MTI5MCw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfb3BzKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHQvKiBpbnNlcnQgKi9cbiBcdFx0VEVTVCh0ZXN0X2luc2VydF9pbnZhbGlkKSxcbiBcdFx0VEVTVCh0ZXN0X2luc2VydF9vcGVuZWQpLFxuLVx0XHRURVNUKHRlc3RfaW5zZXJ0X2JvdW5kLCBTT0NLX1NUUkVBTSksXG4mIzQzO1x0XHRURVNUKHRlc3RfaW5zZXJ0X2JvdW5kKSxcbiBcdFx0VEVTVCh0ZXN0X2luc2VydCksXG4gXHRcdC8qIGRlbGV0ZSAqL1xuIFx0XHRURVNUKHRlc3RfZGVsZXRlX2FmdGVyX2luc2VydCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jXG5pbmRleCBjMzJkYTdiZDhiZTI3Ni4uNmEyNjQxZWU3ODk3NTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuY1xuQEAgLTc1OSwxNiAmIzQzOzc1OSwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXAodW5zaWduZWQgaW50IHRhc2tzLCB2b2lkICpkYXRhKVxuIFx0XHRnb3RvIG91dF9zb2NrbWFwO1xuIFx0fVxuIFxuLVx0LyogVGVzdCB1cGRhdGUgd2l0aCB1bnN1cHBvcnRlZCBVRFAgc29ja2V0ICovXG4mIzQzO1x0LyogVGVzdCB1cGRhdGUgd2l0aCB1bnN1cHBvcnRlZCB1bmJvdW5kIFVEUCBzb2NrZXQgKi9cbiBcdHVkcCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTtcbi1cdGkgPSAwO1xuLVx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShmZCwgXHUwMDI2aSwgXHUwMDI2dWRwLCBCUEZfQU5ZKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0cHJpbnRmKFwmIzM0O0ZhaWxlZCBzb2NrZXQgdXBkYXRlIFNPQ0tfREdSQU0gJiMzOTslaTolaSYjMzk7XFxuXCYjMzQ7LFxuLVx0XHQgICAgICAgaSwgdWRwKTtcbiYjNDM7XHRDSEVDSyh1ZHAgXHUwMDNjIDAsIFwmIzM0O3NvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKVwmIzM0OywgXCYjMzQ7ZXJybm86JWRcXG5cJiMzNDssIGVycm5vKTtcbiYjNDM7XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCBcdTAwMjYoaW50KXswfSwgXHUwMDI2dWRwLCBCUEZfQU5ZKTtcbiYjNDM7XHRjbG9zZSh1ZHApO1xuJiM0MztcdGlmICghZXJyKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7VW5leHBlY3RlZGx5IHN1Y2NlZWRlZCB1bmJvdW5kIFVEUCB1cGRhdGUgJiMzOTswOiVpJiMzOTtcXG5cJiMzNDssIHVkcCk7XG4gXHRcdGdvdG8gb3V0X3NvY2ttYXA7XG4gXHR9XG4tXHRjbG9zZSh1ZHApO1xuIFxuIFx0LyogVGVzdCB1cGRhdGUgd2l0aG91dCBwcm9ncmFtcyAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNjsgaSYjNDM7JiM0MzspIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHNvY2ttYXAgbG9naWMgdG8gcmVqZWN0IHVuYm91bmQgVURQIHNvY2tldHMgZnJvbSBiZWluZyBhZGRlZCB0byBhIHNvY2ttYXAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGJ1Z3Mgb3IgY3Jhc2hlcyBjYXVzZWQgYnkgdW5pbml0aWFsaXplZCBvciB1bmhhc2hlZCBzb2NrZXRzIGludGVyYWN0aW5nIHdpdGggQlBGIHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93LiBGdXp6aW5nIHRoZSBtYXAgdXBkYXRlIGZ1bmN0aW9ucyB3aXRoIHZhcmlvdXMgc29ja2V0IHN0YXRlcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM1YjEyYjIxNGNmNzZhYTlkOGNmOGU2MmVhNjIwOGQxYzA2N2VkYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDA2OjI5OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKaW5kZXggYzYwYmE2ZDI5MmY5YWUuLjllZmJkOGNhN2RiODMyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKQEAgLTU0Miw2ICYjNDM7NTQyLDggQEAgc3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaWYgKHNrX2lzX3RjcChzaykpCiAJCXJldHVybiAoMSAmbHQ7Jmx0OyBzay0mZ3Q7c2tfc3RhdGUpICZhbXA7IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pOwomIzQzOwlpZiAoc2tfaXNfdWRwKHNrKSkKJiM0MzsJCXJldHVybiBza19oYXNoZWQoc2spOwogCWlmIChza19pc19zdHJlYW1fdW5peChzaykpCiAJCXJldHVybiAoMSAmbHQ7Jmx0OyBSRUFEX09OQ0Uoc2stJmd0O3NrX3N0YXRlKSkgJmFtcDsgVENQRl9FU1RBQkxJU0hFRDsKIAlpZiAoc2tfaXNfdnNvY2soc2spICZhbXA7JmFtcDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwppbmRleCBjYjMyMjk3MTFmOTNhMy4uMmQyMmE5MDU4YThlOTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMKQEAgLTg1Myw3ICYjNDM7ODUzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX21hbnlfc29ja2V0KHZvaWQpCiAJCXJldHVybjsKIAl9CiAKLQl1ZHAgPSB4c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLLCAwKTsKJiM0MzsJdWRwID0gc29ja2V0X2xvb3BiYWNrKEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLKTsKIAlpZiAodWRwICZsdDsgMCkgewogCQljbG9zZShkZ3JhbSk7CiAJCWNsb3NlKHRjcCk7CkBAIC05MjIsNyAmIzQzOzkyMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tYW55X21hcHModm9pZCkKIAkJcmV0dXJuOwogCX0KIAotCXVkcCA9IHhzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApOwomIzQzOwl1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spOwogCWlmICh1ZHAgJmx0OyAwKSB7CiAJCWNsb3NlKGRncmFtKTsKIAkJY2xvc2UodGNwKTsKQEAgLTk5Myw3ICYjNDM7OTkzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3NhbWVfc29jayh2b2lkKQogCQlyZXR1cm47CiAJfQogCi0JdWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7CiYjNDM7CXVkcCA9IHNvY2tldF9sb29wYmFjayhBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSyk7CiAJaWYgKHVkcCAmbHQ7IDApIHsKIAkJY2xvc2UoZGdyYW0pOwogCQljbG9zZSh0Y3ApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMKaW5kZXggY2MwYzY4YmFiOTA3OTYuLmI4NzExOGFhYjdjNGEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmMKQEAgLTUzLDggJiM0Mzs1Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsCiAJCQkgICAgICAgaW50IGZhbWlseSwgaW50IHNvdHlwZSwgaW50IG1hcGZkKQogewogCXUzMiBrZXkgPSAwOwotCXU2NCB2YWx1ZTsKIAlpbnQgZXJyLCBzOwomIzQzOwl1NjQgdmFsdWU7CiAKIAlzID0geHNvY2tldChmYW1pbHksIHNvdHlwZSwgMCk7CiAJaWYgKHMgPT0gLTEpCkBAIC02MywxMSAmIzQzOzYzLDggQEAgc3RhdGljIHZvaWQgdGVzdF9pbnNlcnRfb3BlbmVkKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsIF9fYWx3YXlzX3VudXNlZCwKIAllcnJubyA9IDA7CiAJdmFsdWUgPSBzOwogCWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwZmQsICZhbXA7a2V5LCAmYW1wO3ZhbHVlLCBCUEZfTk9FWElTVCk7Ci0JaWYgKHNvdHlwZSA9PSBTT0NLX1NUUkVBTSkgewotCQlpZiAoIWVyciB8fCBlcnJubyAhPSBFT1BOT1RTVVBQKQotCQkJRkFJTF9FUlJOTygmIzM0O21hcF91cGRhdGU6IGV4cGVjdGVkIEVPUE5PVFNVUFAmIzM0Oyk7Ci0JfSBlbHNlIGlmIChlcnIpCi0JCUZBSUxfRVJSTk8oJiMzNDttYXBfdXBkYXRlOiBleHBlY3RlZCBzdWNjZXNzJiMzNDspOwomIzQzOwlBU1NFUlRfRVJSKGVyciwgJiMzNDttYXBfdXBkYXRlJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFAsICYjMzQ7ZXJybm8mIzM0Oyk7CiAJeGNsb3NlKHMpOwogfQogCkBAIC03Nyw4ICYjNDM7NzQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsCiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKIAlzb2NrbGVuX3QgbGVuID0gMDsKIAl1MzIga2V5ID0gMDsKLQl1NjQgdmFsdWU7CiAJaW50IGVyciwgczsKJiM0MzsJdTY0IHZhbHVlOwogCiAJaW5pdF9hZGRyX2xvb3BiYWNrKGZhbWlseSwgJmFtcDthZGRyLCAmYW1wO2xlbik7CiAKQEAgLTkzLDggJiM0Mzs5MCwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsCiAJZXJybm8gPSAwOwogCXZhbHVlID0gczsKIAllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcGZkLCAmYW1wO2tleSwgJmFtcDt2YWx1ZSwgQlBGX05PRVhJU1QpOwotCWlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApCi0JCUZBSUxfRVJSTk8oJiMzNDttYXBfdXBkYXRlOiBleHBlY3RlZCBFT1BOT1RTVVBQJiMzNDspOwomIzQzOwlpZiAoc290eXBlID09IFNPQ0tfU1RSRUFNKSB7CiYjNDM7CQlBU1NFUlRfRVJSKGVyciwgJiMzNDttYXBfdXBkYXRlJiMzNDspOwomIzQzOwkJQVNTRVJUX0VRKGVycm5vLCBFT1BOT1RTVVBQLCAmIzM0O2Vycm5vJiMzNDspOwomIzQzOwl9IGVsc2UgaWYgKGVycikgewomIzQzOwkJQVNTRVJUX09LKGVyciwgJiMzNDttYXBfdXBkYXRlJiMzNDspOwomIzQzOwl9CiBjbG9zZToKIAl4Y2xvc2Uocyk7CiB9CkBAIC0xMjg5LDcgJiM0MzsxMjkwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9vcHMoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsIHN0cnVjdCBicGZfbWFwICptYXAsCiAJCS8qIGluc2VydCAqLwogCQlURVNUKHRlc3RfaW5zZXJ0X2ludmFsaWQpLAogCQlURVNUKHRlc3RfaW5zZXJ0X29wZW5lZCksCi0JCVRFU1QodGVzdF9pbnNlcnRfYm91bmQsIFNPQ0tfU1RSRUFNKSwKJiM0MzsJCVRFU1QodGVzdF9pbnNlcnRfYm91bmQpLAogCQlURVNUKHRlc3RfaW5zZXJ0KSwKIAkJLyogZGVsZXRlICovCiAJCVRFU1QodGVzdF9kZWxldGVfYWZ0ZXJfaW5zZXJ0KSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYwppbmRleCBjMzJkYTdiZDhiZTI3Ni4uNmEyNjQxZWU3ODk3NTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMKQEAgLTc1OSwxNiAmIzQzOzc1OSwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXAodW5zaWduZWQgaW50IHRhc2tzLCB2b2lkICpkYXRhKQogCQlnb3RvIG91dF9zb2NrbWFwOwogCX0KIAotCS8qIFRlc3QgdXBkYXRlIHdpdGggdW5zdXBwb3J0ZWQgVURQIHNvY2tldCAqLwomIzQzOwkvKiBUZXN0IHVwZGF0ZSB3aXRoIHVuc3VwcG9ydGVkIHVuYm91bmQgVURQIHNvY2tldCAqLwogCXVkcCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKLQlpID0gMDsKLQllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCAmYW1wO2ksICZhbXA7dWRwLCBCUEZfQU5ZKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ZigmIzM0O0ZhaWxlZCBzb2NrZXQgdXBkYXRlIFNPQ0tfREdSQU0gJiMzOTslaTolaSYjMzk7XG4mIzM0OywKLQkJICAgICAgIGksIHVkcCk7CiYjNDM7CUNIRUNLKHVkcCAmbHQ7IDAsICYjMzQ7c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pJiMzNDssICYjMzQ7ZXJybm86JWRcbiYjMzQ7LCBlcnJubyk7CiYjNDM7CWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0oZmQsICZhbXA7KGludCl7MH0sICZhbXA7dWRwLCBCUEZfQU5ZKTsKJiM0MzsJY2xvc2UodWRwKTsKJiM0MzsJaWYgKCFlcnIpIHsKJiM0MzsJCXByaW50ZigmIzM0O1VuZXhwZWN0ZWRseSBzdWNjZWVkZWQgdW5ib3VuZCBVRFAgdXBkYXRlICYjMzk7MDolaSYjMzk7XG4mIzM0OywgdWRwKTsKIAkJZ290byBvdXRfc29ja21hcDsKIAl9Ci0JY2xvc2UodWRwKTsKIAogCS8qIFRlc3QgdXBkYXRlIHdpdGhvdXQgcHJvZ3JhbXMgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgNjsgaSYjNDM7JiM0MzspIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzOQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNvY2ttYXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgc29tZSBhc3NvY2lhdGVkIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQgZXhwbGljaXQgaGFuZGxpbmcgZm9yIFVEUCBzb2NrZXRzLiBCZWZvcmUsIGl0IGxvb2tzIGxpa2UgVURQIHNvY2tldHMgd2VyZSBpbXBsaWNpdGx5ICpkaXNhbGxvd2VkKiBiZWNhdXNlIHRoZXkgd2VyZW4mIzM5O3QgZXhwbGljaXRseSBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24uIElmIGl0IHdhc24mIzM5O3QgVENQLCBzdHJlYW0gVW5peCBzb2NrZXRzIG9yIHZzb2NrIGl0IHdvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdCBvZiByZXR1cm5pbmcgZmFsc2UuCgpOb3csIHdpdGggdGhpcyBuZXcgY29kZSwgYSBVRFAgc29ja2V0IGlzIGFsbG93ZWQgaW4gdGhlIHNvY2ttYXAgaWYgaXQmIzM5O3MgaGFzaGVkLCBpbmRpY2F0ZWQgYnkgYHNrX2hhc2hlZChzaylgLiBUaGlzIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIHdhbnRpbmcgdG8gYWRkIGEgVURQIHNvY2tldCB0byBhIHNvY2ttYXA7IHR5cGljYWxseSwgeW91JiMzOTtkIG9ubHkgd2FudCB0byB0cmFjayBzb2NrZXRzIHRoYXQgYXJlIGFjdGl2ZWx5IHBhcnRpY2lwYXRpbmcgaW4gY29tbXVuaWNhdGlvbi4gSGFzaGluZyBpbXBsaWVzIHRoYXQgdGhlIHNvY2tldCBpcyBib3VuZCBhbmQgbGlrZWx5IHJlY2VpdmluZyB0cmFmZmljLiBJIHNob3VsZCBjb25maXJtIHRoYXQgYHNrX2hhc2hlZGAgbWVhbnMgd2hhdCBJIHRoaW5rIGl0IG1lYW5zIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gaW4gdGhlIGtlcm5lbCBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuIFRoaXMgYXBwcm9hY2ggc2VlbXMgcmVhc29uYWJsZS4gTGV0IG1lIHB1bGwgdXAgdGhlIHJlbGV2YW50IGNvZGUgYW5kIGNvbmZpcm0gdGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIHRoaXMgd2FzbiYjMzk7dCBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTUzNj1zdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NDAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjU0MTpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQyLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1OD1pbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXHRzb2NrX21hcF9za19hY3F1aXJlKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg3Olx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTg4LVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU5OT1zdGF0aWMgbG9uZyBzb2NrX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MTItXHRiaF9sb2NrX3NvY2soc2spO1xubmV0L2NvcmUvc29ja19tYXAuYzo2MTM6XHRpZiAoIXNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoc2spKVxubmV0L2NvcmUvc29ja19tYXAuYy02MTQtXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgbWFrZSBhbnkganVkZ2VtZW50cyBvciBkcmF3IGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uLCBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAuIEkgbmVlZCB0byBzZWUgKmV2ZXJ5dGhpbmcqLiBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0JiMzOTtzIHRoZSBjb3JlIGxvZ2ljPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGV4aXQgcGF0aHMgYW5kIGVycm9yIGNvbmRpdGlvbnM/IFdpdGhvdXQgdGhhdCBob2xpc3RpYyB2aWV3LCBJJiMzOTttIGp1c3Qgc2hvb3RpbmcgaW4gdGhlIGRhcmsuIFNvLCBsZXQmIzM5O3MgZ2V0IHRoZSB3aG9sZSBkZWZpbml0aW9uLCBhbmQgdGhlbiB3ZSYjMzk7bGwgc3RhcnQgcGlja2luZyBpdCBhcGFydCBwaWVjZSBieSBwaWVjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0MDpcdFxuIDU0MTpcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDU0MjpcdHtcbiA1NDM6XHRcdGlmIChza19pc190Y3Aoc2spKVxuIDU0NDpcdFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgKFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0xJU1RFTik7XG4gNTQ1Olx0XHRpZiAoc2tfaXNfdWRwKHNrKSlcbiA1NDY6XHRcdFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XG4gNTQ3Olx0XHRpZiAoc2tfaXNfc3RyZWFtX3VuaXgoc2spKVxuIDU0ODpcdFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIFJFQURfT05DRShzay1cdTAwM2Vza19zdGF0ZSkpIFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xuIDU0OTpcdFx0aWYgKHNrX2lzX3Zzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbiA1NTA6XHRcdCAgICAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSB8fCBzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSlcbiA1NTE6XHRcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IFRDUEZfRVNUQUJMSVNIRUQ7XG4gNTUyOlx0XHRyZXR1cm4gdHJ1ZTtcbiA1NTM6XHR9XG4gNTU0Olx0XG4gNTU1Olx0c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gNTU2Olx0XHRcdFx0XHQgICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncyk7XG4gNTU3Olx0XG4gNTU4Olx0aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIDU1OTpcdFx0XHRcdCAgICAgdTY0IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNvY2tldCBMb2dpYyoqCgpSaWdodCwgc28gdGhlIGNvZGUmIzM5O3MgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBzaW1wbHkgYHJldHVybiB0cnVlO2AuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd29uZGVyLi4uIGlmIHRoYXQmIzM5O3MgdGhlIGJhc2UgY2FzZSwgd2hhdCB3YXMgaGFwcGVuaW5nIHdpdGggVURQIHNvY2tldHMgYmVmb3JlPyBBIHNpbXBsZSAmIzM0O3RydWUmIzM0OyByZXR1cm4gd291bGQgaGF2ZSBwZXJtaXR0ZWQgVURQIHNvY2tldHMgcmVnYXJkbGVzcyBvZiB0aGVpciBzdGF0ZSBvciBhbnkgb3RoZXIgc3BlY2lmaWMgY3JpdGVyaWEuIFRoYXQgc2VlbXMgbGlrZSBhIHByZXR0eSBicm9hZCBhbGxvd2FuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgd2FzIHNwZWNpZmljYWxseSBhbGxvd2luZyBvciBkaXNhbGxvd2luZyBzb2NrZXRzLgoKSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY2hlY2tzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBzb2NrX21hcF9za19pc19zdWl0YWJsZWAsIGJ1dCBJIHNob3VsZCBicm9hZGVuIHRoZSBzZWFyY2ggdG8gb3RoZXIgZnVuY3Rpb25zIGFuZCBjaGVja3MgbmVhcmJ5LiBJdCBjb3VsZCBiZSB0aGF0IHNvbWV0aGluZyBlbHNlIGluIHRoZSBsb2dpYyB3YXMgc2lsZW50bHkgb3ZlcnJ1bGluZyB0aGF0IGRlZmF1bHQsIG9yIHByb3ZpZGluZyBjb250ZXh0IHRvIHRoZSBgcmV0dXJuIHRydWU7YC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2lzX3VkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zb2NrLmg9Mjk2NT1zdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfdGNwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMjk3MS1cbmluY2x1ZGUvbmV0L3NvY2suaDoyOTcyOnN0YXRpYyBpbmxpbmUgYm9vbCBza19pc191ZHAoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvc29jay5oLTI5NzMte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExODE0PUJQRl9DQUxMXzMoYnBmX3NrX2xvb2t1cF9hc3NpZ24sIHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4gKiwgY3R4LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODIzLVx0XHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsgLyogb25seSBhY2NlcHQgVENQIHNvY2tldCBpbiBMSVNURU4gKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjExODI0Olx0aWYgKHVubGlrZWx5KHNrIFx1MDAyNlx1MDAyNiBza19pc191ZHAoc2spIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0UpKVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MjUtXHRcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUOyAvKiBvbmx5IGFjY2VwdCBVRFAgc29ja2V0IGluIENMT1NFICovXG4tLVxubmV0L2NvcmUvc29jay5jPTQ0NjM9Ym9vbCBza19idXN5X2xvb3BfZW5kKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSlcbi0tXG5uZXQvY29yZS9zb2NrLmMtNDQ2OS1cbm5ldC9jb3JlL3NvY2suYzo0NDcwOlx0aWYgKHNrX2lzX3VkcChzaykgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9zb2NrLmMtNDQ3MS1cdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnVkcF9zayhzayktXHUwMDNlcmVhZGVyX3F1ZXVlKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU0MT1zdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0NC1cdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xubmV0L2NvcmUvc29ja19tYXAuYzo1NDU6XHRpZiAoc2tfaXNfdWRwKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQ2LVx0XHRyZXR1cm4gc2tfaGFzaGVkKHNrKTtcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zMDE9c3RhdGljIGludCBob29rX3NvY2tldF9iaW5kKHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzA3LVx0XHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQklORF9UQ1A7XG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYzozMDg6XHRlbHNlIGlmIChza19pc191ZHAoc29jay1cdTAwM2VzaykpXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMDktXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9CSU5EX1VEUDtcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zMTc9c3RhdGljIGludCBob29rX3NvY2tldF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzI1LVx0XHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQ09OTkVDVF9UQ1A7XG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYzozMjY6XHRlbHNlIGlmIChza19pc191ZHAoc29jay1cdTAwM2VzaykpXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMjctXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9DT05ORUNUX1NFTkRfVURQO1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMzNy1cdCAqL1xuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzM4Olx0aWYgKHJldCA9PSAwIFx1MDAyNlx1MDAyNiBza19pc191ZHAoc29jay1cdTAwM2VzaykgXHUwMDI2XHUwMDI2XG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMzktXHQgICAgYWRkcmxlbiBcdTAwM2U9IG9mZnNldG9mZW5kKHR5cGVvZigqYWRkcmVzcyksIHNhX2ZhbWlseSkgXHUwMDI2XHUwMDI2XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM9MzQ2PXN0YXRpYyBpbnQgaG9va19zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpjb25zdCBzb2NrLFxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTM1My1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjM1NDpcdGlmIChza19pc191ZHAoc29jay1cdTAwM2VzaykpXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zNTUtXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9DT05ORUNUX1NFTkRfVURQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFAgU29ja2V0IFJlc3RyaWN0aW9uIGluIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGlmIHRoZSBvcmlnaW5hbCBiZWhhdmlvciBkZWZhdWx0ZWQgdG8gYHJldHVybiB0cnVlO2AsIHRoYXQgbWVhbnQgKnVuYm91bmQqIFVEUCBzb2NrZXRzIHdlcmUgcHJldmlvdXNseSBhbGxvd2VkIGluIHRoaXMgc2NlbmFyaW8/JiMzNDsgSW50ZXJlc3RpbmcuLi4KCk5vdyB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIHNwZWNpZmljIGNoZWNrOgoKYGBgYwoJaWYgKHNrX2lzX3VkcChzaykpCgkJcmV0dXJuIHNrX2hhc2hlZChzayk7CmBgYAoKVGhpcyAqZXhwbGljaXRseSogcmVzdHJpY3RzIFVEUCBzb2NrZXRzIHRvIG9ubHkgdGhvc2UgdGhhdCBhcmUgaGFzaGVkIOKAkyBtZWFuaW5nLCBib3VuZCB0byBhbiBhZGRyZXNzIGFuZCBwb3J0LCBjb3JyZWN0PyBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGxpbWl0aW5nIHRoZSBmbGV4aWJpbGl0eSBpbiBob3cgVURQIHNvY2tldHMgYXJlIGhhbmRsZWQuCgpUaGUgc2VsZnRlc3QgY2hhbmdlcyBhcmUgd2hlcmUgaXQgYmVjb21lcyBjbGVhcmVyLiBUaGV5IGFyZSBkZXNpZ25lZCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgY2hhbmdlLiBCZWZvcmUgaXQgbG9va3MgbGlrZSB0aGUgdGVzdCBleHBlY3RlZCB0aGF0IHVwZGF0aW5nIHdpdGggYW4gdW5zdXBwb3J0ZWQgVURQIHNvY2tldCB3b3VsZCBmYWlsLiBOb3csIHRoZSBjb21tZW50IHNwZWNpZmljYWxseSBzYXlzIGl0JiMzOTtzIHRlc3Rpbmcgd2l0aCBhbiAmIzM0O3VuYm91bmQgVURQIHNvY2tldCYjMzQ7LiBUaGUgdGVzdCBub3cgY3JlYXRlcyBhIFVEUCBzb2NrZXQsIGF0dGVtcHRzIHRoZSBtYXAgdXBkYXRlLCBjbG9zZXMgdGhlIHNvY2tldCBhbmQgY2hlY2tzIGZvciBhbiBlcnJvci4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgYENIRUNLKHVkcCAmbHQ7IDAsICYjMzQ7c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pJiMzNDssICYjMzQ7ZXJybm86JWRcbiYjMzQ7LCBlcnJubyk7YCBsaW5lLCBhbmQgdGhlIHN1YnNlcXVlbnQgZXJyb3IgY2hlY2tpbmcgaW4gdGhlIGBpZiAoIWVycilgIHN0YXRlbWVudC4gSXQgKmV4cGVjdHMqIGFuIGVycm9yLCBidXQgaWYgdGhlIHVwZGF0ZSB1bmV4cGVjdGVkbHkgc3VjY2VlZHMsIGl0IHRocm93cyBhbiBlcnJvci4KCkJ1dCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgZnV6enkuIElmIHRoZSAqb2xkKiB0ZXN0IGFscmVhZHkgZXhwZWN0ZWQgZmFpbHVyZSAoYXMgaW5kaWNhdGVkIGJ5IHRoZSAmIzM0O3Vuc3VwcG9ydGVkIFVEUCBzb2NrZXQmIzM0OyBjb21tZW50KSwgdGhlbiAqd2h5KiBkaWQgaXQgZmFpbCAqYmVmb3JlKiB0aGUgcGF0Y2g/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gRGlkIHRoZSBvbGRlciBpbXBsZW1lbnRhdGlvbiBoYXZlIHNvbWUgdW5pbnRlbmRlZCBiZWhhdmlvcj8KCkkgbmVlZCB0byBkaWcgaW50byBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBvciBtYXliZSBgc29ja19tYXBfc2tfaXNfc3VpdGFibGVgIHRvIHNlZSB3aGF0IGV4YWN0bHkgd2FzIGdvaW5nIG9uICpiZWZvcmUqIHRoaXMgcmVzdHJpY3Rpb24gd2FzIGludHJvZHVjZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgd2FzIHByZXZlbnRpbmcgYW4gdW5ib3VuZCBVRFAgc29ja2V0IGZyb20gYmVpbmcgJiMzNDtzdWl0YWJsZSYjMzQ7IGluIHRoZSBmaXJzdCBwbGFjZSwgb3IgaWYgc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgd2FzIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRcbiA1MjE6XHRzdGF0aWMgYm9vbCBzb2NrX21hcF9vcF9va2F5KGNvbnN0IHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqb3BzKVxuIDUyMjpcdHtcbiA1MjM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX1BBU1NJVkVfRVNUQUJMSVNIRURfQ0IgfHxcbiA1MjQ6XHRcdCAgICAgICBvcHMtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQiB8fFxuIDUyNTpcdFx0ICAgICAgIG9wcy1cdTAwM2VvcCA9PSBCUEZfU09DS19PUFNfVENQX0xJU1RFTl9DQjtcbiA1MjY6XHR9XG4gNTI3Olx0XG4gNTI4Olx0c3RhdGljIGJvb2wgc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gNTI5Olx0e1xuIDUzMDpcdFx0aWYgKHNrX2lzX3RjcChzaykpXG4gNTMxOlx0XHRcdHJldHVybiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOO1xuIDUzMjpcdFx0ZWxzZVxuIDUzMzpcdFx0XHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3N0YXRlKSA9PSBUQ1BfRVNUQUJMSVNIRUQ7XG4gNTM0Olx0fVxuIDUzNTpcdFxuIDUzNjpcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiA1Mzc6XHR7XG4gNTM4Olx0XHRyZXR1cm4gISFzay1cdTAwM2Vza19wcm90LVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90O1xuIDUzOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUxMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJhdmVsaW5nIHRoZSBVRFAgU29ja21hcCBNeXN0ZXJ5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgc29ja19tYXBfc2tfaXNfc3VpdGFibGVgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggVURQIHNvY2tldHMuIEkgc2VlIHRoYXQgaXQgY2hlY2tzIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7cHNvY2tfdXBkYXRlX3NrX3Byb3RgLCBhbmQgZm9yIFVEUCwgdGhhdCBmdW5jdGlvbiBpcyBpbmRlZWQgc2V0LiBUaGF0JiMzOTtzIGdvb2QsIHNlZW1zIGxpa2UgdGhlIHBpZWNlcyBhcmUgaW4gcGxhY2UuIEJ1dCB3YWl0LCBzb21ldGhpbmcmIzM5O3Mgbm90IGFkZGluZyB1cC4gSSByZW1lbWJlciBzZWVpbmcgYSBjb21tZW50IGluIGFuIG9sZCBzZWxmdGVzdCBhYm91dCAmIzM0O3Vuc3VwcG9ydGVkIFVEUCBzb2NrZXQmIzM0OyBhbmQgdGhhdCYjMzk7cyB0aHJvd2luZyBtZSBvZmYuIElmIGBwc29ja191cGRhdGVfc2tfcHJvdGAgaXMgcHJlc2VudCwgd2h5IHdhcyBVRFAgY29uc2lkZXJlZCB1bnN1cHBvcnRlZCBhdCBzb21lIHBvaW50PwoKTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IG9sZCBzZWxmdGVzdCBjb2RlLi4uIEFoYSEgSXQgdXNlZCB0byB0cnkgYWRkaW5nIGEgVURQIHNvY2tldCBsaWtlIHRoaXM6IGBlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCAmYW1wO2ksICZhbXA7dWRwLCBCUEZfQU5ZKTtgIGFuZCAqZXhwZWN0ZWQqIGl0IHRvIHN1Y2NlZWQhIFRoZSBjb2RlIGV4cGxpY2l0bHkgY2hlY2tlZCBgaWYgKGVycikgeyBwcmludGYoJiMzNDtGYWlsZWQgc29ja2V0IHVwZGF0ZS4uLiYjMzQ7KTsgZ290byBvdXRfc29ja21hcDsgfWAsIGluZGljYXRpbmcgYSBzdWNjZXNzZnVsIHVwZGF0ZSB3YXMgdGhlIGV4cGVjdGF0aW9uLiBUaGUgY29tbWVudCBzYWlkICYjMzQ7dW5zdXBwb3J0ZWQmIzM0OywgYnV0IHRoZSB0ZXN0IHdhcyBleHBlY3Rpbmcgc3VjY2Vzcz8gVGhpcyBpcyBjb25mdXNpbmcuCgpObywgd2FpdCwgSSYjMzk7bSBtaXNyZWFkaW5nIHRoZSBsb2dpYy4gQSBub24temVybyBgZXJyYCBtZWFudCBpdCAqZmFpbGVkKi4gU28gaXQgKmRpZCogZXhwZWN0IHN1Y2Nlc3Mgb3JpZ2luYWxseSwgd2hpY2ggY29udHJhZGljdHMgdGhlICYjMzQ7dW5zdXBwb3J0ZWQmIzM0OyBjb21tZW50LiBPa2F5LCBJIHRoaW5rIEkmIzM5O20gZm9sbG93aW5nIG5vdy4gTG9va2luZyBhdCB0aGUgcGF0Y2gsIHRoZSB0ZXN0IGhhcyBjaGFuZ2VkLiBOb3csIGl0IGV4cGxpY2l0bHkgKmV4cGVjdHMqIGZhaWx1cmU6IGBpZiAoIWVycikgeyBwcmludGYoJiMzNDtVbmV4cGVjdGVkbHkgc3VjY2VlZGVkIHVuYm91bmQgVURQIHVwZGF0ZSAmIzM5OzA6JWkmIzM5O1xuJiMzNDssIHVkcCk7IGdvdG8gb3V0X3NvY2ttYXA7IH1gLiBTbywgdW5ib3VuZCBVRFAgc29ja2V0cyAqdXNlZCogdG8gYmUgYWRkZWQgc3VjY2Vzc2Z1bGx5LgoKU28sIHByZXZpb3VzbHksIHVuYm91bmQgVURQIHNvY2tldHMgKmNvdWxkKiBiZSBhZGRlZD8gQnV0IHdoeSB3YXMgdGhpcyBjb25zaWRlcmVkIGEgcHJvYmxlbT8gSSYjMzk7bSBndWVzc2luZyB0aGF0IHVuYm91bmQgVURQIHNvY2tldHMsIGJlaW5nIGluIGFuIGluY29tcGxldGUgc3RhdGUgYmVmb3JlIHRoZXkmIzM5O3JlIGZ1bGx5IGluaXRpYWxpemVkIG9yIGhhc2hlZCwgbWlnaHQgY2F1c2UgaXNzdWVzIHdoZW4gQlBGIHByb2dyYW1zIHRyeSB0byBpbnRlcmFjdCB3aXRoIHRoZW0gdGhyb3VnaCB0aGUgc29ja21hcC4gSXQmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yLgoKSSYjMzk7bSBwcmV0dHkgc3VyZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBtZXNzYWdlIG9yIHRoZSBhc3NvY2lhdGVkIGlzc3VlIHRyYWNrZXIgdG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQgb24gKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Mi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTg9aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTg2LVx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjU4NzpcdGlmICghc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OC1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01OTk9c3RhdGljIGxvbmcgc29ja19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjEyLVx0YmhfbG9ja19zb2NrKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjEzOlx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjE0LVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDY2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIFRoaXMgUGF0Y2g/IFllcy4qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYCwgc3BlY2lmaWNhbGx5IGBpZiAoc2tfaXNfdWRwKHNrKSkgcmV0dXJuIHNrX2hhc2hlZChzayk7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIGxpa2UgYSBtaW5vciByZXN0cmljdGlvbiBvbiB0aGUgdHlwZXMgb2YgVURQIHNvY2tldHMgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBzb2NrbWFwLiBJJiMzOTtkIGJlIGxvb2tpbmcgYXQgZnV6emluZyBgYnBmX21hcF91cGRhdGVfZWxlbWAgb24gYSBzb2NrbWFwLCB0YXJnZXRpbmcgYSBVRFAgc29ja2V0LiBCdXQsIGFzIGEgYnVnIGZpeCB0aGF0IHJlc3RyaWN0cyBiZWhhdmlvciwgdGhlIHByaW1hcnkgZ29hbCAqaXNuJiMzOTt0KiB0byB1bmNvdmVyIGJyYW5kIG5ldyBjb2RlIHBhdGhzLCBhbmQgbWF5ICpwcmV2ZW50KiBzb21lIHVuZGVmaW5lZCBiZWhhdmlvci4KClRoZSBwYXRjaCYjMzk7cyBnb2FsIGFwcGVhcnMgdG8gcHJldmVudCBhIGJ1ZyByZWxhdGVkIHRvIHVzaW5nIHVuYm91bmQgVURQIHNvY2tldHMgaW4gYSBzb2NrbWFwLCBwZXJoYXBzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHNpbWlsYXIuIFRoZSBwYXRjaCBpcyAqYWxyZWFkeSogYXBwbGllZCwgc28gYW55IGltbWVkaWF0ZSBidWcgd29uJiMzOTt0IGJlIGV4cG9zZWQgZHVyaW5nIGZ1enppbmcuIEJ1dCB0aGUga2V5IGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyAqbmV3KiBmdW5jdGlvbmFsIGxvZ2ljIHdvcnRoIHRlc3RpbmcuCgpUaGUgYWRkaXRpb24gb2YgYHNrX2hhc2hlZChzaylgIGZvciBVRFAgc29ja2V0cyBzZWVtZWQgc2ltcGxlIG9uIHRoZSBzdXJmYWNlOgoKYGBgYwpzdGF0aWMgaW5saW5lIGludCBza19oYXNoZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQp7CglyZXR1cm4gIXNrX3VuaGFzaGVkKHNrKTsKfQpgYGAKCkl0IGlzIGEgYmFzaWMgc3RhdGUgY2hlY2suIFR5cGljYWxseSwgdGhlc2Ugc2ltcGxlIGNoZWNrc+KAlGBpZiAoIWZvbykgcmV0dXJuIC1FSU5WQUw7YOKAlGRvbiYjMzk7dCBuZWNlc3NhcmlseSBpbnRyb2R1Y2UgY29tcGxleCBmdXp6aW5nIHRhcmdldHMuCgpIb3dldmVyLCB0aGUgYmlnZ2VyIHBpY3R1cmUgaXMgdGhhdCB0aGlzIGNvZGUgbW9kaWZpZXMgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLCB3aGljaCBpcyAqY29yZSogQlBGIHNvY2ttYXAgbG9naWMuIFRoYXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gdGhlIGtlcm5lbCBhbmQgc29tZXRoaW5nIHRoYXQgKmlzKiByZWFjaGFibGUuCgpUaGVuIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEgcmVhbGx5IGNsYXJpZmllcyBpdDoKCiogICBOb3QganVzdCBkb2N1bWVudGF0aW9uLCBsb2dnaW5nLCBvciBjb25zdGFudHMuCiogICBJdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIHVuYm91bmQgVURQIHNvY2tldHMgKHdoaWNoIGNhbiBhbHRlciAqYmVoYXZpb3VyKiksICphbmQqIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIChgbmV0L2NvcmUvc29ja19tYXAuY2ApLgoKVGhlcmVmb3JlLCBldmVuIHRob3VnaCBpdCYjMzk7cyBhIGJ1ZyBmaXgsIGFuZCBkb2VzbiYjMzk7dCBpbmhlcmVudGx5IHVuY292ZXIgbmV3IGNvZGUgcGF0aHMsIGl0ICpkb2VzKiBjaGFuZ2UgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBkb2VzIHdhcnJhbnQgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGZ1bmN0aW9uIGNhbGxzLiBUaGUgcGF0Y2ggdGFyZ2V0cyBhIHN0YXRpYyBmdW5jdGlvbiBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAsIGFuZCBpdCBsb29rcyBsaWtlIHRoYXQgaXMgY2FsbGVkIGJ5IGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgIGFuZCBgc29ja19tYXBfdXBkYXRlX2VsZW1gLiBTbyBub3cgSSB3b3VsZCBiZSBsb29raW5nIGZvciB3aGVyZSAqdGhvc2UqIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0zNjU5PWludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2MDppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NjEtaW50IHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9Mzc0NT1zdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTAtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3NTE6c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTItXHRcdFx0XHRcdCAgIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNTE9c3RhdGljIGludCBicGZfbWFwX3VwZGF0ZV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY0LVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI2NTpcdFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI2Ni1cdH0gZWxzZSBpZiAoSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cdFx0XHQgICAgIHU2NCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MzkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIFNPQ0tNQVAvU09DS0hBU0ggVXBkYXRlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyB0aGUgZmxvdyBvZiBkYXRhIHVwZGF0aW5nIGluIHRoZSBCUEYgd29ybGQsIHNwZWNpZmljYWxseSBhcm91bmQgU09DS01BUCBhbmQgU09DS0hBU0gsIGFuZCBJIHNlZSBhIGNsZWFyIGRpc3RpbmN0aW9uIGluIGhvdyB0aGlzIGhhcHBlbnMgZnJvbSB1c2Vyc3BhY2UgdmVyc3VzIHdpdGhpbiBCUEYgcHJvZ3JhbXMgdGhlbXNlbHZlcy4gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgaXMgdGhlIGtlcm5lbCBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHVwZGF0ZSBhIFNPQ0tNQVAgb3IgU09DS0hBU0guIEl0IHNlZW1zIGl0IGlzIGhvb2tlZCB0byBgYnBmX21hcF91cGRhdGVfdmFsdWVgIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmaWxlLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHN5c2NhbGxzIGFyZSB0aGUgZ2F0ZXdheSBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwuIEkgdW5kZXJzdGFuZCB0aGF0LgoKT24gdGhlIG90aGVyIGhhbmQsIHRoZSBgc29ja19tYXBfdXBkYXRlX2VsZW1gIGZ1bmN0aW9uIGlzIGEgQlBGIGhlbHBlciB0aGF0IEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzIHVzZSB0byB1cGRhdGUgdGhlc2UgbWFwcy4gVGhpcyBkaXN0aW5jdGlvbiBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgaGlnaGxpZ2h0cyB0aGUgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4gVXNlci1zcGFjZSBoYXMgYSBjb250cm9sbGVkIGludGVyZmFjZSB0aHJvdWdoIHN5c2NhbGxzLCB3aGlsZSBCUEYgcHJvZ3JhbXMsIHJ1bm5pbmcgd2l0aGluIHRoZSBCUEYgVk0sIGhhdmUgdGhlaXIgb3duIG9wdGltaXplZCBoZWxwZXJzIGZvciBtYXAgbWFuaXB1bGF0aW9uLiBUaGlzIHNldHVwIHN1Z2dlc3RzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBzZWN1cml0eSwgcGVyZm9ybWFuY2UsIGFuZCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBCUEYgZW52aXJvbm1lbnQuIEkmIzM5O20gbm90aW5nIHRoaXMgaXMgYSBzdGFuZGFyZCBwYXR0ZXJuLCBhbmQgdGhlIGNvZGUgbG9va3MgYXMgaXQgc2hvdWxkIGZvciB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTM2NTk9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpO1xuaW5jbHVkZS9saW51eC9icGYuaDozNjYwOmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY2MS1pbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zNzQ1PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1MC1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1Mi1cdFx0XHRcdFx0ICAgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI1MT1zdGF0aWMgaW50IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjQtXHRcdCAgIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MjY1Olx0XHRyZXR1cm4gc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKG1hcCwga2V5LCB2YWx1ZSwgZmxhZ3MpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY2LVx0fSBlbHNlIGlmIChJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1NT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU4OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU5LVx0XHRcdCAgICAgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk4LVxubmV0L2NvcmUvc29ja19tYXAuYzo1OTk6c3RhdGljIGxvbmcgc29ja19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYy02MDAtXHRcdFx0XHQgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM2LVx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHNvY2tfbWFwX2xvb2t1cF9zeXMsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcdC5tYXBfdXBkYXRlX2VsZW1cdD0gc29ja19tYXBfdXBkYXRlX2VsZW0sXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzOC1cdC5tYXBfZGVsZXRlX2VsZW1cdD0gc29ja19tYXBfZGVsZXRlX2VsZW0sXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQ3PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1MS1cdC5tYXBfZ2V0X25leHRfa2V5XHQ9IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXksXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTI6XHQubWFwX3VwZGF0ZV9lbGVtXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUzLVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX2hhc2hfZGVsZXRlX2VsZW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODgwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEJQRiBTb2NrbWFwIFVwZGF0ZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgaGVyZS4gRGVmaW5pdGVseSwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgYW5kIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgYXJlIHByaW1hcnkgdGFyZ2V0cy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGFjdHVhbGx5IGFzc2lnbmVkIHRvIGBtYXBfdXBkYXRlX2VsZW1gIHdpdGhpbiBib3RoIGBzb2NrX21hcF9vcHNgIGFuZCBgc29ja19oYXNoX29wc2AsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIHRyYWNpbmcgdGhlIGNhbGwgZmxvdy4KCkhtbSwgYW5kIHdoYXQgYWJvdXQgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgPyBUaGF0JiMzOTtzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgYWN0dWFsbHkgKm1vZGlmaWVkKiBhdCBydW50aW1lLCBtYWtpbmcgaXQgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBzdGF0ZSBjaGFuZ2VzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkgdGhpbmsgd2UgbmVlZCB0byBpbmNsdWRlIHRoYXQgaW4gb3VyIHNjb3BlIGFzIHdlbGwuCgpTbywgdG8gYmUgY2xlYXIsIHRoZSBwcmltYXJ5IHN5bWJvbHMgb2YgaW50ZXJlc3QgYXJlOiBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCwgYW5kIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYC4KCk5vdywgcmVnYXJkaW5nIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBmZWF0dXJlLiBUaGlzIGlzIEJQRiBzb2NrbWFwLCByaWdodD8gTGV0JiMzOTtzIGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgb3IgYG5ldC9jb3JlL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0aW5nIHRvIGBzb2NrX21hcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQmIzM5O3MgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhlcmUgaGluZ2VzIGVudGlyZWx5IG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXMgdGhhdCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW1wYWN0aW5nIHRoaXMgc2VjdGlvbiBvZiBjb2RlPyBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBvdGhlcnMuCgpBbHJpZ2h0LCBub3cgdGhhdCBJIGhhdmUgYSBoYW5kbGUgb24gdGhhdCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGFjdHVhbCBpbXBhY3RlZCBjb2RlIGlzLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgY29tYiB0aHJvdWdoIGl0LiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBjb2RlIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQuIFRoaXMgd2lsbCByZXZlYWwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIGlzIGNvbXBpbGVkIGFuZCwgdGhlcmVmb3JlLCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0XHRpZiAoc2tfaXNfdGNwKHNrKSlcbiA1MzE6XHRcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU47XG4gNTMyOlx0XHRlbHNlXG4gNTMzOlx0XHRcdHJldHVybiBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfc3RhdGUpID09IFRDUF9FU1RBQkxJU0hFRDtcbiA1MzQ6XHR9XG4gNTM1Olx0XG4gNTM2Olx0c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDUzNzpcdHtcbiA1Mzg6XHRcdHJldHVybiAhIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Q7XG4gNTM5Olx0fVxuIDU0MDpcdFxuIDU0MTpcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDU0MjpcdHtcbiA1NDM6XHRcdGlmIChza19pc190Y3Aoc2spKVxuIDU0NDpcdFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgKFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0xJU1RFTik7XG4gNTQ1Olx0XHRpZiAoc2tfaXNfdWRwKHNrKSlcbiA1NDY6XHRcdFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XG4gNTQ3Olx0XHRpZiAoc2tfaXNfc3RyZWFtX3VuaXgoc2spKVxuIDU0ODpcdFx0XHRyZXR1cm4gKDEgXHUwMDNjXHUwMDNjIFJFQURfT05DRShzay1cdTAwM2Vza19zdGF0ZSkpIFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xuIDU0OTpcdFx0aWYgKHNrX2lzX3Zzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbiA1NTA6XHRcdCAgICAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSB8fCBzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSlcbiA1NTE6XHRcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IFRDUEZfRVNUQUJMSVNIRUQ7XG4gNTUyOlx0XHRyZXR1cm4gdHJ1ZTtcbiA1NTM6XHR9XG4gNTU0Olx0XG4gNTU1Olx0c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gNTU2Olx0XHRcdFx0XHQgICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncyk7XG4gNTU3Olx0XG4gNTU4Olx0aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIDU1OTpcdFx0XHRcdCAgICAgdTY0IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFVEUCBTb2NrbWFwIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJvdW5kIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYC4gVGhhdCBtZWFucyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSwgaWYgbm90IG9ubHksIGVuYWJsZXIgaGVyZS4gQnV0LCBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCBVRFAuIElzIHRoZXJlIGEgbW9yZSBzcGVjaWZpYyBjb25maWcgZm9yIFVEUCBiZXlvbmQgc29tZXRoaW5nIGxpa2UgYENPTkZJR19JTkVUYCB3aGljaCBpcyBqdXN0IHRvbyBicm9hZD8KCkhhbmcgb24gYSBzZWNvbmTigKYgdGhlIG9iamVjdCBmaWxlLCBgc29ja19tYXAub2AsIGdldHMgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhY3RpdmUuIEhtbSwgdGhhdCYjMzk7cyBwcm9taXNpbmcuIEJ1dCBkb2VzIHRoYXQgbWVhbiBpdCYjMzk7cyBhbGwgSSBuZWVkPyBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYWJvdXQgVURQIHNvY2ttYXAgc3VwcG9ydCwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGZpbGVzIGluIHRoZSBrZXJuZWwuIExldCBtZSBsb29rIGF0IGBuZXQvaXB2NC91ZHBfYnBmLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGZvciBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gVURQIHNwZWNpZmljYWxseS4gVGhhdCBzaG91bGQgY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRvIHRlc3QgVURQIHNvY2ttYXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcF9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9NDk3Mj1GOlx0bmV0L2lwdjQvdGNwX2JwZi5jXG5NQUlOVEFJTkVSUzo0OTczOkY6XHRuZXQvaXB2NC91ZHBfYnBmLmNcbk1BSU5UQUlORVJTLTQ5NzQtRjpcdG5ldC91bml4L3VuaXhfYnBmLmNcbi0tXG5pbmNsdWRlL25ldC91ZHAuaD02NTI9c3RydWN0IHNrX3Bzb2NrO1xuaW5jbHVkZS9uZXQvdWRwLmg6NjUzOmludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSk7XG5pbmNsdWRlL25ldC91ZHAuaC02NTQtI2VuZGlmXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjaXBzb19pcHY0Lm9cbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTEwPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC91ZHAuYy0zMTMxLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3VkcC5jOjMxMzI6XHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXG5uZXQvaXB2NC91ZHAuYy0zMTMzLSNlbmRpZlxuLS1cbm5ldC9pcHY0L3VkcF9icGYuYz0zNz1zdGF0aWMgaW50IHVkcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC91ZHBfYnBmLmMtNjItXG5uZXQvaXB2NC91ZHBfYnBmLmM6NjM6c3RhdGljIGludCB1ZHBfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC91ZHBfYnBmLmMtNjQtXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3VkcF9icGYuYz0xMTk9c3RhdGljIERFRklORV9TUElOTE9DSyh1ZHB2Nl9wcm90X2xvY2spO1xubmV0L2lwdjQvdWRwX2JwZi5jOjEyMDpzdGF0aWMgc3RydWN0IHByb3RvIHVkcF9icGZfcHJvdHNbVURQX0JQRl9OVU1fUFJPVFNdO1xubmV0L2lwdjQvdWRwX2JwZi5jLTEyMS1cbm5ldC9pcHY0L3VkcF9icGYuYzoxMjI6c3RhdGljIGludCB1ZHBfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxubmV0L2lwdjQvdWRwX2JwZi5jLTEyMy17XG4tLVxubmV0L2lwdjQvdWRwX2JwZi5jLTEzNC1cbm5ldC9pcHY0L3VkcF9icGYuYzoxMzU6c3RhdGljIHZvaWQgdWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGNvbnN0IHN0cnVjdCBwcm90byAqYmFzZSlcbm5ldC9pcHY0L3VkcF9icGYuYy0xMzYte1xuLS1cbm5ldC9pcHY0L3VkcF9icGYuYy0xMzgtXHRwcm90LVx1MDAzZWNsb3NlXHRcdD0gc29ja19tYXBfY2xvc2U7XG5uZXQvaXB2NC91ZHBfYnBmLmM6MTM5Olx0cHJvdC1cdTAwM2VyZWN2bXNnXHRcdD0gdWRwX2JwZl9yZWN2bXNnO1xubmV0L2lwdjQvdWRwX2JwZi5jLTE0MC1cdHByb3QtXHUwMDNlc29ja19pc19yZWFkYWJsZVx0PSBza19tc2dfaXNfcmVhZGFibGU7XG5uZXQvaXB2NC91ZHBfYnBmLmM6MTQxOlx0cHJvdC1cdTAwM2Vpb2N0bFx0XHQ9IHVkcF9icGZfaW9jdGw7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQyLX1cbm5ldC9pcHY0L3VkcF9icGYuYy0xNDMtXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTQ0OnN0YXRpYyB2b2lkIHVkcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChzdHJ1Y3QgcHJvdG8gKm9wcylcbm5ldC9pcHY0L3VkcF9icGYuYy0xNDUte1xuLS1cbm5ldC9pcHY0L3VkcF9icGYuYy0xNDgtXHRcdGlmIChsaWtlbHkob3BzICE9IHVkcHY2X3Byb3Rfc2F2ZWQpKSB7XG5uZXQvaXB2NC91ZHBfYnBmLmM6MTQ5Olx0XHRcdHVkcF9icGZfcmVidWlsZF9wcm90b3MoXHUwMDI2dWRwX2JwZl9wcm90c1tVRFBfQlBGX0lQVjZdLCBvcHMpO1xubmV0L2lwdjQvdWRwX2JwZi5jLTE1MC1cdFx0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ1ZHB2Nl9wcm90X3NhdmVkLCBvcHMpO1xuLS1cbm5ldC9pcHY0L3VkcF9icGYuYy0xNTUtXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTU2OnN0YXRpYyBpbnQgX19pbml0IHVkcF9icGZfdjRfYnVpbGRfcHJvdG8odm9pZClcbm5ldC9pcHY0L3VkcF9icGYuYy0xNTcte1xubmV0L2lwdjQvdWRwX2JwZi5jOjE1ODpcdHVkcF9icGZfcmVidWlsZF9wcm90b3MoXHUwMDI2dWRwX2JwZl9wcm90c1tVRFBfQlBGX0lQVjRdLCBcdTAwMjZ1ZHBfcHJvdCk7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTU5LVx0cmV0dXJuIDA7XG5uZXQvaXB2NC91ZHBfYnBmLmMtMTYwLX1cbm5ldC9pcHY0L3VkcF9icGYuYzoxNjE6bGF0ZV9pbml0Y2FsbCh1ZHBfYnBmX3Y0X2J1aWxkX3Byb3RvKTtcbm5ldC9pcHY0L3VkcF9icGYuYy0xNjItXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTYzOmludCB1ZHBfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbm5ldC9pcHY0L3VkcF9icGYuYy0xNjQte1xuLS1cbm5ldC9pcHY0L3VkcF9icGYuYy0xNzMtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxubmV0L2lwdjQvdWRwX2JwZi5jOjE3NDpcdFx0dWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVx1MDAzZXNrX3Byb3RvKTtcbm5ldC9pcHY0L3VkcF9icGYuYy0xNzUtXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTc2Olx0c29ja19yZXBsYWNlX3Byb3RvKHNrLCBcdTAwMjZ1ZHBfYnBmX3Byb3RzW2ZhbWlseV0pO1xubmV0L2lwdjQvdWRwX2JwZi5jLTE3Ny1cdHJldHVybiAwO1xubmV0L2lwdjQvdWRwX2JwZi5jLTE3OC19XG5uZXQvaXB2NC91ZHBfYnBmLmM6MTc5OkVYUE9SVF9TWU1CT0xfR1BMKHVkcF9icGZfdXBkYXRlX3Byb3RvKTtcbi0tXG5uZXQvaXB2Ni91ZHAuYz0xODc5PXN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3VkcC5jLTE5MDAtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjYvdWRwLmM6MTkwMTpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB1ZHBfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY2L3VkcC5jLTE5MDItI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjQzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU29ja2V0IE1hcCBVcGRhdGVzKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGFzIGV4cGVjdGVkLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBzb2NrZXQgbWFwIHVwZGF0ZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdG8gY29uc2lkZXIgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIHByaW1hcnkgZnVuY3Rpb25zIHRvIGNvbnNpZGVyIGFyZToKKiAgIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgCiogICBgc29ja19tYXBfdXBkYXRlX2VsZW1gCiogICBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAKCkhtbSwgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLi4uIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBzbWFsbC4gRGlyZWN0IGZ1enppbmcgbWlnaHQgYmUgdHJpY2t5IGlmIHRoZSBjb21waWxlciBpbmxpbmVzIGl0LCBidXQgc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGF0LiBJJiMzOTttIHByZXR0eSBzdXJlIHN5emthbGxlciBjYW4gZmlndXJlIHRoYXQgc3R1ZmYgb3V0LgoKSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgc29ja19oYXNoX3VwZGF0ZV9lbGVtYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvc29ja19tYXAuY2AgZm9yIHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgaWRlbnRpZmllZCBhbGwgdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX2hhc2hfdXBkYXRlX2VsZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY3MgoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrbWFwIFVwZGF0ZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNvY2tfaGFzaF9vcHNgIHN0cnVjdHVyZSBhbmQgaW1tZWRpYXRlbHkgc3BvdCB0aGF0IGl0IGxldmVyYWdlcyBgc29ja19tYXBfdXBkYXRlX2VsZW1gLCByaWdodD8gVGhhdCYjMzk7cyB0aGUga2V5IGVudHJ5IHBvaW50LiBBbmQgdGhlbiwgZnJvbSB0aGVyZSwgd2UgaGF2ZSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCB3aGljaCBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIEJQRiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgQlBGIHN5c2NhbGwsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aC4gSXQgbG9va3MgbGlrZSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyBhY3R1YWxseSBpbnZva2VkIGJ5IGBicGZfbWFwX3VwZGF0ZV92YWx1ZWAsIHNvIHRoZXkgYXJlIGFsbCBjb25uZWN0ZWQuCgpOb3csIGxldCYjMzk7cyB1bmRlcnN0YW5kICp3aHkqIHRoaXMgbWF0dGVycy4gVGhlIHBhdGNoJiMzOTtzIHJlYXNvbmluZyBpcyBjbGVhcjogaXQmIzM5O3MgYWJvdXQgcHJldmVudGluZyB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIHNvY2ttYXAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5zdGFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoaXMgZml4IGxpZXMgaW4gdGhlIGNoYW5nZXMgdG8gYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLiBUaGlzIGZ1bmN0aW9uIG5vdyBmaWx0ZXJzIG91dCB1bmJvdW5kIFVEUCBzb2NrZXRzLCBlbnN1cmluZyB0aGF0IG9ubHkgdmFsaWQgc3RhdGVzIGFyZSBwcm9jZXNzZWQgYnkgQlBGIHByb2dyYW1zLiBUaGlzIHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgaG93IHRoaW5ncyBhcmUgaGFuZGxlZC4gU28gZnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyByb2J1c3RuZXNzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLCBiZWNhdXNlIGl0JiMzOTtzIG1hcmtlZCBgc3RhdGljYC4gTG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbiwgaXQmIzM5O3Mgc3RhdGljIGJ1dCBub3QgZXhwbGljaXRseSBtYXJrZWQgYGlubGluZWAsIHNvIGl0JiMzOTtzIGZpbmUgdG8gbGlzdCBpdCBhbmQgaXQgc2hvdWxkIGJlIHZpc2libGUgdG8gdXMuCgpUaGUgY3JpdGljYWwgc3ltYm9scyBoZXJlIGFyZTogYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AsIGBzb2NrX21hcF91cGRhdGVfZWxlbWAsIGFuZCBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAuCgpMZXQmIzM5O3MgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIHRha2UgaXQgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW1fc3lzJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBCUEYgc29ja21hcCBsb2dpYyB0byByZWplY3QgdW5ib3VuZCBVRFAgc29ja2V0cyBmcm9tIGJlaW5nIGFkZGVkIHRvIGEgc29ja21hcC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgYnVncyBvciBjcmFzaGVzIGNhdXNlZCBieSB1bmluaXRpYWxpemVkIG9yIHVuaGFzaGVkIHNvY2tldHMgaW50ZXJhY3Rpbmcgd2l0aCBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cuIEZ1enppbmcgdGhlIG1hcCB1cGRhdGUgZnVuY3Rpb25zIHdpdGggdmFyaW91cyBzb2NrZXQgc3RhdGVzIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7c29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBzb2NrbWFwIGxvZ2ljIHRvIHJlamVjdCB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWdzIG9yIGNyYXNoZXMgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgb3IgdW5oYXNoZWQgc29ja2V0cyBpbnRlcmFjdGluZyB3aXRoIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdy4gRnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MjMuMDA4MzcwMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEzOTc5NTY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBzb2NrbWFwIGxvZ2ljIHRvIHJlamVjdCB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWdzIG9yIGNyYXNoZXMgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgb3IgdW5oYXNoZWQgc29ja2V0cyBpbnRlcmFjdGluZyB3aXRoIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdy4gRnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjIzLjAwODM3MzkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDk4Mjg4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNWIxMmIyMTRjZjc2YWE5ZDhjZjhlNjJlYTYyMDhkMWMwNjdlZGM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDY6Mjk6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5pbmRleCBjNjBiYTZkMjkyZjlhZS4uOWVmYmQ4Y2E3ZGI4MzIgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5AQCAtNTQyLDYgKzU0Miw4IEBAIHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdGlmIChza19pc190Y3Aoc2spKVxcbiBcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xcbitcXHRpZiAoc2tfaXNfdWRwKHNrKSlcXG4rXFx0XFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XFxuIFxcdGlmIChza19pc19zdHJlYW1fdW5peChzaykpXFxuIFxcdFxcdHJldHVybiAoMSBcXHUwMDNjXFx1MDAzYyBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3N0YXRlKSkgXFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xcbiBcXHRpZiAoc2tfaXNfdnNvY2soc2spIFxcdTAwMjZcXHUwMDI2XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbmluZGV4IGNiMzIyOTcxMWY5M2EzLi4yZDIyYTkwNThhOGU5MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcXG5AQCAtODUzLDcgKzg1Myw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tYW55X3NvY2tldCh2b2lkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdHVkcCA9IHhzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApO1xcbitcXHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xcbiBcXHRpZiAodWRwIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRjbG9zZShkZ3JhbSk7XFxuIFxcdFxcdGNsb3NlKHRjcCk7XFxuQEAgLTkyMiw3ICs5MjIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfbWFueV9tYXBzKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XFxuK1xcdHVkcCA9IHNvY2tldF9sb29wYmFjayhBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSyk7XFxuIFxcdGlmICh1ZHAgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGNsb3NlKGRncmFtKTtcXG4gXFx0XFx0Y2xvc2UodGNwKTtcXG5AQCAtOTkzLDcgKzk5Myw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zYW1lX3NvY2sodm9pZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHR1ZHAgPSB4c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLLCAwKTtcXG4rXFx0dWRwID0gc29ja2V0X2xvb3BiYWNrKEFGX0lORVQsIFNPQ0tfREdSQU0gfCBTT0NLX05PTkJMT0NLKTtcXG4gXFx0aWYgKHVkcCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0Y2xvc2UoZGdyYW0pO1xcbiBcXHRcXHRjbG9zZSh0Y3ApO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xcbmluZGV4IGNjMGM2OGJhYjkwNzk2Li5iODcxMThhYWI3YzRhMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2xpc3Rlbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uY1xcbkBAIC01Myw4ICs1Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXFxuIFxcdFxcdFxcdCAgICAgICBpbnQgZmFtaWx5LCBpbnQgc290eXBlLCBpbnQgbWFwZmQpXFxuIHtcXG4gXFx0dTMyIGtleSA9IDA7XFxuLVxcdHU2NCB2YWx1ZTtcXG4gXFx0aW50IGVyciwgcztcXG4rXFx0dTY0IHZhbHVlO1xcbiBcXG4gXFx0cyA9IHhzb2NrZXQoZmFtaWx5LCBzb3R5cGUsIDApO1xcbiBcXHRpZiAocyA9PSAtMSlcXG5AQCAtNjMsMTEgKzYzLDggQEAgc3RhdGljIHZvaWQgdGVzdF9pbnNlcnRfb3BlbmVkKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsIF9fYWx3YXlzX3VudXNlZCxcXG4gXFx0ZXJybm8gPSAwO1xcbiBcXHR2YWx1ZSA9IHM7XFxuIFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwZmQsIFxcdTAwMjZrZXksIFxcdTAwMjZ2YWx1ZSwgQlBGX05PRVhJU1QpO1xcbi1cXHRpZiAoc290eXBlID09IFNPQ0tfU1RSRUFNKSB7XFxuLVxcdFxcdGlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXFxuLVxcdFxcdFxcdEZBSUxfRVJSTk8oXFxcIm1hcF91cGRhdGU6IGV4cGVjdGVkIEVPUE5PVFNVUFBcXFwiKTtcXG4tXFx0fSBlbHNlIGlmIChlcnIpXFxuLVxcdFxcdEZBSUxfRVJSTk8oXFxcIm1hcF91cGRhdGU6IGV4cGVjdGVkIHN1Y2Nlc3NcXFwiKTtcXG4rXFx0QVNTRVJUX0VSUihlcnIsIFxcXCJtYXBfdXBkYXRlXFxcIik7XFxuK1xcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCwgXFxcImVycm5vXFxcIik7XFxuIFxcdHhjbG9zZShzKTtcXG4gfVxcbiBcXG5AQCAtNzcsOCArNzQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXFxuIFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuIFxcdHNvY2tsZW5fdCBsZW4gPSAwO1xcbiBcXHR1MzIga2V5ID0gMDtcXG4tXFx0dTY0IHZhbHVlO1xcbiBcXHRpbnQgZXJyLCBzO1xcbitcXHR1NjQgdmFsdWU7XFxuIFxcbiBcXHRpbml0X2FkZHJfbG9vcGJhY2soZmFtaWx5LCBcXHUwMDI2YWRkciwgXFx1MDAyNmxlbik7XFxuIFxcbkBAIC05Myw4ICs5MCwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXFxuIFxcdGVycm5vID0gMDtcXG4gXFx0dmFsdWUgPSBzO1xcbiBcXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcGZkLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsdWUsIEJQRl9OT0VYSVNUKTtcXG4tXFx0aWYgKCFlcnIgfHwgZXJybm8gIT0gRU9QTk9UU1VQUClcXG4tXFx0XFx0RkFJTF9FUlJOTyhcXFwibWFwX3VwZGF0ZTogZXhwZWN0ZWQgRU9QTk9UU1VQUFxcXCIpO1xcbitcXHRpZiAoc290eXBlID09IFNPQ0tfU1RSRUFNKSB7XFxuK1xcdFxcdEFTU0VSVF9FUlIoZXJyLCBcXFwibWFwX3VwZGF0ZVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFAsIFxcXCJlcnJub1xcXCIpO1xcbitcXHR9IGVsc2UgaWYgKGVycikge1xcbitcXHRcXHRBU1NFUlRfT0soZXJyLCBcXFwibWFwX3VwZGF0ZVxcXCIpO1xcbitcXHR9XFxuIGNsb3NlOlxcbiBcXHR4Y2xvc2Uocyk7XFxuIH1cXG5AQCAtMTI4OSw3ICsxMjkwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9vcHMoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcdFxcdC8qIGluc2VydCAqL1xcbiBcXHRcXHRURVNUKHRlc3RfaW5zZXJ0X2ludmFsaWQpLFxcbiBcXHRcXHRURVNUKHRlc3RfaW5zZXJ0X29wZW5lZCksXFxuLVxcdFxcdFRFU1QodGVzdF9pbnNlcnRfYm91bmQsIFNPQ0tfU1RSRUFNKSxcXG4rXFx0XFx0VEVTVCh0ZXN0X2luc2VydF9ib3VuZCksXFxuIFxcdFxcdFRFU1QodGVzdF9pbnNlcnQpLFxcbiBcXHRcXHQvKiBkZWxldGUgKi9cXG4gXFx0XFx0VEVTVCh0ZXN0X2RlbGV0ZV9hZnRlcl9pbnNlcnQpLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmNcXG5pbmRleCBjMzJkYTdiZDhiZTI3Ni4uNmEyNjQxZWU3ODk3NTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jXFxuQEAgLTc1OSwxNiArNzU5LDE1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcCh1bnNpZ25lZCBpbnQgdGFza3MsIHZvaWQgKmRhdGEpXFxuIFxcdFxcdGdvdG8gb3V0X3NvY2ttYXA7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFRlc3QgdXBkYXRlIHdpdGggdW5zdXBwb3J0ZWQgVURQIHNvY2tldCAqL1xcbitcXHQvKiBUZXN0IHVwZGF0ZSB3aXRoIHVuc3VwcG9ydGVkIHVuYm91bmQgVURQIHNvY2tldCAqL1xcbiBcXHR1ZHAgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7XFxuLVxcdGkgPSAwO1xcbi1cXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCBcXHUwMDI2aSwgXFx1MDAyNnVkcCwgQlBGX0FOWSk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJGYWlsZWQgc29ja2V0IHVwZGF0ZSBTT0NLX0RHUkFNICclaTolaSdcXFxcblxcXCIsXFxuLVxcdFxcdCAgICAgICBpLCB1ZHApO1xcbitcXHRDSEVDSyh1ZHAgXFx1MDAzYyAwLCBcXFwic29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pXFxcIiwgXFxcImVycm5vOiVkXFxcXG5cXFwiLCBlcnJubyk7XFxuK1xcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0oZmQsIFxcdTAwMjYoaW50KXswfSwgXFx1MDAyNnVkcCwgQlBGX0FOWSk7XFxuK1xcdGNsb3NlKHVkcCk7XFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiVW5leHBlY3RlZGx5IHN1Y2NlZWRlZCB1bmJvdW5kIFVEUCB1cGRhdGUgJzA6JWknXFxcXG5cXFwiLCB1ZHApO1xcbiBcXHRcXHRnb3RvIG91dF9zb2NrbWFwO1xcbiBcXHR9XFxuLVxcdGNsb3NlKHVkcCk7XFxuIFxcbiBcXHQvKiBUZXN0IHVwZGF0ZSB3aXRob3V0IHByb2dyYW1zICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA2OyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MjMuNzE4OTI4MTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQyOTIyOTM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBzb2NrbWFwIGxvZ2ljIHRvIHJlamVjdCB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWdzIG9yIGNyYXNoZXMgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgb3IgdW5oYXNoZWQgc29ja2V0cyBpbnRlcmFjdGluZyB3aXRoIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdy4gRnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzViMTJiMjE0Y2Y3NmFhOWQ4Y2Y4ZTYyZWE2MjA4ZDFjMDY3ZWRjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDY6Mjk6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuaW5kZXggYzYwYmE2ZDI5MmY5YWUuLjllZmJkOGNhN2RiODMyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xuKysrIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuQEAgLTU0Miw2ICs1NDIsOCBAQCBzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRpZiAoc2tfaXNfdGNwKHNrKSlcbiBcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xuK1x0aWYgKHNrX2lzX3VkcChzaykpXG4rXHRcdHJldHVybiBza19oYXNoZWQoc2spO1xuIFx0aWYgKHNrX2lzX3N0cmVhbV91bml4KHNrKSlcbiBcdFx0cmV0dXJuICgxIFx1MDAzY1x1MDAzYyBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfc3RhdGUpKSBcdTAwMjYgVENQRl9FU1RBQkxJU0hFRDtcbiBcdGlmIChza19pc192c29jayhzaykgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uMmQyMmE5MDU4YThlOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTg1Myw3ICs4NTMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfbWFueV9zb2NrZXQodm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XG4rXHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xuIFx0aWYgKHVkcCBcdTAwM2MgMCkge1xuIFx0XHRjbG9zZShkZ3JhbSk7XG4gXHRcdGNsb3NlKHRjcCk7XG5AQCAtOTIyLDcgKzkyMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tYW55X21hcHModm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XG4rXHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xuIFx0aWYgKHVkcCBcdTAwM2MgMCkge1xuIFx0XHRjbG9zZShkZ3JhbSk7XG4gXHRcdGNsb3NlKHRjcCk7XG5AQCAtOTkzLDcgKzk5Myw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zYW1lX3NvY2sodm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0dWRwID0geHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNIHwgU09DS19OT05CTE9DSywgMCk7XG4rXHR1ZHAgPSBzb2NrZXRfbG9vcGJhY2soQUZfSU5FVCwgU09DS19ER1JBTSB8IFNPQ0tfTk9OQkxPQ0spO1xuIFx0aWYgKHVkcCBcdTAwM2MgMCkge1xuIFx0XHRjbG9zZShkZ3JhbSk7XG4gXHRcdGNsb3NlKHRjcCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9saXN0ZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmNcbmluZGV4IGNjMGM2OGJhYjkwNzk2Li5iODcxMThhYWI3YzRhMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfbGlzdGVuLmNcbkBAIC01Myw4ICs1Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X29wZW5lZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXG4gXHRcdFx0ICAgICAgIGludCBmYW1pbHksIGludCBzb3R5cGUsIGludCBtYXBmZClcbiB7XG4gXHR1MzIga2V5ID0gMDtcbi1cdHU2NCB2YWx1ZTtcbiBcdGludCBlcnIsIHM7XG4rXHR1NjQgdmFsdWU7XG4gXG4gXHRzID0geHNvY2tldChmYW1pbHksIHNvdHlwZSwgMCk7XG4gXHRpZiAocyA9PSAtMSlcbkBAIC02MywxMSArNjMsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9vcGVuZWQoc3RydWN0IHRlc3Rfc29ja21hcF9saXN0ZW4gKnNrZWwgX19hbHdheXNfdW51c2VkLFxuIFx0ZXJybm8gPSAwO1xuIFx0dmFsdWUgPSBzO1xuIFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBmZCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWx1ZSwgQlBGX05PRVhJU1QpO1xuLVx0aWYgKHNvdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuLVx0XHRpZiAoIWVyciB8fCBlcnJubyAhPSBFT1BOT1RTVVBQKVxuLVx0XHRcdEZBSUxfRVJSTk8oXCJtYXBfdXBkYXRlOiBleHBlY3RlZCBFT1BOT1RTVVBQXCIpO1xuLVx0fSBlbHNlIGlmIChlcnIpXG4tXHRcdEZBSUxfRVJSTk8oXCJtYXBfdXBkYXRlOiBleHBlY3RlZCBzdWNjZXNzXCIpO1xuK1x0QVNTRVJUX0VSUihlcnIsIFwibWFwX3VwZGF0ZVwiKTtcbitcdEFTU0VSVF9FUShlcnJubywgRU9QTk9UU1VQUCwgXCJlcnJub1wiKTtcbiBcdHhjbG9zZShzKTtcbiB9XG4gXG5AQCAtNzcsOCArNzQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luc2VydF9ib3VuZChzdHJ1Y3QgdGVzdF9zb2NrbWFwX2xpc3RlbiAqc2tlbCBfX2Fsd2F5c191bnVzZWQsXG4gXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuIFx0c29ja2xlbl90IGxlbiA9IDA7XG4gXHR1MzIga2V5ID0gMDtcbi1cdHU2NCB2YWx1ZTtcbiBcdGludCBlcnIsIHM7XG4rXHR1NjQgdmFsdWU7XG4gXG4gXHRpbml0X2FkZHJfbG9vcGJhY2soZmFtaWx5LCBcdTAwMjZhZGRyLCBcdTAwMjZsZW4pO1xuIFxuQEAgLTkzLDggKzkwLDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5zZXJ0X2JvdW5kKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsIF9fYWx3YXlzX3VudXNlZCxcbiBcdGVycm5vID0gMDtcbiBcdHZhbHVlID0gcztcbiBcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwZmQsIFx1MDAyNmtleSwgXHUwMDI2dmFsdWUsIEJQRl9OT0VYSVNUKTtcbi1cdGlmICghZXJyIHx8IGVycm5vICE9IEVPUE5PVFNVUFApXG4tXHRcdEZBSUxfRVJSTk8oXCJtYXBfdXBkYXRlOiBleHBlY3RlZCBFT1BOT1RTVVBQXCIpO1xuK1x0aWYgKHNvdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuK1x0XHRBU1NFUlRfRVJSKGVyciwgXCJtYXBfdXBkYXRlXCIpO1xuK1x0XHRBU1NFUlRfRVEoZXJybm8sIEVPUE5PVFNVUFAsIFwiZXJybm9cIik7XG4rXHR9IGVsc2UgaWYgKGVycikge1xuK1x0XHRBU1NFUlRfT0soZXJyLCBcIm1hcF91cGRhdGVcIik7XG4rXHR9XG4gY2xvc2U6XG4gXHR4Y2xvc2Uocyk7XG4gfVxuQEAgLTEyODksNyArMTI5MCw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfb3BzKHN0cnVjdCB0ZXN0X3NvY2ttYXBfbGlzdGVuICpza2VsLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHQvKiBpbnNlcnQgKi9cbiBcdFx0VEVTVCh0ZXN0X2luc2VydF9pbnZhbGlkKSxcbiBcdFx0VEVTVCh0ZXN0X2luc2VydF9vcGVuZWQpLFxuLVx0XHRURVNUKHRlc3RfaW5zZXJ0X2JvdW5kLCBTT0NLX1NUUkVBTSksXG4rXHRcdFRFU1QodGVzdF9pbnNlcnRfYm91bmQpLFxuIFx0XHRURVNUKHRlc3RfaW5zZXJ0KSxcbiBcdFx0LyogZGVsZXRlICovXG4gXHRcdFRFU1QodGVzdF9kZWxldGVfYWZ0ZXJfaW5zZXJ0KSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmNcbmluZGV4IGMzMmRhN2JkOGJlMjc2Li42YTI2NDFlZTc4OTc1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jXG5AQCAtNzU5LDE2ICs3NTksMTUgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwKHVuc2lnbmVkIGludCB0YXNrcywgdm9pZCAqZGF0YSlcbiBcdFx0Z290byBvdXRfc29ja21hcDtcbiBcdH1cbiBcbi1cdC8qIFRlc3QgdXBkYXRlIHdpdGggdW5zdXBwb3J0ZWQgVURQIHNvY2tldCAqL1xuK1x0LyogVGVzdCB1cGRhdGUgd2l0aCB1bnN1cHBvcnRlZCB1bmJvdW5kIFVEUCBzb2NrZXQgKi9cbiBcdHVkcCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTtcbi1cdGkgPSAwO1xuLVx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShmZCwgXHUwMDI2aSwgXHUwMDI2dWRwLCBCUEZfQU5ZKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0cHJpbnRmKFwiRmFpbGVkIHNvY2tldCB1cGRhdGUgU09DS19ER1JBTSAnJWk6JWknXFxuXCIsXG4tXHRcdCAgICAgICBpLCB1ZHApO1xuK1x0Q0hFQ0sodWRwIFx1MDAzYyAwLCBcInNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKVwiLCBcImVycm5vOiVkXFxuXCIsIGVycm5vKTtcbitcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0oZmQsIFx1MDAyNihpbnQpezB9LCBcdTAwMjZ1ZHAsIEJQRl9BTlkpO1xuK1x0Y2xvc2UodWRwKTtcbitcdGlmICghZXJyKSB7XG4rXHRcdHByaW50ZihcIlVuZXhwZWN0ZWRseSBzdWNjZWVkZWQgdW5ib3VuZCBVRFAgdXBkYXRlICcwOiVpJ1xcblwiLCB1ZHApO1xuIFx0XHRnb3RvIG91dF9zb2NrbWFwO1xuIFx0fVxuLVx0Y2xvc2UodWRwKTtcbiBcbiBcdC8qIFRlc3QgdXBkYXRlIHdpdGhvdXQgcHJvZ3JhbXMgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkrKykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MjMuNzE4OTI5NTY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2NTY1ODQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNvY2ttYXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHNvbWUgYXNzb2NpYXRlZCBzZWxmdGVzdHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkndmUgYWRkZWQgZXhwbGljaXQgaGFuZGxpbmcgZm9yIFVEUCBzb2NrZXRzLiBCZWZvcmUsIGl0IGxvb2tzIGxpa2UgVURQIHNvY2tldHMgd2VyZSBpbXBsaWNpdGx5ICpkaXNhbGxvd2VkKiBiZWNhdXNlIHRoZXkgd2VyZW4ndCBleHBsaWNpdGx5IGhhbmRsZWQgaW4gdGhpcyBmdW5jdGlvbi4gSWYgaXQgd2Fzbid0IFRDUCwgc3RyZWFtIFVuaXggc29ja2V0cyBvciB2c29jayBpdCB3b3VsZCBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1bHQgb2YgcmV0dXJuaW5nIGZhbHNlLlxuXG5Ob3csIHdpdGggdGhpcyBuZXcgY29kZSwgYSBVRFAgc29ja2V0IGlzIGFsbG93ZWQgaW4gdGhlIHNvY2ttYXAgaWYgaXQncyBoYXNoZWQsIGluZGljYXRlZCBieSBgc2tfaGFzaGVkKHNrKWAuIFRoaXMgbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2Ygd2FudGluZyB0byBhZGQgYSBVRFAgc29ja2V0IHRvIGEgc29ja21hcDsgdHlwaWNhbGx5LCB5b3UnZCBvbmx5IHdhbnQgdG8gdHJhY2sgc29ja2V0cyB0aGF0IGFyZSBhY3RpdmVseSBwYXJ0aWNpcGF0aW5nIGluIGNvbW11bmljYXRpb24uIEhhc2hpbmcgaW1wbGllcyB0aGF0IHRoZSBzb2NrZXQgaXMgYm91bmQgYW5kIGxpa2VseSByZWNlaXZpbmcgdHJhZmZpYy4gSSBzaG91bGQgY29uZmlybSB0aGF0IGBza19oYXNoZWRgIG1lYW5zIHdoYXQgSSB0aGluayBpdCBtZWFucyBoZXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gaW4gdGhlIGtlcm5lbCBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuIFRoaXMgYXBwcm9hY2ggc2VlbXMgcmVhc29uYWJsZS4gTGV0IG1lIHB1bGwgdXAgdGhlIHJlbGV2YW50IGNvZGUgYW5kIGNvbmZpcm0gdGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIHRoaXMgd2Fzbid0IGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjI4Ljk4NDU4OTYyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI0MjU2MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NTg9aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXFx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODc6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTk5PXN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjEyLVxcdGJoX2xvY2tfc29jayhzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2MTM6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MzIuMzA4ODUyNDM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwNzQ5MDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBJIG1ha2UgYW55IGp1ZGdlbWVudHMgb3IgZHJhdyBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbiwgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLiBJIG5lZWQgdG8gc2VlICpldmVyeXRoaW5nKi4gV2hhdCBhcmUgdGhlIGlucHV0cz8gV2hhdCdzIHRoZSBjb3JlIGxvZ2ljPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGV4aXQgcGF0aHMgYW5kIGVycm9yIGNvbmRpdGlvbnM/IFdpdGhvdXQgdGhhdCBob2xpc3RpYyB2aWV3LCBJJ20ganVzdCBzaG9vdGluZyBpbiB0aGUgZGFyay4gU28sIGxldCdzIGdldCB0aGUgd2hvbGUgZGVmaW5pdGlvbiwgYW5kIHRoZW4gd2UnbGwgc3RhcnQgcGlja2luZyBpdCBhcGFydCBwaWVjZSBieSBwaWVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjM1LjExNjM0NDY0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRcXG4gNTQxOlxcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiA1NDI6XFx0e1xcbiA1NDM6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpXFxuIDU0NDpcXHRcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xcbiA1NDU6XFx0XFx0aWYgKHNrX2lzX3VkcChzaykpXFxuIDU0NjpcXHRcXHRcXHRyZXR1cm4gc2tfaGFzaGVkKHNrKTtcXG4gNTQ3OlxcdFxcdGlmIChza19pc19zdHJlYW1fdW5peChzaykpXFxuIDU0ODpcXHRcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2MgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zdGF0ZSkpIFxcdTAwMjYgVENQRl9FU1RBQkxJU0hFRDtcXG4gNTQ5OlxcdFxcdGlmIChza19pc192c29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4gNTUwOlxcdFxcdCAgICAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0gfHwgc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpKVxcbiA1NTE6XFx0XFx0XFx0cmV0dXJuICgxIFxcdTAwM2NcXHUwMDNjIHNrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xcbiA1NTI6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDU1MzpcXHR9XFxuIDU1NDpcXHRcXG4gNTU1OlxcdHN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiA1NTY6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNvY2sgKnNrLCB1NjQgZmxhZ3MpO1xcbiA1NTc6XFx0XFxuIDU1ODpcXHRpbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIDU1OTpcXHRcXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MzUuMTE2NDQ4NTQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NzIwOTM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTb2NrZXQgTG9naWMqKlxuXG5SaWdodCwgc28gdGhlIGNvZGUncyBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHNpbXBseSBgcmV0dXJuIHRydWU7YC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIuLi4gaWYgdGhhdCdzIHRoZSBiYXNlIGNhc2UsIHdoYXQgd2FzIGhhcHBlbmluZyB3aXRoIFVEUCBzb2NrZXRzIGJlZm9yZT8gQSBzaW1wbGUgXCJ0cnVlXCIgcmV0dXJuIHdvdWxkIGhhdmUgcGVybWl0dGVkIFVEUCBzb2NrZXRzIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgc3RhdGUgb3IgYW55IG90aGVyIHNwZWNpZmljIGNyaXRlcmlhLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmV0dHkgYnJvYWQgYWxsb3dhbmNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHdhcyBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgb3IgZGlzYWxsb3dpbmcgc29ja2V0cy5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY2hlY2tzLiBJJ2xsIHN0YXJ0IHdpdGggYHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlYCwgYnV0IEkgc2hvdWxkIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBvdGhlciBmdW5jdGlvbnMgYW5kIGNoZWNrcyBuZWFyYnkuIEl0IGNvdWxkIGJlIHRoYXQgc29tZXRoaW5nIGVsc2UgaW4gdGhlIGxvZ2ljIHdhcyBzaWxlbnRseSBvdmVycnVsaW5nIHRoYXQgZGVmYXVsdCwgb3IgcHJvdmlkaW5nIGNvbnRleHQgdG8gdGhlIGByZXR1cm4gdHJ1ZTtgLiBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE2MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6MzguOTkzNjU5NTEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTIzMDM5NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfaXNfdWRwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NvY2suaD0yOTY1PXN0YXRpYyBpbmxpbmUgYm9vbCBza19pc190Y3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTI5NzEtXFxuaW5jbHVkZS9uZXQvc29jay5oOjI5NzI6c3RhdGljIGlubGluZSBib29sIHNrX2lzX3VkcChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvc29jay5oLTI5NzMte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE4MTQ9QlBGX0NBTExfMyhicGZfc2tfbG9va3VwX2Fzc2lnbiwgc3RydWN0IGJwZl9za19sb29rdXBfa2VybiAqLCBjdHgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTgyMy1cXHRcXHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsgLyogb25seSBhY2NlcHQgVENQIHNvY2tldCBpbiBMSVNURU4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgyNDpcXHRpZiAodW5saWtlbHkoc2sgXFx1MDAyNlxcdTAwMjYgc2tfaXNfdWRwKHNrKSBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTgyNS1cXHRcXHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsgLyogb25seSBhY2NlcHQgVURQIHNvY2tldCBpbiBDTE9TRSAqL1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTQ0NjM9Ym9vbCBza19idXN5X2xvb3BfZW5kKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSlcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy00NDY5LVxcbm5ldC9jb3JlL3NvY2suYzo0NDcwOlxcdGlmIChza19pc191ZHAoc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc29jay5jLTQ0NzEtXFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnVkcF9zayhzayktXFx1MDAzZXJlYWRlcl9xdWV1ZSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTU0MT1zdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQ0LVxcdFxcdHJldHVybiAoMSBcXHUwMDNjXFx1MDAzYyBzay1cXHUwMDNlc2tfc3RhdGUpIFxcdTAwMjYgKFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0xJU1RFTik7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1NDU6XFx0aWYgKHNrX2lzX3VkcChzaykpXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDYtXFx0XFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zMDE9c3RhdGljIGludCBob29rX3NvY2tldF9iaW5kKHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMDctXFx0XFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0JJTkRfVENQO1xcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMwODpcXHRlbHNlIGlmIChza19pc191ZHAoc29jay1cXHUwMDNlc2spKVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMwOS1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQklORF9VRFA7XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zMTc9c3RhdGljIGludCBob29rX3NvY2tldF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMjUtXFx0XFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0NPTk5FQ1RfVENQO1xcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMyNjpcXHRlbHNlIGlmIChza19pc191ZHAoc29jay1cXHUwMDNlc2spKVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMyNy1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQ09OTkVDVF9TRU5EX1VEUDtcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMzNy1cXHQgKi9cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYzozMzg6XFx0aWYgKHJldCA9PSAwIFxcdTAwMjZcXHUwMDI2IHNrX2lzX3VkcChzb2NrLVxcdTAwM2VzaykgXFx1MDAyNlxcdTAwMjZcXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMzktXFx0ICAgIGFkZHJsZW4gXFx1MDAzZT0gb2Zmc2V0b2ZlbmQodHlwZW9mKCphZGRyZXNzKSwgc2FfZmFtaWx5KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM9MzQ2PXN0YXRpYyBpbnQgaG9va19zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpjb25zdCBzb2NrLFxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzUzLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjM1NDpcXHRpZiAoc2tfaXNfdWRwKHNvY2stXFx1MDAzZXNrKSlcXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zNTUtXFx0XFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0NPTk5FQ1RfU0VORF9VRFA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjQxLjI0NTk2Nzk1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTk5OTI1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRFAgU29ja2V0IFJlc3RyaWN0aW9uIGluIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBpZiB0aGUgb3JpZ2luYWwgYmVoYXZpb3IgZGVmYXVsdGVkIHRvIGByZXR1cm4gdHJ1ZTtgLCB0aGF0IG1lYW50ICp1bmJvdW5kKiBVRFAgc29ja2V0cyB3ZXJlIHByZXZpb3VzbHkgYWxsb3dlZCBpbiB0aGlzIHNjZW5hcmlvP1wiIEludGVyZXN0aW5nLi4uXG5cbk5vdyB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIHNwZWNpZmljIGNoZWNrOlxuXG5gYGBjXG5cdGlmIChza19pc191ZHAoc2spKVxuXHRcdHJldHVybiBza19oYXNoZWQoc2spO1xuYGBgXG5cblRoaXMgKmV4cGxpY2l0bHkqIHJlc3RyaWN0cyBVRFAgc29ja2V0cyB0byBvbmx5IHRob3NlIHRoYXQgYXJlIGhhc2hlZCDigJMgbWVhbmluZywgYm91bmQgdG8gYW4gYWRkcmVzcyBhbmQgcG9ydCwgY29ycmVjdD8gVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBsaW1pdGluZyB0aGUgZmxleGliaWxpdHkgaW4gaG93IFVEUCBzb2NrZXRzIGFyZSBoYW5kbGVkLlxuXG5UaGUgc2VsZnRlc3QgY2hhbmdlcyBhcmUgd2hlcmUgaXQgYmVjb21lcyBjbGVhcmVyLiBUaGV5IGFyZSBkZXNpZ25lZCB0byBjb25maXJtIHRoaXMgYmVoYXZpb3IgY2hhbmdlLiBCZWZvcmUgaXQgbG9va3MgbGlrZSB0aGUgdGVzdCBleHBlY3RlZCB0aGF0IHVwZGF0aW5nIHdpdGggYW4gdW5zdXBwb3J0ZWQgVURQIHNvY2tldCB3b3VsZCBmYWlsLiBOb3csIHRoZSBjb21tZW50IHNwZWNpZmljYWxseSBzYXlzIGl0J3MgdGVzdGluZyB3aXRoIGFuIFwidW5ib3VuZCBVRFAgc29ja2V0XCIuIFRoZSB0ZXN0IG5vdyBjcmVhdGVzIGEgVURQIHNvY2tldCwgYXR0ZW1wdHMgdGhlIG1hcCB1cGRhdGUsIGNsb3NlcyB0aGUgc29ja2V0IGFuZCBjaGVja3MgZm9yIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBgQ0hFQ0sodWRwIFx1MDAzYyAwLCBcInNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKVwiLCBcImVycm5vOiVkXFxuXCIsIGVycm5vKTtgIGxpbmUsIGFuZCB0aGUgc3Vic2VxdWVudCBlcnJvciBjaGVja2luZyBpbiB0aGUgYGlmICghZXJyKWAgc3RhdGVtZW50LiBJdCAqZXhwZWN0cyogYW4gZXJyb3IsIGJ1dCBpZiB0aGUgdXBkYXRlIHVuZXhwZWN0ZWRseSBzdWNjZWVkcywgaXQgdGhyb3dzIGFuIGVycm9yLlxuXG5CdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgZnV6enkuIElmIHRoZSAqb2xkKiB0ZXN0IGFscmVhZHkgZXhwZWN0ZWQgZmFpbHVyZSAoYXMgaW5kaWNhdGVkIGJ5IHRoZSBcInVuc3VwcG9ydGVkIFVEUCBzb2NrZXRcIiBjb21tZW50KSwgdGhlbiAqd2h5KiBkaWQgaXQgZmFpbCAqYmVmb3JlKiB0aGUgcGF0Y2g/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBEaWQgdGhlIG9sZGVyIGltcGxlbWVudGF0aW9uIGhhdmUgc29tZSB1bmludGVuZGVkIGJlaGF2aW9yP1xuXG5JIG5lZWQgdG8gZGlnIGludG8gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2Agb3IgbWF5YmUgYHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlYCB0byBzZWUgd2hhdCBleGFjdGx5IHdhcyBnb2luZyBvbiAqYmVmb3JlKiB0aGlzIHJlc3RyaWN0aW9uIHdhcyBpbnRyb2R1Y2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHdhcyBwcmV2ZW50aW5nIGFuIHVuYm91bmQgVURQIHNvY2tldCBmcm9tIGJlaW5nIFwic3VpdGFibGVcIiBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIGlmIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHdhcyB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6NDcuOTY1OTYyNTI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRcXG4gNTIxOlxcdHN0YXRpYyBib29sIHNvY2tfbWFwX29wX29rYXkoY29uc3Qgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICpvcHMpXFxuIDUyMjpcXHR7XFxuIDUyMzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcCA9PSBCUEZfU09DS19PUFNfUEFTU0lWRV9FU1RBQkxJU0hFRF9DQiB8fFxcbiA1MjQ6XFx0XFx0ICAgICAgIG9wcy1cXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQiB8fFxcbiA1MjU6XFx0XFx0ICAgICAgIG9wcy1cXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX1RDUF9MSVNURU5fQ0I7XFxuIDUyNjpcXHR9XFxuIDUyNzpcXHRcXG4gNTI4OlxcdHN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiA1Mjk6XFx0e1xcbiA1MzA6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpXFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU47XFxuIDUzMjpcXHRcXHRlbHNlXFxuIDUzMzpcXHRcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zdGF0ZSkgPT0gVENQX0VTVEFCTElTSEVEO1xcbiA1MzQ6XFx0fVxcbiA1MzU6XFx0XFxuIDUzNjpcXHRzdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuIDUzNzpcXHR7XFxuIDUzODpcXHRcXHRyZXR1cm4gISFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Q7XFxuIDUzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjI5OjQ3Ljk2NjA5MjY1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTU3MjQwNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmF2ZWxpbmcgdGhlIFVEUCBTb2NrbWFwIE15c3RlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc29ja19tYXBfc2tfaXNfc3VpdGFibGVgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggVURQIHNvY2tldHMuIEkgc2VlIHRoYXQgaXQgY2hlY2tzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90YCwgYW5kIGZvciBVRFAsIHRoYXQgZnVuY3Rpb24gaXMgaW5kZWVkIHNldC4gVGhhdCdzIGdvb2QsIHNlZW1zIGxpa2UgdGhlIHBpZWNlcyBhcmUgaW4gcGxhY2UuIEJ1dCB3YWl0LCBzb21ldGhpbmcncyBub3QgYWRkaW5nIHVwLiBJIHJlbWVtYmVyIHNlZWluZyBhIGNvbW1lbnQgaW4gYW4gb2xkIHNlbGZ0ZXN0IGFib3V0IFwidW5zdXBwb3J0ZWQgVURQIHNvY2tldFwiIGFuZCB0aGF0J3MgdGhyb3dpbmcgbWUgb2ZmLiBJZiBgcHNvY2tfdXBkYXRlX3NrX3Byb3RgIGlzIHByZXNlbnQsIHdoeSB3YXMgVURQIGNvbnNpZGVyZWQgdW5zdXBwb3J0ZWQgYXQgc29tZSBwb2ludD9cblxuTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IG9sZCBzZWxmdGVzdCBjb2RlLi4uIEFoYSEgSXQgdXNlZCB0byB0cnkgYWRkaW5nIGEgVURQIHNvY2tldCBsaWtlIHRoaXM6IGBlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKGZkLCBcdTAwMjZpLCBcdTAwMjZ1ZHAsIEJQRl9BTlkpO2AgYW5kICpleHBlY3RlZCogaXQgdG8gc3VjY2VlZCEgVGhlIGNvZGUgZXhwbGljaXRseSBjaGVja2VkIGBpZiAoZXJyKSB7IHByaW50ZihcIkZhaWxlZCBzb2NrZXQgdXBkYXRlLi4uXCIpOyBnb3RvIG91dF9zb2NrbWFwOyB9YCwgaW5kaWNhdGluZyBhIHN1Y2Nlc3NmdWwgdXBkYXRlIHdhcyB0aGUgZXhwZWN0YXRpb24uIFRoZSBjb21tZW50IHNhaWQgXCJ1bnN1cHBvcnRlZFwiLCBidXQgdGhlIHRlc3Qgd2FzIGV4cGVjdGluZyBzdWNjZXNzPyBUaGlzIGlzIGNvbmZ1c2luZy5cblxuTm8sIHdhaXQsIEknbSBtaXNyZWFkaW5nIHRoZSBsb2dpYy4gQSBub24temVybyBgZXJyYCBtZWFudCBpdCAqZmFpbGVkKi4gU28gaXQgKmRpZCogZXhwZWN0IHN1Y2Nlc3Mgb3JpZ2luYWxseSwgd2hpY2ggY29udHJhZGljdHMgdGhlIFwidW5zdXBwb3J0ZWRcIiBjb21tZW50LiBPa2F5LCBJIHRoaW5rIEknbSBmb2xsb3dpbmcgbm93LiBMb29raW5nIGF0IHRoZSBwYXRjaCwgdGhlIHRlc3QgaGFzIGNoYW5nZWQuIE5vdywgaXQgZXhwbGljaXRseSAqZXhwZWN0cyogZmFpbHVyZTogYGlmICghZXJyKSB7IHByaW50ZihcIlVuZXhwZWN0ZWRseSBzdWNjZWVkZWQgdW5ib3VuZCBVRFAgdXBkYXRlICcwOiVpJ1xcblwiLCB1ZHApOyBnb3RvIG91dF9zb2NrbWFwOyB9YC4gU28sIHVuYm91bmQgVURQIHNvY2tldHMgKnVzZWQqIHRvIGJlIGFkZGVkIHN1Y2Nlc3NmdWxseS5cblxuU28sIHByZXZpb3VzbHksIHVuYm91bmQgVURQIHNvY2tldHMgKmNvdWxkKiBiZSBhZGRlZD8gQnV0IHdoeSB3YXMgdGhpcyBjb25zaWRlcmVkIGEgcHJvYmxlbT8gSSdtIGd1ZXNzaW5nIHRoYXQgdW5ib3VuZCBVRFAgc29ja2V0cywgYmVpbmcgaW4gYW4gaW5jb21wbGV0ZSBzdGF0ZSBiZWZvcmUgdGhleSdyZSBmdWxseSBpbml0aWFsaXplZCBvciBoYXNoZWQsIG1pZ2h0IGNhdXNlIGlzc3VlcyB3aGVuIEJQRiBwcm9ncmFtcyB0cnkgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtIHRocm91Z2ggdGhlIHNvY2ttYXAuIEl0J3MgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5JJ20gcHJldHR5IHN1cmUgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSBvciB0aGUgYXNzb2NpYXRlZCBpc3N1ZSB0cmFja2VyIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0IG9uICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTEwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6NTYuNTIzMzM0OTAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAzOTQ3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NTg9aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXFx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODc6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTk5PXN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjEyLVxcdGJoX2xvY2tfc29jayhzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2MTM6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6Mjk6NTguNzI3Mjg2NTUzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzE4NDYyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgVGhpcyBQYXRjaD8gWWVzLioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYCwgc3BlY2lmaWNhbGx5IGBpZiAoc2tfaXNfdWRwKHNrKSkgcmV0dXJuIHNrX2hhc2hlZChzayk7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIGxpa2UgYSBtaW5vciByZXN0cmljdGlvbiBvbiB0aGUgdHlwZXMgb2YgVURQIHNvY2tldHMgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBzb2NrbWFwLiBJJ2QgYmUgbG9va2luZyBhdCBmdXp6aW5nIGBicGZfbWFwX3VwZGF0ZV9lbGVtYCBvbiBhIHNvY2ttYXAsIHRhcmdldGluZyBhIFVEUCBzb2NrZXQuIEJ1dCwgYXMgYSBidWcgZml4IHRoYXQgcmVzdHJpY3RzIGJlaGF2aW9yLCB0aGUgcHJpbWFyeSBnb2FsICppc24ndCogdG8gdW5jb3ZlciBicmFuZCBuZXcgY29kZSBwYXRocywgYW5kIG1heSAqcHJldmVudCogc29tZSB1bmRlZmluZWQgYmVoYXZpb3IuXG5cblRoZSBwYXRjaCdzIGdvYWwgYXBwZWFycyB0byBwcmV2ZW50IGEgYnVnIHJlbGF0ZWQgdG8gdXNpbmcgdW5ib3VuZCBVRFAgc29ja2V0cyBpbiBhIHNvY2ttYXAsIHBlcmhhcHMgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igc2ltaWxhci4gVGhlIHBhdGNoIGlzICphbHJlYWR5KiBhcHBsaWVkLCBzbyBhbnkgaW1tZWRpYXRlIGJ1ZyB3b24ndCBiZSBleHBvc2VkIGR1cmluZyBmdXp6aW5nLiBCdXQgdGhlIGtleSBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgKm5ldyogZnVuY3Rpb25hbCBsb2dpYyB3b3J0aCB0ZXN0aW5nLlxuXG5UaGUgYWRkaXRpb24gb2YgYHNrX2hhc2hlZChzaylgIGZvciBVRFAgc29ja2V0cyBzZWVtZWQgc2ltcGxlIG9uIHRoZSBzdXJmYWNlOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIGludCBza19oYXNoZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxue1xuXHRyZXR1cm4gIXNrX3VuaGFzaGVkKHNrKTtcbn1cbmBgYFxuXG5JdCBpcyBhIGJhc2ljIHN0YXRlIGNoZWNrLiBUeXBpY2FsbHksIHRoZXNlIHNpbXBsZSBjaGVja3PigJRgaWYgKCFmb28pIHJldHVybiAtRUlOVkFMO2DigJRkb24ndCBuZWNlc3NhcmlseSBpbnRyb2R1Y2UgY29tcGxleCBmdXp6aW5nIHRhcmdldHMuXG5cbkhvd2V2ZXIsIHRoZSBiaWdnZXIgcGljdHVyZSBpcyB0aGF0IHRoaXMgY29kZSBtb2RpZmllcyBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAsIHdoaWNoIGlzICpjb3JlKiBCUEYgc29ja21hcCBsb2dpYy4gVGhhdCdzIGEga2V5IHBhcnQgb2YgdGhlIGV4ZWN1dGlvbiBmbG93IGluIHRoZSBrZXJuZWwgYW5kIHNvbWV0aGluZyB0aGF0ICppcyogcmVhY2hhYmxlLlxuXG5UaGVuIHRoZSBwcm9tcHQncyBjcml0ZXJpYSByZWFsbHkgY2xhcmlmaWVzIGl0OlxuXG4qICAgTm90IGp1c3QgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgb3IgY29uc3RhbnRzLlxuKiAgIEl0IGFsdGVycyBleGVjdXRpb24gZmxvdyBieSByZWplY3RpbmcgdW5ib3VuZCBVRFAgc29ja2V0cyAod2hpY2ggY2FuIGFsdGVyICpiZWhhdmlvdXIqKSwgKmFuZCogbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgKGBuZXQvY29yZS9zb2NrX21hcC5jYCkuXG5cblRoZXJlZm9yZSwgZXZlbiB0aG91Z2ggaXQncyBhIGJ1ZyBmaXgsIGFuZCBkb2Vzbid0IGluaGVyZW50bHkgdW5jb3ZlciBuZXcgY29kZSBwYXRocywgaXQgKmRvZXMqIGNoYW5nZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRvZXMgd2FycmFudCBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBmdW5jdGlvbiBjYWxscy4gVGhlIHBhdGNoIHRhcmdldHMgYSBzdGF0aWMgZnVuY3Rpb24gYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGF0IGlzIGNhbGxlZCBieSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBhbmQgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYC4gU28gbm93IEkgd291bGQgYmUgbG9va2luZyBmb3Igd2hlcmUgKnRob3NlKiBmdW5jdGlvbnMgYXJlIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMDowOS4wNDU3NTExMjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTUzMDkwMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MzY1OT1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNjYwOmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NjEtaW50IHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zNzQ1PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUwLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTItXFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUxPXN0YXRpYyBpbnQgYnBmX21hcF91cGRhdGVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY0LVxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNjU6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjYtXFx0fSBlbHNlIGlmIChJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTU1PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NTg6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU5LVxcdFxcdFxcdCAgICAgdTY0IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMDoxMC44NDEwNjU1MTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNDQ3NzkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBTT0NLTUFQL1NPQ0tIQVNIIFVwZGF0ZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoZSBmbG93IG9mIGRhdGEgdXBkYXRpbmcgaW4gdGhlIEJQRiB3b3JsZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBTT0NLTUFQIGFuZCBTT0NLSEFTSCwgYW5kIEkgc2VlIGEgY2xlYXIgZGlzdGluY3Rpb24gaW4gaG93IHRoaXMgaGFwcGVucyBmcm9tIHVzZXJzcGFjZSB2ZXJzdXMgd2l0aGluIEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzLiBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyB0aGUga2VybmVsIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhIHVzZXItc3BhY2UgYXBwbGljYXRpb24gd2FudHMgdG8gdXBkYXRlIGEgU09DS01BUCBvciBTT0NLSEFTSC4gSXQgc2VlbXMgaXQgaXMgaG9va2VkIHRvIGBicGZfbWFwX3VwZGF0ZV92YWx1ZWAgd2l0aGluIHRoZSBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2Ugc3lzY2FsbHMgYXJlIHRoZSBnYXRld2F5IGZvciB1c2Vyc3BhY2UgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbC4gSSB1bmRlcnN0YW5kIHRoYXQuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCBmdW5jdGlvbiBpcyBhIEJQRiBoZWxwZXIgdGhhdCBCUEYgcHJvZ3JhbXMgdGhlbXNlbHZlcyB1c2UgdG8gdXBkYXRlIHRoZXNlIG1hcHMuIFRoaXMgZGlzdGluY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGhpZ2hsaWdodHMgdGhlIHNlcGFyYXRpb24gb2YgY29uY2VybnMuIFVzZXItc3BhY2UgaGFzIGEgY29udHJvbGxlZCBpbnRlcmZhY2UgdGhyb3VnaCBzeXNjYWxscywgd2hpbGUgQlBGIHByb2dyYW1zLCBydW5uaW5nIHdpdGhpbiB0aGUgQlBGIFZNLCBoYXZlIHRoZWlyIG93biBvcHRpbWl6ZWQgaGVscGVycyBmb3IgbWFwIG1hbmlwdWxhdGlvbi4gVGhpcyBzZXR1cCBzdWdnZXN0cyBjYXJlZnVsIGNvbnNpZGVyYXRpb24gb2Ygc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGludGVncml0eSBvZiB0aGUgQlBGIGVudmlyb25tZW50LiBJJ20gbm90aW5nIHRoaXMgaXMgYSBzdGFuZGFyZCBwYXR0ZXJuLCBhbmQgdGhlIGNvZGUgbG9va3MgYXMgaXQgc2hvdWxkIGZvciB0aGlzIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjMwOjE0LjU2NTU0NTY0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NzU1MjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX21hcF91cGRhdGVfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTM2NTk9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzY2MDppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjYxLWludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9Mzc0NT1zdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1MC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3NTE6c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUyLVxcdFxcdFxcdFxcdFxcdCAgIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI1MT1zdGF0aWMgaW50IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI2NC1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjY1OlxcdFxcdHJldHVybiBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMobWFwLCBrZXksIHZhbHVlLCBmbGFncyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY2LVxcdH0gZWxzZSBpZiAoSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1NT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU4OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk5OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYwMC1cXHRcXHRcXHRcXHQgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNi1cXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzOC1cXHQubWFwX2RlbGV0ZV9lbGVtXFx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1MS1cXHQubWFwX2dldF9uZXh0X2tleVxcdD0gc29ja19oYXNoX2dldF9uZXh0X2tleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTI6XFx0Lm1hcF91cGRhdGVfZWxlbVxcdD0gc29ja19tYXBfdXBkYXRlX2VsZW0sXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUzLVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfaGFzaF9kZWxldGVfZWxlbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MTYuNDEzMTAzMTYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjAwOTYwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQlBGIFNvY2ttYXAgVXBkYXRlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgaGVyZS4gRGVmaW5pdGVseSwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgYW5kIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgYXJlIHByaW1hcnkgdGFyZ2V0cy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgYWN0dWFsbHkgYXNzaWduZWQgdG8gYG1hcF91cGRhdGVfZWxlbWAgd2l0aGluIGJvdGggYHNvY2tfbWFwX29wc2AgYW5kIGBzb2NrX2hhc2hfb3BzYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3IgdHJhY2luZyB0aGUgY2FsbCBmbG93LlxuXG5IbW0sIGFuZCB3aGF0IGFib3V0IGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYD8gVGhhdCdzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCdzIHRoZSBvbmUgdGhhdCdzIGFjdHVhbGx5ICptb2RpZmllZCogYXQgcnVudGltZSwgbWFraW5nIGl0IGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgc3RhdGUgY2hhbmdlcyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIHRoaW5rIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGF0IGluIG91ciBzY29wZSBhcyB3ZWxsLlxuXG5TbywgdG8gYmUgY2xlYXIsIHRoZSBwcmltYXJ5IHN5bWJvbHMgb2YgaW50ZXJlc3QgYXJlOiBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCwgYW5kIGBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkYC5cblxuTm93LCByZWdhcmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBvZiB0aGlzIGZlYXR1cmUuIFRoaXMgaXMgQlBGIHNvY2ttYXAsIHJpZ2h0PyBMZXQncyBjaGVjayBgbmV0L2NvcmUvTWFrZWZpbGVgIG9yIGBuZXQvY29yZS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGluZyB0byBgc29ja19tYXAuY2AuIFRoYXQgc2hvdWxkIGdpdmUgdXMgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3MgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjMwOjIyLjA3MzIwMTc3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4NTUzNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9za19zdG9yYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MjIuNDMxNzYxNDg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjAyOTk5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhlcmUgaGluZ2VzIGVudGlyZWx5IG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXMgdGhhdCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW1wYWN0aW5nIHRoaXMgc2VjdGlvbiBvZiBjb2RlPyBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIG90aGVycy5cblxuQWxyaWdodCwgbm93IHRoYXQgSSBoYXZlIGEgaGFuZGxlIG9uIHRoYXQsIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGFjdHVhbCBpbXBhY3RlZCBjb2RlIGlzLiBUbyBkbyB0aGF0LCBJJ2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGFuZCBjb21iIHRocm91Z2ggaXQuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyB0aGUgY29kZSB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBjb21waWxlZCBhbmQsIHRoZXJlZm9yZSwgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA2OjMwOjI1LjQ1MjA2MzQwOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MzA6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpXFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU47XFxuIDUzMjpcXHRcXHRlbHNlXFxuIDUzMzpcXHRcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zdGF0ZSkgPT0gVENQX0VTVEFCTElTSEVEO1xcbiA1MzQ6XFx0fVxcbiA1MzU6XFx0XFxuIDUzNjpcXHRzdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuIDUzNzpcXHR7XFxuIDUzODpcXHRcXHRyZXR1cm4gISFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Q7XFxuIDUzOTpcXHR9XFxuIDU0MDpcXHRcXG4gNTQxOlxcdHN0YXRpYyBib29sIHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbiA1NDI6XFx0e1xcbiA1NDM6XFx0XFx0aWYgKHNrX2lzX3RjcChzaykpXFxuIDU0NDpcXHRcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xcbiA1NDU6XFx0XFx0aWYgKHNrX2lzX3VkcChzaykpXFxuIDU0NjpcXHRcXHRcXHRyZXR1cm4gc2tfaGFzaGVkKHNrKTtcXG4gNTQ3OlxcdFxcdGlmIChza19pc19zdHJlYW1fdW5peChzaykpXFxuIDU0ODpcXHRcXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2MgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zdGF0ZSkpIFxcdTAwMjYgVENQRl9FU1RBQkxJU0hFRDtcXG4gNTQ5OlxcdFxcdGlmIChza19pc192c29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4gNTUwOlxcdFxcdCAgICAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0gfHwgc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpKVxcbiA1NTE6XFx0XFx0XFx0cmV0dXJuICgxIFxcdTAwM2NcXHUwMDNjIHNrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNiBUQ1BGX0VTVEFCTElTSEVEO1xcbiA1NTI6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDU1MzpcXHR9XFxuIDU1NDpcXHRcXG4gNTU1OlxcdHN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiA1NTY6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNvY2sgKnNrLCB1NjQgZmxhZ3MpO1xcbiA1NTc6XFx0XFxuIDU1ODpcXHRpbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIDU1OTpcXHRcXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MjUuNDUyMzYzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTA2ODcwNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVURQIFNvY2ttYXAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEknbSBub3Qgc2VlaW5nIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcm91bmQgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLiBUaGF0IG1lYW5zIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBwcmltYXJ5LCBpZiBub3Qgb25seSwgZW5hYmxlciBoZXJlLiBCdXQsIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IFVEUC4gSXMgdGhlcmUgYSBtb3JlIHNwZWNpZmljIGNvbmZpZyBmb3IgVURQIGJleW9uZCBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0lORVRgIHdoaWNoIGlzIGp1c3QgdG9vIGJyb2FkP1xuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIHRoZSBvYmplY3QgZmlsZSwgYHNvY2tfbWFwLm9gLCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYWN0aXZlLiBIbW0sIHRoYXQncyBwcm9taXNpbmcuIEJ1dCBkb2VzIHRoYXQgbWVhbiBpdCdzIGFsbCBJIG5lZWQ/IFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBhYm91dCBVRFAgc29ja21hcCBzdXBwb3J0LCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZmlsZXMgaW4gdGhlIGtlcm5lbC4gTGV0IG1lIGxvb2sgYXQgYG5ldC9pcHY0L3VkcF9icGYuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgZm9yIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBVRFAgc3BlY2lmaWNhbGx5LiBUaGF0IHNob3VsZCBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdG8gdGVzdCBVRFAgc29ja21hcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMDoyOS41NTkyMzY3MTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDkzMzgzMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJNQUlOVEFJTkVSUz00OTcyPUY6XFx0bmV0L2lwdjQvdGNwX2JwZi5jXFxuTUFJTlRBSU5FUlM6NDk3MzpGOlxcdG5ldC9pcHY0L3VkcF9icGYuY1xcbk1BSU5UQUlORVJTLTQ5NzQtRjpcXHRuZXQvdW5peC91bml4X2JwZi5jXFxuLS1cXG5pbmNsdWRlL25ldC91ZHAuaD02NTI9c3RydWN0IHNrX3Bzb2NrO1xcbmluY2x1ZGUvbmV0L3VkcC5oOjY1MzppbnQgdWRwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpO1xcbmluY2x1ZGUvbmV0L3VkcC5oLTY1NC0jZW5kaWZcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVExBQkVMKSArPSBjaXBzb19pcHY0Lm9cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTMxMTA9c3RydWN0IHByb3RvIHVkcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzEzMS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdWRwLmM6MzEzMjpcXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcXHQ9IHVkcF9icGZfdXBkYXRlX3Byb3RvLFxcbm5ldC9pcHY0L3VkcC5jLTMxMzMtI2VuZGlmXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM9Mzc9c3RhdGljIGludCB1ZHBfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtNjItXFxubmV0L2lwdjQvdWRwX2JwZi5jOjYzOnN0YXRpYyBpbnQgdWRwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3VkcF9icGYuYy02NC1cXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM9MTE5PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRwdjZfcHJvdF9sb2NrKTtcXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTIwOnN0YXRpYyBzdHJ1Y3QgcHJvdG8gdWRwX2JwZl9wcm90c1tVRFBfQlBGX05VTV9QUk9UU107XFxubmV0L2lwdjQvdWRwX2JwZi5jLTEyMS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTIyOnN0YXRpYyBpbnQgdWRwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTIzLXtcXG4tLVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xMzQtXFxubmV0L2lwdjQvdWRwX2JwZi5jOjEzNTpzdGF0aWMgdm9pZCB1ZHBfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqcHJvdCwgY29uc3Qgc3RydWN0IHByb3RvICpiYXNlKVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xMzYte1xcbi0tXFxubmV0L2lwdjQvdWRwX2JwZi5jLTEzOC1cXHRwcm90LVxcdTAwM2VjbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdWRwX2JwZi5jOjEzOTpcXHRwcm90LVxcdTAwM2VyZWN2bXNnXFx0XFx0PSB1ZHBfYnBmX3JlY3Ztc2c7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE0MC1cXHRwcm90LVxcdTAwM2Vzb2NrX2lzX3JlYWRhYmxlXFx0PSBza19tc2dfaXNfcmVhZGFibGU7XFxubmV0L2lwdjQvdWRwX2JwZi5jOjE0MTpcXHRwcm90LVxcdTAwM2Vpb2N0bFxcdFxcdD0gdWRwX2JwZl9pb2N0bDtcXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQyLX1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTQzLVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNDQ6c3RhdGljIHZvaWQgdWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNDUte1xcbi0tXFxubmV0L2lwdjQvdWRwX2JwZi5jLTE0OC1cXHRcXHRpZiAobGlrZWx5KG9wcyAhPSB1ZHB2Nl9wcm90X3NhdmVkKSkge1xcbm5ldC9pcHY0L3VkcF9icGYuYzoxNDk6XFx0XFx0XFx0dWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhcXHUwMDI2dWRwX2JwZl9wcm90c1tVRFBfQlBGX0lQVjZdLCBvcHMpO1xcbm5ldC9pcHY0L3VkcF9icGYuYy0xNTAtXFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnVkcHY2X3Byb3Rfc2F2ZWQsIG9wcyk7XFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTU1LVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNTY6c3RhdGljIGludCBfX2luaXQgdWRwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxcbm5ldC9pcHY0L3VkcF9icGYuYy0xNTcte1xcbm5ldC9pcHY0L3VkcF9icGYuYzoxNTg6XFx0dWRwX2JwZl9yZWJ1aWxkX3Byb3RvcyhcXHUwMDI2dWRwX2JwZl9wcm90c1tVRFBfQlBGX0lQVjRdLCBcXHUwMDI2dWRwX3Byb3QpO1xcbm5ldC9pcHY0L3VkcF9icGYuYy0xNTktXFx0cmV0dXJuIDA7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE2MC19XFxubmV0L2lwdjQvdWRwX2JwZi5jOjE2MTpsYXRlX2luaXRjYWxsKHVkcF9icGZfdjRfYnVpbGRfcHJvdG8pO1xcbm5ldC9pcHY0L3VkcF9icGYuYy0xNjItXFxubmV0L2lwdjQvdWRwX2JwZi5jOjE2MzppbnQgdWRwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxubmV0L2lwdjQvdWRwX2JwZi5jLTE2NC17XFxuLS1cXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTczLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbm5ldC9pcHY0L3VkcF9icGYuYzoxNzQ6XFx0XFx0dWRwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVxcdTAwM2Vza19wcm90byk7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE3NS1cXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTc2OlxcdHNvY2tfcmVwbGFjZV9wcm90byhzaywgXFx1MDAyNnVkcF9icGZfcHJvdHNbZmFtaWx5XSk7XFxubmV0L2lwdjQvdWRwX2JwZi5jLTE3Ny1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC91ZHBfYnBmLmMtMTc4LX1cXG5uZXQvaXB2NC91ZHBfYnBmLmM6MTc5OkVYUE9SVF9TWU1CT0xfR1BMKHVkcF9icGZfdXBkYXRlX3Byb3RvKTtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE4Nzk9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTAwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2Ni91ZHAuYzoxOTAxOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjYvdWRwLmMtMTkwMi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MzEuNDA4NTc5MzE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTUwMDQ5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTb2NrZXQgTWFwIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyBleHBlY3RlZC4gTm93LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBzb2NrZXQgbWFwIHVwZGF0ZSBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB0byBjb25zaWRlciB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0byBjb25zaWRlciBhcmU6XG4qICAgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2BcbiogICBgc29ja19tYXBfdXBkYXRlX2VsZW1gXG4qICAgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgXG5cbkhtbSwgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLi4uIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYW5kIGl0IGxvb2tzIHNtYWxsLiBEaXJlY3QgZnV6emluZyBtaWdodCBiZSB0cmlja3kgaWYgdGhlIGNvbXBpbGVyIGlubGluZXMgaXQsIGJ1dCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoYXQuIEknbSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgY2FuIGZpZ3VyZSB0aGF0IHN0dWZmIG91dC5cblxuSXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgc29ja19oYXNoX3VwZGF0ZV9lbGVtYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvc29ja19tYXAuY2AgZm9yIHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBpZGVudGlmaWVkIGFsbCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI0MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNjozMDozNS43MDM1ODY1ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzgyMTI4ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfaGFzaF91cGRhdGVfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6MzcuNTQxODA2ODU3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjQxMTkxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrbWFwIFVwZGF0ZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBzb2NrX2hhc2hfb3BzYCBzdHJ1Y3R1cmUgYW5kIGltbWVkaWF0ZWx5IHNwb3QgdGhhdCBpdCBsZXZlcmFnZXMgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCwgcmlnaHQ/IFRoYXQncyB0aGUga2V5IGVudHJ5IHBvaW50LiBBbmQgdGhlbiwgZnJvbSB0aGVyZSwgd2UgaGF2ZSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCB3aGljaCBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIEJQRiwgaXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbCwgc28gaXQncyBhIGNyaXRpY2FsIHBhdGguIEl0IGxvb2tzIGxpa2UgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgaXMgYWN0dWFsbHkgaW52b2tlZCBieSBgYnBmX21hcF91cGRhdGVfdmFsdWVgLCBzbyB0aGV5IGFyZSBhbGwgY29ubmVjdGVkLlxuXG5Ob3csIGxldCdzIHVuZGVyc3RhbmQgKndoeSogdGhpcyBtYXR0ZXJzLiBUaGUgcGF0Y2gncyByZWFzb25pbmcgaXMgY2xlYXI6IGl0J3MgYWJvdXQgcHJldmVudGluZyB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIHNvY2ttYXAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5zdGFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoaXMgZml4IGxpZXMgaW4gdGhlIGNoYW5nZXMgdG8gYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLiBUaGlzIGZ1bmN0aW9uIG5vdyBmaWx0ZXJzIG91dCB1bmJvdW5kIFVEUCBzb2NrZXRzLCBlbnN1cmluZyB0aGF0IG9ubHkgdmFsaWQgc3RhdGVzIGFyZSBwcm9jZXNzZWQgYnkgQlBGIHByb2dyYW1zLiBUaGlzIHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgaG93IHRoaW5ncyBhcmUgaGFuZGxlZC4gU28gZnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyByb2J1c3RuZXNzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgdmlzaWJpbGl0eSBvZiBgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZGAsIGJlY2F1c2UgaXQncyBtYXJrZWQgYHN0YXRpY2AuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIGl0J3Mgc3RhdGljIGJ1dCBub3QgZXhwbGljaXRseSBtYXJrZWQgYGlubGluZWAsIHNvIGl0J3MgZmluZSB0byBsaXN0IGl0IGFuZCBpdCBzaG91bGQgYmUgdmlzaWJsZSB0byB1cy5cblxuVGhlIGNyaXRpY2FsIHN5bWJvbHMgaGVyZSBhcmU6IGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgc29ja19tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRgLlxuXG5MZXQncyB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY3MiwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDY6MzA6NDUuMDY1OTI4NDU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyMjQ5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCIsXG4gICAgXCJzb2NrX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwic29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHNvY2ttYXAgbG9naWMgdG8gcmVqZWN0IHVuYm91bmQgVURQIHNvY2tldHMgZnJvbSBiZWluZyBhZGRlZCB0byBhIHNvY2ttYXAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGJ1Z3Mgb3IgY3Jhc2hlcyBjYXVzZWQgYnkgdW5pbml0aWFsaXplZCBvciB1bmhhc2hlZCBzb2NrZXRzIGludGVyYWN0aW5nIHdpdGggQlBGIHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93LiBGdXp6aW5nIHRoZSBtYXAgdXBkYXRlIGZ1bmN0aW9ucyB3aXRoIHZhcmlvdXMgc29ja2V0IHN0YXRlcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiBzb2NrbWFwIGxvZ2ljIHRvIHJlamVjdCB1bmJvdW5kIFVEUCBzb2NrZXRzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBidWdzIG9yIGNyYXNoZXMgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgb3IgdW5oYXNoZWQgc29ja2V0cyBpbnRlcmFjdGluZyB3aXRoIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdy4gRnV6emluZyB0aGUgbWFwIHVwZGF0ZSBmdW5jdGlvbnMgd2l0aCB2YXJpb3VzIHNvY2tldCBzdGF0ZXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[1] Phase: Succeeded StartedAt: 2026-07-02 06:31:11 +0000 UTC FinishedAt: 2026-07-02 06:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 06:31:11 +0000 UTC FinishedAt: 2026-07-02 06:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2] Phase: Succeeded StartedAt: 2026-07-02 06:31:11 +0000 UTC FinishedAt: 2026-07-02 10:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 06:31:11 +0000 UTC FinishedAt: 2026-07-02 10:52:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 06:31:11 +0000 UTC FinishedAt: 2026-07-02 06:32:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 06:31:11 +0000 UTC FinishedAt: 2026-07-02 06:31:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowg47q6/series-workflowg47q6-convert-artifact-3507131317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 06:32:38 +0000 UTC FinishedAt: 2026-07-02 07:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 06:32:38 +0000 UTC FinishedAt: 2026-07-02 07:07:01 +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:*9a2fa13c-311e-4244-b07b-ef9c933f4c0b,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-workflowg47q6/series-workflowg47q6-convert-artifact-3507131317/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": "56e53d1d-dd97-41ab-9e3d-a7857c4f1701", "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-workflowg47q6/series-workflowg47q6-build-action-645418907/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 06:32:38 +0000 UTC FinishedAt: 2026-07-02 07:06:33 +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:*9a2fa13c-311e-4244-b07b-ef9c933f4c0b,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-workflowg47q6/series-workflowg47q6-convert-artifact-3507131317/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": "56e53d1d-dd97-41ab-9e3d-a7857c4f1701", "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-workflowg47q6/series-workflowg47q6-build-action-645418907/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 07:07:01 +0000 UTC FinishedAt: 2026-07-02 07:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 07:07:01 +0000 UTC FinishedAt: 2026-07-02 07:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 07:07:01 +0000 UTC FinishedAt: 2026-07-02 07:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 07:07:01 +0000 UTC FinishedAt: 2026-07-02 07:07:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowg47q6/series-workflowg47q6-convert-artifact-1000938512/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 07:07:21 +0000 UTC FinishedAt: 2026-07-02 07:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 07:07:21 +0000 UTC FinishedAt: 2026-07-02 07:09:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*56e53d1d-dd97-41ab-9e3d-a7857c4f1701,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-workflowg47q6/series-workflowg47q6-build-action-645418907/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-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 07:09:43 +0000 UTC FinishedAt: 2026-07-02 07:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 07:09:43 +0000 UTC FinishedAt: 2026-07-02 07:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 07:09:43 +0000 UTC FinishedAt: 2026-07-02 07:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 07:09:43 +0000 UTC FinishedAt: 2026-07-02 07:42:30 +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:*9a2fa13c-311e-4244-b07b-ef9c933f4c0b,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-workflowg47q6/series-workflowg47q6-convert-artifact-1000938512/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": "512f5364-9f5c-43ad-a1d4-6fbb840d6b23", "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-workflowg47q6/series-workflowg47q6-build-action-1311709324/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 07:09:43 +0000 UTC FinishedAt: 2026-07-02 07:42:19 +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:*9a2fa13c-311e-4244-b07b-ef9c933f4c0b,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-workflowg47q6/series-workflowg47q6-convert-artifact-1000938512/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": "512f5364-9f5c-43ad-a1d4-6fbb840d6b23", "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-workflowg47q6/series-workflowg47q6-build-action-1311709324/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 07:42:30 +0000 UTC FinishedAt: 2026-07-02 07:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 07:42:30 +0000 UTC FinishedAt: 2026-07-02 07:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 07:42:30 +0000 UTC FinishedAt: 2026-07-02 07:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 07:42:31 +0000 UTC FinishedAt: 2026-07-02 07:44:44 +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:*512f5364-9f5c-43ad-a1d4-6fbb840d6b23,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-workflowg47q6/series-workflowg47q6-build-action-1311709324/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-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 07:44:54 +0000 UTC FinishedAt: 2026-07-02 10:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 07:44:54 +0000 UTC FinishedAt: 2026-07-02 10:52:04 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"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:*56e53d1d-dd97-41ab-9e3d-a7857c4f1701,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*512f5364-9f5c-43ad-a1d4-6fbb840d6b23,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-workflowg47q6/series-workflowg47q6-build-action-645418907/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-workflowg47q6/series-workflowg47q6-build-action-1311709324/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 07:44:54 +0000 UTC FinishedAt: 2026-07-02 07:45:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 07:44:54 +0000 UTC FinishedAt: 2026-07-02 07:45:00 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"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-workflowg47q6/series-workflowg47q6-convert-artifact-3785613577/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 07:44:54 +0000 UTC FinishedAt: 2026-07-02 07:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 07:44:54 +0000 UTC FinishedAt: 2026-07-02 07:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 07:44:54 +0000 UTC FinishedAt: 2026-07-02 07:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 07:45:04 +0000 UTC FinishedAt: 2026-07-02 10:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg47q6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_update_elem","sock_map_sk_state_allowed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b72e29e0f7ee329d89f86db8700c8ea99b4a370a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"b323738f-ad42-4f1e-a46d-1a9912cdfc54","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 07:45:04 +0000 UTC FinishedAt: 2026-07-02 10:51:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*56e53d1d-dd97-41ab-9e3d-a7857c4f1701,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*512f5364-9f5c-43ad-a1d4-6fbb840d6b23,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-workflowg47q6/series-workflowg47q6-build-action-645418907/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-workflowg47q6/series-workflowg47q6-build-action-1311709324/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-workflowg47q6/series-workflowg47q6-convert-artifact-3785613577/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,}