Name: series-workflowmtjx4 Phase: Succeeded StartedAt: 2026-09-03 22:00:17 +0000 UTC FinishedAt: 2026-09-04 02:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[0] Phase: Succeeded StartedAt: 2026-09-03 22:00:17 +0000 UTC FinishedAt: 2026-09-03 22:47:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 22:00:17 +0000 UTC FinishedAt: 2026-09-03 22:47:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "NUMA_MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "NUMA_MIGRATION" ], "series_id": "b88d2d9f-4508-450f-8683-46a117fe6840" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "find_next_best_node_in", "next_demotion_node", "establish_demotion_targets", "build_node_zonelist" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5kX25leHRfYmVzdF9ub2RlX2luJiMzNDssCiAgICAmIzM0O25leHRfZGVtb3Rpb25fbm9kZSYjMzQ7LAogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7LAogICAgJiMzNDtidWlsZF9ub2RlX3pvbmVsaXN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYW5kIG1tL21lbW9yeS10aWVycy5jLiBJdCByZWZhY3RvcnMgbm9kZSBmYWxsYmFjayBsaXN0IGdlbmVyYXRpb24gKGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIGJ1aWxkX25vZGVfem9uZWxpc3QpIHRvIGFjY2VwdCBleHBsaWNpdCBjYW5kaWRhdGUgbm9kZW1hc2tzIGFuZCB1cGRhdGVzIG1lbW9yeSB0aWVyaW5nIC8gZGVtb3Rpb24gdGFyZ2V0IGNhbGN1bGF0aW9ucyAobmV4dF9kZW1vdGlvbl9ub2RlLCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cykuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbWVtb3J5IHRpZXJpbmcgZGVtb3Rpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNmJlYzZlZmQyOGQ5ZTIxZGNmNGM5ZTVmODAxODQwOGI3ODI3ODE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMjo0NTo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggZTE2ZjEyNTBiMjVjOC4uMThkMDQxZmY1YzUyYyAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0xMTMwLDcgJiM0MzsxMTMwLDggQEAgZXh0ZXJuIGludCBub2RlX3JlY2xhaW1fbW9kZTtcbiBcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XG4tZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayk7XG4mIzQzO2V4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcbiAjZWxzZVxuICNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxuIFxuQEAgLTExMzksNyAmIzQzOzExNDAsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuIHtcbiBcdHJldHVybiBOVU1BX05PX05PREU7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS10aWVycy5jIGIvbW0vbWVtb3J5LXRpZXJzLmNcbmluZGV4IDU0ODUxZDhhMTk1YjAuLjI1ZTEyMTg1MWI1ODYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktdGllcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LXRpZXJzLmNcbkBAIC0zNzAsNyAmIzQzOzM3MCw3IEBAIGludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcbiBcdCAqIGNsb3Nlc3QgZGVtb3Rpb24gdGFyZ2V0LlxuIFx0ICovXG4gXHRub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spO1xuLVx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGUobm9kZSwgXHUwMDI2bWFzayk7XG4mIzQzO1x0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2bWFzaywgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGlzYWJsZV9hbGxfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuQEAgLTQ1MCw3ICYjNDM7NDUwLDcgQEAgc3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbiBcdFx0bWVtdGllciA9IGxpc3RfbmV4dF9lbnRyeShtZW10aWVyLCBsaXN0KTtcbiBcdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuIFx0XHQvKlxuLVx0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlLCB1c2UgJiMzOTt1c2VkJiMzOTsgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG4mIzQzO1x0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlX2luLCB1c2UgJiMzOTt1c2VkJiMzOTsgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG4gXHRcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcbiBcdFx0ICogbm9kZWxpc3QgdG8gc2tpcCBsaXN0IHNvIHRoYXQgd2UgZmluZCB0aGUgYmVzdCBub2RlIGZyb20gdGhlXG4gXHRcdCAqIG1lbXRpZXIgbm9kZWxpc3QuXG5AQCAtNDYzLDcgJiM0Mzs0NjMsOCBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuIFx0XHQgKiBpbiB0aGUgcHJlZmVycmVkIG1hc2sgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGR1cmluZyBkZW1vdGlvbi5cbiBcdFx0ICovXG4gXHRcdGRvIHtcbi1cdFx0XHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIFx1MDAyNnRpZXJfbm9kZXMpO1xuJiM0MztcdFx0XHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFx1MDAyNnRpZXJfbm9kZXMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbiBcdFx0XHRpZiAodGFyZ2V0ID09IE5VTUFfTk9fTk9ERSlcbiBcdFx0XHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYzRkYzYxZWM2NjNlZS4uZTFkN2M4YjIyMWQwZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTc3OSw5ICYjNDM7NTc3OSwxMCBAQCBzdGF0aWMgaW50IG51bWFfem9uZWxpc3Rfb3JkZXJfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XG4gXG4gLyoqXG4tICogZmluZF9uZXh0X2Jlc3Rfbm9kZSAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJiMzOTtzIGZhbGxiYWNrIGxpc3RcbiYjNDM7ICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJiMzOTtzIGZhbGxiYWNrIGxpc3RcbiAgKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJiMzOTtyZSBhcHBlbmRpbmdcbiAgKiBAdXNlZF9ub2RlX21hc2s6IG5vZGVtYXNrX3Qgb2YgYWxyZWFkeSB1c2VkIG5vZGVzXG4mIzQzOyAqIEBjYW5kaWRhdGVzOiBub2RlbWFza190IG9mIG5vZGVzIGVsaWdpYmxlIGZvciBzZWxlY3Rpb25cbiAgKlxuICAqIFdlIHVzZSBhIG51bWJlciBvZiBmYWN0b3JzIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkXG4gICogYXBwZWFyIG9uIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0LiAgVGhlIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFwcGVhcmVkXG5AQCAtNTc5Myw3ICYjNDM7NTc5NCw4IEBAIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XG4gICpcbiAgKiBSZXR1cm46IG5vZGUgaWQgb2YgdGhlIGZvdW5kIG5vZGUgb3IgJU5VTUFfTk9fTk9ERSBpZiBubyBub2RlIGlzIGZvdW5kLlxuICAqL1xuLWludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcbiYjNDM7aW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxuJiM0MztcdFx0XHQgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuIHtcbiBcdGludCBuLCB2YWw7XG4gXHRpbnQgbWluX3ZhbCA9IElOVF9NQVg7XG5AQCAtNTgwMywxMiAmIzQzOzU4MDUsMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuIFx0ICogVXNlIHRoZSBsb2NhbCBub2RlIGlmIHdlIGhhdmVuJiMzOTt0IGFscmVhZHksIGJ1dCBmb3IgbWVtb3J5bGVzcyBsb2NhbFxuIFx0ICogbm9kZSwgd2Ugc2hvdWxkIHNraXAgaXQgYW5kIGZhbGwgYmFjayB0byBvdGhlciBub2Rlcy5cbiBcdCAqL1xuLVx0aWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgXHUwMDI2XHUwMDI2IG5vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpKSB7XG4mIzQzO1x0aWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgKmNhbmRpZGF0ZXMpKSB7XG4gXHRcdG5vZGVfc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzayk7XG4gXHRcdHJldHVybiBub2RlO1xuIFx0fVxuIFxuLVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuLCBOX01FTU9SWSkge1xuJiM0MztcdGZvcl9lYWNoX25vZGVfbWFzayhuLCAqY2FuZGlkYXRlcykge1xuIFxuIFx0XHQvKiBEb24mIzM5O3Qgd2FudCBhIG5vZGUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlICovXG4gXHRcdGlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVfbWFzaykpXG5AQCAtNTg0NywxMiAmIzQzOzU4NDksMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuICAqIERNQSB6b25lLCBpZiBhbnktLWJ1dCByaXNrcyBleGhhdXN0aW5nIERNQSB6b25lLlxuICAqL1xuIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlcixcbi1cdFx0dW5zaWduZWQgbnJfbm9kZXMpXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbnJfbm9kZXMsIGludCB6bGlkeClcbiB7XG4gXHRzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZnM7XG4gXHRpbnQgaTtcbiBcbi1cdHpvbmVyZWZzID0gcGdkYXQtXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmcztcbiYjNDM7XHR6b25lcmVmcyA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW3psaWR4XS5fem9uZXJlZnM7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aW50IG5yX3pvbmVzO1xuQEAgLTU4ODEsMjUgJiM0Mzs1ODgzLDI4IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuIFx0em9uZXJlZnMtXHUwMDNlem9uZV9pZHggPSAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbiYjNDM7LypcbiYjNDM7ICogQnVpbGQgb25lIG5vZGUtb3JkZXJlZCBmYWxsYmFjayBsaXN0IGZyb20gYSBjYW5kaWRhdGUgbm9kZW1hc2suXG4mIzQzOyAqIHVwZGF0ZV9sb2FkIHJvdW5kLXJvYmlucyBub2RlX2xvYWQgYWNyb3NzIGVxdWlkaXN0YW50IG5vZGVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuJiM0MztcdFx0XHRcdGludCB6bGlkeCwgYm9vbCB1cGRhdGVfbG9hZCxcbiYjNDM7XHRcdFx0XHRpbnQgKm5vZGVfb3JkZXIsIGludCAqbnIpXG4ge1xuLVx0c3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107XG4tXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xuIFx0bm9kZW1hc2tfdCB1c2VkX21hc2sgPSBOT0RFX01BU0tfTk9ORTtcbi1cdGludCBsb2NhbF9ub2RlLCBwcmV2X25vZGU7XG4tXG4tXHQvKiBOVU1BLWF3YXJlIG9yZGVyaW5nIG9mIG5vZGVzICovXG4tXHRsb2NhbF9ub2RlID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbi1cdHByZXZfbm9kZSA9IGxvY2FsX25vZGU7XG4mIzQzO1x0aW50IGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuJiM0MztcdGludCBwcmV2X25vZGUgPSBsb2NhbF9ub2RlO1xuJiM0MztcdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG4gXG4tXHRtZW1zZXQobm9kZV9vcmRlciwgMCwgc2l6ZW9mKG5vZGVfb3JkZXIpKTtcbi1cdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGUobG9jYWxfbm9kZSwgXHUwMDI2dXNlZF9tYXNrKSkgXHUwMDNlPSAwKSB7XG4mIzQzO1x0d2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihsb2NhbF9ub2RlLCBcdTAwMjZ1c2VkX21hc2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYW5kaWRhdGVzKSkgXHUwMDNlPSAwKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFdlIGRvbiYjMzk7dCB3YW50IHRvIHByZXNzdXJlIGEgcGFydGljdWxhciBub2RlLlxuIFx0XHQgKiBTbyBhZGRpbmcgcGVuYWx0eSB0byB0aGUgZmlyc3Qgbm9kZSBpbiBzYW1lXG4gXHRcdCAqIGRpc3RhbmNlIGdyb3VwIHRvIG1ha2UgaXQgcm91bmQtcm9iaW4uXG4gXHRcdCAqL1xuLVx0XHRpZiAobm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPVxuJiM0MztcdFx0aWYgKHVwZGF0ZV9sb2FkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgbm9kZSkgIT1cbiBcdFx0ICAgIG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgcHJldl9ub2RlKSlcbiBcdFx0XHRub2RlX2xvYWRbbm9kZV0gJiM0Mzs9IDE7XG4gXG5AQCAtNTkwNyw4ICYjNDM7NTkxMiwyMiBAQCBzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbiBcdFx0cHJldl9ub2RlID0gbm9kZTtcbiBcdH1cbiBcbi1cdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2Rlcyk7XG4mIzQzO1x0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7XG4mIzQzO1x0Km5yID0gbnJfbm9kZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107XG4mIzQzO1x0aW50IGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuJiM0MztcdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG4mIzQzO1xuJiM0MztcdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xuJiM0MztcbiYjNDM7XHRidWlsZF9ub2RlX3pvbmVsaXN0KHBnZGF0LCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIFpPTkVMSVNUX0ZBTExCQUNLLFxuJiM0MztcdFx0XHQgICAgdHJ1ZSwgbm9kZV9vcmRlciwgXHUwMDI2bnJfbm9kZXMpO1xuIFx0YnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTtcbiYjNDM7XG4gXHRwcl9pbmZvKFwmIzM0O0ZhbGxiYWNrIG9yZGVyIGZvciBOb2RlICVkOiBcJiMzNDssIGxvY2FsX25vZGUpO1xuIFx0Zm9yIChub2RlID0gMDsgbm9kZSBcdTAwM2MgbnJfbm9kZXM7IG5vZGUmIzQzOyYjNDM7KVxuIFx0XHRwcl9jb250KFwmIzM0OyVkIFwmIzM0Oywgbm9kZV9vcmRlcltub2RlXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtOVU1BX01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmRfbmV4dF9iZXN0X25vZGVfaW4mIzM0OywKICAgICYjMzQ7bmV4dF9kZW1vdGlvbl9ub2RlJiMzNDssCiAgICAmIzM0O2VzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzJiMzNDssCiAgICAmIzM0O2J1aWxkX25vZGVfem9uZWxpc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYW5kIG1tL21lbW9yeS10aWVycy5jLiBJdCByZWZhY3RvcnMgbm9kZSBmYWxsYmFjayBsaXN0IGdlbmVyYXRpb24gKGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIGJ1aWxkX25vZGVfem9uZWxpc3QpIHRvIGFjY2VwdCBleHBsaWNpdCBjYW5kaWRhdGUgbm9kZW1hc2tzIGFuZCB1cGRhdGVzIG1lbW9yeSB0aWVyaW5nIC8gZGVtb3Rpb24gdGFyZ2V0IGNhbGN1bGF0aW9ucyAobmV4dF9kZW1vdGlvbl9ub2RlLCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cykuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbWVtb3J5IHRpZXJpbmcgZGVtb3Rpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNmJlYzZlZmQyOGQ5ZTIxZGNmNGM5ZTVmODAxODQwOGI3ODI3ODE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMjo0NTo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IGUxNmYxMjUwYjI1YzguLjE4ZDA0MWZmNWM1MmMgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMTEzMCw3ICYjNDM7MTEzMCw4IEBAIGV4dGVybiBpbnQgbm9kZV9yZWNsYWltX21vZGU7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCSAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7Ci1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTsKJiM0MztleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLAomIzQzOwkJCQkgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpOwogI2Vsc2UKICNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMAogCkBAIC0xMTM5LDcgJiM0MzsxMTQwLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogewogCXJldHVybiAwOwogfQotc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssCiYjNDM7CQkJCQkgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcykKIHsKIAlyZXR1cm4gTlVNQV9OT19OT0RFOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LXRpZXJzLmMgYi9tbS9tZW1vcnktdGllcnMuYwppbmRleCA1NDg1MWQ4YTE5NWIwLi4yNWUxMjE4NTFiNTg2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktdGllcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktdGllcnMuYwpAQCAtMzcwLDcgJiM0MzszNzAsNyBAQCBpbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spCiAJICogY2xvc2VzdCBkZW1vdGlvbiB0YXJnZXQuCiAJICovCiAJbm9kZXNfY29tcGxlbWVudChtYXNrLCAqYWxsb3dlZF9tYXNrKTsKLQlyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZShub2RlLCAmYW1wO21hc2spOwomIzQzOwlyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCAmYW1wO21hc2ssICZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzYWJsZV9hbGxfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKQpAQCAtNDUwLDcgJiM0Mzs0NTAsNyBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKQogCQltZW10aWVyID0gbGlzdF9uZXh0X2VudHJ5KG1lbXRpZXIsIGxpc3QpOwogCQl0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7CiAJCS8qCi0JCSAqIGZpbmRfbmV4dF9iZXN0X25vZGUsIHVzZSAmIzM5O3VzZWQmIzM5OyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC4KJiM0MzsJCSAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAmIzM5O3VzZWQmIzM5OyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC4KIAkJICogQWRkIGFsbCBtZW1vcnkgbm9kZXMgZXhjZXB0IHRoZSBzZWxlY3RlZCBtZW1vcnkgdGllcgogCQkgKiBub2RlbGlzdCB0byBza2lwIGxpc3Qgc28gdGhhdCB3ZSBmaW5kIHRoZSBiZXN0IG5vZGUgZnJvbSB0aGUKIAkJICogbWVtdGllciBub2RlbGlzdC4KQEAgLTQ2Myw3ICYjNDM7NDYzLDggQEAgc3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZCkKIAkJICogaW4gdGhlIHByZWZlcnJlZCBtYXNrIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBkdXJpbmcgZGVtb3Rpb24uCiAJCSAqLwogCQlkbyB7Ci0JCQl0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsICZhbXA7dGllcl9ub2Rlcyk7CiYjNDM7CQkJdGFyZ2V0ID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCAmYW1wO3RpZXJfbm9kZXMsCiYjNDM7CQkJCQkJCSZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTsKIAkJCWlmICh0YXJnZXQgPT0gTlVNQV9OT19OT0RFKQogCQkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYzRkYzYxZWM2NjNlZS4uZTFkN2M4YjIyMWQwZCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTc3OSw5ICYjNDM7NTc3OSwxMCBAQCBzdGF0aWMgaW50IG51bWFfem9uZWxpc3Rfb3JkZXJfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTsKIAogLyoqCi0gKiBmaW5kX25leHRfYmVzdF9ub2RlIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUmIzM5O3MgZmFsbGJhY2sgbGlzdAomIzQzOyAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0CiAgKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJiMzOTtyZSBhcHBlbmRpbmcKICAqIEB1c2VkX25vZGVfbWFzazogbm9kZW1hc2tfdCBvZiBhbHJlYWR5IHVzZWQgbm9kZXMKJiM0MzsgKiBAY2FuZGlkYXRlczogbm9kZW1hc2tfdCBvZiBub2RlcyBlbGlnaWJsZSBmb3Igc2VsZWN0aW9uCiAgKgogICogV2UgdXNlIGEgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQKICAqIGFwcGVhciBvbiBhIGdpdmVuIG5vZGUmIzM5O3MgZmFsbGJhY2sgbGlzdC4gIFRoZSBub2RlIHNob3VsZCBub3QgaGF2ZSBhcHBlYXJlZApAQCAtNTc5Myw3ICYjNDM7NTc5NCw4IEBAIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107CiAgKgogICogUmV0dXJuOiBub2RlIGlkIG9mIHRoZSBmb3VuZCBub2RlIG9yICVOVU1BX05PX05PREUgaWYgbm8gbm9kZSBpcyBmb3VuZC4KICAqLwotaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKQomIzQzO2ludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaywKJiM0MzsJCQkgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKQogewogCWludCBuLCB2YWw7CiAJaW50IG1pbl92YWwgPSBJTlRfTUFYOwpAQCAtNTgwMywxMiAmIzQzOzU4MDUsMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKQogCSAqIFVzZSB0aGUgbG9jYWwgbm9kZSBpZiB3ZSBoYXZlbiYjMzk7dCBhbHJlYWR5LCBidXQgZm9yIG1lbW9yeWxlc3MgbG9jYWwKIAkgKiBub2RlLCB3ZSBzaG91bGQgc2tpcCBpdCBhbmQgZmFsbCBiYWNrIHRvIG90aGVyIG5vZGVzLgogCSAqLwotCWlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spICZhbXA7JmFtcDsgbm9kZV9zdGF0ZShub2RlLCBOX01FTU9SWSkpIHsKJiM0MzsJaWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgJmFtcDsmYW1wOyBub2RlX2lzc2V0KG5vZGUsICpjYW5kaWRhdGVzKSkgewogCQlub2RlX3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spOwogCQlyZXR1cm4gbm9kZTsKIAl9CiAKLQlmb3JfZWFjaF9ub2RlX3N0YXRlKG4sIE5fTUVNT1JZKSB7CiYjNDM7CWZvcl9lYWNoX25vZGVfbWFzayhuLCAqY2FuZGlkYXRlcykgewogCiAJCS8qIERvbiYjMzk7dCB3YW50IGEgbm9kZSB0byBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgKi8KIAkJaWYgKG5vZGVfaXNzZXQobiwgKnVzZWRfbm9kZV9tYXNrKSkKQEAgLTU4NDcsMTIgJiM0Mzs1ODQ5LDEyIEBAIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaykKICAqIERNQSB6b25lLCBpZiBhbnktLWJ1dCByaXNrcyBleGhhdXN0aW5nIERNQSB6b25lLgogICovCiBzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ19kYXRhX3QgKnBnZGF0LCBpbnQgKm5vZGVfb3JkZXIsCi0JCXVuc2lnbmVkIG5yX25vZGVzKQomIzQzOwkJdW5zaWduZWQgaW50IG5yX25vZGVzLCBpbnQgemxpZHgpCiB7CiAJc3RydWN0IHpvbmVyZWYgKnpvbmVyZWZzOwogCWludCBpOwogCi0Jem9uZXJlZnMgPSBwZ2RhdC0mZ3Q7bm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmczsKJiM0MzsJem9uZXJlZnMgPSBwZ2RhdC0mZ3Q7bm9kZV96b25lbGlzdHNbemxpZHhdLl96b25lcmVmczsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ub2RlczsgaSYjNDM7JiM0MzspIHsKIAkJaW50IG5yX3pvbmVzOwpAQCAtNTg4MSwyNSAmIzQzOzU4ODMsMjggQEAgc3RhdGljIHZvaWQgYnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCiAJem9uZXJlZnMtJmd0O3pvbmVfaWR4ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCiYjNDM7LyoKJiM0MzsgKiBCdWlsZCBvbmUgbm9kZS1vcmRlcmVkIGZhbGxiYWNrIGxpc3QgZnJvbSBhIGNhbmRpZGF0ZSBub2RlbWFzay4KJiM0MzsgKiB1cGRhdGVfbG9hZCByb3VuZC1yb2JpbnMgbm9kZV9sb2FkIGFjcm9zcyBlcXVpZGlzdGFudCBub2Rlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBidWlsZF9ub2RlX3pvbmVsaXN0KHBnX2RhdGFfdCAqcGdkYXQsIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMsCiYjNDM7CQkJCWludCB6bGlkeCwgYm9vbCB1cGRhdGVfbG9hZCwKJiM0MzsJCQkJaW50ICpub2RlX29yZGVyLCBpbnQgKm5yKQogewotCXN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdOwotCWludCBub2RlLCBucl9ub2RlcyA9IDA7CiAJbm9kZW1hc2tfdCB1c2VkX21hc2sgPSBOT0RFX01BU0tfTk9ORTsKLQlpbnQgbG9jYWxfbm9kZSwgcHJldl9ub2RlOwotCi0JLyogTlVNQS1hd2FyZSBvcmRlcmluZyBvZiBub2RlcyAqLwotCWxvY2FsX25vZGUgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKLQlwcmV2X25vZGUgPSBsb2NhbF9ub2RlOwomIzQzOwlpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlpbnQgcHJldl9ub2RlID0gbG9jYWxfbm9kZTsKJiM0MzsJaW50IG5vZGUsIG5yX25vZGVzID0gMDsKIAotCW1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpOwotCXdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGUobG9jYWxfbm9kZSwgJmFtcDt1c2VkX21hc2spKSAmZ3Q7PSAwKSB7CiYjNDM7CXdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obG9jYWxfbm9kZSwgJmFtcDt1c2VkX21hc2ssCiYjNDM7CQkJCQkgICAgICBjYW5kaWRhdGVzKSkgJmd0Oz0gMCkgewogCQkvKgogCQkgKiBXZSBkb24mIzM5O3Qgd2FudCB0byBwcmVzc3VyZSBhIHBhcnRpY3VsYXIgbm9kZS4KIAkJICogU28gYWRkaW5nIHBlbmFsdHkgdG8gdGhlIGZpcnN0IG5vZGUgaW4gc2FtZQogCQkgKiBkaXN0YW5jZSBncm91cCB0byBtYWtlIGl0IHJvdW5kLXJvYmluLgogCQkgKi8KLQkJaWYgKG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgbm9kZSkgIT0KJiM0MzsJCWlmICh1cGRhdGVfbG9hZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPQogCQkgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBwcmV2X25vZGUpKQogCQkJbm9kZV9sb2FkW25vZGVdICYjNDM7PSAxOwogCkBAIC01OTA3LDggJiM0Mzs1OTEyLDIyIEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KQogCQlwcmV2X25vZGUgPSBub2RlOwogCX0KIAotCWJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2Rlcyk7CiYjNDM7CWJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2RlcywgemxpZHgpOwomIzQzOwkqbnIgPSBucl9ub2RlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCiYjNDM7ewomIzQzOwlzdGF0aWMgaW50IG5vZGVfb3JkZXJbTUFYX05VTU5PREVTXTsKJiM0MzsJaW50IGxvY2FsX25vZGUgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKJiM0MzsJaW50IG5vZGUsIG5yX25vZGVzID0gMDsKJiM0MzsKJiM0MzsJbWVtc2V0KG5vZGVfb3JkZXIsIDAsIHNpemVvZihub2RlX29yZGVyKSk7CiYjNDM7CiYjNDM7CWJ1aWxkX25vZGVfem9uZWxpc3QocGdkYXQsICZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBaT05FTElTVF9GQUxMQkFDSywKJiM0MzsJCQkgICAgdHJ1ZSwgbm9kZV9vcmRlciwgJmFtcDtucl9ub2Rlcyk7CiAJYnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTsKJiM0MzsKIAlwcl9pbmZvKCYjMzQ7RmFsbGJhY2sgb3JkZXIgZm9yIE5vZGUgJWQ6ICYjMzQ7LCBsb2NhbF9ub2RlKTsKIAlmb3IgKG5vZGUgPSAwOyBub2RlICZsdDsgbnJfbm9kZXM7IG5vZGUmIzQzOyYjNDM7KQogCQlwcl9jb250KCYjMzQ7JWQgJiMzNDssIG5vZGVfb3JkZXJbbm9kZV0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IFRpZXJpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgbW0vaW50ZXJuYWwuaGAsIGBtbS9tZW1vcnktdGllcnMuY2AsIGFuZCBgbW0vcGFnZV9hbGxvYy5jYCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGdvaW5nIHRvIGJlIGNvcmUgdG8gbWVtb3J5IGFsbG9jYXRpb24gYW5kIE5VTUEgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3QgdGhlIGZ1bmRhbWVudGFsIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbm9kZSBzZWxlY3Rpb24gYWxnb3JpdGhtcy4KClNwZWNpZmljYWxseSwgSSBzZWUgYSBzaWduaWZpY2FudCBjaGFuZ2Ugd2l0aCB0aGUgcmVuYW1pbmcvbW9kaWZpY2F0aW9uIG9mIGBmaW5kX25leHRfYmVzdF9ub2RlYCB0byBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYGNhbmRpZGF0ZSBub2RlbWFza2AgcGFyYW1ldGVyIGlzIGEga2V5IGluZGljYXRvci4gVGhpcyBzdWdnZXN0cyBhIG1vcmUgcmVmaW5lZCBvciB0YXJnZXRlZCBhcHByb2FjaCB0byBub2RlIHNlbGVjdGlvbiwgcHJvYmFibHkgd2l0aCB0aGUgZ29hbCB0byB0YWtlIGFkdmFudGFnZSBvZiBOVU1BLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IG1hc2sgaXMgcG9wdWxhdGVkIGFuZCB1c2VkLiBUaGUgY2hhbmdlcyB0byBgbmV4dF9kZW1vdGlvbl9ub2RlYCBhbmQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBpbiBgbW0vbWVtb3J5LXRpZXJzLmNgIGFyZSBhbHNvIHdvcnRoIGltbWVkaWF0ZSBhdHRlbnRpb24g4oCTIGxpa2VseSByZWxhdGVkIHRvIHRpZXJlZCBtZW1vcnkgcHJvbW90aW9uL2RlbW90aW9uIHN0cmF0ZWdpZXMuIFRoZW4gdGhlcmUgaXMgdGhpcyBzZXQgb2YgY2hhbmdlcyBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgd2l0aCB0aGUgYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYCwgYGJ1aWxkX25vZGVfem9uZWxpc3RgLCBhbmQgYGJ1aWxkX3pvbmVsaXN0c2AgZnVuY3Rpb25zIGFsbCBiZWluZyB0b3VjaGVkLiBUaGlzIGhhcyB0aGUgaGFsbG1hcmtzIG9mIGEgcHJvZm91bmQgaW1wYWN0IG9uIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0b3BvbG9neSwgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGFsbG9jYXRpb24gem9uZWxpc3RzIGFyZSBidWlsdCBpbiB0aGlzIG5vZGUgb3JkZXIgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB0aGUgZXhhY3QgY2FsbCBzaXRlcyBhbmQgaG93IHRoZXNlIGNoYW5nZWQgZnVuY3Rpb25zIGFyZSB1dGlsaXplZC4gSXQgd2lsbCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCB0byBzZWUgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX25leHRfYmVzdF9ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTEzMT1leHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL2ludGVybmFsLmgtMTEzMi1cdFx0XHRcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XG5tbS9pbnRlcm5hbC5oOjExMzM6ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL2ludGVybmFsLmgtMTEzNC1cdFx0XHRcdCAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyk7XG4tLVxubW0vaW50ZXJuYWwuaD0xMTM4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS9pbnRlcm5hbC5oLTExNDItfVxubW0vaW50ZXJuYWwuaDoxMTQzOnN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxubW0vaW50ZXJuYWwuaC0xMTQ0LVx0XHRcdFx0XHQgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcbi0tXG5tbS9tZW1vcnktdGllcnMuYz0zMzA9aW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTM3Mi1cdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XG5tbS9tZW1vcnktdGllcnMuYzozNzM6XHRyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcdTAwMjZtYXNrLCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xubW0vbWVtb3J5LXRpZXJzLmMtMzc0LX1cbi0tXG5tbS9tZW1vcnktdGllcnMuYz00MjU9c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbi0tXG5tbS9tZW1vcnktdGllcnMuYy00NTItXHRcdC8qXG5tbS9tZW1vcnktdGllcnMuYzo0NTM6XHRcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAmIzM5O3VzZWQmIzM5OyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC5cbm1tL21lbW9yeS10aWVycy5jLTQ1NC1cdFx0ICogQWRkIGFsbCBtZW1vcnkgbm9kZXMgZXhjZXB0IHRoZSBzZWxlY3RlZCBtZW1vcnkgdGllclxuLS1cbm1tL21lbW9yeS10aWVycy5jLTQ2NS1cdFx0ZG8ge1xubW0vbWVtb3J5LXRpZXJzLmM6NDY2Olx0XHRcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2dGllcl9ub2Rlcyxcbm1tL21lbW9yeS10aWVycy5jLTQ2Ny1cdFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTU3Nzk9c3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTc4MS0vKipcbm1tL3BhZ2VfYWxsb2MuYzo1NzgyOiAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0XG5tbS9wYWdlX2FsbG9jLmMtNTc4My0gKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJiMzOTtyZSBhcHBlbmRpbmdcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTc5Ni0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo1Nzk3OmludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy01Nzk4LVx0XHRcdCAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01ODk4LVxubW0vcGFnZV9hbGxvYy5jOjU4OTk6XHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFx1MDAyNnVzZWRfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy01OTAwLVx0XHRcdFx0XHQgICAgICBjYW5kaWRhdGVzKSkgXHUwMDNlPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQ6CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgVGllciBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBzcGVuZCBzb21lIHRpbWUgZXhwbG9yaW5nIHRoZSByZWxhdGVkIGNvZGUgaW4gYG1tL21lbW9yeS10aWVycy5jYCBhbmQgYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGdvYWwgaGVyZSBpc24mIzM5O3QgdG8gbmVjZXNzYXJpbHkgbWVtb3JpemUgZXZlcnkgZGV0YWlsLCBidXQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSB0aGlzIHNwZWNpZmljIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGFsc28gdG8gdHJhY2UgZG93biB3aGVyZSB0aGUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYXJlIGJlaW5nIHVzZWQsIHRoZSBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgZmlsZXMgd2lsbCBwcm92aWRlIGEgbW9yZSBzb2xpZCBmb3VuZGF0aW9uIHRvIHN0YXJ0IGFzc2Vzc2luZyB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgcGFydGljdWxhciBsaW5lIG9mIGNvZGUuIEl0JiMzOTtsbCBhbHNvIGxpa2VseSByZXZlYWwgc29tZSBvZiB0aGUgYXNzdW1wdGlvbnMgYW5kIGNvbnN0cmFpbnRzIHRoYXQgd2VyZSBjb25zaWRlcmVkIGJ5IHRoZSBkZXZlbG9wZXJzIHdoZW4gdGhleSB3cm90ZSBpdC4gSG9wZWZ1bGx5LCB0aGlzIHByb3ZpZGVzIHRoZSBiYWNrZ3JvdW5kIEkgbmVlZCB0byBmb3JtIGEgcHJvcGVyIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnktdGllcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzNTE6XHRcbiAzNTI6XHRcdC8qXG4gMzUzOlx0XHQgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGFyZ2V0IG5vZGVzLCBqdXN0IHNlbGVjdCBvbmVcbiAzNTQ6XHRcdCAqIHRhcmdldCBub2RlIHJhbmRvbWx5LlxuIDM1NTpcdFx0ICpcbiAzNTY6XHRcdCAqIEluIGFkZGl0aW9uLCB3ZSBjYW4gYWxzbyB1c2Ugcm91bmQtcm9iaW4gdG8gc2VsZWN0XG4gMzU3Olx0XHQgKiB0YXJnZXQgbm9kZSwgYnV0IHdlIHNob3VsZCBpbnRyb2R1Y2UgYW5vdGhlciB2YXJpYWJsZVxuIDM1ODpcdFx0ICogZm9yIG5vZGVfZGVtb3Rpb25bXSB0byByZWNvcmQgbGFzdCBzZWxlY3RlZCB0YXJnZXQgbm9kZSxcbiAzNTk6XHRcdCAqIHRoYXQgbWF5IGNhdXNlIGNhY2hlIHBpbmctcG9uZyBkdWUgdG8gdGhlIGNoYW5naW5nIG9mXG4gMzYwOlx0XHQgKiBsYXN0IHRhcmdldCBub2RlLiBPciBpbnRyb2R1Y2luZyBwZXItY3B1IGRhdGEgdG8gYXZvaWRcbiAzNjE6XHRcdCAqIGNhY2hpbmcgaXNzdWUsIHdoaWNoIHNlZW1zIG1vcmUgY29tcGxpY2F0ZWQuIFNvIHNlbGVjdGluZ1xuIDM2MjpcdFx0ICogdGFyZ2V0IG5vZGUgcmFuZG9tbHkgc2VlbXMgYmV0dGVyIHVudGlsIG5vdy5cbiAzNjM6XHRcdCAqL1xuIDM2NDpcdFx0aWYgKCFub2Rlc19lbXB0eShtYXNrKSlcbiAzNjU6XHRcdFx0cmV0dXJuIG5vZGVfcmFuZG9tKFx1MDAyNm1hc2spO1xuIDM2NjpcdFxuIDM2NzpcdFx0LypcbiAzNjg6XHRcdCAqIFByZWZlcnJlZCBub2RlcyBhcmUgbm90IGluIGFsbG93ZWRfbWFzay4gRmxpcCBiaXRzIGluXG4gMzY5Olx0XHQgKiBhbGxvd2VkX21hc2sgYXMgdXNlZCBub2RlIG1hc2suIFRoZW4sIHVzZSBpdCB0byBnZXQgdGhlXG4gMzcwOlx0XHQgKiBjbG9zZXN0IGRlbW90aW9uIHRhcmdldC5cbiAzNzE6XHRcdCAqL1xuIDM3MjpcdFx0bm9kZXNfY29tcGxlbWVudChtYXNrLCAqYWxsb3dlZF9tYXNrKTtcbiAzNzM6XHRcdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFx1MDAyNm1hc2ssIFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4gMzc0Olx0fVxuIDM3NTpcdFxuIDM3NjpcdHN0YXRpYyB2b2lkIGRpc2FibGVfYWxsX2RlbW90aW9uX3RhcmdldHModm9pZClcbiAzNzc6XHR7XG4gMzc4Olx0XHRzdHJ1Y3QgbWVtb3J5X3RpZXIgKm1lbXRpZXI7XG4gMzc5Olx0XHRpbnQgbm9kZTtcbiAzODA6XHRcbiAzODE6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpIHtcbiAzODI6XHRcdFx0bm9kZV9kZW1vdGlvbltub2RlXS5wcmVmZXJyZWQgPSBOT0RFX01BU0tfTk9ORTtcbiAzODM6XHRcdFx0LypcbiAzODQ6XHRcdFx0ICogV2UgYXJlIGhvbGRpbmcgbWVtb3J5X3RpZXJfbG9jaywgaXQgaXMgc2FmZVxuIDM4NTpcdFx0XHQgKiB0byBhY2Nlc3MgcGdkYS1cdTAwM2VtZW10aWVyLlxuIDM4NjpcdFx0XHQgKi9cbiAzODc6XHRcdFx0bWVtdGllciA9IF9fbm9kZV9nZXRfbWVtb3J5X3RpZXIobm9kZSk7XG4gMzg4Olx0XHRcdGlmIChtZW10aWVyKVxuIDM4OTpcdFx0XHRcdG1lbXRpZXItXHUwMDNlbG93ZXJfdGllcl9tYXNrID0gTk9ERV9NQVNLX05PTkU7XG4gMzkwOlx0XHR9XG4gMzkxOlx0XHQvKlxuIDM5MjpcdFx0ICogRW5zdXJlIHRoYXQgdGhlIFwmIzM0O2Rpc2FibGVcJiMzNDsgaXMgdmlzaWJsZSBhY3Jvc3MgdGhlIHN5c3RlbS5cbiAzOTM6XHRcdCAqIFJlYWRlcnMgd2lsbCBzZWUgZWl0aGVyIGEgY29tYmluYXRpb24gb2YgYmVmb3JlJiM0MztkaXNhYmxlXG4gMzk0Olx0XHQgKiBzdGF0ZSBvciBkaXNhYmxlJiM0MzthZnRlci4gIFRoZXkgd2lsbCBuZXZlciBzZWUgYmVmb3JlIGFuZFxuIDM5NTpcdFx0ICogYWZ0ZXIgc3RhdGUgdG9nZXRoZXIuXG4gMzk2Olx0XHQgKi9cbiAzOTc6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDM5ODpcdH1cbiAzOTk6XHRcbiA0MDA6XHRzdGF0aWMgdm9pZCBkdW1wX2RlbW90aW9uX3RhcmdldHModm9pZClcbiA0MDE6XHR7XG4gNDAyOlx0XHRpbnQgbm9kZTtcbiA0MDM6XHRcbiA0MDQ6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpIHtcbiA0MDU6XHRcdFx0c3RydWN0IG1lbW9yeV90aWVyICptZW10aWVyID0gX19ub2RlX2dldF9tZW1vcnlfdGllcihub2RlKTtcbiA0MDY6XHRcdFx0bm9kZW1hc2tfdCBwcmVmZXJyZWQgPSBub2RlX2RlbW90aW9uW25vZGVdLnByZWZlcnJlZDtcbiA0MDc6XHRcbiA0MDg6XHRcdFx0aWYgKCFtZW10aWVyKVxuIDQwOTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBEZW1vdGlvbiBMb2dpYyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgZGVtb3Rpb24gcHJvY2VzcyBhZ2Fpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGVzZSBub2RlcyBhcmUgZ2V0dGluZyBkZW1vdGVkIGFuZCB3aHkuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGwgc2l0ZXMgb2YgYG5leHRfZGVtb3Rpb25fbm9kZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiAqaG93KiB0aGUgc3lzdGVtIGlzIHNlbGVjdGluZyBub2RlcyBmb3IgZGVtb3Rpb24uIFRoZW4sIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AuIFVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYG5leHRfZGVtb3Rpb25fbm9kZWAgd2lsbCBiZSBjcnVjaWFsLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIG1ha2VzIG5vZGVzIGEgdGFyZ2V0IGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoZXJlIHRoYXQgZGVjaXNpb24gcHJvY2VzcyBoYXBwZW5zLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGUgem9uZWxpc3QgaXMgYnVpbHQsIHRvIGJlIHN1cmUgdGhlIGRlbW90aW9uIHRhcmdldHMgYXJlIGNvcnJlY3QuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSB0YXJnZXRzIGFyZSBjb3JyZWN0LCBhbmQgcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCBhbGwgbm9kZXMgd2hpY2ggc2hvdWxkIGJlIGluIHRoZSB6b25lcywgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25leHRfZGVtb3Rpb25fbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTU0PXZvaWQgbXRfcHV0X21lbW9yeV90eXBlcyhzdHJ1Y3QgbGlzdF9oZWFkICptZW1vcnlfdHlwZXMpO1xuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC01NS0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjU2OmludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzayk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTU3LXZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpO1xuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaD01OD1ib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTU5LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjYwOnN0YXRpYyBpbmxpbmUgaW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC02MS17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaD05OT1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9kZV9tZW1vcnlfdHlwZShpbnQgbm9kZSwgc3RydWN0IG1lbW9yeV9kZXZfdHlwZSAqbWVtdHlwZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTEwMy1cbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg6MTA0OnN0YXRpYyBpbmxpbmUgaW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC0xMDUte1xuLS1cbm1tL21lbW9yeS10aWVycy5jPTMwMj12b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTMyMC0vKipcbm1tL21lbW9yeS10aWVycy5jOjMyMTogKiBuZXh0X2RlbW90aW9uX25vZGUoKSAtIEdldCB0aGUgbmV4dCBub2RlIGluIHRoZSBkZW1vdGlvbiBwYXRoXG5tbS9tZW1vcnktdGllcnMuYy0zMjItICogQG5vZGU6IFRoZSBzdGFydGluZyBub2RlIHRvIGxvb2t1cCB0aGUgbmV4dCBub2RlXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtMzI5LSAqL1xubW0vbWVtb3J5LXRpZXJzLmM6MzMwOmludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcbm1tL21lbW9yeS10aWVycy5jLTMzMS17XG4tLVxubW0vdm1zY2FuLmM9MTAxNz1zdGF0aWMgdW5zaWduZWQgaW50IGRlbW90ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRlbW90ZV9mb2xpb3MsXG4tLVxubW0vdm1zY2FuLmMtMTA0NC1cbm1tL3Ztc2Nhbi5jOjEwNDU6XHR0YXJnZXRfbmlkID0gbmV4dF9kZW1vdGlvbl9ub2RlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIFx1MDAyNmFsbG93ZWRfbWFzayk7XG5tbS92bXNjYW4uYy0xMDQ2LVx0aWYgKHRhcmdldF9uaWQgPT0gTlVNQV9OT19OT0RFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBab25lbGlzdCBDb25zdHJ1Y3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBhcm91bmQgem9uZWxpc3RzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBidWlsZF9hbGxfem9uZWxpc3RzYCBzcGVjaWZpY2FsbHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGggaGVyZS4gV2hvJiMzOTtzIGludm9raW5nIHRoaXMgZnVuY3Rpb24/IEtub3dpbmcgdGhlIGNhbGxlcnMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMgYW5kIHRoZSBvdmVyYWxsIGZsb3cgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHN5c3RlbS4KCkkmIzM5O2xsIGFsc28ga2VlcCBhIGNsb3NlIGV5ZSBvbiBgYnVpbGRfem9uZWxpc3RzYCBhbmQgYGJ1aWxkX25vZGVfem9uZWxpc3RgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgYnVpbGRfYWxsX3pvbmVsaXN0c2AgZGVsZWdhdGVzIHNvbWUgb2YgaXRzIHdvcmsgdG8gdGhvc2UgZnVuY3Rpb25zIG9yIHBlcmhhcHMgY2FsbHMgdGhlbSBkaXJlY3RseS4gVW5kZXJzdGFuZGluZyB0aGUgZGl2aXNpb24gb2YgcmVzcG9uc2liaWxpdHkgYmV0d2VlbiB0aGVzZSB0aHJlZSBpcyBrZXkgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBjYWxscyBhcmUgcmVjdXJzaXZlLCBhcyBpdCBjb3VsZCBjaGFuZ2UgdGhlIHdheSB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIG5vdGUgaG93IHRoZXkgYXJlIHVzZWQgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBOVU1BIG5vZGUgaGFuZGxpbmcsIGFuZCBob3cgdGhlc2Ugem9uZWxpc3RzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBtZSBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGJ1aWxkcyB0aGVzZSB6b25lbGlzdHMsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgaW5mb3JtZWQgZGVjaXNpb25zIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX3pvbmVsaXN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NTc5Nz1pbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU4NTAtICovXG5tbS9wYWdlX2FsbG9jLmM6NTg1MTpzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ19kYXRhX3QgKnBnZGF0LCBpbnQgKm5vZGVfb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNTg1Mi1cdFx0dW5zaWduZWQgaW50IG5yX25vZGVzLCBpbnQgemxpZHgpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01OTE0LVxubW0vcGFnZV9hbGxvYy5jOjU5MTU6XHRidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ2RhdCwgbm9kZV9vcmRlciwgbnJfbm9kZXMsIHpsaWR4KTtcbm1tL3BhZ2VfYWxsb2MuYy01OTE2LVx0Km5yID0gbnJfbm9kZXM7XG4tLVxubW0vcGFnZV9hbGxvYy5jLTU5MTgtXG5tbS9wYWdlX2FsbG9jLmM6NTkxOTpzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbm1tL3BhZ2VfYWxsb2MuYy01OTIwLXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTk1Nj1zdGF0aWMgdm9pZCBzZXR1cF9taW5fc2xhYl9yYXRpbyh2b2lkKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTk1OC1cbm1tL3BhZ2VfYWxsb2MuYzo1OTU5OnN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxubW0vcGFnZV9hbGxvYy5jLTU5NjAte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01OTk2PXN0YXRpYyB2b2lkIF9fYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy02MDI0LVx0aWYgKHNlbGYgXHUwMDI2XHUwMDI2ICFub2RlX29ubGluZShzZWxmLVx1MDAzZW5vZGVfaWQpKSB7XG5tbS9wYWdlX2FsbG9jLmM6NjAyNTpcdFx0YnVpbGRfem9uZWxpc3RzKHNlbGYpO1xubW0vcGFnZV9hbGxvYy5jLTYwMjYtXHR9IGVsc2Uge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy02MDMzLVxubW0vcGFnZV9hbGxvYy5jOjYwMzQ6XHRcdFx0YnVpbGRfem9uZWxpc3RzKHBnZGF0KTtcbm1tL3BhZ2VfYWxsb2MuYy02MDM1LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugem9uZWxpc3RzIGFyZSBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgdXRpbGl6ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYF9fYnVpbGRfYWxsX3pvbmVsaXN0c2AgYW5kIGBidWlsZF9hbGxfem9uZWxpc3RzYCBzcGVjaWZpY2FsbHkuIEkgd2FudCB0byBzZWUgKndoZXJlKiB0aGV5JiMzOTtyZSBiZWluZyBpbnZva2VkLCBiZWNhdXNlIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZWlyIHB1cnBvc2UuIEFyZSB0aGV5IHRyaWdnZXJlZCBieSBtZW1vcnkgaG90cGx1ZyBldmVudHM/IElzIHRoZSBOVU1BIHpvbmVsaXN0IHN5c2N0bCBpbnZvbHZlZCBpbiBzb21lIHdheT8gT3IgYXJlIHRoZXJlIG90aGVyIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gY29uc2lkZXI/IEtub3dpbmcgdGhlIGNhbGxlciBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzIGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX2FsbF96b25lbGlzdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xMTQwPWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjE1LVx0aWYgKG5lZWRfem9uZWxpc3RzX3JlYnVpbGQpXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyMTY6XHRcdGJ1aWxkX2FsbF96b25lbGlzdHMoTlVMTCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMTctXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMjU2PXN0YXRpYyBwZ19kYXRhX3QgKmhvdGFkZF9pbml0X3BnZGF0KGludCBuaWQpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjc1LVx0ICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyNzY6XHRidWlsZF9hbGxfem9uZWxpc3RzKHBnZGF0KTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTI3Ny1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5NTU9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTM5LVx0XHR6b25lX3BjcF9yZXNldCh6b25lKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjE0MDpcdFx0YnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE0MS1cdH1cbi0tXG5tbS9tbV9pbml0LmM9MjY5OD12b2lkIF9faW5pdCBtbV9jb3JlX2luaXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMjcwNC1cdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFx1MDAzZSAyKTtcbm1tL21tX2luaXQuYzoyNzA1Olx0YnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcbm1tL21tX2luaXQuYy0yNzA2LVx0cGFnZV9hbGxvY19pbml0X2NwdWhwKCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTU5OTQ9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJfY3B1X3pvbmVzdGF0LCBib290X3pvbmVzdGF0cyk7XG5tbS9wYWdlX2FsbG9jLmMtNTk5NS1cbm1tL3BhZ2VfYWxsb2MuYzo1OTk2OnN0YXRpYyB2b2lkIF9fYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKVxubW0vcGFnZV9hbGxvYy5jLTU5OTcte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz02MDU1PXN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdFxubW0vcGFnZV9hbGxvYy5jOjYwNTY6YnVpbGRfYWxsX3pvbmVsaXN0c19pbml0KHZvaWQpXG5tbS9wYWdlX2FsbG9jLmMtNjA1Ny17XG4tLVxubW0vcGFnZV9hbGxvYy5jLTYwNTktXG5tbS9wYWdlX2FsbG9jLmM6NjA2MDpcdF9fYnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcbm1tL3BhZ2VfYWxsb2MuYy02MDYxLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy02MDg0LSAqXG5tbS9wYWdlX2FsbG9jLmM6NjA4NTogKiBfX3JlZiBkdWUgdG8gY2FsbCBvZiBfX2luaXQgYW5ub3RhdGVkIGhlbHBlciBidWlsZF9hbGxfem9uZWxpc3RzX2luaXRcbm1tL3BhZ2VfYWxsb2MuYy02MDg2LSAqIFtwcm90ZWN0ZWQgYnkgU1lTVEVNX0JPT1RJTkddLlxubW0vcGFnZV9hbGxvYy5jLTYwODctICovXG5tbS9wYWdlX2FsbG9jLmM6NjA4ODp2b2lkIF9fcmVmIGJ1aWxkX2FsbF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbm1tL3BhZ2VfYWxsb2MuYy02MDg5LXtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjA5Mi1cdGlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpIHtcbm1tL3BhZ2VfYWxsb2MuYzo2MDkzOlx0XHRidWlsZF9hbGxfem9uZWxpc3RzX2luaXQoKTtcbm1tL3BhZ2VfYWxsb2MuYy02MDk0LVx0fSBlbHNlIHtcbm1tL3BhZ2VfYWxsb2MuYzo2MDk1Olx0XHRfX2J1aWxkX2FsbF96b25lbGlzdHMocGdkYXQpO1xubW0vcGFnZV9hbGxvYy5jLTYwOTYtXHRcdC8qIGNwdXNldCByZWZyZXNoIHJvdXRpbmUgc2hvdWxkIGJlIGhlcmUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYGJ1aWxkX2FsbF96b25lbGlzdHNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGJ1aWxkX2FsbF96b25lbGlzdHNgIGlzIHVzZWQuIFJpZ2h0LCBpdCYjMzk7cyBub3QganVzdCBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uIEJlc2lkZXMgdGhlIG9idmlvdXMgc2NlbmFyaW9zLCBpdCYjMzk7cyBhbHNvIGNydWNpYWwgZm9yIG1hbmFnaW5nIG9ubGluZSBhbmQgb2ZmbGluZSBwYWdlcyDigJMgdGhhdCBpbmNsdWRlcyBtZW1vcnkgaG90cGx1ZyB0aHJvdWdoIHN5c2ZzIGFuZCBwcm9iaW5nLCBhbmQgaXQmIzM5O3MgaW50ZXJ0d2luZWQgd2l0aCBtZW1vcnkgdGllcnMgYW5kIE5VTUEgZGVtb3Rpb24gc3RyYXRlZ2llcy4gVGhhdCYjMzk7cyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiByZXNwb25zaWJpbGl0aWVzLiBHaXZlbiB0aGUgY29ubmVjdGlvbiB0byBtZW1vcnkgdGllcnMsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaW4gYG1tL21lbW9yeS10aWVycy5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS10aWVycy5jPTQwMD1zdGF0aWMgdm9pZCBkdW1wX2RlbW90aW9uX3RhcmdldHModm9pZClcbi0tXG5tbS9tZW1vcnktdGllcnMuYy00MjQtICovXG5tbS9tZW1vcnktdGllcnMuYzo0MjU6c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbm1tL21lbW9yeS10aWVycy5jLTQyNi17XG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNTIxLSNlbHNlXG5tbS9tZW1vcnktdGllcnMuYzo1MjI6c3RhdGljIGlubGluZSB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpIHt9XG5tbS9tZW1vcnktdGllcnMuYy01MjMtI2VuZGlmIC8qIENPTkZJR19OVU1BX01JR1JBVElPTiAqL1xuLS1cbm1tL21lbW9yeS10aWVycy5jPTcwOD1zdGF0aWMgaW50IF9faW5pdCBtZW1vcnlfdGllcl9sYXRlX2luaXQodm9pZClcbi0tXG5tbS9tZW1vcnktdGllcnMuYy03MzEtXG5tbS9tZW1vcnktdGllcnMuYzo3MzI6XHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xubW0vbWVtb3J5LXRpZXJzLmMtNzMzLVx0cHV0X29ubGluZV9tZW1zKCk7XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9ODgyPXN0YXRpYyBpbnQgX19tZW1pbml0IG1lbXRpZXJfaG90cGx1Z19jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtODkxLVx0XHRpZiAoY2xlYXJfbm9kZV9tZW1vcnlfdGllcihubi1cdTAwM2VuaWQpKVxubW0vbWVtb3J5LXRpZXJzLmM6ODkyOlx0XHRcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XG5tbS9tZW1vcnktdGllcnMuYy04OTMtXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZW1vcnlfdGllcl9sb2NrKTtcbi0tXG5tbS9tZW1vcnktdGllcnMuYy04OTgtXHRcdGlmICghSVNfRVJSKG1lbXRpZXIpKVxubW0vbWVtb3J5LXRpZXJzLmM6ODk5Olx0XHRcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XG5tbS9tZW1vcnktdGllcnMuYy05MDAtXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZW1vcnlfdGllcl9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhhdCBgbmV4dF9kZW1vdGlvbl9ub2RlYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgYnkgYGRlbW90ZV9mb2xpb19saXN0YCB3aGljaCBpcyBpdHNlbGYgdHJpZ2dlcmVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbSBvciBkZW1vdGlvbiBjeWNsZXMuIFRoYXQgbWVhbnMgdGhlIHJlbGV2YW50IGNvZGUgcGF0aCBpcyBleGVyY2lzZWQgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbiwgYnkga3N3YXBkLCBvciB3aGVuIHRoZSBzeXN0ZW0gZXhwbGljaXRseSB0cmlnZ2VycyBhIGRlbW90aW9uIHRocm91Z2ggc3lzZnMuIFdlJiMzOTt2ZSBhbHNvIGdvdCBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgYmVpbmcgY2FsbGVkIGJ5IGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLCBhbmQgYGJ1aWxkX25vZGVfem9uZWxpc3RgLCBhbmQgdGhhdCBgYnVpbGRfbm9kZV96b25lbGlzdGAgaXMgY2FsbGVkIHdoZW4gem9uZWxpc3RzIGFyZSBjb25zdHJ1Y3RlZC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgcHJvbXB0IGNsZWFybHkgbGF5cyBvdXQgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBJdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGlmIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBjb3JlIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtZW50aW9uaW5nIGBtbS9gLCBzeW5jaHJvbml6YXRpb24sIEJQRiwgYW5kIG90aGVycy4gRnVydGhlcm1vcmUsIGl0IGluY2x1ZGVzIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAgaWYgaXQgdG91Y2hlcyBkYXRhc3RydWN0dXJlcywgaGVscGVycyBvciBhbGdvcml0aG1zLgoKVGhpcyBwYXRjaCBpcyB1bmRlbmlhYmx5IHRvdWNoaW5nIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vYCksIGRpcmVjdGx5IGltcGFjdGluZyBOVU1BIGZhbGxiYWNrIG5vZGUgc2VsZWN0aW9uIChgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmApLCB6b25lbGlzdCBidWlsZGluZyAoYGJ1aWxkX25vZGVfem9uZWxpc3RgKSwgYW5kIHRoZSB2ZXJ5IGhlYXJ0IG9mIG1lbW9yeSB0aWVyIGRlbW90aW9uIHRhcmdldCBjYWxjdWxhdGlvbiAoYG5leHRfZGVtb3Rpb25fbm9kZWAsIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2ApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNvcmUgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtZW1vcnkgYW5kIHRoZSBkZWNpc2lvbnMgaXQgbWFrZXMgZHVyaW5nIHJlY2xhaW0gYW5kIGRlbW90aW9uLiBJdCYjMzk7cyBhIGNsZWFyIGZpdCBmb3IgdGhlIGNyaXRlcmlhLiBUaGVyZWZvcmUsICoqYFdvcnRoRnV6emluZyA9IHRydWVgKiouCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYC4gVGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYG1tL21lbW9yeS10aWVycy5jYCBhbmQgdHJhY2UgZGVwZW5kZW5jaWVzIGZvciBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSB0aGlzIGNvZGUgYW5kIHRoZSBsZWFzdCB1YmlxdWl0b3VzIHN5bWJvbHMgdGhhdCBhcmUgZXhlcmNpc2VkIGR1cmluZyB0aGlzIGNvZGUgcGF0aC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBmb2N1c2VkIGFwcHJvYWNoIHRvIGZ1enppbmcgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9uZXh0X2Jlc3Rfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTExMzE9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS9pbnRlcm5hbC5oLTExMzItXHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xubW0vaW50ZXJuYWwuaDoxMTMzOmV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG5tbS9pbnRlcm5hbC5oLTExMzQtXHRcdFx0XHQgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpO1xuLS1cbm1tL2ludGVybmFsLmg9MTEzOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vaW50ZXJuYWwuaC0xMTQyLX1cbm1tL2ludGVybmFsLmg6MTE0MzpzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL2ludGVybmFsLmgtMTE0NC1cdFx0XHRcdFx0IGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9MzMwPWludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcbi0tXG5tbS9tZW1vcnktdGllcnMuYy0zNzItXHRub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spO1xubW0vbWVtb3J5LXRpZXJzLmM6MzczOlx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2bWFzaywgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbm1tL21lbW9yeS10aWVycy5jLTM3NC19XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9NDI1PXN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNDUyLVx0XHQvKlxubW0vbWVtb3J5LXRpZXJzLmM6NDUzOlx0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlX2luLCB1c2UgJiMzOTt1c2VkJiMzOTsgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG5tbS9tZW1vcnktdGllcnMuYy00NTQtXHRcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcbi0tXG5tbS9tZW1vcnktdGllcnMuYy00NjUtXHRcdGRvIHtcbm1tL21lbW9yeS10aWVycy5jOjQ2NjpcdFx0XHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFx1MDAyNnRpZXJfbm9kZXMsXG5tbS9tZW1vcnktdGllcnMuYy00NjctXHRcdFx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Nzc5PXN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XG4tLVxubW0vcGFnZV9hbGxvYy5jLTU3ODEtLyoqXG5tbS9wYWdlX2FsbG9jLmM6NTc4MjogKiBmaW5kX25leHRfYmVzdF9ub2RlX2luIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUmIzM5O3MgZmFsbGJhY2sgbGlzdFxubW0vcGFnZV9hbGxvYy5jLTU3ODMtICogQG5vZGU6IG5vZGUgd2hvc2UgZmFsbGJhY2sgbGlzdCB3ZSYjMzk7cmUgYXBwZW5kaW5nXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU3OTYtICovXG5tbS9wYWdlX2FsbG9jLmM6NTc5NzppbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNTc5OC1cdFx0XHQgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01ODkwPXN0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTg5OC1cbm1tL3BhZ2VfYWxsb2MuYzo1ODk5Olx0d2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihsb2NhbF9ub2RlLCBcdTAwMjZ1c2VkX21hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNTkwMC1cdFx0XHRcdFx0ICAgICAgY2FuZGlkYXRlcykpIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29tcGlsZXIgRGlyZWN0aXZlIENvbmZsaWN0cyoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBtbS9pbnRlcm5hbC5oYCBhcm91bmQgbGluZSAxMTMwLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYW4gaXNzdWUgd2l0aCBzb21lIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBzcGVjaWZpY2FsbHkgYCNpZmRlZmAgZ3VhcmRzLCB0aGF0IGFyZSBjcmVhdGluZyBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluIHRoYXQgYXJlYSBhbmQgaWYgYW55IG9mIHRob3NlIGNvbmRpdGlvbnMgYXJlIGNhdXNpbmcgdGhpcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyb3VuZCBsaW5lIDExMzAuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJIHN1c3BlY3QgYW4gaXNzdWUgd2l0aCBkaWZmZXJpbmcgY29tcGlsYXRpb24gc3RhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHQjZWxzZSAvKiAhQ09ORklHX01NVSAqL1xuMTEyMTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB1bm1hcF9tYXBwaW5nX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxuMTEyMjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19uZXdfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XG4xMTIzOlx0c3RhdGljIGlubGluZSBib29sIG5lZWRfbWxvY2tfZHJhaW4oaW50IGNwdSkgeyByZXR1cm4gZmFsc2U7IH1cbjExMjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfZHJhaW5fbG9jYWwodm9pZCkgeyB9XG4xMTI1Olx0c3RhdGljIGlubGluZSB2b2lkIG1sb2NrX2RyYWluX3JlbW90ZShpbnQgY3B1KSB7IH1cbjExMjY6XHQjZW5kaWYgLyogIUNPTkZJR19NTVUgKi9cbjExMjc6XHRcbjExMjg6XHQjaWZkZWYgQ09ORklHX05VTUFcbjExMjk6XHRleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xuMTEzMDpcdFxuMTEzMTpcdGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuMTEzMjpcdFx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbjExMzM6XHRleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxuMTEzNDpcdFx0XHRcdFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcbjExMzU6XHQjZWxzZVxuMTEzNjpcdCNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxuMTEzNzpcdFxuMTEzODpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbjExMzk6XHRcdFx0XHRcdFx0IGdmcF90IG1hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbjExNDA6XHR7XG4xMTQxOlx0XHRyZXR1cm4gMDtcbjExNDI6XHR9XG4xMTQzOlx0c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4xMTQ0Olx0XHRcdFx0XHRcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuMTE0NTpcdHtcbjExNDY6XHRcdHJldHVybiBOVU1BX05PX05PREU7XG4xMTQ3Olx0fVxuMTE0ODpcdCNlbmRpZlxuMTE0OTpcdFxuMTE1MDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxuMTE1MTpcdHtcbjExNTI6XHRcdC8qIElzIGFueSBub2RlX3JlY2xhaW1fbW9kZSBiaXQgc2V0PyAqL1xuMTE1MzpcdFx0cmV0dXJuIG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiAoUkVDTEFJTV9aT05FfFJFQ0xBSU1fV1JJVEV8UkVDTEFJTV9VTk1BUCk7XG4xMTU0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIE5VTUEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgaXMgZGVmaW5pdGVseSBiZWhpbmQgdGhlIGBDT05GSUdfTlVNQWAgZ2F0ZS4gVGltZSB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBydWxlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBMZXQmIzM5O3MgZGlnIGludG8gYG1tL21lbW9yeS10aWVycy5jYCBhbmQgc2VlIHdoYXQgdGhlIGBtbS9NYWtlZmlsZWAgaGFzIHRvIHNheSBhYm91dCBpdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZ2V0cyBidWlsdCBhbmQgbGlua2VkIGluIHJlbGF0aW9uIHRvIE5VTUEgc3VwcG9ydC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21waWxhdGlvbiBkZXBlbmRlbmN5IHRob3JvdWdobHkgdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5LXRpZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTk5PW9iai0kKENPTkZJR19NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlLm9cbm1tL01ha2VmaWxlOjEwMDpvYmotJChDT05GSUdfTlVNQSkgJiM0Mzs9IG1lbW9yeS10aWVycy5vXG5tbS9NYWtlZmlsZS0xMDEtb2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FwLmhcdTAwM2Vcbm1tL2RhbW9uL3BhZGRyLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LXRpZXJzLmhcdTAwM2Vcbm1tL2RhbW9uL3BhZGRyLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2Vcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3N5c2N0bC5oXHUwMDNlXG5tbS9odWdlX21lbW9yeS5jOjM5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS10aWVycy5oXHUwMDNlXG5tbS9odWdlX21lbW9yeS5jLTQwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnkuaFx1MDAzZVxubW0vbWVtb3J5LXRpZXJzLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFx1MDAzZVxubW0vbWVtb3J5LXRpZXJzLmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9NzQ3PWludCBtdF9zZXRfZGVmYXVsdF9kcmFtX3BlcmYoaW50IG5pZCwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpwZXJmLFxuLS1cbm1tL21lbW9yeS10aWVycy5jLTc3OS1cdFx0cHJfaW5mbyhcbm1tL21lbW9yeS10aWVycy5jOjc4MDpcJiMzNDttZW1vcnktdGllcnM6IHRoZSBwZXJmb3JtYW5jZSBvZiBEUkFNIG5vZGUgJWQgbWlzbWF0Y2hlcyB0aGF0IG9mIHRoZSByZWZlcmVuY2VcXG5cJiMzNDtcbm1tL21lbW9yeS10aWVycy5jLTc4MS1cJiMzNDtEUkFNIG5vZGUgJWQuXFxuXCYjMzQ7LCBuaWQsIGRlZmF1bHRfZHJhbV9wZXJmX3JlZl9uaWQpO1xuLS1cbm1tL21lbW9yeS5jLTY4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2Vcbm1tL21lbW9yeS5jOjY5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS10aWVycy5oXHUwMDNlXG5tbS9tZW1vcnkuYy03MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2Vcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMDItI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19mcy5oXHUwMDNlXG5tbS9tZW1wb2xpY3kuYzoxMDM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LXRpZXJzLmhcdTAwM2Vcbm1tL21lbXBvbGljeS5jLTEwNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2Vcbi0tXG5tbS9taWdyYXRlLmMtNDMtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcdTAwM2Vcbm1tL21pZ3JhdGUuYzo0NDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFx1MDAzZVxubW0vbWlncmF0ZS5jLTQ1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2Vcbi0tXG5tbS92bXNjYW4uYy00NC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxubW0vdm1zY2FuLmM6NDU6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LXRpZXJzLmhcdTAwM2Vcbm1tL3Ztc2Nhbi5jLTQ2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L29vbS5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE5VTUEgTWlncmF0aW9uIGluIE1lbW9yeSBUaWVycyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgdGllcmluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIE5VTUEgbWlncmF0aW9uIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gYG1tL21lbW9yeS10aWVycy5jYC4gTGV0JiMzOTtzIGZvY3VzIG9uIHRoYXQgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCBhcm91bmQgdGhlIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgYW5kIGBuZXh0X2RlbW90aW9uX25vZGVgIGZ1bmN0aW9ucy4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3BvdHMgd2hlcmUgTlVNQSBtaWdyYXRpb24gcG9saWNpZXMgd291bGQgaW50ZXJhY3Qgd2l0aCB0aGUgdGllcmluZyBsb2dpYy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGVjaWRlcyB3aGVyZSB0byBtb3ZlIG1lbW9yeSB3aXRoaW4gdGhlIE5VTUEgbm9kZXMsIG9yIGluZGVlZCwgaWYgdGhhdCYjMzk7cyBldmVuIGNvbnNpZGVyZWQgZGlyZWN0bHkgZHVyaW5nIGRlbW90aW9uLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBzb21lIGxvZ2ljLCBldmVuIGlmIGl0JiMzOTtzIGluZGlyZWN0LCByZWxhdGVkIHRvIGBDT05GSUdfTlVNQV9NSUdSQVRJT05gLCBzbyBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHRoYXQgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhhdCBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBhcmUgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnktdGllcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0LyoqXG4gMzIxOlx0ICogbmV4dF9kZW1vdGlvbl9ub2RlKCkgLSBHZXQgdGhlIG5leHQgbm9kZSBpbiB0aGUgZGVtb3Rpb24gcGF0aFxuIDMyMjpcdCAqIEBub2RlOiBUaGUgc3RhcnRpbmcgbm9kZSB0byBsb29rdXAgdGhlIG5leHQgbm9kZVxuIDMyMzpcdCAqIEBhbGxvd2VkX21hc2s6IFRoZSBwb2ludGVyIHRvIGFsbG93ZWQgbm9kZSBtYXNrXG4gMzI0Olx0ICpcbiAzMjU6XHQgKiBSZXR1cm46IG5vZGUgaWQgZm9yIG5leHQgbWVtb3J5IG5vZGUgaW4gdGhlIGRlbW90aW9uIHBhdGggaGllcmFyY2h5XG4gMzI2Olx0ICogZnJvbSBAbm9kZTsgTlVNQV9OT19OT0RFIGlmIEBub2RlIGlzIHRlcm1pbmFsLiAgVGhpcyBkb2VzIG5vdCBrZWVwXG4gMzI3Olx0ICogQG5vZGUgb25saW5lIG9yIGd1YXJhbnRlZSB0aGF0IGl0ICpjb250aW51ZXMqIHRvIGJlIHRoZSBuZXh0IGRlbW90aW9uXG4gMzI4Olx0ICogdGFyZ2V0LlxuIDMyOTpcdCAqL1xuIDMzMDpcdGludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcbiAzMzE6XHR7XG4gMzMyOlx0XHRzdHJ1Y3QgZGVtb3Rpb25fbm9kZXMgKm5kO1xuIDMzMzpcdFx0bm9kZW1hc2tfdCBtYXNrO1xuIDMzNDpcdFxuIDMzNTpcdFx0aWYgKCFub2RlX2RlbW90aW9uKVxuIDMzNjpcdFx0XHRyZXR1cm4gTlVNQV9OT19OT0RFO1xuIDMzNzpcdFxuIDMzODpcdFx0bmQgPSBcdTAwMjZub2RlX2RlbW90aW9uW25vZGVdO1xuIDMzOTpcdFxuIDM0MDpcdFx0LypcbiAzNDE6XHRcdCAqIG5vZGVfZGVtb3Rpb25bXSBpcyB1cGRhdGVkIHdpdGhvdXQgZXhjbHVkaW5nIHRoaXNcbiAzNDI6XHRcdCAqIGZ1bmN0aW9uIGZyb20gcnVubmluZy5cbiAzNDM6XHRcdCAqXG4gMzQ0Olx0XHQgKiBNYWtlIHN1cmUgdG8gdXNlIFJDVSBvdmVyIGVudGlyZSBjb2RlIGJsb2NrcyBpZlxuIDM0NTpcdFx0ICogbm9kZV9kZW1vdGlvbltdIHJlYWRzIG5lZWQgdG8gYmUgY29uc2lzdGVudC5cbiAzNDY6XHRcdCAqL1xuIDM0NzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDM0ODpcdFx0LyogRmlsdGVyIG91dCBub2RlcyB0aGF0IGFyZSBub3QgaW4gYWxsb3dlZF9tYXNrLiAqL1xuIDM0OTpcdFx0bm9kZXNfYW5kKG1hc2ssIG5kLVx1MDAzZXByZWZlcnJlZCwgKmFsbG93ZWRfbWFzayk7XG4gMzUwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzNTE6XHRcbiAzNTI6XHRcdC8qXG4gMzUzOlx0XHQgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGFyZ2V0IG5vZGVzLCBqdXN0IHNlbGVjdCBvbmVcbiAzNTQ6XHRcdCAqIHRhcmdldCBub2RlIHJhbmRvbWx5LlxuIDM1NTpcdFx0ICpcbiAzNTY6XHRcdCAqIEluIGFkZGl0aW9uLCB3ZSBjYW4gYWxzbyB1c2Ugcm91bmQtcm9iaW4gdG8gc2VsZWN0XG4gMzU3Olx0XHQgKiB0YXJnZXQgbm9kZSwgYnV0IHdlIHNob3VsZCBpbnRyb2R1Y2UgYW5vdGhlciB2YXJpYWJsZVxuIDM1ODpcdFx0ICogZm9yIG5vZGVfZGVtb3Rpb25bXSB0byByZWNvcmQgbGFzdCBzZWxlY3RlZCB0YXJnZXQgbm9kZSxcbiAzNTk6XHRcdCAqIHRoYXQgbWF5IGNhdXNlIGNhY2hlIHBpbmctcG9uZyBkdWUgdG8gdGhlIGNoYW5naW5nIG9mXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5VTUEgTWlncmF0aW9uIGluIGBtbS9tZW1vcnktdGllcnMuY2AqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBgbW0vbWVtb3J5LXRpZXJzLmNgIGFnYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgTlVNQSBtaWdyYXRpb24gd2l0aGluIHRoaXMgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gYCNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05gLiBUaGlzIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgZ29pbmcgdG8gZGljdGF0ZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgYWxsIHRoZSByZWxldmFudCBtaWdyYXRpb24gbG9naWMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoZSBOVU1BIG1pZ3JhdGlvbiBjb2RlIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBtZW1vcnkgdGllcmluZyBmcmFtZXdvcmsuIEFyZSB0aGV5IHdvcmtpbmcgaW4gdGFuZGVtPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGhvb2tzIG9yIGludGVyYWN0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bSBob3BpbmcgdG8gdW5jb3ZlciBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIG9mIGNvdXJzZSwgdW5kZXJzdGFuZCBob3cgdGhlIE5VTUEtYXdhcmUgbWVjaGFuaXNtcyBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgdGllcmluZyBwb2xpY3kuIFRpbWUgdG8gZmluZCB0aGF0IGAjaWZkZWZgIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOVU1BX01JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY2MD1jb25maWcgUEFHRV9SRVBPUlRJTkdcbi0tXG5tbS9LY29uZmlnLTY2Ny1cbm1tL0tjb25maWc6NjY4OmNvbmZpZyBOVU1BX01JR1JBVElPTlxubW0vS2NvbmZpZy02NjktXHRib29sIFwmIzM0O05VTUEgcGFnZSBtaWdyYXRpb25cJiMzNDtcbi0tXG5tbS9tZW1vcnktdGllcnMuYz02NT1ib29sIGZvbGlvX3VzZV9hY2Nlc3NfdGltZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTcxLVxubW0vbWVtb3J5LXRpZXJzLmM6NzI6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxubW0vbWVtb3J5LXRpZXJzLmMtNzMtc3RhdGljIGludCB0b3BfdGllcl9hZGlzdGFuY2U7XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9MTMxPXN0YXRpYyBzdHJ1Y3QgZGVtb3Rpb25fbm9kZXMgKm5vZGVfZGVtb3Rpb24gX19yZWFkX21vc3RseTtcbm1tL21lbW9yeS10aWVycy5jOjEzMjojZW5kaWYgLyogQ09ORklHX05VTUFfTUlHUkFUSU9OICovXG5tbS9tZW1vcnktdGllcnMuYy0xMzMtXG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9MjYwPXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3RpZXIgKl9fbm9kZV9nZXRfbWVtb3J5X3RpZXIoaW50IG5vZGUpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtMjc1LVxubW0vbWVtb3J5LXRpZXJzLmM6Mjc2OiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cbm1tL21lbW9yeS10aWVycy5jLTI3Ny1ib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSlcbi0tXG5tbS9tZW1vcnktdGllcnMuYz01MjI9c3RhdGljIGlubGluZSB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpIHt9XG5tbS9tZW1vcnktdGllcnMuYzo1MjM6I2VuZGlmIC8qIENPTkZJR19OVU1BX01JR1JBVElPTiAqL1xubW0vbWVtb3J5LXRpZXJzLmMtNTI0LVxuLS1cbm1tL21lbW9yeS10aWVycy5jPTkwNz1zdGF0aWMgaW50IF9faW5pdCBtZW1vcnlfdGllcl9pbml0KHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtOTE0LVxubW0vbWVtb3J5LXRpZXJzLmM6OTE1OiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cbm1tL21lbW9yeS10aWVycy5jLTkxNi1cdG5vZGVfZGVtb3Rpb24gPSBremFsbG9jX29ianMoc3RydWN0IGRlbW90aW9uX25vZGVzLCBucl9ub2RlX2lkcyk7XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9OTQwPWJvb2wgbnVtYV9kZW1vdGlvbl9lbmFibGVkID0gZmFsc2U7XG5tbS9tZW1vcnktdGllcnMuYy05NDEtXG5tbS9tZW1vcnktdGllcnMuYzo5NDI6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxubW0vbWVtb3J5LXRpZXJzLmMtOTQzLSNpZmRlZiBDT05GSUdfU1lTRlNcbi0tXG5tbS9tZW1wb2xpY3kuYz0xMTY5PXN0YXRpYyBsb25nIGRvX2dldF9tZW1wb2xpY3koaW50ICpwb2xpY3ksIG5vZGVtYXNrX3QgKm5tYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jLTEyNjktXG5tbS9tZW1wb2xpY3kuYzoxMjcwOiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cbm1tL21lbXBvbGljeS5jLTEyNzEtc3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxuLS1cbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxuLS1cbm1tL21pZ3JhdGUuYy0yMjM1LVxubW0vbWlncmF0ZS5jOjIyMzY6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxubW0vbWlncmF0ZS5jLTIyMzctc3RhdGljIGludCBzdG9yZV9zdGF0dXMoaW50IF9fdXNlciAqc3RhdHVzLCBpbnQgc3RhcnQsIGludCB2YWx1ZSwgaW50IG5yKVxuLS1cbm1tL21pZ3JhdGUuYz0yNjMzPVNZU0NBTExfREVGSU5FNihtb3ZlX3BhZ2VzLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcbi0tXG5tbS9taWdyYXRlLmMtMjYzOS19XG5tbS9taWdyYXRlLmM6MjY0MDojZW5kaWYgLyogQ09ORklHX05VTUFfTUlHUkFUSU9OICovXG5tbS9taWdyYXRlLmMtMjY0MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3ODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKk5VTUEgTWlncmF0aW9uIERlcGVuZGVuY3kgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTlVNQV9NSUdSQVRJT05gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSAqcmVxdWlyZWQqIGZvciB0aGlzIHRvIGJlIGVuYWJsZWQsIGFuZCB3aGF0IG90aGVyIHNldHRpbmdzIGl0IG1pZ2h0IGluZmx1ZW5jZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYW55IGhpZGRlbiBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBObyBzZW5zZSBpbiByZWx5aW5nIG9uIGd1ZXNzd29yayB3aGVuIHRoZSBkZWZpbml0aXZlIGluZm9ybWF0aW9uIGlzIHJpZ2h0IHRoZXJlLCByZWFkeSB0byBiZSBwYXJzZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMgb3IgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBOVU1BIG1pZ3JhdGlvbiBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2NTpcdFx0ICB0aG9zZSBwYWdlcyB0byBhbm90aGVyIGVudGl0eSwgc3VjaCBhcyBhIGh5cGVydmlzb3IsIHNvIHRoYXQgdGhlXG4gNjY2Olx0XHQgIG1lbW9yeSBjYW4gYmUgZnJlZWQgd2l0aGluIHRoZSBob3N0IGZvciBvdGhlciB1c2VzLlxuIDY2NzpcdFxuIDY2ODpcdGNvbmZpZyBOVU1BX01JR1JBVElPTlxuIDY2OTpcdFx0Ym9vbCBcJiMzNDtOVU1BIHBhZ2UgbWlncmF0aW9uXCYjMzQ7XG4gNjcwOlx0XHRkZWZhdWx0IHlcbiA2NzE6XHRcdGRlcGVuZHMgb24gTlVNQSBcdTAwMjZcdTAwMjYgTU1VXG4gNjcyOlx0XHRzZWxlY3QgTUlHUkFUSU9OXG4gNjczOlx0XHRoZWxwXG4gNjc0Olx0XHQgIFN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBwYWdlcyB0byBvdGhlciBOVU1BIG5vZGVzLCBhdmFpbGFibGUgdG9cbiA2NzU6XHRcdCAgdXNlciBzcGFjZSB0aHJvdWdoIGludGVyZmFjZXMgbGlrZSBtaWdyYXRlX3BhZ2VzKCksIG1vdmVfcGFnZXMoKSxcbiA2NzY6XHRcdCAgYW5kIG1iaW5kKCkuIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFnZVxuIDY3NzpcdFx0ICBkZW1vdGlvbiBmb3IgbWVtb3J5IHRpZXJpbmcuXG4gNjc4Olx0XG4gNjc5Olx0Y29uZmlnIE1JR1JBVElPTlxuIDY4MDpcdFx0Ym9vbFxuIDY4MTpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA2ODI6XHRcbiA2ODM6XHRjb25maWcgREVWSUNFX01JR1JBVElPTlxuIDY4NDpcdFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI3OQoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA4NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbmZsdWVuY2VkIGJ5IHRoZSBgTlVNQWAgYW5kIGBOVU1BX01JR1JBVElPTmAgY29uZmlndXJhdGlvbnMgYW5kIGFyZSBub3QgdWJpcXVpdG91cyBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBmdW5kYW1lbnRhbCB0byB0aGUgc3lzdGVtLgoKSSBzZWUgdGhhdCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIGFyZToKCjEuICBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgZnJvbSBgbW0vcGFnZV9hbGxvYy5jYCwgdXNlZCB0byBmaW5kIHRoZSBiZXN0IE5VTUEgbm9kZS4KMi4gIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLCBhIGhlbHBlciBpbiB6b25lbGlzdCBidWlsZGluZy4KMy4gIGBidWlsZF96b25lbGlzdHNgIC8gYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgIC0gaW52b2x2ZWQgaW4gem9uZWxpc3QgY29uc3RydWN0aW9uLgo0LiAgYG5leHRfZGVtb3Rpb25fbm9kZWAgZnJvbSBgbW0vbWVtb3J5LXRpZXJzLmNgLCB1c2VkIGZvciBmaW5kaW5nIGRlbW90aW9uIHRhcmdldHMuCjUuICBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgIGZyb20gYG1tL21lbW9yeS10aWVycy5jYCwgc2V0cyB1cCBkZW1vdGlvbiB0YXJnZXRzLgoKTm93LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZWlyIHViaXF1aXR5LiBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgaXMgY2FsbGVkIG9ubHkgZHVyaW5nIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbWVtb3J5IHRpZXJpbmc7IGl0JiMzOTtzIG5vdCBhIGNvcmUsIHViaXF1aXRvdXMgZnVuY3Rpb24uIGBuZXh0X2RlbW90aW9uX25vZGVgIGlzIHRyaWdnZXJlZCBkdXJpbmcgZm9saW8gZGVtb3Rpb24vbWVtb3J5IHJlY2xhbWF0aW9uLCBzbyBpdCBhbHNvIGFwcGVhcnMgbm9uLXViaXF1aXRvdXMuIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaXMgY2FsbGVkIGF0IGJvb3QgYW5kIG9uIGhvdHBsdWcgZXZlbnRzLCBsaWtld2lzZSwgbm90IHViaXF1aXRvdXMuIFRoZW4sIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBhbmQgYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYCBhcmUgb25seSBpbnZvbHZlZCBpbiB6b25lbGlzdCBidWlsZGluZywgYW5kIHRoZXkgYXJlIGFsc28gbm90IHViaXF1aXRvdXMuCgpgYnVpbGRfYWxsX3pvbmVsaXN0c2AgaXMgY2FsbGVkIG9uIGJvb3Qgb3IgaG90cGx1ZywgYnV0IHRoZXNlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5LCBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAsIGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLCBgYnVpbGRfbm9kZV96b25lbGlzdGAsIGFuZCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgIGFwcGVhciB0byBpbXBsZW1lbnQgdGhlIGNvcmUsIHJlbGV2YW50IGxvZ2ljLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBzeW1ib2xzOiBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAsIGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLCBgYnVpbGRfbm9kZV96b25lbGlzdGAsIGFuZCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgLiBZZXAsIGFsbCBvZiB0aG9zZSBhcmUgdGhlIGtleSBvbmVzLgoKSSYjMzk7bGwgY29uZmlybSB0aGUgc3RhdGljIHN0YXR1cyBvZiB0aGUgZnVuY3Rpb25zLiBgYnVpbGRfbm9kZV96b25lbGlzdGAgYW5kIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgYXJlLCBpbmRlZWQsIHN0YXRpYy4gSG93ZXZlciwgdGhleSBhcmUgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBOb3csIHJlLWNoZWNraW5nIHRoZSBkZWNsYXJhdGlvbnM6IGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBpcyBhIG5vbi1zdGF0aWMgZXhwb3J0ZWQgc3ltYm9sLCBgbmV4dF9kZW1vdGlvbl9ub2RlYCBpcyBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBpcyBzdGF0aWMsIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBpcyBzdGF0aWMuCgpBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBOVU1BYCBhbmQgYE5VTUFfTUlHUkFUSU9OYC4KCkdpdmVuIHRoZSBhbmFseXNpcywgaGVyZSBpcyB3aGF0IEkgd2lsbCBmZWVkIHRvIGBzZXQtcmVzdWx0c2AuCgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtOVU1BX01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmRfbmV4dF9iZXN0X25vZGVfaW4mIzM0OywKICAgICYjMzQ7bmV4dF9kZW1vdGlvbl9ub2RlJiMzNDssCiAgICAmIzM0O2VzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzJiMzNDssCiAgICAmIzM0O2J1aWxkX25vZGVfem9uZWxpc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYW5kIG1tL21lbW9yeS10aWVycy5jLiBJdCByZWZhY3RvcnMgbm9kZSBmYWxsYmFjayBsaXN0IGdlbmVyYXRpb24gKGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIGJ1aWxkX25vZGVfem9uZWxpc3QpIHRvIGFjY2VwdCBleHBsaWNpdCBjYW5kaWRhdGUgbm9kZW1hc2tzIGFuZCB1cGRhdGVzIG1lbW9yeSB0aWVyaW5nIC8gZGVtb3Rpb24gdGFyZ2V0IGNhbGN1bGF0aW9ucyAobmV4dF9kZW1vdGlvbl9ub2RlLCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cykuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbWVtb3J5IHRpZXJpbmcgZGVtb3Rpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5kX25leHRfYmVzdF9ub2RlX2luJiMzNDssCiAgICAmIzM0O25leHRfZGVtb3Rpb25fbm9kZSYjMzQ7LAogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7LAogICAgJiMzNDtidWlsZF9ub2RlX3pvbmVsaXN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIGFuZCBtbS9tZW1vcnktdGllcnMuYy4gSXQgcmVmYWN0b3JzIG5vZGUgZmFsbGJhY2sgbGlzdCBnZW5lcmF0aW9uIChmaW5kX25leHRfYmVzdF9ub2RlX2luLCBidWlsZF9ub2RlX3pvbmVsaXN0KSB0byBhY2NlcHQgZXhwbGljaXQgY2FuZGlkYXRlIG5vZGVtYXNrcyBhbmQgdXBkYXRlcyBtZW1vcnkgdGllcmluZyAvIGRlbW90aW9uIHRhcmdldCBjYWxjdWxhdGlvbnMgKG5leHRfZGVtb3Rpb25fbm9kZSwgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIG1lbW9yeSB0aWVyaW5nIGRlbW90aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU2YmVjNmVmZDI4ZDllMjFkY2Y0YzllNWY4MDE4NDA4Yjc4Mjc4MTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIyOjQ1OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggZTE2ZjEyNTBiMjVjOC4uMThkMDQxZmY1YzUyYyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0xMTMwLDcgJiM0MzsxMTMwLDggQEAgZXh0ZXJuIGludCBub2RlX3JlY2xhaW1fbW9kZTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCiAJCQkJICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTsKLWV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spOwomIzQzO2V4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssCiYjNDM7CQkJCSAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyk7CiAjZWxzZQogI2RlZmluZSBub2RlX3JlY2xhaW1fbW9kZSAwCiAKQEAgLTExMzksNyAmIzQzOzExNDAsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaywKJiM0MzsJCQkJCSBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKQogewogCXJldHVybiBOVU1BX05PX05PREU7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktdGllcnMuYyBiL21tL21lbW9yeS10aWVycy5jCmluZGV4IDU0ODUxZDhhMTk1YjAuLjI1ZTEyMTg1MWI1ODYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS10aWVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS10aWVycy5jCkBAIC0zNzAsNyAmIzQzOzM3MCw3IEBAIGludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaykKIAkgKiBjbG9zZXN0IGRlbW90aW9uIHRhcmdldC4KIAkgKi8KIAlub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spOwotCXJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsICZhbXA7bWFzayk7CiYjNDM7CXJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsICZhbXA7bWFzaywgJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV0pOwogfQogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2FsbF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpCkBAIC00NTAsNyAmIzQzOzQ1MCw3IEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpCiAJCW1lbXRpZXIgPSBsaXN0X25leHRfZW50cnkobWVtdGllciwgbGlzdCk7CiAJCXRpZXJfbm9kZXMgPSBnZXRfbWVtdGllcl9ub2RlbWFzayhtZW10aWVyKTsKIAkJLyoKLQkJICogZmluZF9uZXh0X2Jlc3Rfbm9kZSwgdXNlICYjMzk7dXNlZCYjMzk7IG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0LgomIzQzOwkJICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiwgdXNlICYjMzk7dXNlZCYjMzk7IG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0LgogCQkgKiBBZGQgYWxsIG1lbW9yeSBub2RlcyBleGNlcHQgdGhlIHNlbGVjdGVkIG1lbW9yeSB0aWVyCiAJCSAqIG5vZGVsaXN0IHRvIHNraXAgbGlzdCBzbyB0aGF0IHdlIGZpbmQgdGhlIGJlc3Qgbm9kZSBmcm9tIHRoZQogCQkgKiBtZW10aWVyIG5vZGVsaXN0LgpAQCAtNDYzLDcgJiM0Mzs0NjMsOCBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKQogCQkgKiBpbiB0aGUgcHJlZmVycmVkIG1hc2sgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGR1cmluZyBkZW1vdGlvbi4KIAkJICovCiAJCWRvIHsKLQkJCXRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGUobm9kZSwgJmFtcDt0aWVyX25vZGVzKTsKJiM0MzsJCQl0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsICZhbXA7dGllcl9ub2RlcywKJiM0MzsJCQkJCQkJJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV0pOwogCQkJaWYgKHRhcmdldCA9PSBOVU1BX05PX05PREUpCiAJCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBjNGRjNjFlYzY2M2VlLi5lMWQ3YzhiMjIxZDBkIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01Nzc5LDkgJiM0Mzs1Nzc5LDEwIEBAIHN0YXRpYyBpbnQgbnVtYV96b25lbGlzdF9vcmRlcl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiBzdGF0aWMgaW50IG5vZGVfbG9hZFtNQVhfTlVNTk9ERVNdOwogCiAvKioKLSAqIGZpbmRfbmV4dF9iZXN0X25vZGUgLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0CiYjNDM7ICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJiMzOTtzIGZhbGxiYWNrIGxpc3QKICAqIEBub2RlOiBub2RlIHdob3NlIGZhbGxiYWNrIGxpc3Qgd2UmIzM5O3JlIGFwcGVuZGluZwogICogQHVzZWRfbm9kZV9tYXNrOiBub2RlbWFza190IG9mIGFscmVhZHkgdXNlZCBub2RlcwomIzQzOyAqIEBjYW5kaWRhdGVzOiBub2RlbWFza190IG9mIG5vZGVzIGVsaWdpYmxlIGZvciBzZWxlY3Rpb24KICAqCiAgKiBXZSB1c2UgYSBudW1iZXIgb2YgZmFjdG9ycyB0byBkZXRlcm1pbmUgd2hpY2ggaXMgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZAogICogYXBwZWFyIG9uIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0LiAgVGhlIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFwcGVhcmVkCkBAIC01NzkzLDcgJiM0Mzs1Nzk0LDggQEAgc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTsKICAqCiAgKiBSZXR1cm46IG5vZGUgaWQgb2YgdGhlIGZvdW5kIG5vZGUgb3IgJU5VTUFfTk9fTk9ERSBpZiBubyBub2RlIGlzIGZvdW5kLgogICovCi1pbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spCiYjNDM7aW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLAomIzQzOwkJCSAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpCiB7CiAJaW50IG4sIHZhbDsKIAlpbnQgbWluX3ZhbCA9IElOVF9NQVg7CkBAIC01ODAzLDEyICYjNDM7NTgwNSwxMiBAQCBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spCiAJICogVXNlIHRoZSBsb2NhbCBub2RlIGlmIHdlIGhhdmVuJiMzOTt0IGFscmVhZHksIGJ1dCBmb3IgbWVtb3J5bGVzcyBsb2NhbAogCSAqIG5vZGUsIHdlIHNob3VsZCBza2lwIGl0IGFuZCBmYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXMuCiAJICovCi0JaWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgJmFtcDsmYW1wOyBub2RlX3N0YXRlKG5vZGUsIE5fTUVNT1JZKSkgewomIzQzOwlpZiAoIW5vZGVfaXNzZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobm9kZSwgKmNhbmRpZGF0ZXMpKSB7CiAJCW5vZGVfc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzayk7CiAJCXJldHVybiBub2RlOwogCX0KIAotCWZvcl9lYWNoX25vZGVfc3RhdGUobiwgTl9NRU1PUlkpIHsKJiM0MzsJZm9yX2VhY2hfbm9kZV9tYXNrKG4sICpjYW5kaWRhdGVzKSB7CiAKIAkJLyogRG9uJiMzOTt0IHdhbnQgYSBub2RlIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZSAqLwogCQlpZiAobm9kZV9pc3NldChuLCAqdXNlZF9ub2RlX21hc2spKQpAQCAtNTg0NywxMiAmIzQzOzU4NDksMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKQogICogRE1BIHpvbmUsIGlmIGFueS0tYnV0IHJpc2tzIGV4aGF1c3RpbmcgRE1BIHpvbmUuCiAgKi8KIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlciwKLQkJdW5zaWduZWQgbnJfbm9kZXMpCiYjNDM7CQl1bnNpZ25lZCBpbnQgbnJfbm9kZXMsIGludCB6bGlkeCkKIHsKIAlzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZnM7CiAJaW50IGk7CiAKLQl6b25lcmVmcyA9IHBnZGF0LSZndDtub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS10uX3pvbmVyZWZzOwomIzQzOwl6b25lcmVmcyA9IHBnZGF0LSZndDtub2RlX3pvbmVsaXN0c1t6bGlkeF0uX3pvbmVyZWZzOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVzOyBpJiM0MzsmIzQzOykgewogCQlpbnQgbnJfem9uZXM7CkBAIC01ODgxLDI1ICYjNDM7NTg4MywyOCBAQCBzdGF0aWMgdm9pZCBidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdCkKIAl6b25lcmVmcy0mZ3Q7em9uZV9pZHggPSAwOwogfQogCi1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdCkKJiM0MzsvKgomIzQzOyAqIEJ1aWxkIG9uZSBub2RlLW9yZGVyZWQgZmFsbGJhY2sgbGlzdCBmcm9tIGEgY2FuZGlkYXRlIG5vZGVtYXNrLgomIzQzOyAqIHVwZGF0ZV9sb2FkIHJvdW5kLXJvYmlucyBub2RlX2xvYWQgYWNyb3NzIGVxdWlkaXN0YW50IG5vZGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcywKJiM0MzsJCQkJaW50IHpsaWR4LCBib29sIHVwZGF0ZV9sb2FkLAomIzQzOwkJCQlpbnQgKm5vZGVfb3JkZXIsIGludCAqbnIpCiB7Ci0Jc3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107Ci0JaW50IG5vZGUsIG5yX25vZGVzID0gMDsKIAlub2RlbWFza190IHVzZWRfbWFzayA9IE5PREVfTUFTS19OT05FOwotCWludCBsb2NhbF9ub2RlLCBwcmV2X25vZGU7Ci0KLQkvKiBOVU1BLWF3YXJlIG9yZGVyaW5nIG9mIG5vZGVzICovCi0JbG9jYWxfbm9kZSA9IHBnZGF0LSZndDtub2RlX2lkOwotCXByZXZfbm9kZSA9IGxvY2FsX25vZGU7CiYjNDM7CWludCBsb2NhbF9ub2RlID0gcGdkYXQtJmd0O25vZGVfaWQ7CiYjNDM7CWludCBwcmV2X25vZGUgPSBsb2NhbF9ub2RlOwomIzQzOwlpbnQgbm9kZSwgbnJfbm9kZXMgPSAwOwogCi0JbWVtc2V0KG5vZGVfb3JkZXIsIDAsIHNpemVvZihub2RlX29yZGVyKSk7Ci0Jd2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZShsb2NhbF9ub2RlLCAmYW1wO3VzZWRfbWFzaykpICZndDs9IDApIHsKJiM0MzsJd2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihsb2NhbF9ub2RlLCAmYW1wO3VzZWRfbWFzaywKJiM0MzsJCQkJCSAgICAgIGNhbmRpZGF0ZXMpKSAmZ3Q7PSAwKSB7CiAJCS8qCiAJCSAqIFdlIGRvbiYjMzk7dCB3YW50IHRvIHByZXNzdXJlIGEgcGFydGljdWxhciBub2RlLgogCQkgKiBTbyBhZGRpbmcgcGVuYWx0eSB0byB0aGUgZmlyc3Qgbm9kZSBpbiBzYW1lCiAJCSAqIGRpc3RhbmNlIGdyb3VwIHRvIG1ha2UgaXQgcm91bmQtcm9iaW4uCiAJCSAqLwotCQlpZiAobm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPQomIzQzOwkJaWYgKHVwZGF0ZV9sb2FkICZhbXA7JmFtcDsKJiM0MzsJCSAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9CiAJCSAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIHByZXZfbm9kZSkpCiAJCQlub2RlX2xvYWRbbm9kZV0gJiM0Mzs9IDE7CiAKQEAgLTU5MDcsOCAmIzQzOzU5MTIsMjIgQEAgc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCiAJCXByZXZfbm9kZSA9IG5vZGU7CiAJfQogCi0JYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzKTsKJiM0MzsJYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7CiYjNDM7CSpuciA9IG5yX25vZGVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdOwomIzQzOwlpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlpbnQgbm9kZSwgbnJfbm9kZXMgPSAwOwomIzQzOwomIzQzOwltZW1zZXQobm9kZV9vcmRlciwgMCwgc2l6ZW9mKG5vZGVfb3JkZXIpKTsKJiM0MzsKJiM0MzsJYnVpbGRfbm9kZV96b25lbGlzdChwZ2RhdCwgJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV0sIFpPTkVMSVNUX0ZBTExCQUNLLAomIzQzOwkJCSAgICB0cnVlLCBub2RlX29yZGVyLCAmYW1wO25yX25vZGVzKTsKIAlidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdkYXQpOwomIzQzOwogCXByX2luZm8oJiMzNDtGYWxsYmFjayBvcmRlciBmb3IgTm9kZSAlZDogJiMzNDssIGxvY2FsX25vZGUpOwogCWZvciAobm9kZSA9IDA7IG5vZGUgJmx0OyBucl9ub2Rlczsgbm9kZSYjNDM7JiM0MzspCiAJCXByX2NvbnQoJiMzNDslZCAmIzM0Oywgbm9kZV9vcmRlcltub2RlXSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IE5vZGUgU2VsZWN0aW9uIFJlZmFjdG9yKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZywgc3BlY2lmaWNhbGx5IGFpbWVkIGF0IGltcHJvdmluZyB0aGUgbm9kZSBzZWxlY3Rpb24gbG9naWMsIGxpa2VseSBmb3IgbWVtb3J5IHRpZXJpbmcgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIG1ha2luZyBgZmluZF9uZXh0X2Jlc3Rfbm9kZWAgbW9yZSBmbGV4aWJsZSBieSByZW5hbWluZyBpdCB0byBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgYW5kIGFkZGluZyBhIGBjYW5kaWRhdGVzYCBub2RlbWFzayBwYXJhbWV0ZXIuIFRoaXMgaW5kaWNhdGVzIGEgc2hpZnQgdG93YXJkcyBzcGVjaWZ5aW5nIGEgc3Vic2V0IG9mIG5vZGVzIHRvIGNvbnNpZGVyLCByYXRoZXIgdGhhbiBzZWFyY2hpbmcgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLgoKTG9va2luZyBhdCB0aGUgY2hhbmdlcywgSSBzZWU6CgoqICAgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjaGFuZ2UgaW4gYG1tL2ludGVybmFsLmhgIHJlZmxlY3RzIHRoZSBuZXcgYGNhbmRpZGF0ZXNgIHBhcmFtZXRlciwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KKiAgIEluIGBtbS9tZW1vcnktdGllcnMuY2AsIGNhbGxzIHRvIHRoZSB1cGRhdGVkIGZ1bmN0aW9uIGFyZSBiZWluZyBtYWRlIHdpdGggYSBgJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV1gIG1hc2suIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGBOX01FTU9SWWAgcHJvYmFibHkgcmVmZXJzIHRvIGEgbWVtb3J5IHRpZXIgc3RhdGUuIFRoaXMgbGlrZWx5IHRpZXMgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBtZW1vcnktdGllcmluZyBzdWJzeXN0ZW0uCiogICBgbW0vcGFnZV9hbGxvYy5jYCBoYXMgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMuIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBub2RlX2lzc2V0YCBjaGVja3MgYW5kIGBmb3JfZWFjaF9ub2RlX21hc2tgIGl0ZXJhdGlvbiwgYWxsIHVzaW5nIHRoYXQgYGNhbmRpZGF0ZXNgIG1hc2suIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkOyBpdCBjb25zdHJhaW5zIHRoZSBzZWFyY2ggdG8gYSBzcGVjaWZpYyBzZXQgb2Ygbm9kZXMuIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgaGFzIGFuIGFkZGVkIGB6bGlkeGAgcGFyYW1ldGVyLCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byB6b25lbGlzdCBpbmRleGluZy4gVGhlcmUmIzM5O3MgYWxzbyBgYnVpbGRfbm9kZV96b25lbGlzdGAsIGFuZCBgYnVpbGRfem9uZWxpc3RzYCBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCBhcmUgbmV3LgoKSSYjMzk7bSBub3cgZ29pbmcgdG8gZm9jdXMgb24gcG90ZW50aWFsIHJpc2tzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgYGNvcHlfdG9fdXNlcmAgcHJvYmxlbXMsIGV2ZW4gdGhvdWdoIHRoaXMgZG9lc24mIzM5O3QgbG9vayBsaWtlIGEgZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJmYWNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYnVpbGRfbm9kZV96b25lbGlzdGAgYW5kIGBidWlsZF96b25lbGlzdHNgLgoKSW5zaWRlIGBidWlsZF96b25lbGlzdHNgLCBJIGNhbiBzZWUgYSBgbm9kZV9vcmRlcmAgYXJyYXkgaW5pdGlhbGl6ZWQsIHVzZWQsIGFuZCB0aGUgbnVtYmVyIG9mIG5vZGVzIHRyYWNrZWQuIFRoZSBjcnVjaWFsIHBhcnQgaXMgd2l0aGluIGBidWlsZF9ub2RlX3pvbmVsaXN0YDogSXQgbG9va3MgbGlrZSB0aGUgYG5vZGVfb3JkZXJgIGFycmF5IGlzIGJlaW5nIHBvcHVsYXRlZCBiYXNlZCBvbiBhIGNhbGwgdG8gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gLiBJIHNlZSBhbiBgdXNlZF9tYXNrYCB0aGF0IGVuc3VyZXMgd2UgZG9uJiMzOTt0IHJldHVybiB0aGUgc2FtZSBub2RlIHR3aWNlLCBhbmQgSSBjYW4gYWxzbyBzZWUgYSBgbnJfbm9kZXNgIHZhcmlhYmxlIHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2Ygbm9kZXMgYWRkZWQgdG8gYG5vZGVfb3JkZXJgLiBUaGlzIGFsbCBsb29rcyBva2F5IHNvIGZhci4gVGhlIGZpbmFsIHN0ZXAgaXMgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoaXMgYG5vZGVfb3JkZXJgIGluIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAuIEkgYWxzbyBzZWUgdGhhdCB0aGUgYWN0dWFsIGBub2RlX29yZGVyYCBpdHNlbGYgYXBwZWFycyB0byBiZSBwcmludGVkIHRvIHRoZSBrZXJuZWwgY29uc29sZSB3aXRoIGBwcl9jb250KClgLiBOb3QgYSBjcml0aWNhbCBpc3N1ZSBhcyBpcywgYnV0IHRoYXQgd291bGQgbmVlZCB0byBiZSBjaGVja2VkIGluIHByb2R1Y3Rpb24gdG8gc2VlIGlmIGFueSBub2RlcyBhcmUgc2Vuc2l0aXZlLgoKVGhpcyBpcyBhbGwgcHJldHR5IGNsZWFuLCBidXQgSSYjMzk7bSBub3QgZnVsbHkgY29udmluY2VkIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBpc3N1ZXMuIFRvIGVuc3VyZSBteSBwZWFjZSBvZiBtaW5kLCBJJiMzOTttIGdvaW5nIHRvIHJ1biBgZ3JlcHBlcmAgYWNyb3NzIHRoZSBjb2RlYmFzZSB0byBsb29rIGZvciBhbnkgb3RoZXIgdXNlcyBvZiB0aGUgb2xkIGBmaW5kX25leHRfYmVzdF9ub2RlYCBmdW5jdGlvbiwgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGJlZW4gY2xlYW5seSByZXBsYWNlZCBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBlZGdlIGNhc2VzIEkmIzM5O20gbWlzc2luZy4gVGhpcyB3aWxsIGFsc28gY2F0Y2ggaWYgSSBzb21laG93IG92ZXJsb29rZWQgd2hlcmUgYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIGlzIGNhbGxlZCB0aGF0IGNvdWxkIGNhdXNlIGFuIGlzc3VlLiBJIGFsd2F5cyB3YW50IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX25leHRfYmVzdF9ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTEzMT1leHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL2ludGVybmFsLmgtMTEzMi1cdFx0XHRcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XG5tbS9pbnRlcm5hbC5oOjExMzM6ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL2ludGVybmFsLmgtMTEzNC1cdFx0XHRcdCAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyk7XG4tLVxubW0vaW50ZXJuYWwuaD0xMTM4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS9pbnRlcm5hbC5oLTExNDItfVxubW0vaW50ZXJuYWwuaDoxMTQzOnN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxubW0vaW50ZXJuYWwuaC0xMTQ0LVx0XHRcdFx0XHQgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcbi0tXG5tbS9tZW1vcnktdGllcnMuYz0zMzA9aW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTM3Mi1cdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XG5tbS9tZW1vcnktdGllcnMuYzozNzM6XHRyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcdTAwMjZtYXNrLCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xubW0vbWVtb3J5LXRpZXJzLmMtMzc0LX1cbi0tXG5tbS9tZW1vcnktdGllcnMuYz00MjU9c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbi0tXG5tbS9tZW1vcnktdGllcnMuYy00NTItXHRcdC8qXG5tbS9tZW1vcnktdGllcnMuYzo0NTM6XHRcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAmIzM5O3VzZWQmIzM5OyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC5cbm1tL21lbW9yeS10aWVycy5jLTQ1NC1cdFx0ICogQWRkIGFsbCBtZW1vcnkgbm9kZXMgZXhjZXB0IHRoZSBzZWxlY3RlZCBtZW1vcnkgdGllclxuLS1cbm1tL21lbW9yeS10aWVycy5jLTQ2NS1cdFx0ZG8ge1xubW0vbWVtb3J5LXRpZXJzLmM6NDY2Olx0XHRcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2dGllcl9ub2Rlcyxcbm1tL21lbW9yeS10aWVycy5jLTQ2Ny1cdFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTU3Nzk9c3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTc4MS0vKipcbm1tL3BhZ2VfYWxsb2MuYzo1NzgyOiAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0XG5tbS9wYWdlX2FsbG9jLmMtNTc4My0gKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJiMzOTtyZSBhcHBlbmRpbmdcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTc5Ni0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo1Nzk3OmludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy01Nzk4LVx0XHRcdCAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01ODk4LVxubW0vcGFnZV9hbGxvYy5jOjU4OTk6XHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFx1MDAyNnVzZWRfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy01OTAwLVx0XHRcdFx0XHQgICAgICBjYW5kaWRhdGVzKSkgXHUwMDNlPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipEZWVwIERpdmUgaW50byBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgKioKCk9rYXksIHNvIEkmIzM5O20ganVzdCBxdWlja2x5IHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBCZWZvcmUgd2UgY29tbWl0LCBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBzbyBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgIGFuZCB0aGUgY29kZSBhcm91bmQgaXQgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGxvZ2ljIHRoZXJlIGlzIHNvdW5kLCBnaXZlbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28gYSBxdWljayB2ZXJpZmljYXRpb24gbmV2ZXIgaHVydHMuIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGFzc3VtcHRpb25zIGhvbGQgYW5kIHRoYXQgd2UgaGF2ZW4mIzM5O3QgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucyBvciBvdmVybG9va2VkIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBBIGZldyBtaW51dGVzIG5vdyBjb3VsZCBzYXZlIGEgbG90IG9mIGhlYWRhY2hlcyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4NDA6XHRcdFx0bm9kZV9zZXQoYmVzdF9ub2RlLCAqdXNlZF9ub2RlX21hc2spO1xuNTg0MTpcdFxuNTg0MjpcdFx0cmV0dXJuIGJlc3Rfbm9kZTtcbjU4NDM6XHR9XG41ODQ0Olx0XG41ODQ1Olx0XG41ODQ2Olx0LypcbjU4NDc6XHQgKiBCdWlsZCB6b25lbGlzdHMgb3JkZXJlZCBieSBub2RlIGFuZCB6b25lcyB3aXRoaW4gbm9kZS5cbjU4NDg6XHQgKiBUaGlzIHJlc3VsdHMgaW4gbWF4aW11bSBsb2NhbGl0eS0tbm9ybWFsIHpvbmUgb3ZlcmZsb3dzIGludG8gbG9jYWxcbjU4NDk6XHQgKiBETUEgem9uZSwgaWYgYW55LS1idXQgcmlza3MgZXhoYXVzdGluZyBETUEgem9uZS5cbjU4NTA6XHQgKi9cbjU4NTE6XHRzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ19kYXRhX3QgKnBnZGF0LCBpbnQgKm5vZGVfb3JkZXIsXG41ODUyOlx0XHRcdHVuc2lnbmVkIGludCBucl9ub2RlcywgaW50IHpsaWR4KVxuNTg1MzpcdHtcbjU4NTQ6XHRcdHN0cnVjdCB6b25lcmVmICp6b25lcmVmcztcbjU4NTU6XHRcdGludCBpO1xuNTg1NjpcdFxuNTg1NzpcdFx0em9uZXJlZnMgPSBwZ2RhdC1cdTAwM2Vub2RlX3pvbmVsaXN0c1t6bGlkeF0uX3pvbmVyZWZzO1xuNTg1ODpcdFxuNTg1OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZXM7IGkmIzQzOyYjNDM7KSB7XG41ODYwOlx0XHRcdGludCBucl96b25lcztcbjU4NjE6XHRcbjU4NjI6XHRcdFx0cGdfZGF0YV90ICpub2RlID0gTk9ERV9EQVRBKG5vZGVfb3JkZXJbaV0pO1xuNTg2MzpcdFxuNTg2NDpcdFx0XHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUobm9kZSwgem9uZXJlZnMpO1xuNTg2NTpcdFx0XHR6b25lcmVmcyAmIzQzOz0gbnJfem9uZXM7XG41ODY2Olx0XHR9XG41ODY3Olx0XHR6b25lcmVmcy1cdTAwM2V6b25lID0gTlVMTDtcbjU4Njg6XHRcdHpvbmVyZWZzLVx1MDAzZXpvbmVfaWR4ID0gMDtcbjU4Njk6XHR9XG41ODcwOlx0XG41ODcxOlx0LypcbjU4NzI6XHQgKiBCdWlsZCBfX0dGUF9USElTTk9ERSB6b25lbGlzdHNcbjU4NzM6XHQgKi9cbjU4NzQ6XHRzdGF0aWMgdm9pZCBidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbjU4NzU6XHR7XG41ODc2Olx0XHRzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZnM7XG41ODc3Olx0XHRpbnQgbnJfem9uZXM7XG41ODc4Olx0XG41ODc5Olx0XHR6b25lcmVmcyA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX05PRkFMTEJBQ0tdLl96b25lcmVmcztcbjU4ODA6XHRcdG5yX3pvbmVzID0gYnVpbGRfem9uZXJlZnNfbm9kZShwZ2RhdCwgem9uZXJlZnMpO1xuNTg4MTpcdFx0em9uZXJlZnMgJiM0Mzs9IG5yX3pvbmVzO1xuNTg4MjpcdFx0em9uZXJlZnMtXHUwMDNlem9uZSA9IE5VTEw7XG41ODgzOlx0XHR6b25lcmVmcy1cdTAwM2V6b25lX2lkeCA9IDA7XG41ODg0Olx0fVxuNTg4NTpcdFxuNTg4NjpcdC8qXG41ODg3Olx0ICogQnVpbGQgb25lIG5vZGUtb3JkZXJlZCBmYWxsYmFjayBsaXN0IGZyb20gYSBjYW5kaWRhdGUgbm9kZW1hc2suXG41ODg4Olx0ICogdXBkYXRlX2xvYWQgcm91bmQtcm9iaW5zIG5vZGVfbG9hZCBhY3Jvc3MgZXF1aWRpc3RhbnQgbm9kZXMuXG41ODg5Olx0ICovXG41ODkwOlx0c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuNTg5MTpcdFx0XHRcdFx0aW50IHpsaWR4LCBib29sIHVwZGF0ZV9sb2FkLFxuNTg5MjpcdFx0XHRcdFx0aW50ICpub2RlX29yZGVyLCBpbnQgKm5yKVxuNTg5MzpcdHtcbjU4OTQ6XHRcdG5vZGVtYXNrX3QgdXNlZF9tYXNrID0gTk9ERV9NQVNLX05PTkU7XG41ODk1Olx0XHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG41ODk2Olx0XHRpbnQgcHJldl9ub2RlID0gbG9jYWxfbm9kZTtcbjU4OTc6XHRcdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG41ODk4Olx0XG41ODk5Olx0XHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFx1MDAyNnVzZWRfbWFzayxcbjU5MDA6XHRcdFx0XHRcdFx0ICAgICAgY2FuZGlkYXRlcykpIFx1MDAzZT0gMCkge1xuNTkwMTpcdFx0XHQvKlxuNTkwMjpcdFx0XHQgKiBXZSBkb24mIzM5O3Qgd2FudCB0byBwcmVzc3VyZSBhIHBhcnRpY3VsYXIgbm9kZS5cbjU5MDM6XHRcdFx0ICogU28gYWRkaW5nIHBlbmFsdHkgdG8gdGhlIGZpcnN0IG5vZGUgaW4gc2FtZVxuNTkwNDpcdFx0XHQgKiBkaXN0YW5jZSBncm91cCB0byBtYWtlIGl0IHJvdW5kLXJvYmluLlxuNTkwNTpcdFx0XHQgKi9cbjU5MDY6XHRcdFx0aWYgKHVwZGF0ZV9sb2FkIFx1MDAyNlx1MDAyNlxuNTkwNzpcdFx0XHQgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPVxuNTkwODpcdFx0XHQgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBwcmV2X25vZGUpKVxuNTkwOTpcdFx0XHRcdG5vZGVfbG9hZFtub2RlXSAmIzQzOz0gMTtcbjU5MTA6XHRcbjU5MTE6XHRcdFx0bm9kZV9vcmRlcltucl9ub2RlcyYjNDM7JiM0MztdID0gbm9kZTtcbjU5MTI6XHRcdFx0cHJldl9ub2RlID0gbm9kZTtcbjU5MTM6XHRcdH1cbjU5MTQ6XHRcbjU5MTU6XHRcdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2RlcywgemxpZHgpO1xuNTkxNjpcdFx0Km5yID0gbnJfbm9kZXM7XG41OTE3Olx0fVxuNTkxODpcdFxuNTkxOTpcdHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuNTkyMDpcdHtcbjU5MjE6XHRcdHN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdO1xuNTkyMjpcdFx0aW50IGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuNTkyMzpcdFx0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcbjU5MjQ6XHRcbjU5MjU6XHRcdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xuNTkyNjpcdFxuNTkyNzpcdFx0YnVpbGRfbm9kZV96b25lbGlzdChwZ2RhdCwgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBaT05FTElTVF9GQUxMQkFDSyxcbjU5Mjg6XHRcdFx0XHQgICAgdHJ1ZSwgbm9kZV9vcmRlciwgXHUwMDI2bnJfbm9kZXMpO1xuNTkyOTpcdFx0YnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5NwoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2VybmVsIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBpcyBhbGwgaW50ZXJuYWwga2VybmVsIHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgdGhlIE5VTUEgem9uZWxpc3QgaXMgZ2VuZXJhdGVkIGFuZCBob3cgdGhlIHRhcmdldCBub2RlIGZvciBkZW1vdGlvbiBpcyBzZWxlY3RlZC4gTm8gZGF0YSBmcm9tIHRoZSBrZXJuZWwgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZCDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIHNvdXJjZSBvZiBoZWFkYWNoZXMuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYWxsIHRoZSBrZXkgdmFyaWFibGVzIGFuZCBidWZmZXJzIGxpa2UgYG5vZGVfb3JkZXJgIGFuZCBgdXNlZF9tYXNrYCBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgbGlrZSBgTk9ERV9NQVNLX05PTkVgIGFuZCBgbWVtc2V0KC4uLiwgMCwgLi4uKWAsIG1lYW5pbmcgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgY3JlZXBpbmcgaW4uIEkmIzM5O20gY29uZmlkZW50IHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgZXhwb3NlZC4KCkV2ZW4gaWYgdGhlcmUgKndlcmUqIHNvbWUgYm91bmRhcnkgaXNzdWVzIHdpdGggaW5kZXhpbmcgc29tZXRoaW5nIGxpa2UgYG5vZGVfb3JkZXJgIG9yIHRoZSB6b25lbGlzdHMsIHRoZSBrZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXIgKEtBU0FOKSB3b3VsZCBjYXRjaCB0aGF0IGFzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBTbywgYmFzZWQgb24gdGhhdCwgS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBoZXJlOyBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKQWxyaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGNyYWZ0IGEgY29uY2lzZSByZXNwb25zZSwgYW5kIHRoZW4gdHJpZ2dlciB0aGUgc2V0LXJlc3VsdHMgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIGRlbW90aW9uIG5vZGUgc2VsZWN0aW9uIGxvZ2ljIChpbnRyb2R1Y2luZyBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgd2l0aCBhIGNhbmRpZGF0ZSBub2RlbWFzayBwYXJhbWV0ZXIgYW5kIGZhY3RvcmluZyBvdXQgYGJ1aWxkX25vZGVfem9uZWxpc3RgKS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgbm9kZW1hc2tzLCBhbmQgYXJyYXlzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiBgTk9ERV9NQVNLX05PTkVgLCBgbWVtc2V0KG5vZGVfb3JkZXIsIDAsIC4uLilgKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBpc3N1ZXMgaW4gem9uZWxpc3QgaW5kZXhpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ1OjQ5LjI0Nzk1NjEyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NDcyNjIzMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIk5VTUFfTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmluZF9uZXh0X2Jlc3Rfbm9kZV9pblwiLFxuICAgIFwibmV4dF9kZW1vdGlvbl9ub2RlXCIsXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiLFxuICAgIFwiYnVpbGRfbm9kZV96b25lbGlzdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBhbmQgbW0vbWVtb3J5LXRpZXJzLmMuIEl0IHJlZmFjdG9ycyBub2RlIGZhbGxiYWNrIGxpc3QgZ2VuZXJhdGlvbiAoZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiwgYnVpbGRfbm9kZV96b25lbGlzdCkgdG8gYWNjZXB0IGV4cGxpY2l0IGNhbmRpZGF0ZSBub2RlbWFza3MgYW5kIHVwZGF0ZXMgbWVtb3J5IHRpZXJpbmcgLyBkZW1vdGlvbiB0YXJnZXQgY2FsY3VsYXRpb25zIChuZXh0X2RlbW90aW9uX25vZGUsIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIE5VTUEgem9uZWxpc3QgY29uc3RydWN0aW9uIGFuZCBtZW1vcnkgdGllcmluZyBkZW1vdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDU6NDkuMjQ3OTYyMDExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAwOTYxNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTZiZWM2ZWZkMjhkOWUyMWRjZjRjOWU1ZjgwMTg0MDhiNzgyNzgxN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIyOjQ1OjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggZTE2ZjEyNTBiMjVjOC4uMThkMDQxZmY1YzUyYyAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xMTMwLDcgKzExMzAsOCBAQCBleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xcbiBcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XFxuLWV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spO1xcbitleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpO1xcbiAjZWxzZVxcbiAjZGVmaW5lIG5vZGVfcmVjbGFpbV9tb2RlIDBcXG4gXFxuQEAgLTExMzksNyArMTE0MCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcXG4rc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxcbiB7XFxuIFxcdHJldHVybiBOVU1BX05PX05PREU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LXRpZXJzLmMgYi9tbS9tZW1vcnktdGllcnMuY1xcbmluZGV4IDU0ODUxZDhhMTk1YjAuLjI1ZTEyMTg1MWI1ODYgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LXRpZXJzLmNcXG4rKysgYi9tbS9tZW1vcnktdGllcnMuY1xcbkBAIC0zNzAsNyArMzcwLDcgQEAgaW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxcbiBcXHQgKiBjbG9zZXN0IGRlbW90aW9uIHRhcmdldC5cXG4gXFx0ICovXFxuIFxcdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XFxuLVxcdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIFxcdTAwMjZtYXNrKTtcXG4rXFx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNm1hc2ssIFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkaXNhYmxlX2FsbF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbiBcXHRcXHRtZW10aWVyID0gbGlzdF9uZXh0X2VudHJ5KG1lbXRpZXIsIGxpc3QpO1xcbiBcXHRcXHR0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGUsIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXFxuK1xcdFxcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXFxuIFxcdFxcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcXG4gXFx0XFx0ICogbm9kZWxpc3QgdG8gc2tpcCBsaXN0IHNvIHRoYXQgd2UgZmluZCB0aGUgYmVzdCBub2RlIGZyb20gdGhlXFxuIFxcdFxcdCAqIG1lbXRpZXIgbm9kZWxpc3QuXFxuQEAgLTQ2Myw3ICs0NjMsOCBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbiBcXHRcXHQgKiBpbiB0aGUgcHJlZmVycmVkIG1hc2sgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGR1cmluZyBkZW1vdGlvbi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGRvIHtcXG4tXFx0XFx0XFx0dGFyZ2V0ID0gZmluZF9uZXh0X2Jlc3Rfbm9kZShub2RlLCBcXHUwMDI2dGllcl9ub2Rlcyk7XFxuK1xcdFxcdFxcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNnRpZXJfbm9kZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbiBcXHRcXHRcXHRpZiAodGFyZ2V0ID09IE5VTUFfTk9fTk9ERSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCBjNGRjNjFlYzY2M2VlLi5lMWQ3YzhiMjIxZDBkIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC01Nzc5LDkgKzU3NzksMTAgQEAgc3RhdGljIGludCBudW1hX3pvbmVsaXN0X29yZGVyX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4gc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcXG4gXFxuIC8qKlxcbi0gKiBmaW5kX25leHRfYmVzdF9ub2RlIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0XFxuKyAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3RcXG4gICogQG5vZGU6IG5vZGUgd2hvc2UgZmFsbGJhY2sgbGlzdCB3ZSdyZSBhcHBlbmRpbmdcXG4gICogQHVzZWRfbm9kZV9tYXNrOiBub2RlbWFza190IG9mIGFscmVhZHkgdXNlZCBub2Rlc1xcbisgKiBAY2FuZGlkYXRlczogbm9kZW1hc2tfdCBvZiBub2RlcyBlbGlnaWJsZSBmb3Igc2VsZWN0aW9uXFxuICAqXFxuICAqIFdlIHVzZSBhIG51bWJlciBvZiBmYWN0b3JzIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkXFxuICAqIGFwcGVhciBvbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0LiAgVGhlIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFwcGVhcmVkXFxuQEAgLTU3OTMsNyArNTc5NCw4IEBAIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XFxuICAqXFxuICAqIFJldHVybjogbm9kZSBpZCBvZiB0aGUgZm91bmQgbm9kZSBvciAlTlVNQV9OT19OT0RFIGlmIG5vIG5vZGUgaXMgZm91bmQuXFxuICAqL1xcbi1pbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXFxuK2ludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcXG4ge1xcbiBcXHRpbnQgbiwgdmFsO1xcbiBcXHRpbnQgbWluX3ZhbCA9IElOVF9NQVg7XFxuQEAgLTU4MDMsMTIgKzU4MDUsMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxcbiBcXHQgKiBVc2UgdGhlIGxvY2FsIG5vZGUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LCBidXQgZm9yIG1lbW9yeWxlc3MgbG9jYWxcXG4gXFx0ICogbm9kZSwgd2Ugc2hvdWxkIHNraXAgaXQgYW5kIGZhbGwgYmFjayB0byBvdGhlciBub2Rlcy5cXG4gXFx0ICovXFxuLVxcdGlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spIFxcdTAwMjZcXHUwMDI2IG5vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpKSB7XFxuK1xcdGlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spIFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgKmNhbmRpZGF0ZXMpKSB7XFxuIFxcdFxcdG5vZGVfc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzayk7XFxuIFxcdFxcdHJldHVybiBub2RlO1xcbiBcXHR9XFxuIFxcbi1cXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG4sIE5fTUVNT1JZKSB7XFxuK1xcdGZvcl9lYWNoX25vZGVfbWFzayhuLCAqY2FuZGlkYXRlcykge1xcbiBcXG4gXFx0XFx0LyogRG9uJ3Qgd2FudCBhIG5vZGUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlICovXFxuIFxcdFxcdGlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVfbWFzaykpXFxuQEAgLTU4NDcsMTIgKzU4NDksMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxcbiAgKiBETUEgem9uZSwgaWYgYW55LS1idXQgcmlza3MgZXhoYXVzdGluZyBETUEgem9uZS5cXG4gICovXFxuIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlcixcXG4tXFx0XFx0dW5zaWduZWQgbnJfbm9kZXMpXFxuK1xcdFxcdHVuc2lnbmVkIGludCBucl9ub2RlcywgaW50IHpsaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCB6b25lcmVmICp6b25lcmVmcztcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHR6b25lcmVmcyA9IHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS10uX3pvbmVyZWZzO1xcbitcXHR6b25lcmVmcyA9IHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVsaXN0c1t6bGlkeF0uX3pvbmVyZWZzO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVzOyBpKyspIHtcXG4gXFx0XFx0aW50IG5yX3pvbmVzO1xcbkBAIC01ODgxLDI1ICs1ODgzLDI4IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbiBcXHR6b25lcmVmcy1cXHUwMDNlem9uZV9pZHggPSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcXG4rLypcXG4rICogQnVpbGQgb25lIG5vZGUtb3JkZXJlZCBmYWxsYmFjayBsaXN0IGZyb20gYSBjYW5kaWRhdGUgbm9kZW1hc2suXFxuKyAqIHVwZGF0ZV9sb2FkIHJvdW5kLXJvYmlucyBub2RlX2xvYWQgYWNyb3NzIGVxdWlkaXN0YW50IG5vZGVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxcbitcXHRcXHRcXHRcXHRpbnQgemxpZHgsIGJvb2wgdXBkYXRlX2xvYWQsXFxuK1xcdFxcdFxcdFxcdGludCAqbm9kZV9vcmRlciwgaW50ICpucilcXG4ge1xcbi1cXHRzdGF0aWMgaW50IG5vZGVfb3JkZXJbTUFYX05VTU5PREVTXTtcXG4tXFx0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcXG4gXFx0bm9kZW1hc2tfdCB1c2VkX21hc2sgPSBOT0RFX01BU0tfTk9ORTtcXG4tXFx0aW50IGxvY2FsX25vZGUsIHByZXZfbm9kZTtcXG4tXFxuLVxcdC8qIE5VTUEtYXdhcmUgb3JkZXJpbmcgb2Ygbm9kZXMgKi9cXG4tXFx0bG9jYWxfbm9kZSA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbi1cXHRwcmV2X25vZGUgPSBsb2NhbF9ub2RlO1xcbitcXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbitcXHRpbnQgcHJldl9ub2RlID0gbG9jYWxfbm9kZTtcXG4rXFx0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcXG4gXFxuLVxcdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xcbi1cXHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlKGxvY2FsX25vZGUsIFxcdTAwMjZ1c2VkX21hc2spKSBcXHUwMDNlPSAwKSB7XFxuK1xcdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obG9jYWxfbm9kZSwgXFx1MDAyNnVzZWRfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FuZGlkYXRlcykpIFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgZG9uJ3Qgd2FudCB0byBwcmVzc3VyZSBhIHBhcnRpY3VsYXIgbm9kZS5cXG4gXFx0XFx0ICogU28gYWRkaW5nIHBlbmFsdHkgdG8gdGhlIGZpcnN0IG5vZGUgaW4gc2FtZVxcbiBcXHRcXHQgKiBkaXN0YW5jZSBncm91cCB0byBtYWtlIGl0IHJvdW5kLXJvYmluLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgbm9kZSkgIT1cXG4rXFx0XFx0aWYgKHVwZGF0ZV9sb2FkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9XFxuIFxcdFxcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIHByZXZfbm9kZSkpXFxuIFxcdFxcdFxcdG5vZGVfbG9hZFtub2RlXSArPSAxO1xcbiBcXG5AQCAtNTkwNyw4ICs1OTEyLDIyIEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbiBcXHRcXHRwcmV2X25vZGUgPSBub2RlO1xcbiBcXHR9XFxuIFxcbi1cXHRidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ2RhdCwgbm9kZV9vcmRlciwgbnJfbm9kZXMpO1xcbitcXHRidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ2RhdCwgbm9kZV9vcmRlciwgbnJfbm9kZXMsIHpsaWR4KTtcXG4rXFx0Km5yID0gbnJfbm9kZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbit7XFxuK1xcdHN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdO1xcbitcXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbitcXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xcbitcXG4rXFx0bWVtc2V0KG5vZGVfb3JkZXIsIDAsIHNpemVvZihub2RlX29yZGVyKSk7XFxuK1xcbitcXHRidWlsZF9ub2RlX3pvbmVsaXN0KHBnZGF0LCBcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBaT05FTElTVF9GQUxMQkFDSyxcXG4rXFx0XFx0XFx0ICAgIHRydWUsIG5vZGVfb3JkZXIsIFxcdTAwMjZucl9ub2Rlcyk7XFxuIFxcdGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ2RhdCk7XFxuK1xcbiBcXHRwcl9pbmZvKFxcXCJGYWxsYmFjayBvcmRlciBmb3IgTm9kZSAlZDogXFxcIiwgbG9jYWxfbm9kZSk7XFxuIFxcdGZvciAobm9kZSA9IDA7IG5vZGUgXFx1MDAzYyBucl9ub2Rlczsgbm9kZSsrKVxcbiBcXHRcXHRwcl9jb250KFxcXCIlZCBcXFwiLCBub2RlX29yZGVyW25vZGVdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDU6NTAuNzQ5NDQ3NTY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjEzNTMyOTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJOVU1BX01JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpbmRfbmV4dF9iZXN0X25vZGVfaW5cIixcbiAgICBcIm5leHRfZGVtb3Rpb25fbm9kZVwiLFxuICAgIFwiZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNcIixcbiAgICBcImJ1aWxkX25vZGVfem9uZWxpc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBhbmQgbW0vbWVtb3J5LXRpZXJzLmMuIEl0IHJlZmFjdG9ycyBub2RlIGZhbGxiYWNrIGxpc3QgZ2VuZXJhdGlvbiAoZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiwgYnVpbGRfbm9kZV96b25lbGlzdCkgdG8gYWNjZXB0IGV4cGxpY2l0IGNhbmRpZGF0ZSBub2RlbWFza3MgYW5kIHVwZGF0ZXMgbWVtb3J5IHRpZXJpbmcgLyBkZW1vdGlvbiB0YXJnZXQgY2FsY3VsYXRpb25zIChuZXh0X2RlbW90aW9uX25vZGUsIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIE5VTUEgem9uZWxpc3QgY29uc3RydWN0aW9uIGFuZCBtZW1vcnkgdGllcmluZyBkZW1vdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNmJlYzZlZmQyOGQ5ZTIxZGNmNGM5ZTVmODAxODQwOGI3ODI3ODE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMjo0NTo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCBlMTZmMTI1MGIyNWM4Li4xOGQwNDFmZjVjNTJjIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTExMzAsNyArMTEzMCw4IEBAIGV4dGVybiBpbnQgbm9kZV9yZWNsYWltX21vZGU7XG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLWV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spO1xuK2V4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4rXHRcdFx0XHQgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpO1xuICNlbHNlXG4gI2RlZmluZSBub2RlX3JlY2xhaW1fbW9kZSAwXG4gXG5AQCAtMTEzOSw3ICsxMTQwLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIHtcbiBcdHJldHVybiAwO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcbitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbitcdFx0XHRcdFx0IGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4ge1xuIFx0cmV0dXJuIE5VTUFfTk9fTk9ERTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LXRpZXJzLmMgYi9tbS9tZW1vcnktdGllcnMuY1xuaW5kZXggNTQ4NTFkOGExOTViMC4uMjVlMTIxODUxYjU4NiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS10aWVycy5jXG4rKysgYi9tbS9tZW1vcnktdGllcnMuY1xuQEAgLTM3MCw3ICszNzAsNyBAQCBpbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spXG4gXHQgKiBjbG9zZXN0IGRlbW90aW9uIHRhcmdldC5cbiBcdCAqL1xuIFx0bm9kZXNfY29tcGxlbWVudChtYXNrLCAqYWxsb3dlZF9tYXNrKTtcbi1cdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIFx1MDAyNm1hc2spO1xuK1x0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2bWFzaywgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGlzYWJsZV9hbGxfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuIFx0XHRtZW10aWVyID0gbGlzdF9uZXh0X2VudHJ5KG1lbXRpZXIsIGxpc3QpO1xuIFx0XHR0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7XG4gXHRcdC8qXG4tXHRcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGUsIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG4rXHRcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG4gXHRcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcbiBcdFx0ICogbm9kZWxpc3QgdG8gc2tpcCBsaXN0IHNvIHRoYXQgd2UgZmluZCB0aGUgYmVzdCBub2RlIGZyb20gdGhlXG4gXHRcdCAqIG1lbXRpZXIgbm9kZWxpc3QuXG5AQCAtNDYzLDcgKzQ2Myw4IEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4gXHRcdCAqIGluIHRoZSBwcmVmZXJyZWQgbWFzayB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZHVyaW5nIGRlbW90aW9uLlxuIFx0XHQgKi9cbiBcdFx0ZG8ge1xuLVx0XHRcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGUobm9kZSwgXHUwMDI2dGllcl9ub2Rlcyk7XG4rXHRcdFx0dGFyZ2V0ID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcdTAwMjZ0aWVyX25vZGVzLFxuK1x0XHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbiBcdFx0XHRpZiAodGFyZ2V0ID09IE5VTUFfTk9fTk9ERSlcbiBcdFx0XHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYzRkYzYxZWM2NjNlZS4uZTFkN2M4YjIyMWQwZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTc3OSw5ICs1Nzc5LDEwIEBAIHN0YXRpYyBpbnQgbnVtYV96b25lbGlzdF9vcmRlcl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcbiBcbiAvKipcbi0gKiBmaW5kX25leHRfYmVzdF9ub2RlIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0XG4rICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJ3MgZmFsbGJhY2sgbGlzdFxuICAqIEBub2RlOiBub2RlIHdob3NlIGZhbGxiYWNrIGxpc3Qgd2UncmUgYXBwZW5kaW5nXG4gICogQHVzZWRfbm9kZV9tYXNrOiBub2RlbWFza190IG9mIGFscmVhZHkgdXNlZCBub2Rlc1xuKyAqIEBjYW5kaWRhdGVzOiBub2RlbWFza190IG9mIG5vZGVzIGVsaWdpYmxlIGZvciBzZWxlY3Rpb25cbiAgKlxuICAqIFdlIHVzZSBhIG51bWJlciBvZiBmYWN0b3JzIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkXG4gICogYXBwZWFyIG9uIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3QuICBUaGUgbm9kZSBzaG91bGQgbm90IGhhdmUgYXBwZWFyZWRcbkBAIC01NzkzLDcgKzU3OTQsOCBAQCBzdGF0aWMgaW50IG5vZGVfbG9hZFtNQVhfTlVNTk9ERVNdO1xuICAqXG4gICogUmV0dXJuOiBub2RlIGlkIG9mIHRoZSBmb3VuZCBub2RlIG9yICVOVU1BX05PX05PREUgaWYgbm8gbm9kZSBpcyBmb3VuZC5cbiAgKi9cbi1pbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4raW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxuK1x0XHRcdCAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4ge1xuIFx0aW50IG4sIHZhbDtcbiBcdGludCBtaW5fdmFsID0gSU5UX01BWDtcbkBAIC01ODAzLDEyICs1ODA1LDEyIEBAIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcbiBcdCAqIFVzZSB0aGUgbG9jYWwgbm9kZSBpZiB3ZSBoYXZlbid0IGFscmVhZHksIGJ1dCBmb3IgbWVtb3J5bGVzcyBsb2NhbFxuIFx0ICogbm9kZSwgd2Ugc2hvdWxkIHNraXAgaXQgYW5kIGZhbGwgYmFjayB0byBvdGhlciBub2Rlcy5cbiBcdCAqL1xuLVx0aWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgXHUwMDI2XHUwMDI2IG5vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpKSB7XG4rXHRpZiAoIW5vZGVfaXNzZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChub2RlLCAqY2FuZGlkYXRlcykpIHtcbiBcdFx0bm9kZV9zZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKTtcbiBcdFx0cmV0dXJuIG5vZGU7XG4gXHR9XG4gXG4tXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG4sIE5fTUVNT1JZKSB7XG4rXHRmb3JfZWFjaF9ub2RlX21hc2sobiwgKmNhbmRpZGF0ZXMpIHtcbiBcbiBcdFx0LyogRG9uJ3Qgd2FudCBhIG5vZGUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlICovXG4gXHRcdGlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVfbWFzaykpXG5AQCAtNTg0NywxMiArNTg0OSwxMiBAQCBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4gICogRE1BIHpvbmUsIGlmIGFueS0tYnV0IHJpc2tzIGV4aGF1c3RpbmcgRE1BIHpvbmUuXG4gICovXG4gc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdfZGF0YV90ICpwZ2RhdCwgaW50ICpub2RlX29yZGVyLFxuLVx0XHR1bnNpZ25lZCBucl9ub2RlcylcbitcdFx0dW5zaWduZWQgaW50IG5yX25vZGVzLCBpbnQgemxpZHgpXG4ge1xuIFx0c3RydWN0IHpvbmVyZWYgKnpvbmVyZWZzO1xuIFx0aW50IGk7XG4gXG4tXHR6b25lcmVmcyA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX0ZBTExCQUNLXS5fem9uZXJlZnM7XG4rXHR6b25lcmVmcyA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW3psaWR4XS5fem9uZXJlZnM7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlczsgaSsrKSB7XG4gXHRcdGludCBucl96b25lcztcbkBAIC01ODgxLDI1ICs1ODgzLDI4IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuIFx0em9uZXJlZnMtXHUwMDNlem9uZV9pZHggPSAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbisvKlxuKyAqIEJ1aWxkIG9uZSBub2RlLW9yZGVyZWQgZmFsbGJhY2sgbGlzdCBmcm9tIGEgY2FuZGlkYXRlIG5vZGVtYXNrLlxuKyAqIHVwZGF0ZV9sb2FkIHJvdW5kLXJvYmlucyBub2RlX2xvYWQgYWNyb3NzIGVxdWlkaXN0YW50IG5vZGVzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyxcbitcdFx0XHRcdGludCB6bGlkeCwgYm9vbCB1cGRhdGVfbG9hZCxcbitcdFx0XHRcdGludCAqbm9kZV9vcmRlciwgaW50ICpucilcbiB7XG4tXHRzdGF0aWMgaW50IG5vZGVfb3JkZXJbTUFYX05VTU5PREVTXTtcbi1cdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG4gXHRub2RlbWFza190IHVzZWRfbWFzayA9IE5PREVfTUFTS19OT05FO1xuLVx0aW50IGxvY2FsX25vZGUsIHByZXZfbm9kZTtcbi1cbi1cdC8qIE5VTUEtYXdhcmUgb3JkZXJpbmcgb2Ygbm9kZXMgKi9cbi1cdGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuLVx0cHJldl9ub2RlID0gbG9jYWxfbm9kZTtcbitcdGludCBsb2NhbF9ub2RlID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdGludCBwcmV2X25vZGUgPSBsb2NhbF9ub2RlO1xuK1x0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcbiBcbi1cdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xuLVx0d2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZShsb2NhbF9ub2RlLCBcdTAwMjZ1c2VkX21hc2spKSBcdTAwM2U9IDApIHtcbitcdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obG9jYWxfbm9kZSwgXHUwMDI2dXNlZF9tYXNrLFxuK1x0XHRcdFx0XHQgICAgICBjYW5kaWRhdGVzKSkgXHUwMDNlPSAwKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFdlIGRvbid0IHdhbnQgdG8gcHJlc3N1cmUgYSBwYXJ0aWN1bGFyIG5vZGUuXG4gXHRcdCAqIFNvIGFkZGluZyBwZW5hbHR5IHRvIHRoZSBmaXJzdCBub2RlIGluIHNhbWVcbiBcdFx0ICogZGlzdGFuY2UgZ3JvdXAgdG8gbWFrZSBpdCByb3VuZC1yb2Jpbi5cbiBcdFx0ICovXG4tXHRcdGlmIChub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9XG4rXHRcdGlmICh1cGRhdGVfbG9hZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgbm9kZSkgIT1cbiBcdFx0ICAgIG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgcHJldl9ub2RlKSlcbiBcdFx0XHRub2RlX2xvYWRbbm9kZV0gKz0gMTtcbiBcbkBAIC01OTA3LDggKzU5MTIsMjIgQEAgc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG4gXHRcdHByZXZfbm9kZSA9IG5vZGU7XG4gXHR9XG4gXG4tXHRidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ2RhdCwgbm9kZV9vcmRlciwgbnJfbm9kZXMpO1xuK1x0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7XG4rXHQqbnIgPSBucl9ub2Rlcztcbit9XG4rXG4rc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG4re1xuK1x0c3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107XG4rXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4rXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xuK1xuK1x0bWVtc2V0KG5vZGVfb3JkZXIsIDAsIHNpemVvZihub2RlX29yZGVyKSk7XG4rXG4rXHRidWlsZF9ub2RlX3pvbmVsaXN0KHBnZGF0LCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIFpPTkVMSVNUX0ZBTExCQUNLLFxuK1x0XHRcdCAgICB0cnVlLCBub2RlX29yZGVyLCBcdTAwMjZucl9ub2Rlcyk7XG4gXHRidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdkYXQpO1xuK1xuIFx0cHJfaW5mbyhcIkZhbGxiYWNrIG9yZGVyIGZvciBOb2RlICVkOiBcIiwgbG9jYWxfbm9kZSk7XG4gXHRmb3IgKG5vZGUgPSAwOyBub2RlIFx1MDAzYyBucl9ub2Rlczsgbm9kZSsrKVxuIFx0XHRwcl9jb250KFwiJWQgXCIsIG5vZGVfb3JkZXJbbm9kZV0pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDU6NTAuNzQ5NDQ5Mjg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgxNzU2MDkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBUaWVyaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0aG9yb3VnaGx5IGFuYWx5emUgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gVGhlIGZhY3QgdGhhdCBpdCB0b3VjaGVzIGBtbS9pbnRlcm5hbC5oYCwgYG1tL21lbW9yeS10aWVycy5jYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgY29yZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgTlVNQSBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGltcGFjdCB0aGUgZnVuZGFtZW50YWwgem9uZWxpc3QgY29uc3RydWN0aW9uIGFuZCBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG1zLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHdpdGggdGhlIHJlbmFtaW5nL21vZGlmaWNhdGlvbiBvZiBgZmluZF9uZXh0X2Jlc3Rfbm9kZWAgdG8gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gLiBUaGUgYWRkaXRpb24gb2YgdGhlIGBjYW5kaWRhdGUgbm9kZW1hc2tgIHBhcmFtZXRlciBpcyBhIGtleSBpbmRpY2F0b3IuIFRoaXMgc3VnZ2VzdHMgYSBtb3JlIHJlZmluZWQgb3IgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gbm9kZSBzZWxlY3Rpb24sIHByb2JhYmx5IHdpdGggdGhlIGdvYWwgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgTlVNQS4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBtYXNrIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gVGhlIGNoYW5nZXMgdG8gYG5leHRfZGVtb3Rpb25fbm9kZWAgYW5kIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaW4gYG1tL21lbW9yeS10aWVycy5jYCBhcmUgYWxzbyB3b3J0aCBpbW1lZGlhdGUgYXR0ZW50aW9uIOKAkyBsaWtlbHkgcmVsYXRlZCB0byB0aWVyZWQgbWVtb3J5IHByb21vdGlvbi9kZW1vdGlvbiBzdHJhdGVnaWVzLiBUaGVuIHRoZXJlIGlzIHRoaXMgc2V0IG9mIGNoYW5nZXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHdpdGggdGhlIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAsIGBidWlsZF9ub2RlX3pvbmVsaXN0YCwgYW5kIGBidWlsZF96b25lbGlzdHNgIGZ1bmN0aW9ucyBhbGwgYmVpbmcgdG91Y2hlZC4gVGhpcyBoYXMgdGhlIGhhbGxtYXJrcyBvZiBhIHByb2ZvdW5kIGltcGFjdCBvbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdG9wb2xvZ3ksIHNvIEkgbmVlZCB0byBzZWUgaG93IHRoZSBhbGxvY2F0aW9uIHpvbmVsaXN0cyBhcmUgYnVpbHQgaW4gdGhpcyBub2RlIG9yZGVyIGFuZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB0aGUgZXhhY3QgY2FsbCBzaXRlcyBhbmQgaG93IHRoZXNlIGNoYW5nZWQgZnVuY3Rpb25zIGFyZSB1dGlsaXplZC4gSXQgd2lsbCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCB0byBzZWUgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ1OjU5LjU2NzAxMjUwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTgwMzE1NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfbmV4dF9iZXN0X25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0xMTMxPWV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL2ludGVybmFsLmgtMTEzMi1cXHRcXHRcXHRcXHQgIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbm1tL2ludGVybmFsLmg6MTEzMzpleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbm1tL2ludGVybmFsLmgtMTEzNC1cXHRcXHRcXHRcXHQgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0xMTM4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTE0Mi19XFxubW0vaW50ZXJuYWwuaDoxMTQzOnN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbm1tL2ludGVybmFsLmgtMTE0NC1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTMzMD1pbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy0zNzItXFx0bm9kZXNfY29tcGxlbWVudChtYXNrLCAqYWxsb3dlZF9tYXNrKTtcXG5tbS9tZW1vcnktdGllcnMuYzozNzM6XFx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNm1hc2ssIFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbm1tL21lbW9yeS10aWVycy5jLTM3NC19XFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz00MjU9c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTQ1Mi1cXHRcXHQvKlxcbm1tL21lbW9yeS10aWVycy5jOjQ1MzpcXHRcXHQgKiBmaW5kX25leHRfYmVzdF9ub2RlX2luLCB1c2UgJ3VzZWQnIG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0Llxcbm1tL21lbW9yeS10aWVycy5jLTQ1NC1cXHRcXHQgKiBBZGQgYWxsIG1lbW9yeSBub2RlcyBleGNlcHQgdGhlIHNlbGVjdGVkIG1lbW9yeSB0aWVyXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy00NjUtXFx0XFx0ZG8ge1xcbm1tL21lbW9yeS10aWVycy5jOjQ2NjpcXHRcXHRcXHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFxcdTAwMjZ0aWVyX25vZGVzLFxcbm1tL21lbW9yeS10aWVycy5jLTQ2Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Nzc5PXN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTc4MS0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NTc4MjogKiBmaW5kX25leHRfYmVzdF9ub2RlX2luIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0XFxubW0vcGFnZV9hbGxvYy5jLTU3ODMtICogQG5vZGU6IG5vZGUgd2hvc2UgZmFsbGJhY2sgbGlzdCB3ZSdyZSBhcHBlbmRpbmdcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01Nzk2LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1Nzk3OmludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcXG5tbS9wYWdlX2FsbG9jLmMtNTc5OC1cXHRcXHRcXHQgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU4OTgtXFxubW0vcGFnZV9hbGxvYy5jOjU4OTk6XFx0d2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihsb2NhbF9ub2RlLCBcXHUwMDI2dXNlZF9tYXNrLFxcbm1tL3BhZ2VfYWxsb2MuYy01OTAwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNhbmRpZGF0ZXMpKSBcXHUwMDNlPSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjAyLjU0NzMzMjI0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTU1MjEzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBpdDpcblxuKipEaWdnaW5nIGludG8gTWVtb3J5IFRpZXIgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGdvaW5nIHRvIHNwZW5kIHNvbWUgdGltZSBleHBsb3JpbmcgdGhlIHJlbGF0ZWQgY29kZSBpbiBgbW0vbWVtb3J5LXRpZXJzLmNgIGFuZCBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgZ29hbCBoZXJlIGlzbid0IHRvIG5lY2Vzc2FyaWx5IG1lbW9yaXplIGV2ZXJ5IGRldGFpbCwgYnV0IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSSB3YW50IHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhbHNvIHRvIHRyYWNlIGRvd24gd2hlcmUgdGhlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBiZWluZyB1c2VkLCB0aGUgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IGZpbGVzIHdpbGwgcHJvdmlkZSBhIG1vcmUgc29saWQgZm91bmRhdGlvbiB0byBzdGFydCBhc3Nlc3NpbmcgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLiBJdCdsbCBhbHNvIGxpa2VseSByZXZlYWwgc29tZSBvZiB0aGUgYXNzdW1wdGlvbnMgYW5kIGNvbnN0cmFpbnRzIHRoYXQgd2VyZSBjb25zaWRlcmVkIGJ5IHRoZSBkZXZlbG9wZXJzIHdoZW4gdGhleSB3cm90ZSBpdC4gSG9wZWZ1bGx5LCB0aGlzIHByb3ZpZGVzIHRoZSBiYWNrZ3JvdW5kIEkgbmVlZCB0byBmb3JtIGEgcHJvcGVyIGV2YWx1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjowNC43MDI4NTcwMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LXRpZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHQvKlxcbiAzNTM6XFx0XFx0ICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIHRhcmdldCBub2RlcywganVzdCBzZWxlY3Qgb25lXFxuIDM1NDpcXHRcXHQgKiB0YXJnZXQgbm9kZSByYW5kb21seS5cXG4gMzU1OlxcdFxcdCAqXFxuIDM1NjpcXHRcXHQgKiBJbiBhZGRpdGlvbiwgd2UgY2FuIGFsc28gdXNlIHJvdW5kLXJvYmluIHRvIHNlbGVjdFxcbiAzNTc6XFx0XFx0ICogdGFyZ2V0IG5vZGUsIGJ1dCB3ZSBzaG91bGQgaW50cm9kdWNlIGFub3RoZXIgdmFyaWFibGVcXG4gMzU4OlxcdFxcdCAqIGZvciBub2RlX2RlbW90aW9uW10gdG8gcmVjb3JkIGxhc3Qgc2VsZWN0ZWQgdGFyZ2V0IG5vZGUsXFxuIDM1OTpcXHRcXHQgKiB0aGF0IG1heSBjYXVzZSBjYWNoZSBwaW5nLXBvbmcgZHVlIHRvIHRoZSBjaGFuZ2luZyBvZlxcbiAzNjA6XFx0XFx0ICogbGFzdCB0YXJnZXQgbm9kZS4gT3IgaW50cm9kdWNpbmcgcGVyLWNwdSBkYXRhIHRvIGF2b2lkXFxuIDM2MTpcXHRcXHQgKiBjYWNoaW5nIGlzc3VlLCB3aGljaCBzZWVtcyBtb3JlIGNvbXBsaWNhdGVkLiBTbyBzZWxlY3RpbmdcXG4gMzYyOlxcdFxcdCAqIHRhcmdldCBub2RlIHJhbmRvbWx5IHNlZW1zIGJldHRlciB1bnRpbCBub3cuXFxuIDM2MzpcXHRcXHQgKi9cXG4gMzY0OlxcdFxcdGlmICghbm9kZXNfZW1wdHkobWFzaykpXFxuIDM2NTpcXHRcXHRcXHRyZXR1cm4gbm9kZV9yYW5kb20oXFx1MDAyNm1hc2spO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHQvKlxcbiAzNjg6XFx0XFx0ICogUHJlZmVycmVkIG5vZGVzIGFyZSBub3QgaW4gYWxsb3dlZF9tYXNrLiBGbGlwIGJpdHMgaW5cXG4gMzY5OlxcdFxcdCAqIGFsbG93ZWRfbWFzayBhcyB1c2VkIG5vZGUgbWFzay4gVGhlbiwgdXNlIGl0IHRvIGdldCB0aGVcXG4gMzcwOlxcdFxcdCAqIGNsb3Nlc3QgZGVtb3Rpb24gdGFyZ2V0LlxcbiAzNzE6XFx0XFx0ICovXFxuIDM3MjpcXHRcXHRub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spO1xcbiAzNzM6XFx0XFx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNm1hc2ssIFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbiAzNzQ6XFx0fVxcbiAzNzU6XFx0XFxuIDM3NjpcXHRzdGF0aWMgdm9pZCBkaXNhYmxlX2FsbF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuIDM3NzpcXHR7XFxuIDM3ODpcXHRcXHRzdHJ1Y3QgbWVtb3J5X3RpZXIgKm1lbXRpZXI7XFxuIDM3OTpcXHRcXHRpbnQgbm9kZTtcXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShub2RlLCBOX01FTU9SWSkge1xcbiAzODI6XFx0XFx0XFx0bm9kZV9kZW1vdGlvbltub2RlXS5wcmVmZXJyZWQgPSBOT0RFX01BU0tfTk9ORTtcXG4gMzgzOlxcdFxcdFxcdC8qXFxuIDM4NDpcXHRcXHRcXHQgKiBXZSBhcmUgaG9sZGluZyBtZW1vcnlfdGllcl9sb2NrLCBpdCBpcyBzYWZlXFxuIDM4NTpcXHRcXHRcXHQgKiB0byBhY2Nlc3MgcGdkYS1cXHUwMDNlbWVtdGllci5cXG4gMzg2OlxcdFxcdFxcdCAqL1xcbiAzODc6XFx0XFx0XFx0bWVtdGllciA9IF9fbm9kZV9nZXRfbWVtb3J5X3RpZXIobm9kZSk7XFxuIDM4ODpcXHRcXHRcXHRpZiAobWVtdGllcilcXG4gMzg5OlxcdFxcdFxcdFxcdG1lbXRpZXItXFx1MDAzZWxvd2VyX3RpZXJfbWFzayA9IE5PREVfTUFTS19OT05FO1xcbiAzOTA6XFx0XFx0fVxcbiAzOTE6XFx0XFx0LypcXG4gMzkyOlxcdFxcdCAqIEVuc3VyZSB0aGF0IHRoZSBcXFwiZGlzYWJsZVxcXCIgaXMgdmlzaWJsZSBhY3Jvc3MgdGhlIHN5c3RlbS5cXG4gMzkzOlxcdFxcdCAqIFJlYWRlcnMgd2lsbCBzZWUgZWl0aGVyIGEgY29tYmluYXRpb24gb2YgYmVmb3JlK2Rpc2FibGVcXG4gMzk0OlxcdFxcdCAqIHN0YXRlIG9yIGRpc2FibGUrYWZ0ZXIuICBUaGV5IHdpbGwgbmV2ZXIgc2VlIGJlZm9yZSBhbmRcXG4gMzk1OlxcdFxcdCAqIGFmdGVyIHN0YXRlIHRvZ2V0aGVyLlxcbiAzOTY6XFx0XFx0ICovXFxuIDM5NzpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0c3RhdGljIHZvaWQgZHVtcF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuIDQwMTpcXHR7XFxuIDQwMjpcXHRcXHRpbnQgbm9kZTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShub2RlLCBOX01FTU9SWSkge1xcbiA0MDU6XFx0XFx0XFx0c3RydWN0IG1lbW9yeV90aWVyICptZW10aWVyID0gX19ub2RlX2dldF9tZW1vcnlfdGllcihub2RlKTtcXG4gNDA2OlxcdFxcdFxcdG5vZGVtYXNrX3QgcHJlZmVycmVkID0gbm9kZV9kZW1vdGlvbltub2RlXS5wcmVmZXJyZWQ7XFxuIDQwNzpcXHRcXG4gNDA4OlxcdFxcdFxcdGlmICghbWVtdGllcilcXG4gNDA5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjowNC43MDMwMzY3NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyMDA4OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlbW90aW9uIExvZ2ljKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGRlbW90aW9uIHByb2Nlc3MgYWdhaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlc2Ugbm9kZXMgYXJlIGdldHRpbmcgZGVtb3RlZCBhbmQgd2h5LiBGaXJzdCwgSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGwgc2l0ZXMgb2YgYG5leHRfZGVtb3Rpb25fbm9kZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiAqaG93KiB0aGUgc3lzdGVtIGlzIHNlbGVjdGluZyBub2RlcyBmb3IgZGVtb3Rpb24uIFRoZW4sIEknbGwgdHVybiBteSBhdHRlbnRpb24gdG8gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYC4gVW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgbmV4dF9kZW1vdGlvbl9ub2RlYCB3aWxsIGJlIGNydWNpYWwuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8ga25vdyAqd2hhdCogbWFrZXMgbm9kZXMgYSB0YXJnZXQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hlcmUgdGhhdCBkZWNpc2lvbiBwcm9jZXNzIGhhcHBlbnMuIEZpbmFsbHksIEknbGwgbmVlZCB0byByZW1lbWJlciBob3cgdGhlIHpvbmVsaXN0IGlzIGJ1aWx0LCB0byBiZSBzdXJlIHRoZSBkZW1vdGlvbiB0YXJnZXRzIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0cyBhcmUgY29ycmVjdCwgYW5kIHByb3Blcmx5IHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN5c3RlbSwgYW5kIHRoYXQgYWxsIG5vZGVzIHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgem9uZXMsIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MDYuODU1MDQ4NjUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzAwODAzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV4dF9kZW1vdGlvbl9ub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg9NTQ9dm9pZCBtdF9wdXRfbWVtb3J5X3R5cGVzKHN0cnVjdCBsaXN0X2hlYWQgKm1lbW9yeV90eXBlcyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC01NS0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaDo1NjppbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtNTctdm9pZCBub2RlX2dldF9hbGxvd2VkX3RhcmdldHMocGdfZGF0YV90ICpwZ2RhdCwgbm9kZW1hc2tfdCAqdGFyZ2V0cyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaD01OD1ib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC01OS0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg6NjA6c3RhdGljIGlubGluZSBpbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC02MS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTk5PXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ub2RlX21lbW9yeV90eXBlKGludCBub2RlLCBzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptZW10eXBlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC0xMDMtXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaDoxMDQ6c3RhdGljIGlubGluZSBpbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC0xMDUte1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9MzAyPXZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy0zMjAtLyoqXFxubW0vbWVtb3J5LXRpZXJzLmM6MzIxOiAqIG5leHRfZGVtb3Rpb25fbm9kZSgpIC0gR2V0IHRoZSBuZXh0IG5vZGUgaW4gdGhlIGRlbW90aW9uIHBhdGhcXG5tbS9tZW1vcnktdGllcnMuYy0zMjItICogQG5vZGU6IFRoZSBzdGFydGluZyBub2RlIHRvIGxvb2t1cCB0aGUgbmV4dCBub2RlXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy0zMjktICovXFxubW0vbWVtb3J5LXRpZXJzLmM6MzMwOmludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcXG5tbS9tZW1vcnktdGllcnMuYy0zMzEte1xcbi0tXFxubW0vdm1zY2FuLmM9MTAxNz1zdGF0aWMgdW5zaWduZWQgaW50IGRlbW90ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRlbW90ZV9mb2xpb3MsXFxuLS1cXG5tbS92bXNjYW4uYy0xMDQ0LVxcbm1tL3Ztc2Nhbi5jOjEwNDU6XFx0dGFyZ2V0X25pZCA9IG5leHRfZGVtb3Rpb25fbm9kZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgXFx1MDAyNmFsbG93ZWRfbWFzayk7XFxubW0vdm1zY2FuLmMtMTA0Ni1cXHRpZiAodGFyZ2V0X25pZCA9PSBOVU1BX05PX05PREUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjA5LjAyNTEzNDgzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2OTM1NDE1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFpvbmVsaXN0IENvbnN0cnVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgYXJvdW5kIHpvbmVsaXN0cy4gSSdtIGZvY3VzaW5nIG9uIGBidWlsZF9hbGxfem9uZWxpc3RzYCBzcGVjaWZpY2FsbHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGggaGVyZS4gV2hvJ3MgaW52b2tpbmcgdGhpcyBmdW5jdGlvbj8gS25vd2luZyB0aGUgY2FsbGVycyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHRyaWdnZXJpbmcgY29uZGl0aW9ucyBhbmQgdGhlIG92ZXJhbGwgZmxvdyBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5JJ2xsIGFsc28ga2VlcCBhIGNsb3NlIGV5ZSBvbiBgYnVpbGRfem9uZWxpc3RzYCBhbmQgYGJ1aWxkX25vZGVfem9uZWxpc3RgLiBJdCdzIGxpa2VseSB0aGF0IGBidWlsZF9hbGxfem9uZWxpc3RzYCBkZWxlZ2F0ZXMgc29tZSBvZiBpdHMgd29yayB0byB0aG9zZSBmdW5jdGlvbnMgb3IgcGVyaGFwcyBjYWxscyB0aGVtIGRpcmVjdGx5LiBVbmRlcnN0YW5kaW5nIHRoZSBkaXZpc2lvbiBvZiByZXNwb25zaWJpbGl0eSBiZXR3ZWVuIHRoZXNlIHRocmVlIGlzIGtleSB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgY2FsbHMgYXJlIHJlY3Vyc2l2ZSwgYXMgaXQgY291bGQgY2hhbmdlIHRoZSB3YXkgdGhleSBhcmUgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBub3RlIGhvdyB0aGV5IGFyZSB1c2VkIGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBOVU1BIG5vZGUgaGFuZGxpbmcsIGFuZCBob3cgdGhlc2Ugem9uZWxpc3RzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBtZSBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGJ1aWxkcyB0aGVzZSB6b25lbGlzdHMsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgaW5mb3JtZWQgZGVjaXNpb25zIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjoxMS43MTg2Nzk1NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDY4MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1aWxkX3pvbmVsaXN0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTU3OTc9aW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU4NTAtICovXFxubW0vcGFnZV9hbGxvYy5jOjU4NTE6c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdfZGF0YV90ICpwZ2RhdCwgaW50ICpub2RlX29yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01ODUyLVxcdFxcdHVuc2lnbmVkIGludCBucl9ub2RlcywgaW50IHpsaWR4KVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU5MTQtXFxubW0vcGFnZV9hbGxvYy5jOjU5MTU6XFx0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7XFxubW0vcGFnZV9hbGxvYy5jLTU5MTYtXFx0Km5yID0gbnJfbm9kZXM7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTkxOC1cXG5tbS9wYWdlX2FsbG9jLmM6NTkxOTpzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcXG5tbS9wYWdlX2FsbG9jLmMtNTkyMC17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTk1Nj1zdGF0aWMgdm9pZCBzZXR1cF9taW5fc2xhYl9yYXRpbyh2b2lkKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01OTU4LVxcbm1tL3BhZ2VfYWxsb2MuYzo1OTU5OnN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3BhZ2VfYWxsb2MuYy01OTYwLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01OTk2PXN0YXRpYyB2b2lkIF9fYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTYwMjQtXFx0aWYgKHNlbGYgXFx1MDAyNlxcdTAwMjYgIW5vZGVfb25saW5lKHNlbGYtXFx1MDAzZW5vZGVfaWQpKSB7XFxubW0vcGFnZV9hbGxvYy5jOjYwMjU6XFx0XFx0YnVpbGRfem9uZWxpc3RzKHNlbGYpO1xcbm1tL3BhZ2VfYWxsb2MuYy02MDI2LVxcdH0gZWxzZSB7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNjAzMy1cXG5tbS9wYWdlX2FsbG9jLmM6NjAzNDpcXHRcXHRcXHRidWlsZF96b25lbGlzdHMocGdkYXQpO1xcbm1tL3BhZ2VfYWxsb2MuYy02MDM1LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MTEuNzk2NzUzODE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTE4ODgwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugem9uZWxpc3RzIGFyZSBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgdXRpbGl6ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYF9fYnVpbGRfYWxsX3pvbmVsaXN0c2AgYW5kIGBidWlsZF9hbGxfem9uZWxpc3RzYCBzcGVjaWZpY2FsbHkuIEkgd2FudCB0byBzZWUgKndoZXJlKiB0aGV5J3JlIGJlaW5nIGludm9rZWQsIGJlY2F1c2UgdGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlaXIgcHVycG9zZS4gQXJlIHRoZXkgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBob3RwbHVnIGV2ZW50cz8gSXMgdGhlIE5VTUEgem9uZWxpc3Qgc3lzY3RsIGludm9sdmVkIGluIHNvbWUgd2F5PyBPciBhcmUgdGhlcmUgb3RoZXIgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBjb25zaWRlcj8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIGNoYW5nZXMgaW4gdGhpcyBhcmVhLiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCBhbmQgbWFwIG91dCB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjAwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MTMuOTg4NjQ0NjAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgyNjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidWlsZF9hbGxfem9uZWxpc3RzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTExNDA9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIxNS1cXHRpZiAobmVlZF96b25lbGlzdHNfcmVidWlsZClcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyMTY6XFx0XFx0YnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMTctXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTEyNTY9c3RhdGljIHBnX2RhdGFfdCAqaG90YWRkX2luaXRfcGdkYXQoaW50IG5pZClcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTI3NS1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyNzY6XFx0YnVpbGRfYWxsX3pvbmVsaXN0cyhwZ2RhdCk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjc3LVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTU1PWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTM5LVxcdFxcdHpvbmVfcGNwX3Jlc2V0KHpvbmUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjE0MDpcXHRcXHRidWlsZF9hbGxfem9uZWxpc3RzKE5VTEwpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE0MS1cXHR9XFxuLS1cXG5tbS9tbV9pbml0LmM9MjY5OD12b2lkIF9faW5pdCBtbV9jb3JlX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0yNzA0LVxcdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFxcdTAwM2UgMik7XFxubW0vbW1faW5pdC5jOjI3MDU6XFx0YnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcXG5tbS9tbV9pbml0LmMtMjcwNi1cXHRwYWdlX2FsbG9jX2luaXRfY3B1aHAoKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01OTk0PXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyX2NwdV96b25lc3RhdCwgYm9vdF96b25lc3RhdHMpO1xcbm1tL3BhZ2VfYWxsb2MuYy01OTk1LVxcbm1tL3BhZ2VfYWxsb2MuYzo1OTk2OnN0YXRpYyB2b2lkIF9fYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKVxcbm1tL3BhZ2VfYWxsb2MuYy01OTk3LXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02MDU1PXN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdFxcbm1tL3BhZ2VfYWxsb2MuYzo2MDU2OmJ1aWxkX2FsbF96b25lbGlzdHNfaW5pdCh2b2lkKVxcbm1tL3BhZ2VfYWxsb2MuYy02MDU3LXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02MDU5LVxcbm1tL3BhZ2VfYWxsb2MuYzo2MDYwOlxcdF9fYnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcXG5tbS9wYWdlX2FsbG9jLmMtNjA2MS1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02MDg0LSAqXFxubW0vcGFnZV9hbGxvYy5jOjYwODU6ICogX19yZWYgZHVlIHRvIGNhbGwgb2YgX19pbml0IGFubm90YXRlZCBoZWxwZXIgYnVpbGRfYWxsX3pvbmVsaXN0c19pbml0XFxubW0vcGFnZV9hbGxvYy5jLTYwODYtICogW3Byb3RlY3RlZCBieSBTWVNURU1fQk9PVElOR10uXFxubW0vcGFnZV9hbGxvYy5jLTYwODctICovXFxubW0vcGFnZV9hbGxvYy5jOjYwODg6dm9pZCBfX3JlZiBidWlsZF9hbGxfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXFxubW0vcGFnZV9hbGxvYy5jLTYwODkte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTYwOTItXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykge1xcbm1tL3BhZ2VfYWxsb2MuYzo2MDkzOlxcdFxcdGJ1aWxkX2FsbF96b25lbGlzdHNfaW5pdCgpO1xcbm1tL3BhZ2VfYWxsb2MuYy02MDk0LVxcdH0gZWxzZSB7XFxubW0vcGFnZV9hbGxvYy5jOjYwOTU6XFx0XFx0X19idWlsZF9hbGxfem9uZWxpc3RzKHBnZGF0KTtcXG5tbS9wYWdlX2FsbG9jLmMtNjA5Ni1cXHRcXHQvKiBjcHVzZXQgcmVmcmVzaCByb3V0aW5lIHNob3VsZCBiZSBoZXJlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjE0LjA2NDQ3NTgxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzk5Njg4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYGJ1aWxkX2FsbF96b25lbGlzdHNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBidWlsZF9hbGxfem9uZWxpc3RzYCBpcyB1c2VkLiBSaWdodCwgaXQncyBub3QganVzdCBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uIEJlc2lkZXMgdGhlIG9idmlvdXMgc2NlbmFyaW9zLCBpdCdzIGFsc28gY3J1Y2lhbCBmb3IgbWFuYWdpbmcgb25saW5lIGFuZCBvZmZsaW5lIHBhZ2VzIOKAkyB0aGF0IGluY2x1ZGVzIG1lbW9yeSBob3RwbHVnIHRocm91Z2ggc3lzZnMgYW5kIHByb2JpbmcsIGFuZCBpdCdzIGludGVydHdpbmVkIHdpdGggbWVtb3J5IHRpZXJzIGFuZCBOVU1BIGRlbW90aW9uIHN0cmF0ZWdpZXMuIFRoYXQncyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiByZXNwb25zaWJpbGl0aWVzLiBHaXZlbiB0aGUgY29ubmVjdGlvbiB0byBtZW1vcnkgdGllcnMsIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBpbiBgbW0vbWVtb3J5LXRpZXJzLmNgLiBMZXQncyBzZWUgd2hhdCB0aGF0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzIzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MTcuNDY0MTY1OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5ODMxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktdGllcnMuYz00MDA9c3RhdGljIHZvaWQgZHVtcF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy00MjQtICovXFxubW0vbWVtb3J5LXRpZXJzLmM6NDI1OnN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxubW0vbWVtb3J5LXRpZXJzLmMtNDI2LXtcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTUyMS0jZWxzZVxcbm1tL21lbW9yeS10aWVycy5jOjUyMjpzdGF0aWMgaW5saW5lIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZCkge31cXG5tbS9tZW1vcnktdGllcnMuYy01MjMtI2VuZGlmIC8qIENPTkZJR19OVU1BX01JR1JBVElPTiAqL1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9NzA4PXN0YXRpYyBpbnQgX19pbml0IG1lbW9yeV90aWVyX2xhdGVfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNzMxLVxcbm1tL21lbW9yeS10aWVycy5jOjczMjpcXHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xcbm1tL21lbW9yeS10aWVycy5jLTczMy1cXHRwdXRfb25saW5lX21lbXMoKTtcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTg4Mj1zdGF0aWMgaW50IF9fbWVtaW5pdCBtZW10aWVyX2hvdHBsdWdfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLFxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtODkxLVxcdFxcdGlmIChjbGVhcl9ub2RlX21lbW9yeV90aWVyKG5uLVxcdTAwM2VuaWQpKVxcbm1tL21lbW9yeS10aWVycy5jOjg5MjpcXHRcXHRcXHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xcbm1tL21lbW9yeS10aWVycy5jLTg5My1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1lbW9yeV90aWVyX2xvY2spO1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtODk4LVxcdFxcdGlmICghSVNfRVJSKG1lbXRpZXIpKVxcbm1tL21lbW9yeS10aWVycy5jOjg5OTpcXHRcXHRcXHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xcbm1tL21lbW9yeS10aWVycy5jLTkwMC1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1lbW9yeV90aWVyX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjoxNy41NjQwMDIzNDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU5NzkwNTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGF0IGBuZXh0X2RlbW90aW9uX25vZGVgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBieSBgZGVtb3RlX2ZvbGlvX2xpc3RgIHdoaWNoIGlzIGl0c2VsZiB0cmlnZ2VyZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltIG9yIGRlbW90aW9uIGN5Y2xlcy4gVGhhdCBtZWFucyB0aGUgcmVsZXZhbnQgY29kZSBwYXRoIGlzIGV4ZXJjaXNlZCBkdXJpbmcgcGFnZSBhbGxvY2F0aW9uLCBieSBrc3dhcGQsIG9yIHdoZW4gdGhlIHN5c3RlbSBleHBsaWNpdGx5IHRyaWdnZXJzIGEgZGVtb3Rpb24gdGhyb3VnaCBzeXNmcy4gV2UndmUgYWxzbyBnb3QgYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIGJlaW5nIGNhbGxlZCBieSBgbmV4dF9kZW1vdGlvbl9ub2RlYCwgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCwgYW5kIGBidWlsZF9ub2RlX3pvbmVsaXN0YCwgYW5kIHRoYXQgYGJ1aWxkX25vZGVfem9uZWxpc3RgIGlzIGNhbGxlZCB3aGVuIHpvbmVsaXN0cyBhcmUgY29uc3RydWN0ZWQuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIGZ1enppbmcgY3JpdGVyaWEuIFRoZSBwcm9tcHQgY2xlYXJseSBsYXlzIG91dCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgdGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgYG1tL2AsIHN5bmNocm9uaXphdGlvbiwgQlBGLCBhbmQgb3RoZXJzLiBGdXJ0aGVybW9yZSwgaXQgaW5jbHVkZXMgcmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cCBpZiBpdCB0b3VjaGVzIGRhdGFzdHJ1Y3R1cmVzLCBoZWxwZXJzIG9yIGFsZ29yaXRobXMuXG5cblRoaXMgcGF0Y2ggaXMgdW5kZW5pYWJseSB0b3VjaGluZyBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApLCBkaXJlY3RseSBpbXBhY3RpbmcgTlVNQSBmYWxsYmFjayBub2RlIHNlbGVjdGlvbiAoYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gKSwgem9uZWxpc3QgYnVpbGRpbmcgKGBidWlsZF9ub2RlX3pvbmVsaXN0YCksIGFuZCB0aGUgdmVyeSBoZWFydCBvZiBtZW1vcnkgdGllciBkZW1vdGlvbiB0YXJnZXQgY2FsY3VsYXRpb24gKGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JlIHRvIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbWVtb3J5IGFuZCB0aGUgZGVjaXNpb25zIGl0IG1ha2VzIGR1cmluZyByZWNsYWltIGFuZCBkZW1vdGlvbi4gSXQncyBhIGNsZWFyIGZpdCBmb3IgdGhlIGNyaXRlcmlhLiBUaGVyZWZvcmUsICoqYFdvcnRoRnV6emluZyA9IHRydWVgKiouXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgbW0vbWVtb3J5LXRpZXJzLmNgIGFuZCB0cmFjZSBkZXBlbmRlbmNpZXMgZm9yIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgY29kZSBhbmQgdGhlIGxlYXN0IHViaXF1aXRvdXMgc3ltYm9scyB0aGF0IGFyZSBleGVyY2lzZWQgZHVyaW5nIHRoaXMgY29kZSBwYXRoLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGZvY3VzZWQgYXBwcm9hY2ggdG8gZnV6emluZyB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjoyMy4xNjE5MTA0NzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTM5MTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX25leHRfYmVzdF9ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTExMzE9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxubW0vaW50ZXJuYWwuaC0xMTMyLVxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XFxubW0vaW50ZXJuYWwuaDoxMTMzOmV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxubW0vaW50ZXJuYWwuaC0xMTM0LVxcdFxcdFxcdFxcdCAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTExMzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMTQyLX1cXG5tbS9pbnRlcm5hbC5oOjExNDM6c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxubW0vaW50ZXJuYWwuaC0xMTQ0LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9MzMwPWludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTM3Mi1cXHRub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spO1xcbm1tL21lbW9yeS10aWVycy5jOjM3MzpcXHRyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcXHUwMDI2bWFzaywgXFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxubW0vbWVtb3J5LXRpZXJzLmMtMzc0LX1cXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTQyNT1zdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNDUyLVxcdFxcdC8qXFxubW0vbWVtb3J5LXRpZXJzLmM6NDUzOlxcdFxcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXFxubW0vbWVtb3J5LXRpZXJzLmMtNDU0LVxcdFxcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTQ2NS1cXHRcXHRkbyB7XFxubW0vbWVtb3J5LXRpZXJzLmM6NDY2OlxcdFxcdFxcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNnRpZXJfbm9kZXMsXFxubW0vbWVtb3J5LXRpZXJzLmMtNDY3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU3Nzk9c3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NzgxLS8qKlxcbm1tL3BhZ2VfYWxsb2MuYzo1NzgyOiAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3RcXG5tbS9wYWdlX2FsbG9jLmMtNTc4My0gKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJ3JlIGFwcGVuZGluZ1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU3OTYtICovXFxubW0vcGFnZV9hbGxvYy5jOjU3OTc6aW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbm1tL3BhZ2VfYWxsb2MuYy01Nzk4LVxcdFxcdFxcdCAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTg5MD1zdGF0aWMgdm9pZCBidWlsZF9ub2RlX3pvbmVsaXN0KHBnX2RhdGFfdCAqcGdkYXQsIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTg5OC1cXG5tbS9wYWdlX2FsbG9jLmM6NTg5OTpcXHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFxcdTAwMjZ1c2VkX21hc2ssXFxubW0vcGFnZV9hbGxvYy5jLTU5MDAtXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FuZGlkYXRlcykpIFxcdTAwM2U9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MjMuMjY3MzA1NzMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODExNTIzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29tcGlsZXIgRGlyZWN0aXZlIENvbmZsaWN0cyoqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbiBvbiB0aGlzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1tL2ludGVybmFsLmhgIGFyb3VuZCBsaW5lIDExMzAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBhbiBpc3N1ZSB3aXRoIHNvbWUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHNwZWNpZmljYWxseSBgI2lmZGVmYCBndWFyZHMsIHRoYXQgYXJlIGNyZWF0aW5nIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluIHRoYXQgYXJlYSBhbmQgaWYgYW55IG9mIHRob3NlIGNvbmRpdGlvbnMgYXJlIGNhdXNpbmcgdGhpcy4gSSdsbCBmb2N1cyBvbiB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJvdW5kIGxpbmUgMTEzMC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSBzdXNwZWN0IGFuIGlzc3VlIHdpdGggZGlmZmVyaW5nIGNvbXBpbGF0aW9uIHN0YXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjoyNS4wNDg0NjA0MTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMDpcXHQjZWxzZSAvKiAhQ09ORklHX01NVSAqL1xcbjExMjE6XFx0c3RhdGljIGlubGluZSB2b2lkIHVubWFwX21hcHBpbmdfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XFxuMTEyMjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfbmV3X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxcbjExMjM6XFx0c3RhdGljIGlubGluZSBib29sIG5lZWRfbWxvY2tfZHJhaW4oaW50IGNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG4xMTI0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19kcmFpbl9sb2NhbCh2b2lkKSB7IH1cXG4xMTI1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19kcmFpbl9yZW1vdGUoaW50IGNwdSkgeyB9XFxuMTEyNjpcXHQjZW5kaWYgLyogIUNPTkZJR19NTVUgKi9cXG4xMTI3OlxcdFxcbjExMjg6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMTEyOTpcXHRleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xcbjExMzA6XFx0XFxuMTEzMTpcXHRleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4xMTMyOlxcdFxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XFxuMTEzMzpcXHRleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbjExMzQ6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcXG4xMTM1OlxcdCNlbHNlXFxuMTEzNjpcXHQjZGVmaW5lIG5vZGVfcmVjbGFpbV9tb2RlIDBcXG4xMTM3OlxcdFxcbjExMzg6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbjExMzk6XFx0XFx0XFx0XFx0XFx0XFx0IGdmcF90IG1hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4xMTQwOlxcdHtcXG4xMTQxOlxcdFxcdHJldHVybiAwO1xcbjExNDI6XFx0fVxcbjExNDM6XFx0c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxuMTE0NDpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcXG4xMTQ1OlxcdHtcXG4xMTQ2OlxcdFxcdHJldHVybiBOVU1BX05PX05PREU7XFxuMTE0NzpcXHR9XFxuMTE0ODpcXHQjZW5kaWZcXG4xMTQ5OlxcdFxcbjExNTA6XFx0c3RhdGljIGlubGluZSBib29sIG5vZGVfcmVjbGFpbV9lbmFibGVkKHZvaWQpXFxuMTE1MTpcXHR7XFxuMTE1MjpcXHRcXHQvKiBJcyBhbnkgbm9kZV9yZWNsYWltX21vZGUgYml0IHNldD8gKi9cXG4xMTUzOlxcdFxcdHJldHVybiBub2RlX3JlY2xhaW1fbW9kZSBcXHUwMDI2IChSRUNMQUlNX1pPTkV8UkVDTEFJTV9XUklURXxSRUNMQUlNX1VOTUFQKTtcXG4xMTU0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MjUuMDQ4NjAwODM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTcxODEzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgTlVNQSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIGlzIGRlZmluaXRlbHkgYmVoaW5kIHRoZSBgQ09ORklHX05VTUFgIGdhdGUuIFRpbWUgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gcnVsZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTGV0J3MgZGlnIGludG8gYG1tL21lbW9yeS10aWVycy5jYCBhbmQgc2VlIHdoYXQgdGhlIGBtbS9NYWtlZmlsZWAgaGFzIHRvIHNheSBhYm91dCBpdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZ2V0cyBidWlsdCBhbmQgbGlua2VkIGluIHJlbGF0aW9uIHRvIE5VTUEgc3VwcG9ydC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21waWxhdGlvbiBkZXBlbmRlbmN5IHRob3JvdWdobHkgdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MTQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjI2Ljg2NTc4NjQyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxNzAxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5LXRpZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT05OT1vYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm9cXG5tbS9NYWtlZmlsZToxMDA6b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlXFxubW0vZGFtb24vcGFkZHIuYzoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5LXRpZXJzLmhcXHUwMDNlXFxubW0vZGFtb24vcGFkZHIuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1faW5saW5lLmhcXHUwMDNlXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zeXNjdGwuaFxcdTAwM2VcXG5tbS9odWdlX21lbW9yeS5jOjM5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFxcdTAwM2VcXG5tbS9odWdlX21lbW9yeS5jLTQwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYXQuaFxcdTAwM2VcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeS5oXFx1MDAzZVxcbm1tL21lbW9yeS10aWVycy5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeS10aWVycy5oXFx1MDAzZVxcbm1tL21lbW9yeS10aWVycy5jLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz03NDc9aW50IG10X3NldF9kZWZhdWx0X2RyYW1fcGVyZihpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKnBlcmYsXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy03NzktXFx0XFx0cHJfaW5mbyhcXG5tbS9tZW1vcnktdGllcnMuYzo3ODA6XFxcIm1lbW9yeS10aWVyczogdGhlIHBlcmZvcm1hbmNlIG9mIERSQU0gbm9kZSAlZCBtaXNtYXRjaGVzIHRoYXQgb2YgdGhlIHJlZmVyZW5jZVxcXFxuXFxcIlxcbm1tL21lbW9yeS10aWVycy5jLTc4MS1cXFwiRFJBTSBub2RlICVkLlxcXFxuXFxcIiwgbmlkLCBkZWZhdWx0X2RyYW1fcGVyZl9yZWZfbmlkKTtcXG4tLVxcbm1tL21lbW9yeS5jLTY4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaG1lbV9mcy5oXFx1MDAzZVxcbm1tL21lbW9yeS5jOjY5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFxcdTAwM2VcXG5tbS9tZW1vcnkuYy03MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTAyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX2ZzLmhcXHUwMDNlXFxubW0vbWVtcG9saWN5LmM6MTAzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFxcdTAwM2VcXG5tbS9tZW1wb2xpY3kuYy0xMDQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4tLVxcbm1tL21pZ3JhdGUuYy00My0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcXHUwMDNlXFxubW0vbWlncmF0ZS5jOjQ0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFxcdTAwM2VcXG5tbS9taWdyYXRlLmMtNDUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuLS1cXG5tbS92bXNjYW4uYy00NC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxubW0vdm1zY2FuLmM6NDU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeS10aWVycy5oXFx1MDAzZVxcbm1tL3Ztc2Nhbi5jLTQ2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vb20uaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MjYuOTU1OTYyNDU1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMzYzNDYxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE5VTUEgTWlncmF0aW9uIGluIE1lbW9yeSBUaWVycyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbWVtb3J5IHRpZXJpbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIE5VTUEgbWlncmF0aW9uIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gYG1tL21lbW9yeS10aWVycy5jYC4gTGV0J3MgZm9jdXMgb24gdGhhdCBmaWxlLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgYXJvdW5kIHRoZSBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgIGFuZCBgbmV4dF9kZW1vdGlvbl9ub2RlYCBmdW5jdGlvbnMuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IHNwb3RzIHdoZXJlIE5VTUEgbWlncmF0aW9uIHBvbGljaWVzIHdvdWxkIGludGVyYWN0IHdpdGggdGhlIHRpZXJpbmcgbG9naWMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlY2lkZXMgd2hlcmUgdG8gbW92ZSBtZW1vcnkgd2l0aGluIHRoZSBOVU1BIG5vZGVzLCBvciBpbmRlZWQsIGlmIHRoYXQncyBldmVuIGNvbnNpZGVyZWQgZGlyZWN0bHkgZHVyaW5nIGRlbW90aW9uLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBzb21lIGxvZ2ljLCBldmVuIGlmIGl0J3MgaW5kaXJlY3QsIHJlbGF0ZWQgdG8gYENPTkZJR19OVU1BX01JR1JBVElPTmAsIHNvIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciB0aGF0IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gd2l0aGluIHRoYXQgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbWVtb3J5IHRpZXJpbmcgYW5kIE5VTUEgYXJlIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MjkuOTkyMzEzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnktdGllcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0LyoqXFxuIDMyMTpcXHQgKiBuZXh0X2RlbW90aW9uX25vZGUoKSAtIEdldCB0aGUgbmV4dCBub2RlIGluIHRoZSBkZW1vdGlvbiBwYXRoXFxuIDMyMjpcXHQgKiBAbm9kZTogVGhlIHN0YXJ0aW5nIG5vZGUgdG8gbG9va3VwIHRoZSBuZXh0IG5vZGVcXG4gMzIzOlxcdCAqIEBhbGxvd2VkX21hc2s6IFRoZSBwb2ludGVyIHRvIGFsbG93ZWQgbm9kZSBtYXNrXFxuIDMyNDpcXHQgKlxcbiAzMjU6XFx0ICogUmV0dXJuOiBub2RlIGlkIGZvciBuZXh0IG1lbW9yeSBub2RlIGluIHRoZSBkZW1vdGlvbiBwYXRoIGhpZXJhcmNoeVxcbiAzMjY6XFx0ICogZnJvbSBAbm9kZTsgTlVNQV9OT19OT0RFIGlmIEBub2RlIGlzIHRlcm1pbmFsLiAgVGhpcyBkb2VzIG5vdCBrZWVwXFxuIDMyNzpcXHQgKiBAbm9kZSBvbmxpbmUgb3IgZ3VhcmFudGVlIHRoYXQgaXQgKmNvbnRpbnVlcyogdG8gYmUgdGhlIG5leHQgZGVtb3Rpb25cXG4gMzI4OlxcdCAqIHRhcmdldC5cXG4gMzI5OlxcdCAqL1xcbiAzMzA6XFx0aW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxcbiAzMzE6XFx0e1xcbiAzMzI6XFx0XFx0c3RydWN0IGRlbW90aW9uX25vZGVzICpuZDtcXG4gMzMzOlxcdFxcdG5vZGVtYXNrX3QgbWFzaztcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0aWYgKCFub2RlX2RlbW90aW9uKVxcbiAzMzY6XFx0XFx0XFx0cmV0dXJuIE5VTUFfTk9fTk9ERTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0bmQgPSBcXHUwMDI2bm9kZV9kZW1vdGlvbltub2RlXTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0LypcXG4gMzQxOlxcdFxcdCAqIG5vZGVfZGVtb3Rpb25bXSBpcyB1cGRhdGVkIHdpdGhvdXQgZXhjbHVkaW5nIHRoaXNcXG4gMzQyOlxcdFxcdCAqIGZ1bmN0aW9uIGZyb20gcnVubmluZy5cXG4gMzQzOlxcdFxcdCAqXFxuIDM0NDpcXHRcXHQgKiBNYWtlIHN1cmUgdG8gdXNlIFJDVSBvdmVyIGVudGlyZSBjb2RlIGJsb2NrcyBpZlxcbiAzNDU6XFx0XFx0ICogbm9kZV9kZW1vdGlvbltdIHJlYWRzIG5lZWQgdG8gYmUgY29uc2lzdGVudC5cXG4gMzQ2OlxcdFxcdCAqL1xcbiAzNDc6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzNDg6XFx0XFx0LyogRmlsdGVyIG91dCBub2RlcyB0aGF0IGFyZSBub3QgaW4gYWxsb3dlZF9tYXNrLiAqL1xcbiAzNDk6XFx0XFx0bm9kZXNfYW5kKG1hc2ssIG5kLVxcdTAwM2VwcmVmZXJyZWQsICphbGxvd2VkX21hc2spO1xcbiAzNTA6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdC8qXFxuIDM1MzpcXHRcXHQgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGFyZ2V0IG5vZGVzLCBqdXN0IHNlbGVjdCBvbmVcXG4gMzU0OlxcdFxcdCAqIHRhcmdldCBub2RlIHJhbmRvbWx5LlxcbiAzNTU6XFx0XFx0ICpcXG4gMzU2OlxcdFxcdCAqIEluIGFkZGl0aW9uLCB3ZSBjYW4gYWxzbyB1c2Ugcm91bmQtcm9iaW4gdG8gc2VsZWN0XFxuIDM1NzpcXHRcXHQgKiB0YXJnZXQgbm9kZSwgYnV0IHdlIHNob3VsZCBpbnRyb2R1Y2UgYW5vdGhlciB2YXJpYWJsZVxcbiAzNTg6XFx0XFx0ICogZm9yIG5vZGVfZGVtb3Rpb25bXSB0byByZWNvcmQgbGFzdCBzZWxlY3RlZCB0YXJnZXQgbm9kZSxcXG4gMzU5OlxcdFxcdCAqIHRoYXQgbWF5IGNhdXNlIGNhY2hlIHBpbmctcG9uZyBkdWUgdG8gdGhlIGNoYW5naW5nIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjI5Ljk5MjQ3ODIyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNTA3NDc1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOVU1BIE1pZ3JhdGlvbiBpbiBgbW0vbWVtb3J5LXRpZXJzLmNgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBtbS9tZW1vcnktdGllcnMuY2AgYWdhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBOVU1BIG1pZ3JhdGlvbiB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTmAuIFRoaXMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyB0aGUga2V5IOKAkyBpdCdzIGdvaW5nIHRvIGRpY3RhdGUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIGFsbCB0aGUgcmVsZXZhbnQgbWlncmF0aW9uIGxvZ2ljLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSAqaG93KiB0aGUgTlVNQSBtaWdyYXRpb24gY29kZSBpcyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbWVtb3J5IHRpZXJpbmcgZnJhbWV3b3JrLiBBcmUgdGhleSB3b3JraW5nIGluIHRhbmRlbT8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBob29rcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEknbSBob3BpbmcgdG8gdW5jb3ZlciBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIG9mIGNvdXJzZSwgdW5kZXJzdGFuZCBob3cgdGhlIE5VTUEtYXdhcmUgbWVjaGFuaXNtcyBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgdGllcmluZyBwb2xpY3kuIFRpbWUgdG8gZmluZCB0aGF0IGAjaWZkZWZgIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MzMuMjQzMjI4ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDI5NzMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOVU1BX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02NjA9Y29uZmlnIFBBR0VfUkVQT1JUSU5HXFxuLS1cXG5tbS9LY29uZmlnLTY2Ny1cXG5tbS9LY29uZmlnOjY2ODpjb25maWcgTlVNQV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTY2OS1cXHRib29sIFxcXCJOVU1BIHBhZ2UgbWlncmF0aW9uXFxcIlxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9NjU9Ym9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTcxLVxcbm1tL21lbW9yeS10aWVycy5jOjcyOiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cXG5tbS9tZW1vcnktdGllcnMuYy03My1zdGF0aWMgaW50IHRvcF90aWVyX2FkaXN0YW5jZTtcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTEzMT1zdGF0aWMgc3RydWN0IGRlbW90aW9uX25vZGVzICpub2RlX2RlbW90aW9uIF9fcmVhZF9tb3N0bHk7XFxubW0vbWVtb3J5LXRpZXJzLmM6MTMyOiNlbmRpZiAvKiBDT05GSUdfTlVNQV9NSUdSQVRJT04gKi9cXG5tbS9tZW1vcnktdGllcnMuYy0xMzMtXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz0yNjA9c3RhdGljIHN0cnVjdCBtZW1vcnlfdGllciAqX19ub2RlX2dldF9tZW1vcnlfdGllcihpbnQgbm9kZSlcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTI3NS1cXG5tbS9tZW1vcnktdGllcnMuYzoyNzY6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxcbm1tL21lbW9yeS10aWVycy5jLTI3Ny1ib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSlcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTUyMj1zdGF0aWMgaW5saW5lIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZCkge31cXG5tbS9tZW1vcnktdGllcnMuYzo1MjM6I2VuZGlmIC8qIENPTkZJR19OVU1BX01JR1JBVElPTiAqL1xcbm1tL21lbW9yeS10aWVycy5jLTUyNC1cXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTkwNz1zdGF0aWMgaW50IF9faW5pdCBtZW1vcnlfdGllcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy05MTQtXFxubW0vbWVtb3J5LXRpZXJzLmM6OTE1OiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cXG5tbS9tZW1vcnktdGllcnMuYy05MTYtXFx0bm9kZV9kZW1vdGlvbiA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgZGVtb3Rpb25fbm9kZXMsIG5yX25vZGVfaWRzKTtcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTk0MD1ib29sIG51bWFfZGVtb3Rpb25fZW5hYmxlZCA9IGZhbHNlO1xcbm1tL21lbW9yeS10aWVycy5jLTk0MS1cXG5tbS9tZW1vcnktdGllcnMuYzo5NDI6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxcbm1tL21lbW9yeS10aWVycy5jLTk0My0jaWZkZWYgQ09ORklHX1NZU0ZTXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMTY5PXN0YXRpYyBsb25nIGRvX2dldF9tZW1wb2xpY3koaW50ICpwb2xpY3ksIG5vZGVtYXNrX3QgKm5tYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTI2OS1cXG5tbS9tZW1wb2xpY3kuYzoxMjcwOiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cXG5tbS9tZW1wb2xpY3kuYy0xMjcxLXN0YXRpYyBib29sIG1pZ3JhdGVfZm9saW9fYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvbGlzdCxcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTIyMzUtXFxubW0vbWlncmF0ZS5jOjIyMzY6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxcbm1tL21pZ3JhdGUuYy0yMjM3LXN0YXRpYyBpbnQgc3RvcmVfc3RhdHVzKGludCBfX3VzZXIgKnN0YXR1cywgaW50IHN0YXJ0LCBpbnQgdmFsdWUsIGludCBucilcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNjMzPVNZU0NBTExfREVGSU5FNihtb3ZlX3BhZ2VzLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yNjM5LX1cXG5tbS9taWdyYXRlLmM6MjY0MDojZW5kaWYgLyogQ09ORklHX05VTUFfTUlHUkFUSU9OICovXFxubW0vbWlncmF0ZS5jLTI2NDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjMzLjM1NzUzMDQyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTI0OTg4MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKk5VTUEgTWlncmF0aW9uIERlcGVuZGVuY3kgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBOVU1BX01JR1JBVElPTmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyBhcmUgZGVmaW5lZC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5ICpyZXF1aXJlZCogZm9yIHRoaXMgdG8gYmUgZW5hYmxlZCwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgaXQgbWlnaHQgaW5mbHVlbmNlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBoaWRkZW4gZ290Y2hhcyBvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gTm8gc2Vuc2UgaW4gcmVseWluZyBvbiBndWVzc3dvcmsgd2hlbiB0aGUgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBpcyByaWdodCB0aGVyZSwgcmVhZHkgdG8gYmUgcGFyc2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIGludmVzdGlnYXRpb24gaW50byB0aGUgTlVNQSBtaWdyYXRpb24gZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3ODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjozNi4yODI1MjE0NDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjY1OlxcdFxcdCAgdGhvc2UgcGFnZXMgdG8gYW5vdGhlciBlbnRpdHksIHN1Y2ggYXMgYSBoeXBlcnZpc29yLCBzbyB0aGF0IHRoZVxcbiA2NjY6XFx0XFx0ICBtZW1vcnkgY2FuIGJlIGZyZWVkIHdpdGhpbiB0aGUgaG9zdCBmb3Igb3RoZXIgdXNlcy5cXG4gNjY3OlxcdFxcbiA2Njg6XFx0Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuIDY2OTpcXHRcXHRib29sIFxcXCJOVU1BIHBhZ2UgbWlncmF0aW9uXFxcIlxcbiA2NzA6XFx0XFx0ZGVmYXVsdCB5XFxuIDY3MTpcXHRcXHRkZXBlbmRzIG9uIE5VTUEgXFx1MDAyNlxcdTAwMjYgTU1VXFxuIDY3MjpcXHRcXHRzZWxlY3QgTUlHUkFUSU9OXFxuIDY3MzpcXHRcXHRoZWxwXFxuIDY3NDpcXHRcXHQgIFN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBwYWdlcyB0byBvdGhlciBOVU1BIG5vZGVzLCBhdmFpbGFibGUgdG9cXG4gNjc1OlxcdFxcdCAgdXNlciBzcGFjZSB0aHJvdWdoIGludGVyZmFjZXMgbGlrZSBtaWdyYXRlX3BhZ2VzKCksIG1vdmVfcGFnZXMoKSxcXG4gNjc2OlxcdFxcdCAgYW5kIG1iaW5kKCkuIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFnZVxcbiA2Nzc6XFx0XFx0ICBkZW1vdGlvbiBmb3IgbWVtb3J5IHRpZXJpbmcuXFxuIDY3ODpcXHRcXG4gNjc5OlxcdGNvbmZpZyBNSUdSQVRJT05cXG4gNjgwOlxcdFxcdGJvb2xcXG4gNjgxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDY4MjpcXHRcXG4gNjgzOlxcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxuIDY4NDpcXHRcXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MzYuMjgyNjYwMTA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NzU1MTIzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW5mbHVlbmNlZCBieSB0aGUgYE5VTUFgIGFuZCBgTlVNQV9NSUdSQVRJT05gIGNvbmZpZ3VyYXRpb25zIGFuZCBhcmUgbm90IHViaXF1aXRvdXMgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgZnVuZGFtZW50YWwgdG8gdGhlIHN5c3RlbS5cblxuSSBzZWUgdGhhdCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIGFyZTpcblxuMS4gIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLCB1c2VkIHRvIGZpbmQgdGhlIGJlc3QgTlVNQSBub2RlLlxuMi4gIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLCBhIGhlbHBlciBpbiB6b25lbGlzdCBidWlsZGluZy5cbjMuICBgYnVpbGRfem9uZWxpc3RzYCAvIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgZnJvbSBgbW0vcGFnZV9hbGxvYy5jYCAtIGludm9sdmVkIGluIHpvbmVsaXN0IGNvbnN0cnVjdGlvbi5cbjQuICBgbmV4dF9kZW1vdGlvbl9ub2RlYCBmcm9tIGBtbS9tZW1vcnktdGllcnMuY2AsIHVzZWQgZm9yIGZpbmRpbmcgZGVtb3Rpb24gdGFyZ2V0cy5cbjUuICBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgIGZyb20gYG1tL21lbW9yeS10aWVycy5jYCwgc2V0cyB1cCBkZW1vdGlvbiB0YXJnZXRzLlxuXG5Ob3csIGxldCdzIGRldGVybWluZSB0aGVpciB1YmlxdWl0eS4gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIGlzIGNhbGxlZCBvbmx5IGR1cmluZyB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIG1lbW9yeSB0aWVyaW5nOyBpdCdzIG5vdCBhIGNvcmUsIHViaXF1aXRvdXMgZnVuY3Rpb24uIGBuZXh0X2RlbW90aW9uX25vZGVgIGlzIHRyaWdnZXJlZCBkdXJpbmcgZm9saW8gZGVtb3Rpb24vbWVtb3J5IHJlY2xhbWF0aW9uLCBzbyBpdCBhbHNvIGFwcGVhcnMgbm9uLXViaXF1aXRvdXMuIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaXMgY2FsbGVkIGF0IGJvb3QgYW5kIG9uIGhvdHBsdWcgZXZlbnRzLCBsaWtld2lzZSwgbm90IHViaXF1aXRvdXMuIFRoZW4sIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBhbmQgYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYCBhcmUgb25seSBpbnZvbHZlZCBpbiB6b25lbGlzdCBidWlsZGluZywgYW5kIHRoZXkgYXJlIGFsc28gbm90IHViaXF1aXRvdXMuXG5cbmBidWlsZF9hbGxfem9uZWxpc3RzYCBpcyBjYWxsZWQgb24gYm9vdCBvciBob3RwbHVnLCBidXQgdGhlc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHksIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCwgYG5leHRfZGVtb3Rpb25fbm9kZWAsIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AsIGBidWlsZF9ub2RlX3pvbmVsaXN0YCwgYW5kIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgYXBwZWFyIHRvIGltcGxlbWVudCB0aGUgY29yZSwgcmVsZXZhbnQgbG9naWMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBzeW1ib2xzOiBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAsIGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLCBgYnVpbGRfbm9kZV96b25lbGlzdGAsIGFuZCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgLiBZZXAsIGFsbCBvZiB0aG9zZSBhcmUgdGhlIGtleSBvbmVzLlxuXG5JJ2xsIGNvbmZpcm0gdGhlIHN0YXRpYyBzdGF0dXMgb2YgdGhlIGZ1bmN0aW9ucy4gYGJ1aWxkX25vZGVfem9uZWxpc3RgIGFuZCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgIGFyZSwgaW5kZWVkLCBzdGF0aWMuIEhvd2V2ZXIsIHRoZXkgYXJlIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gTm93LCByZS1jaGVja2luZyB0aGUgZGVjbGFyYXRpb25zOiBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgaXMgYSBub24tc3RhdGljIGV4cG9ydGVkIHN5bWJvbCwgYG5leHRfZGVtb3Rpb25fbm9kZWAgaXMgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQuIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaXMgc3RhdGljLCBgYnVpbGRfbm9kZV96b25lbGlzdGAgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBOVU1BYCBhbmQgYE5VTUFfTUlHUkFUSU9OYC5cblxuR2l2ZW4gdGhlIGFuYWx5c2lzLCBoZXJlIGlzIHdoYXQgSSB3aWxsIGZlZWQgdG8gYHNldC1yZXN1bHRzYC5cblxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI3OSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Njo0Mi43NTgxNzQ0NzVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY1OTcyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIk5VTUFfTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmluZF9uZXh0X2Jlc3Rfbm9kZV9pblwiLFxuICAgIFwibmV4dF9kZW1vdGlvbl9ub2RlXCIsXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiLFxuICAgIFwiYnVpbGRfbm9kZV96b25lbGlzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIGFuZCBtbS9tZW1vcnktdGllcnMuYy4gSXQgcmVmYWN0b3JzIG5vZGUgZmFsbGJhY2sgbGlzdCBnZW5lcmF0aW9uIChmaW5kX25leHRfYmVzdF9ub2RlX2luLCBidWlsZF9ub2RlX3pvbmVsaXN0KSB0byBhY2NlcHQgZXhwbGljaXQgY2FuZGlkYXRlIG5vZGVtYXNrcyBhbmQgdXBkYXRlcyBtZW1vcnkgdGllcmluZyAvIGRlbW90aW9uIHRhcmdldCBjYWxjdWxhdGlvbnMgKG5leHRfZGVtb3Rpb25fbm9kZSwgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIG1lbW9yeSB0aWVyaW5nIGRlbW90aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIk5VTUFfTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmluZF9uZXh0X2Jlc3Rfbm9kZV9pblwiLFxuICAgIFwibmV4dF9kZW1vdGlvbl9ub2RlXCIsXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiLFxuICAgIFwiYnVpbGRfbm9kZV96b25lbGlzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIGFuZCBtbS9tZW1vcnktdGllcnMuYy4gSXQgcmVmYWN0b3JzIG5vZGUgZmFsbGJhY2sgbGlzdCBnZW5lcmF0aW9uIChmaW5kX25leHRfYmVzdF9ub2RlX2luLCBidWlsZF9ub2RlX3pvbmVsaXN0KSB0byBhY2NlcHQgZXhwbGljaXQgY2FuZGlkYXRlIG5vZGVtYXNrcyBhbmQgdXBkYXRlcyBtZW1vcnkgdGllcmluZyAvIGRlbW90aW9uIHRhcmdldCBjYWxjdWxhdGlvbnMgKG5leHRfZGVtb3Rpb25fbm9kZSwgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIG1lbW9yeSB0aWVyaW5nIGRlbW90aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Njo0Mi44ODQ3ODI1NTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODM1Nzc5ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6NDIuODg1Njg4OTg0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ4MzQ4NjczOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIGRlbW90aW9uIG5vZGUgc2VsZWN0aW9uIGxvZ2ljIChpbnRyb2R1Y2luZyBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgd2l0aCBhIGNhbmRpZGF0ZSBub2RlbWFzayBwYXJhbWV0ZXIgYW5kIGZhY3RvcmluZyBvdXQgYGJ1aWxkX25vZGVfem9uZWxpc3RgKS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgbm9kZW1hc2tzLCBhbmQgYXJyYXlzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiBgTk9ERV9NQVNLX05PTkVgLCBgbWVtc2V0KG5vZGVfb3JkZXIsIDAsIC4uLilgKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBpc3N1ZXMgaW4gem9uZWxpc3QgaW5kZXhpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTZiZWM2ZWZkMjhkOWUyMWRjZjRjOWU1ZjgwMTg0MDhiNzgyNzgxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjI6NDU6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggZTE2ZjEyNTBiMjVjOC4uMThkMDQxZmY1YzUyYyAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC0xMTMwLDcgKzExMzAsOCBAQCBleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xuIFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIFx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbi1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTtcbitleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxuK1x0XHRcdFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcbiAjZWxzZVxuICNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxuIFxuQEAgLTExMzksNyArMTE0MCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4tc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4rc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4rXHRcdFx0XHRcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuIHtcbiBcdHJldHVybiBOVU1BX05PX05PREU7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS10aWVycy5jIGIvbW0vbWVtb3J5LXRpZXJzLmNcbmluZGV4IDU0ODUxZDhhMTk1YjAuLjI1ZTEyMTg1MWI1ODYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktdGllcnMuY1xuKysrIGIvbW0vbWVtb3J5LXRpZXJzLmNcbkBAIC0zNzAsNyArMzcwLDcgQEAgaW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuIFx0ICogY2xvc2VzdCBkZW1vdGlvbiB0YXJnZXQuXG4gXHQgKi9cbiBcdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XG4tXHRyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZShub2RlLCBcdTAwMjZtYXNrKTtcbitcdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFx1MDAyNm1hc2ssIFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRpc2FibGVfYWxsX2RlbW90aW9uX3RhcmdldHModm9pZClcbkBAIC00NTAsNyArNDUwLDcgQEAgc3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbiBcdFx0bWVtdGllciA9IGxpc3RfbmV4dF9lbnRyeShtZW10aWVyLCBsaXN0KTtcbiBcdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuIFx0XHQvKlxuLVx0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlLCB1c2UgJ3VzZWQnIG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0LlxuK1x0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlX2luLCB1c2UgJ3VzZWQnIG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0LlxuIFx0XHQgKiBBZGQgYWxsIG1lbW9yeSBub2RlcyBleGNlcHQgdGhlIHNlbGVjdGVkIG1lbW9yeSB0aWVyXG4gXHRcdCAqIG5vZGVsaXN0IHRvIHNraXAgbGlzdCBzbyB0aGF0IHdlIGZpbmQgdGhlIGJlc3Qgbm9kZSBmcm9tIHRoZVxuIFx0XHQgKiBtZW10aWVyIG5vZGVsaXN0LlxuQEAgLTQ2Myw3ICs0NjMsOCBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuIFx0XHQgKiBpbiB0aGUgcHJlZmVycmVkIG1hc2sgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGR1cmluZyBkZW1vdGlvbi5cbiBcdFx0ICovXG4gXHRcdGRvIHtcbi1cdFx0XHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIFx1MDAyNnRpZXJfbm9kZXMpO1xuK1x0XHRcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2dGllcl9ub2RlcyxcbitcdFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4gXHRcdFx0aWYgKHRhcmdldCA9PSBOVU1BX05PX05PREUpXG4gXHRcdFx0XHRicmVhaztcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGM0ZGM2MWVjNjYzZWUuLmUxZDdjOGIyMjFkMGQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTU3NzksOSArNTc3OSwxMCBAQCBzdGF0aWMgaW50IG51bWFfem9uZWxpc3Rfb3JkZXJfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XG4gXG4gLyoqXG4tICogZmluZF9uZXh0X2Jlc3Rfbm9kZSAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJ3MgZmFsbGJhY2sgbGlzdFxuKyAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3RcbiAgKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJ3JlIGFwcGVuZGluZ1xuICAqIEB1c2VkX25vZGVfbWFzazogbm9kZW1hc2tfdCBvZiBhbHJlYWR5IHVzZWQgbm9kZXNcbisgKiBAY2FuZGlkYXRlczogbm9kZW1hc2tfdCBvZiBub2RlcyBlbGlnaWJsZSBmb3Igc2VsZWN0aW9uXG4gICpcbiAgKiBXZSB1c2UgYSBudW1iZXIgb2YgZmFjdG9ycyB0byBkZXRlcm1pbmUgd2hpY2ggaXMgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZFxuICAqIGFwcGVhciBvbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0LiAgVGhlIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFwcGVhcmVkXG5AQCAtNTc5Myw3ICs1Nzk0LDggQEAgc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcbiAgKlxuICAqIFJldHVybjogbm9kZSBpZCBvZiB0aGUgZm91bmQgbm9kZSBvciAlTlVNQV9OT19OT0RFIGlmIG5vIG5vZGUgaXMgZm91bmQuXG4gICovXG4taW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuK2ludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbitcdFx0XHQgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuIHtcbiBcdGludCBuLCB2YWw7XG4gXHRpbnQgbWluX3ZhbCA9IElOVF9NQVg7XG5AQCAtNTgwMywxMiArNTgwNSwxMiBAQCBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4gXHQgKiBVc2UgdGhlIGxvY2FsIG5vZGUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LCBidXQgZm9yIG1lbW9yeWxlc3MgbG9jYWxcbiBcdCAqIG5vZGUsIHdlIHNob3VsZCBza2lwIGl0IGFuZCBmYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXMuXG4gXHQgKi9cbi1cdGlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spIFx1MDAyNlx1MDAyNiBub2RlX3N0YXRlKG5vZGUsIE5fTUVNT1JZKSkge1xuK1x0aWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgKmNhbmRpZGF0ZXMpKSB7XG4gXHRcdG5vZGVfc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzayk7XG4gXHRcdHJldHVybiBub2RlO1xuIFx0fVxuIFxuLVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuLCBOX01FTU9SWSkge1xuK1x0Zm9yX2VhY2hfbm9kZV9tYXNrKG4sICpjYW5kaWRhdGVzKSB7XG4gXG4gXHRcdC8qIERvbid0IHdhbnQgYSBub2RlIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZSAqL1xuIFx0XHRpZiAobm9kZV9pc3NldChuLCAqdXNlZF9ub2RlX21hc2spKVxuQEAgLTU4NDcsMTIgKzU4NDksMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuICAqIERNQSB6b25lLCBpZiBhbnktLWJ1dCByaXNrcyBleGhhdXN0aW5nIERNQSB6b25lLlxuICAqL1xuIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlcixcbi1cdFx0dW5zaWduZWQgbnJfbm9kZXMpXG4rXHRcdHVuc2lnbmVkIGludCBucl9ub2RlcywgaW50IHpsaWR4KVxuIHtcbiBcdHN0cnVjdCB6b25lcmVmICp6b25lcmVmcztcbiBcdGludCBpO1xuIFxuLVx0em9uZXJlZnMgPSBwZ2RhdC1cdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS10uX3pvbmVyZWZzO1xuK1x0em9uZXJlZnMgPSBwZ2RhdC1cdTAwM2Vub2RlX3pvbmVsaXN0c1t6bGlkeF0uX3pvbmVyZWZzO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZXM7IGkrKykge1xuIFx0XHRpbnQgbnJfem9uZXM7XG5AQCAtNTg4MSwyNSArNTg4MywyOCBAQCBzdGF0aWMgdm9pZCBidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbiBcdHpvbmVyZWZzLVx1MDAzZXpvbmVfaWR4ID0gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG4rLypcbisgKiBCdWlsZCBvbmUgbm9kZS1vcmRlcmVkIGZhbGxiYWNrIGxpc3QgZnJvbSBhIGNhbmRpZGF0ZSBub2RlbWFzay5cbisgKiB1cGRhdGVfbG9hZCByb3VuZC1yb2JpbnMgbm9kZV9sb2FkIGFjcm9zcyBlcXVpZGlzdGFudCBub2Rlcy5cbisgKi9cbitzdGF0aWMgdm9pZCBidWlsZF9ub2RlX3pvbmVsaXN0KHBnX2RhdGFfdCAqcGdkYXQsIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMsXG4rXHRcdFx0XHRpbnQgemxpZHgsIGJvb2wgdXBkYXRlX2xvYWQsXG4rXHRcdFx0XHRpbnQgKm5vZGVfb3JkZXIsIGludCAqbnIpXG4ge1xuLVx0c3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107XG4tXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xuIFx0bm9kZW1hc2tfdCB1c2VkX21hc2sgPSBOT0RFX01BU0tfTk9ORTtcbi1cdGludCBsb2NhbF9ub2RlLCBwcmV2X25vZGU7XG4tXG4tXHQvKiBOVU1BLWF3YXJlIG9yZGVyaW5nIG9mIG5vZGVzICovXG4tXHRsb2NhbF9ub2RlID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbi1cdHByZXZfbm9kZSA9IGxvY2FsX25vZGU7XG4rXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4rXHRpbnQgcHJldl9ub2RlID0gbG9jYWxfbm9kZTtcbitcdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG4gXG4tXHRtZW1zZXQobm9kZV9vcmRlciwgMCwgc2l6ZW9mKG5vZGVfb3JkZXIpKTtcbi1cdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGUobG9jYWxfbm9kZSwgXHUwMDI2dXNlZF9tYXNrKSkgXHUwMDNlPSAwKSB7XG4rXHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFx1MDAyNnVzZWRfbWFzayxcbitcdFx0XHRcdFx0ICAgICAgY2FuZGlkYXRlcykpIFx1MDAzZT0gMCkge1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBkb24ndCB3YW50IHRvIHByZXNzdXJlIGEgcGFydGljdWxhciBub2RlLlxuIFx0XHQgKiBTbyBhZGRpbmcgcGVuYWx0eSB0byB0aGUgZmlyc3Qgbm9kZSBpbiBzYW1lXG4gXHRcdCAqIGRpc3RhbmNlIGdyb3VwIHRvIG1ha2UgaXQgcm91bmQtcm9iaW4uXG4gXHRcdCAqL1xuLVx0XHRpZiAobm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPVxuK1x0XHRpZiAodXBkYXRlX2xvYWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9XG4gXHRcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIHByZXZfbm9kZSkpXG4gXHRcdFx0bm9kZV9sb2FkW25vZGVdICs9IDE7XG4gXG5AQCAtNTkwNyw4ICs1OTEyLDIyIEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuIFx0XHRwcmV2X25vZGUgPSBub2RlO1xuIFx0fVxuIFxuLVx0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzKTtcbitcdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2RlcywgemxpZHgpO1xuK1x0Km5yID0gbnJfbm9kZXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuK3tcbitcdHN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdO1xuK1x0aW50IGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuK1x0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcbitcbitcdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xuK1xuK1x0YnVpbGRfbm9kZV96b25lbGlzdChwZ2RhdCwgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBaT05FTElTVF9GQUxMQkFDSyxcbitcdFx0XHQgICAgdHJ1ZSwgbm9kZV9vcmRlciwgXHUwMDI2bnJfbm9kZXMpO1xuIFx0YnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTtcbitcbiBcdHByX2luZm8oXCJGYWxsYmFjayBvcmRlciBmb3IgTm9kZSAlZDogXCIsIGxvY2FsX25vZGUpO1xuIFx0Zm9yIChub2RlID0gMDsgbm9kZSBcdTAwM2MgbnJfbm9kZXM7IG5vZGUrKylcbiBcdFx0cHJfY29udChcIiVkIFwiLCBub2RlX29yZGVyW25vZGVdKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjQyLjg4NTY5MDg4NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDYxMzI0NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IE5vZGUgU2VsZWN0aW9uIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSByZWZhY3RvcmluZywgc3BlY2lmaWNhbGx5IGFpbWVkIGF0IGltcHJvdmluZyB0aGUgbm9kZSBzZWxlY3Rpb24gbG9naWMsIGxpa2VseSBmb3IgbWVtb3J5IHRpZXJpbmcgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEl0IHNlZW1zIHRoZXkncmUgbWFraW5nIGBmaW5kX25leHRfYmVzdF9ub2RlYCBtb3JlIGZsZXhpYmxlIGJ5IHJlbmFtaW5nIGl0IHRvIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBhbmQgYWRkaW5nIGEgYGNhbmRpZGF0ZXNgIG5vZGVtYXNrIHBhcmFtZXRlci4gVGhpcyBpbmRpY2F0ZXMgYSBzaGlmdCB0b3dhcmRzIHNwZWNpZnlpbmcgYSBzdWJzZXQgb2Ygbm9kZXMgdG8gY29uc2lkZXIsIHJhdGhlciB0aGFuIHNlYXJjaGluZyBhY3Jvc3MgdGhlIGVudGlyZSBzeXN0ZW0uXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkgc2VlOlxuXG4qICAgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjaGFuZ2UgaW4gYG1tL2ludGVybmFsLmhgIHJlZmxlY3RzIHRoZSBuZXcgYGNhbmRpZGF0ZXNgIHBhcmFtZXRlciwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC5cbiogICBJbiBgbW0vbWVtb3J5LXRpZXJzLmNgLCBjYWxscyB0byB0aGUgdXBkYXRlZCBmdW5jdGlvbiBhcmUgYmVpbmcgbWFkZSB3aXRoIGEgYFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXWAgbWFzay4gVGhpcyBpcyBpbnRlcmVzdGluZzsgYE5fTUVNT1JZYCBwcm9iYWJseSByZWZlcnMgdG8gYSBtZW1vcnkgdGllciBzdGF0ZS4gVGhpcyBsaWtlbHkgdGllcyB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdGhlIG1lbW9yeS10aWVyaW5nIHN1YnN5c3RlbS5cbiogICBgbW0vcGFnZV9hbGxvYy5jYCBoYXMgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMuIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBub2RlX2lzc2V0YCBjaGVja3MgYW5kIGBmb3JfZWFjaF9ub2RlX21hc2tgIGl0ZXJhdGlvbiwgYWxsIHVzaW5nIHRoYXQgYGNhbmRpZGF0ZXNgIG1hc2suIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkOyBpdCBjb25zdHJhaW5zIHRoZSBzZWFyY2ggdG8gYSBzcGVjaWZpYyBzZXQgb2Ygbm9kZXMuIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgaGFzIGFuIGFkZGVkIGB6bGlkeGAgcGFyYW1ldGVyLCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byB6b25lbGlzdCBpbmRleGluZy4gVGhlcmUncyBhbHNvIGBidWlsZF9ub2RlX3pvbmVsaXN0YCwgYW5kIGBidWlsZF96b25lbGlzdHNgIGhlbHBlciBmdW5jdGlvbnMsIHdoaWNoIGFyZSBuZXcuXG5cbkknbSBub3cgZ29pbmcgdG8gZm9jdXMgb24gcG90ZW50aWFsIHJpc2tzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgYGNvcHlfdG9fdXNlcmAgcHJvYmxlbXMsIGV2ZW4gdGhvdWdoIHRoaXMgZG9lc24ndCBsb29rIGxpa2UgYSBkaXJlY3QgdXNlci1zcGFjZSBpbnRlcmZhY2UuIExldCdzIHN0YXJ0IHdpdGggYGJ1aWxkX25vZGVfem9uZWxpc3RgIGFuZCBgYnVpbGRfem9uZWxpc3RzYC5cblxuSW5zaWRlIGBidWlsZF96b25lbGlzdHNgLCBJIGNhbiBzZWUgYSBgbm9kZV9vcmRlcmAgYXJyYXkgaW5pdGlhbGl6ZWQsIHVzZWQsIGFuZCB0aGUgbnVtYmVyIG9mIG5vZGVzIHRyYWNrZWQuIFRoZSBjcnVjaWFsIHBhcnQgaXMgd2l0aGluIGBidWlsZF9ub2RlX3pvbmVsaXN0YDogSXQgbG9va3MgbGlrZSB0aGUgYG5vZGVfb3JkZXJgIGFycmF5IGlzIGJlaW5nIHBvcHVsYXRlZCBiYXNlZCBvbiBhIGNhbGwgdG8gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gLiBJIHNlZSBhbiBgdXNlZF9tYXNrYCB0aGF0IGVuc3VyZXMgd2UgZG9uJ3QgcmV0dXJuIHRoZSBzYW1lIG5vZGUgdHdpY2UsIGFuZCBJIGNhbiBhbHNvIHNlZSBhIGBucl9ub2Rlc2AgdmFyaWFibGUgdGhhdCB0cmFja3MgdGhlIG51bWJlciBvZiBub2RlcyBhZGRlZCB0byBgbm9kZV9vcmRlcmAuIFRoaXMgYWxsIGxvb2tzIG9rYXkgc28gZmFyLiBUaGUgZmluYWwgc3RlcCBpcyB0byBpdGVyYXRlIHRocm91Z2ggdGhpcyBgbm9kZV9vcmRlcmAgaW4gYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYC4gSSBhbHNvIHNlZSB0aGF0IHRoZSBhY3R1YWwgYG5vZGVfb3JkZXJgIGl0c2VsZiBhcHBlYXJzIHRvIGJlIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBjb25zb2xlIHdpdGggYHByX2NvbnQoKWAuIE5vdCBhIGNyaXRpY2FsIGlzc3VlIGFzIGlzLCBidXQgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGNoZWNrZWQgaW4gcHJvZHVjdGlvbiB0byBzZWUgaWYgYW55IG5vZGVzIGFyZSBzZW5zaXRpdmUuXG5cblRoaXMgaXMgYWxsIHByZXR0eSBjbGVhbiwgYnV0IEknbSBub3QgZnVsbHkgY29udmluY2VkIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVG8gZW5zdXJlIG15IHBlYWNlIG9mIG1pbmQsIEknbSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFjcm9zcyB0aGUgY29kZWJhc2UgdG8gbG9vayBmb3IgYW55IG90aGVyIHVzZXMgb2YgdGhlIG9sZCBgZmluZF9uZXh0X2Jlc3Rfbm9kZWAgZnVuY3Rpb24sIHRvIG1ha2Ugc3VyZSBpdCdzIGJlZW4gY2xlYW5seSByZXBsYWNlZCBhbmQgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGVkZ2UgY2FzZXMgSSdtIG1pc3NpbmcuIFRoaXMgd2lsbCBhbHNvIGNhdGNoIGlmIEkgc29tZWhvdyBvdmVybG9va2VkIHdoZXJlIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBpcyBjYWxsZWQgdGhhdCBjb3VsZCBjYXVzZSBhbiBpc3N1ZS4gSSBhbHdheXMgd2FudCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjQ4Ljk0NzAxODcxNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNTM1MTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX25leHRfYmVzdF9ub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9MTEzMT1leHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9pbnRlcm5hbC5oLTExMzItXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9pbnRlcm5hbC5oOjExMzM6ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcXG5tbS9pbnRlcm5hbC5oLTExMzQtXFx0XFx0XFx0XFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcXG4tLVxcbm1tL2ludGVybmFsLmg9MTEzOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTExNDItfVxcbm1tL2ludGVybmFsLmg6MTE0MzpzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcXG5tbS9pbnRlcm5hbC5oLTExNDQtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz0zMzA9aW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtMzcyLVxcdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XFxubW0vbWVtb3J5LXRpZXJzLmM6MzczOlxcdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFxcdTAwMjZtYXNrLCBcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5tbS9tZW1vcnktdGllcnMuYy0zNzQtfVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9NDI1PXN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy00NTItXFx0XFx0LypcXG5tbS9tZW1vcnktdGllcnMuYzo0NTM6XFx0XFx0ICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiwgdXNlICd1c2VkJyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC5cXG5tbS9tZW1vcnktdGllcnMuYy00NTQtXFx0XFx0ICogQWRkIGFsbCBtZW1vcnkgbm9kZXMgZXhjZXB0IHRoZSBzZWxlY3RlZCBtZW1vcnkgdGllclxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNDY1LVxcdFxcdGRvIHtcXG5tbS9tZW1vcnktdGllcnMuYzo0NjY6XFx0XFx0XFx0dGFyZ2V0ID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcXHUwMDI2dGllcl9ub2RlcyxcXG5tbS9tZW1vcnktdGllcnMuYy00NjctXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTc3OT1zdGF0aWMgaW50IG5vZGVfbG9hZFtNQVhfTlVNTk9ERVNdO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU3ODEtLyoqXFxubW0vcGFnZV9hbGxvYy5jOjU3ODI6ICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJ3MgZmFsbGJhY2sgbGlzdFxcbm1tL3BhZ2VfYWxsb2MuYy01NzgzLSAqIEBub2RlOiBub2RlIHdob3NlIGZhbGxiYWNrIGxpc3Qgd2UncmUgYXBwZW5kaW5nXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTc5Ni0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTc5NzppbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxubW0vcGFnZV9hbGxvYy5jLTU3OTgtXFx0XFx0XFx0ICAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01ODkwPXN0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01ODk4LVxcbm1tL3BhZ2VfYWxsb2MuYzo1ODk5OlxcdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obG9jYWxfbm9kZSwgXFx1MDAyNnVzZWRfbWFzayxcXG5tbS9wYWdlX2FsbG9jLmMtNTkwMC1cXHRcXHRcXHRcXHRcXHQgICAgICBjYW5kaWRhdGVzKSkgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Njo1MS43NzIzNzUwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzg3NTI1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipEZWVwIERpdmUgaW50byBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgKipcblxuT2theSwgc28gSSdtIGp1c3QgcXVpY2tseSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gQmVmb3JlIHdlIGNvbW1pdCwgSSB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBzbyBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgYW5kIHRoZSBjb2RlIGFyb3VuZCBpdCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgbG9naWMgdGhlcmUgaXMgc291bmQsIGdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG5ldmVyIGh1cnRzLiBMZXQncyBtYWtlIHN1cmUgb3VyIGFzc3VtcHRpb25zIGhvbGQgYW5kIHRoYXQgd2UgaGF2ZW4ndCBpbmFkdmVydGVudGx5IGludHJvZHVjZWQgYW55IHJlZ3Jlc3Npb25zIG9yIG92ZXJsb29rZWQgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMuIEEgZmV3IG1pbnV0ZXMgbm93IGNvdWxkIHNhdmUgYSBsb3Qgb2YgaGVhZGFjaGVzIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6NTQuNTU5OTAyOTQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg0MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTg0MDpcXHRcXHRcXHRub2RlX3NldChiZXN0X25vZGUsICp1c2VkX25vZGVfbWFzayk7XFxuNTg0MTpcXHRcXG41ODQyOlxcdFxcdHJldHVybiBiZXN0X25vZGU7XFxuNTg0MzpcXHR9XFxuNTg0NDpcXHRcXG41ODQ1OlxcdFxcbjU4NDY6XFx0LypcXG41ODQ3OlxcdCAqIEJ1aWxkIHpvbmVsaXN0cyBvcmRlcmVkIGJ5IG5vZGUgYW5kIHpvbmVzIHdpdGhpbiBub2RlLlxcbjU4NDg6XFx0ICogVGhpcyByZXN1bHRzIGluIG1heGltdW0gbG9jYWxpdHktLW5vcm1hbCB6b25lIG92ZXJmbG93cyBpbnRvIGxvY2FsXFxuNTg0OTpcXHQgKiBETUEgem9uZSwgaWYgYW55LS1idXQgcmlza3MgZXhoYXVzdGluZyBETUEgem9uZS5cXG41ODUwOlxcdCAqL1xcbjU4NTE6XFx0c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdfZGF0YV90ICpwZ2RhdCwgaW50ICpub2RlX29yZGVyLFxcbjU4NTI6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yX25vZGVzLCBpbnQgemxpZHgpXFxuNTg1MzpcXHR7XFxuNTg1NDpcXHRcXHRzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZnM7XFxuNTg1NTpcXHRcXHRpbnQgaTtcXG41ODU2OlxcdFxcbjU4NTc6XFx0XFx0em9uZXJlZnMgPSBwZ2RhdC1cXHUwMDNlbm9kZV96b25lbGlzdHNbemxpZHhdLl96b25lcmVmcztcXG41ODU4OlxcdFxcbjU4NTk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVzOyBpKyspIHtcXG41ODYwOlxcdFxcdFxcdGludCBucl96b25lcztcXG41ODYxOlxcdFxcbjU4NjI6XFx0XFx0XFx0cGdfZGF0YV90ICpub2RlID0gTk9ERV9EQVRBKG5vZGVfb3JkZXJbaV0pO1xcbjU4NjM6XFx0XFxuNTg2NDpcXHRcXHRcXHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUobm9kZSwgem9uZXJlZnMpO1xcbjU4NjU6XFx0XFx0XFx0em9uZXJlZnMgKz0gbnJfem9uZXM7XFxuNTg2NjpcXHRcXHR9XFxuNTg2NzpcXHRcXHR6b25lcmVmcy1cXHUwMDNlem9uZSA9IE5VTEw7XFxuNTg2ODpcXHRcXHR6b25lcmVmcy1cXHUwMDNlem9uZV9pZHggPSAwO1xcbjU4Njk6XFx0fVxcbjU4NzA6XFx0XFxuNTg3MTpcXHQvKlxcbjU4NzI6XFx0ICogQnVpbGQgX19HRlBfVEhJU05PREUgem9uZWxpc3RzXFxuNTg3MzpcXHQgKi9cXG41ODc0OlxcdHN0YXRpYyB2b2lkIGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbjU4NzU6XFx0e1xcbjU4NzY6XFx0XFx0c3RydWN0IHpvbmVyZWYgKnpvbmVyZWZzO1xcbjU4Nzc6XFx0XFx0aW50IG5yX3pvbmVzO1xcbjU4Nzg6XFx0XFxuNTg3OTpcXHRcXHR6b25lcmVmcyA9IHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9OT0ZBTExCQUNLXS5fem9uZXJlZnM7XFxuNTg4MDpcXHRcXHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUocGdkYXQsIHpvbmVyZWZzKTtcXG41ODgxOlxcdFxcdHpvbmVyZWZzICs9IG5yX3pvbmVzO1xcbjU4ODI6XFx0XFx0em9uZXJlZnMtXFx1MDAzZXpvbmUgPSBOVUxMO1xcbjU4ODM6XFx0XFx0em9uZXJlZnMtXFx1MDAzZXpvbmVfaWR4ID0gMDtcXG41ODg0OlxcdH1cXG41ODg1OlxcdFxcbjU4ODY6XFx0LypcXG41ODg3OlxcdCAqIEJ1aWxkIG9uZSBub2RlLW9yZGVyZWQgZmFsbGJhY2sgbGlzdCBmcm9tIGEgY2FuZGlkYXRlIG5vZGVtYXNrLlxcbjU4ODg6XFx0ICogdXBkYXRlX2xvYWQgcm91bmQtcm9iaW5zIG5vZGVfbG9hZCBhY3Jvc3MgZXF1aWRpc3RhbnQgbm9kZXMuXFxuNTg4OTpcXHQgKi9cXG41ODkwOlxcdHN0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyxcXG41ODkxOlxcdFxcdFxcdFxcdFxcdGludCB6bGlkeCwgYm9vbCB1cGRhdGVfbG9hZCxcXG41ODkyOlxcdFxcdFxcdFxcdFxcdGludCAqbm9kZV9vcmRlciwgaW50ICpucilcXG41ODkzOlxcdHtcXG41ODk0OlxcdFxcdG5vZGVtYXNrX3QgdXNlZF9tYXNrID0gTk9ERV9NQVNLX05PTkU7XFxuNTg5NTpcXHRcXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbjU4OTY6XFx0XFx0aW50IHByZXZfbm9kZSA9IGxvY2FsX25vZGU7XFxuNTg5NzpcXHRcXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xcbjU4OTg6XFx0XFxuNTg5OTpcXHRcXHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFxcdTAwMjZ1c2VkX21hc2ssXFxuNTkwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBjYW5kaWRhdGVzKSkgXFx1MDAzZT0gMCkge1xcbjU5MDE6XFx0XFx0XFx0LypcXG41OTAyOlxcdFxcdFxcdCAqIFdlIGRvbid0IHdhbnQgdG8gcHJlc3N1cmUgYSBwYXJ0aWN1bGFyIG5vZGUuXFxuNTkwMzpcXHRcXHRcXHQgKiBTbyBhZGRpbmcgcGVuYWx0eSB0byB0aGUgZmlyc3Qgbm9kZSBpbiBzYW1lXFxuNTkwNDpcXHRcXHRcXHQgKiBkaXN0YW5jZSBncm91cCB0byBtYWtlIGl0IHJvdW5kLXJvYmluLlxcbjU5MDU6XFx0XFx0XFx0ICovXFxuNTkwNjpcXHRcXHRcXHRpZiAodXBkYXRlX2xvYWQgXFx1MDAyNlxcdTAwMjZcXG41OTA3OlxcdFxcdFxcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9XFxuNTkwODpcXHRcXHRcXHQgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBwcmV2X25vZGUpKVxcbjU5MDk6XFx0XFx0XFx0XFx0bm9kZV9sb2FkW25vZGVdICs9IDE7XFxuNTkxMDpcXHRcXG41OTExOlxcdFxcdFxcdG5vZGVfb3JkZXJbbnJfbm9kZXMrK10gPSBub2RlO1xcbjU5MTI6XFx0XFx0XFx0cHJldl9ub2RlID0gbm9kZTtcXG41OTEzOlxcdFxcdH1cXG41OTE0OlxcdFxcbjU5MTU6XFx0XFx0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7XFxuNTkxNjpcXHRcXHQqbnIgPSBucl9ub2RlcztcXG41OTE3OlxcdH1cXG41OTE4OlxcdFxcbjU5MTk6XFx0c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXFxuNTkyMDpcXHR7XFxuNTkyMTpcXHRcXHRzdGF0aWMgaW50IG5vZGVfb3JkZXJbTUFYX05VTU5PREVTXTtcXG41OTIyOlxcdFxcdGludCBsb2NhbF9ub2RlID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuNTkyMzpcXHRcXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xcbjU5MjQ6XFx0XFxuNTkyNTpcXHRcXHRtZW1zZXQobm9kZV9vcmRlciwgMCwgc2l6ZW9mKG5vZGVfb3JkZXIpKTtcXG41OTI2OlxcdFxcbjU5Mjc6XFx0XFx0YnVpbGRfbm9kZV96b25lbGlzdChwZ2RhdCwgXFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgWk9ORUxJU1RfRkFMTEJBQ0ssXFxuNTkyODpcXHRcXHRcXHRcXHQgICAgdHJ1ZSwgbm9kZV9vcmRlciwgXFx1MDAyNm5yX25vZGVzKTtcXG41OTI5OlxcdFxcdGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ2RhdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjU0LjU2MDUwNDI2OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTYwMDI0NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBpcyBhbGwgaW50ZXJuYWwga2VybmVsIHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgdGhlIE5VTUEgem9uZWxpc3QgaXMgZ2VuZXJhdGVkIGFuZCBob3cgdGhlIHRhcmdldCBub2RlIGZvciBkZW1vdGlvbiBpcyBzZWxlY3RlZC4gTm8gZGF0YSBmcm9tIHRoZSBrZXJuZWwgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZCDigJMgdGhhdCdzIG9mdGVuIGEgc291cmNlIG9mIGhlYWRhY2hlcy4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGFsbCB0aGUga2V5IHZhcmlhYmxlcyBhbmQgYnVmZmVycyBsaWtlIGBub2RlX29yZGVyYCBhbmQgYHVzZWRfbWFza2AgYXJlIGJlaW5nIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGxpa2UgYE5PREVfTUFTS19OT05FYCBhbmQgYG1lbXNldCguLi4sIDAsIC4uLilgLCBtZWFuaW5nIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgY3JlZXBpbmcgaW4uIEknbSBjb25maWRlbnQgdGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGV4cG9zZWQuXG5cbkV2ZW4gaWYgdGhlcmUgKndlcmUqIHNvbWUgYm91bmRhcnkgaXNzdWVzIHdpdGggaW5kZXhpbmcgc29tZXRoaW5nIGxpa2UgYG5vZGVfb3JkZXJgIG9yIHRoZSB6b25lbGlzdHMsIHRoZSBrZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXIgKEtBU0FOKSB3b3VsZCBjYXRjaCB0aGF0IGFzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBTbywgYmFzZWQgb24gdGhhdCwgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGhlcmU7IGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGNyYWZ0IGEgY29uY2lzZSByZXNwb25zZSwgYW5kIHRoZW4gdHJpZ2dlciB0aGUgc2V0LXJlc3VsdHMgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ5NywiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Njo1Ny43MjA1MzIxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE5VTUEgem9uZWxpc3QgY29uc3RydWN0aW9uIGFuZCBkZW1vdGlvbiBub2RlIHNlbGVjdGlvbiBsb2dpYyAoaW50cm9kdWNpbmcgYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIHdpdGggYSBjYW5kaWRhdGUgbm9kZW1hc2sgcGFyYW1ldGVyIGFuZCBmYWN0b3Jpbmcgb3V0IGBidWlsZF9ub2RlX3pvbmVsaXN0YCkuIEFsbCBsb2NhbCB2YXJpYWJsZXMsIG5vZGVtYXNrcywgYW5kIGFycmF5cyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4gYE5PREVfTUFTS19OT05FYCwgYG1lbXNldChub2RlX29yZGVyLCAwLCAuLi4pYCkuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYnl0ZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgaXNzdWVzIGluIHpvbmVsaXN0IGluZGV4aW5nIGFyZSBhZGRyZXNzYWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmtjx4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 22:00:17 +0000 UTC FinishedAt: 2026-09-03 22:46:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "NUMA_MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "NUMA_MIGRATION" ], "series_id": "b88d2d9f-4508-450f-8683-46a117fe6840" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "find_next_best_node_in", "next_demotion_node", "establish_demotion_targets", "build_node_zonelist" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5kX25leHRfYmVzdF9ub2RlX2luJiMzNDssCiAgICAmIzM0O25leHRfZGVtb3Rpb25fbm9kZSYjMzQ7LAogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7LAogICAgJiMzNDtidWlsZF9ub2RlX3pvbmVsaXN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYW5kIG1tL21lbW9yeS10aWVycy5jLiBJdCByZWZhY3RvcnMgbm9kZSBmYWxsYmFjayBsaXN0IGdlbmVyYXRpb24gKGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIGJ1aWxkX25vZGVfem9uZWxpc3QpIHRvIGFjY2VwdCBleHBsaWNpdCBjYW5kaWRhdGUgbm9kZW1hc2tzIGFuZCB1cGRhdGVzIG1lbW9yeSB0aWVyaW5nIC8gZGVtb3Rpb24gdGFyZ2V0IGNhbGN1bGF0aW9ucyAobmV4dF9kZW1vdGlvbl9ub2RlLCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cykuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbWVtb3J5IHRpZXJpbmcgZGVtb3Rpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNmJlYzZlZmQyOGQ5ZTIxZGNmNGM5ZTVmODAxODQwOGI3ODI3ODE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMjo0NTo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggZTE2ZjEyNTBiMjVjOC4uMThkMDQxZmY1YzUyYyAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0xMTMwLDcgJiM0MzsxMTMwLDggQEAgZXh0ZXJuIGludCBub2RlX3JlY2xhaW1fbW9kZTtcbiBcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XG4tZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayk7XG4mIzQzO2V4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcbiAjZWxzZVxuICNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxuIFxuQEAgLTExMzksNyAmIzQzOzExNDAsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuIHtcbiBcdHJldHVybiBOVU1BX05PX05PREU7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS10aWVycy5jIGIvbW0vbWVtb3J5LXRpZXJzLmNcbmluZGV4IDU0ODUxZDhhMTk1YjAuLjI1ZTEyMTg1MWI1ODYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktdGllcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LXRpZXJzLmNcbkBAIC0zNzAsNyAmIzQzOzM3MCw3IEBAIGludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcbiBcdCAqIGNsb3Nlc3QgZGVtb3Rpb24gdGFyZ2V0LlxuIFx0ICovXG4gXHRub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spO1xuLVx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGUobm9kZSwgXHUwMDI2bWFzayk7XG4mIzQzO1x0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2bWFzaywgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGlzYWJsZV9hbGxfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuQEAgLTQ1MCw3ICYjNDM7NDUwLDcgQEAgc3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbiBcdFx0bWVtdGllciA9IGxpc3RfbmV4dF9lbnRyeShtZW10aWVyLCBsaXN0KTtcbiBcdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuIFx0XHQvKlxuLVx0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlLCB1c2UgJiMzOTt1c2VkJiMzOTsgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG4mIzQzO1x0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlX2luLCB1c2UgJiMzOTt1c2VkJiMzOTsgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG4gXHRcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcbiBcdFx0ICogbm9kZWxpc3QgdG8gc2tpcCBsaXN0IHNvIHRoYXQgd2UgZmluZCB0aGUgYmVzdCBub2RlIGZyb20gdGhlXG4gXHRcdCAqIG1lbXRpZXIgbm9kZWxpc3QuXG5AQCAtNDYzLDcgJiM0Mzs0NjMsOCBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuIFx0XHQgKiBpbiB0aGUgcHJlZmVycmVkIG1hc2sgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGR1cmluZyBkZW1vdGlvbi5cbiBcdFx0ICovXG4gXHRcdGRvIHtcbi1cdFx0XHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIFx1MDAyNnRpZXJfbm9kZXMpO1xuJiM0MztcdFx0XHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFx1MDAyNnRpZXJfbm9kZXMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbiBcdFx0XHRpZiAodGFyZ2V0ID09IE5VTUFfTk9fTk9ERSlcbiBcdFx0XHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYzRkYzYxZWM2NjNlZS4uZTFkN2M4YjIyMWQwZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTc3OSw5ICYjNDM7NTc3OSwxMCBAQCBzdGF0aWMgaW50IG51bWFfem9uZWxpc3Rfb3JkZXJfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XG4gXG4gLyoqXG4tICogZmluZF9uZXh0X2Jlc3Rfbm9kZSAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJiMzOTtzIGZhbGxiYWNrIGxpc3RcbiYjNDM7ICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJiMzOTtzIGZhbGxiYWNrIGxpc3RcbiAgKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJiMzOTtyZSBhcHBlbmRpbmdcbiAgKiBAdXNlZF9ub2RlX21hc2s6IG5vZGVtYXNrX3Qgb2YgYWxyZWFkeSB1c2VkIG5vZGVzXG4mIzQzOyAqIEBjYW5kaWRhdGVzOiBub2RlbWFza190IG9mIG5vZGVzIGVsaWdpYmxlIGZvciBzZWxlY3Rpb25cbiAgKlxuICAqIFdlIHVzZSBhIG51bWJlciBvZiBmYWN0b3JzIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkXG4gICogYXBwZWFyIG9uIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0LiAgVGhlIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFwcGVhcmVkXG5AQCAtNTc5Myw3ICYjNDM7NTc5NCw4IEBAIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XG4gICpcbiAgKiBSZXR1cm46IG5vZGUgaWQgb2YgdGhlIGZvdW5kIG5vZGUgb3IgJU5VTUFfTk9fTk9ERSBpZiBubyBub2RlIGlzIGZvdW5kLlxuICAqL1xuLWludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcbiYjNDM7aW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxuJiM0MztcdFx0XHQgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuIHtcbiBcdGludCBuLCB2YWw7XG4gXHRpbnQgbWluX3ZhbCA9IElOVF9NQVg7XG5AQCAtNTgwMywxMiAmIzQzOzU4MDUsMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuIFx0ICogVXNlIHRoZSBsb2NhbCBub2RlIGlmIHdlIGhhdmVuJiMzOTt0IGFscmVhZHksIGJ1dCBmb3IgbWVtb3J5bGVzcyBsb2NhbFxuIFx0ICogbm9kZSwgd2Ugc2hvdWxkIHNraXAgaXQgYW5kIGZhbGwgYmFjayB0byBvdGhlciBub2Rlcy5cbiBcdCAqL1xuLVx0aWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgXHUwMDI2XHUwMDI2IG5vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpKSB7XG4mIzQzO1x0aWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgKmNhbmRpZGF0ZXMpKSB7XG4gXHRcdG5vZGVfc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzayk7XG4gXHRcdHJldHVybiBub2RlO1xuIFx0fVxuIFxuLVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuLCBOX01FTU9SWSkge1xuJiM0MztcdGZvcl9lYWNoX25vZGVfbWFzayhuLCAqY2FuZGlkYXRlcykge1xuIFxuIFx0XHQvKiBEb24mIzM5O3Qgd2FudCBhIG5vZGUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlICovXG4gXHRcdGlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVfbWFzaykpXG5AQCAtNTg0NywxMiAmIzQzOzU4NDksMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuICAqIERNQSB6b25lLCBpZiBhbnktLWJ1dCByaXNrcyBleGhhdXN0aW5nIERNQSB6b25lLlxuICAqL1xuIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlcixcbi1cdFx0dW5zaWduZWQgbnJfbm9kZXMpXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbnJfbm9kZXMsIGludCB6bGlkeClcbiB7XG4gXHRzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZnM7XG4gXHRpbnQgaTtcbiBcbi1cdHpvbmVyZWZzID0gcGdkYXQtXHUwMDNlbm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmcztcbiYjNDM7XHR6b25lcmVmcyA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW3psaWR4XS5fem9uZXJlZnM7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aW50IG5yX3pvbmVzO1xuQEAgLTU4ODEsMjUgJiM0Mzs1ODgzLDI4IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuIFx0em9uZXJlZnMtXHUwMDNlem9uZV9pZHggPSAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbiYjNDM7LypcbiYjNDM7ICogQnVpbGQgb25lIG5vZGUtb3JkZXJlZCBmYWxsYmFjayBsaXN0IGZyb20gYSBjYW5kaWRhdGUgbm9kZW1hc2suXG4mIzQzOyAqIHVwZGF0ZV9sb2FkIHJvdW5kLXJvYmlucyBub2RlX2xvYWQgYWNyb3NzIGVxdWlkaXN0YW50IG5vZGVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuJiM0MztcdFx0XHRcdGludCB6bGlkeCwgYm9vbCB1cGRhdGVfbG9hZCxcbiYjNDM7XHRcdFx0XHRpbnQgKm5vZGVfb3JkZXIsIGludCAqbnIpXG4ge1xuLVx0c3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107XG4tXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xuIFx0bm9kZW1hc2tfdCB1c2VkX21hc2sgPSBOT0RFX01BU0tfTk9ORTtcbi1cdGludCBsb2NhbF9ub2RlLCBwcmV2X25vZGU7XG4tXG4tXHQvKiBOVU1BLWF3YXJlIG9yZGVyaW5nIG9mIG5vZGVzICovXG4tXHRsb2NhbF9ub2RlID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbi1cdHByZXZfbm9kZSA9IGxvY2FsX25vZGU7XG4mIzQzO1x0aW50IGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuJiM0MztcdGludCBwcmV2X25vZGUgPSBsb2NhbF9ub2RlO1xuJiM0MztcdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG4gXG4tXHRtZW1zZXQobm9kZV9vcmRlciwgMCwgc2l6ZW9mKG5vZGVfb3JkZXIpKTtcbi1cdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGUobG9jYWxfbm9kZSwgXHUwMDI2dXNlZF9tYXNrKSkgXHUwMDNlPSAwKSB7XG4mIzQzO1x0d2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihsb2NhbF9ub2RlLCBcdTAwMjZ1c2VkX21hc2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYW5kaWRhdGVzKSkgXHUwMDNlPSAwKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFdlIGRvbiYjMzk7dCB3YW50IHRvIHByZXNzdXJlIGEgcGFydGljdWxhciBub2RlLlxuIFx0XHQgKiBTbyBhZGRpbmcgcGVuYWx0eSB0byB0aGUgZmlyc3Qgbm9kZSBpbiBzYW1lXG4gXHRcdCAqIGRpc3RhbmNlIGdyb3VwIHRvIG1ha2UgaXQgcm91bmQtcm9iaW4uXG4gXHRcdCAqL1xuLVx0XHRpZiAobm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPVxuJiM0MztcdFx0aWYgKHVwZGF0ZV9sb2FkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgbm9kZSkgIT1cbiBcdFx0ICAgIG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgcHJldl9ub2RlKSlcbiBcdFx0XHRub2RlX2xvYWRbbm9kZV0gJiM0Mzs9IDE7XG4gXG5AQCAtNTkwNyw4ICYjNDM7NTkxMiwyMiBAQCBzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbiBcdFx0cHJldl9ub2RlID0gbm9kZTtcbiBcdH1cbiBcbi1cdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2Rlcyk7XG4mIzQzO1x0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7XG4mIzQzO1x0Km5yID0gbnJfbm9kZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107XG4mIzQzO1x0aW50IGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuJiM0MztcdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG4mIzQzO1xuJiM0MztcdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xuJiM0MztcbiYjNDM7XHRidWlsZF9ub2RlX3pvbmVsaXN0KHBnZGF0LCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIFpPTkVMSVNUX0ZBTExCQUNLLFxuJiM0MztcdFx0XHQgICAgdHJ1ZSwgbm9kZV9vcmRlciwgXHUwMDI2bnJfbm9kZXMpO1xuIFx0YnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTtcbiYjNDM7XG4gXHRwcl9pbmZvKFwmIzM0O0ZhbGxiYWNrIG9yZGVyIGZvciBOb2RlICVkOiBcJiMzNDssIGxvY2FsX25vZGUpO1xuIFx0Zm9yIChub2RlID0gMDsgbm9kZSBcdTAwM2MgbnJfbm9kZXM7IG5vZGUmIzQzOyYjNDM7KVxuIFx0XHRwcl9jb250KFwmIzM0OyVkIFwmIzM0Oywgbm9kZV9vcmRlcltub2RlXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtOVU1BX01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmRfbmV4dF9iZXN0X25vZGVfaW4mIzM0OywKICAgICYjMzQ7bmV4dF9kZW1vdGlvbl9ub2RlJiMzNDssCiAgICAmIzM0O2VzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzJiMzNDssCiAgICAmIzM0O2J1aWxkX25vZGVfem9uZWxpc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYW5kIG1tL21lbW9yeS10aWVycy5jLiBJdCByZWZhY3RvcnMgbm9kZSBmYWxsYmFjayBsaXN0IGdlbmVyYXRpb24gKGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIGJ1aWxkX25vZGVfem9uZWxpc3QpIHRvIGFjY2VwdCBleHBsaWNpdCBjYW5kaWRhdGUgbm9kZW1hc2tzIGFuZCB1cGRhdGVzIG1lbW9yeSB0aWVyaW5nIC8gZGVtb3Rpb24gdGFyZ2V0IGNhbGN1bGF0aW9ucyAobmV4dF9kZW1vdGlvbl9ub2RlLCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cykuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbWVtb3J5IHRpZXJpbmcgZGVtb3Rpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNmJlYzZlZmQyOGQ5ZTIxZGNmNGM5ZTVmODAxODQwOGI3ODI3ODE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMjo0NTo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IGUxNmYxMjUwYjI1YzguLjE4ZDA0MWZmNWM1MmMgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMTEzMCw3ICYjNDM7MTEzMCw4IEBAIGV4dGVybiBpbnQgbm9kZV9yZWNsYWltX21vZGU7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCSAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7Ci1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTsKJiM0MztleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLAomIzQzOwkJCQkgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpOwogI2Vsc2UKICNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMAogCkBAIC0xMTM5LDcgJiM0MzsxMTQwLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogewogCXJldHVybiAwOwogfQotc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssCiYjNDM7CQkJCQkgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcykKIHsKIAlyZXR1cm4gTlVNQV9OT19OT0RFOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LXRpZXJzLmMgYi9tbS9tZW1vcnktdGllcnMuYwppbmRleCA1NDg1MWQ4YTE5NWIwLi4yNWUxMjE4NTFiNTg2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktdGllcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktdGllcnMuYwpAQCAtMzcwLDcgJiM0MzszNzAsNyBAQCBpbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spCiAJICogY2xvc2VzdCBkZW1vdGlvbiB0YXJnZXQuCiAJICovCiAJbm9kZXNfY29tcGxlbWVudChtYXNrLCAqYWxsb3dlZF9tYXNrKTsKLQlyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZShub2RlLCAmYW1wO21hc2spOwomIzQzOwlyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCAmYW1wO21hc2ssICZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzYWJsZV9hbGxfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKQpAQCAtNDUwLDcgJiM0Mzs0NTAsNyBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKQogCQltZW10aWVyID0gbGlzdF9uZXh0X2VudHJ5KG1lbXRpZXIsIGxpc3QpOwogCQl0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7CiAJCS8qCi0JCSAqIGZpbmRfbmV4dF9iZXN0X25vZGUsIHVzZSAmIzM5O3VzZWQmIzM5OyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC4KJiM0MzsJCSAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAmIzM5O3VzZWQmIzM5OyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC4KIAkJICogQWRkIGFsbCBtZW1vcnkgbm9kZXMgZXhjZXB0IHRoZSBzZWxlY3RlZCBtZW1vcnkgdGllcgogCQkgKiBub2RlbGlzdCB0byBza2lwIGxpc3Qgc28gdGhhdCB3ZSBmaW5kIHRoZSBiZXN0IG5vZGUgZnJvbSB0aGUKIAkJICogbWVtdGllciBub2RlbGlzdC4KQEAgLTQ2Myw3ICYjNDM7NDYzLDggQEAgc3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZCkKIAkJICogaW4gdGhlIHByZWZlcnJlZCBtYXNrIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBkdXJpbmcgZGVtb3Rpb24uCiAJCSAqLwogCQlkbyB7Ci0JCQl0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsICZhbXA7dGllcl9ub2Rlcyk7CiYjNDM7CQkJdGFyZ2V0ID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCAmYW1wO3RpZXJfbm9kZXMsCiYjNDM7CQkJCQkJCSZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTsKIAkJCWlmICh0YXJnZXQgPT0gTlVNQV9OT19OT0RFKQogCQkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYzRkYzYxZWM2NjNlZS4uZTFkN2M4YjIyMWQwZCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTc3OSw5ICYjNDM7NTc3OSwxMCBAQCBzdGF0aWMgaW50IG51bWFfem9uZWxpc3Rfb3JkZXJfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTsKIAogLyoqCi0gKiBmaW5kX25leHRfYmVzdF9ub2RlIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUmIzM5O3MgZmFsbGJhY2sgbGlzdAomIzQzOyAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0CiAgKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJiMzOTtyZSBhcHBlbmRpbmcKICAqIEB1c2VkX25vZGVfbWFzazogbm9kZW1hc2tfdCBvZiBhbHJlYWR5IHVzZWQgbm9kZXMKJiM0MzsgKiBAY2FuZGlkYXRlczogbm9kZW1hc2tfdCBvZiBub2RlcyBlbGlnaWJsZSBmb3Igc2VsZWN0aW9uCiAgKgogICogV2UgdXNlIGEgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQKICAqIGFwcGVhciBvbiBhIGdpdmVuIG5vZGUmIzM5O3MgZmFsbGJhY2sgbGlzdC4gIFRoZSBub2RlIHNob3VsZCBub3QgaGF2ZSBhcHBlYXJlZApAQCAtNTc5Myw3ICYjNDM7NTc5NCw4IEBAIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107CiAgKgogICogUmV0dXJuOiBub2RlIGlkIG9mIHRoZSBmb3VuZCBub2RlIG9yICVOVU1BX05PX05PREUgaWYgbm8gbm9kZSBpcyBmb3VuZC4KICAqLwotaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKQomIzQzO2ludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaywKJiM0MzsJCQkgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKQogewogCWludCBuLCB2YWw7CiAJaW50IG1pbl92YWwgPSBJTlRfTUFYOwpAQCAtNTgwMywxMiAmIzQzOzU4MDUsMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKQogCSAqIFVzZSB0aGUgbG9jYWwgbm9kZSBpZiB3ZSBoYXZlbiYjMzk7dCBhbHJlYWR5LCBidXQgZm9yIG1lbW9yeWxlc3MgbG9jYWwKIAkgKiBub2RlLCB3ZSBzaG91bGQgc2tpcCBpdCBhbmQgZmFsbCBiYWNrIHRvIG90aGVyIG5vZGVzLgogCSAqLwotCWlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spICZhbXA7JmFtcDsgbm9kZV9zdGF0ZShub2RlLCBOX01FTU9SWSkpIHsKJiM0MzsJaWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgJmFtcDsmYW1wOyBub2RlX2lzc2V0KG5vZGUsICpjYW5kaWRhdGVzKSkgewogCQlub2RlX3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spOwogCQlyZXR1cm4gbm9kZTsKIAl9CiAKLQlmb3JfZWFjaF9ub2RlX3N0YXRlKG4sIE5fTUVNT1JZKSB7CiYjNDM7CWZvcl9lYWNoX25vZGVfbWFzayhuLCAqY2FuZGlkYXRlcykgewogCiAJCS8qIERvbiYjMzk7dCB3YW50IGEgbm9kZSB0byBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgKi8KIAkJaWYgKG5vZGVfaXNzZXQobiwgKnVzZWRfbm9kZV9tYXNrKSkKQEAgLTU4NDcsMTIgJiM0Mzs1ODQ5LDEyIEBAIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaykKICAqIERNQSB6b25lLCBpZiBhbnktLWJ1dCByaXNrcyBleGhhdXN0aW5nIERNQSB6b25lLgogICovCiBzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ19kYXRhX3QgKnBnZGF0LCBpbnQgKm5vZGVfb3JkZXIsCi0JCXVuc2lnbmVkIG5yX25vZGVzKQomIzQzOwkJdW5zaWduZWQgaW50IG5yX25vZGVzLCBpbnQgemxpZHgpCiB7CiAJc3RydWN0IHpvbmVyZWYgKnpvbmVyZWZzOwogCWludCBpOwogCi0Jem9uZXJlZnMgPSBwZ2RhdC0mZ3Q7bm9kZV96b25lbGlzdHNbWk9ORUxJU1RfRkFMTEJBQ0tdLl96b25lcmVmczsKJiM0MzsJem9uZXJlZnMgPSBwZ2RhdC0mZ3Q7bm9kZV96b25lbGlzdHNbemxpZHhdLl96b25lcmVmczsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ub2RlczsgaSYjNDM7JiM0MzspIHsKIAkJaW50IG5yX3pvbmVzOwpAQCAtNTg4MSwyNSAmIzQzOzU4ODMsMjggQEAgc3RhdGljIHZvaWQgYnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCiAJem9uZXJlZnMtJmd0O3pvbmVfaWR4ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCiYjNDM7LyoKJiM0MzsgKiBCdWlsZCBvbmUgbm9kZS1vcmRlcmVkIGZhbGxiYWNrIGxpc3QgZnJvbSBhIGNhbmRpZGF0ZSBub2RlbWFzay4KJiM0MzsgKiB1cGRhdGVfbG9hZCByb3VuZC1yb2JpbnMgbm9kZV9sb2FkIGFjcm9zcyBlcXVpZGlzdGFudCBub2Rlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBidWlsZF9ub2RlX3pvbmVsaXN0KHBnX2RhdGFfdCAqcGdkYXQsIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMsCiYjNDM7CQkJCWludCB6bGlkeCwgYm9vbCB1cGRhdGVfbG9hZCwKJiM0MzsJCQkJaW50ICpub2RlX29yZGVyLCBpbnQgKm5yKQogewotCXN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdOwotCWludCBub2RlLCBucl9ub2RlcyA9IDA7CiAJbm9kZW1hc2tfdCB1c2VkX21hc2sgPSBOT0RFX01BU0tfTk9ORTsKLQlpbnQgbG9jYWxfbm9kZSwgcHJldl9ub2RlOwotCi0JLyogTlVNQS1hd2FyZSBvcmRlcmluZyBvZiBub2RlcyAqLwotCWxvY2FsX25vZGUgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKLQlwcmV2X25vZGUgPSBsb2NhbF9ub2RlOwomIzQzOwlpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlpbnQgcHJldl9ub2RlID0gbG9jYWxfbm9kZTsKJiM0MzsJaW50IG5vZGUsIG5yX25vZGVzID0gMDsKIAotCW1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpOwotCXdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGUobG9jYWxfbm9kZSwgJmFtcDt1c2VkX21hc2spKSAmZ3Q7PSAwKSB7CiYjNDM7CXdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obG9jYWxfbm9kZSwgJmFtcDt1c2VkX21hc2ssCiYjNDM7CQkJCQkgICAgICBjYW5kaWRhdGVzKSkgJmd0Oz0gMCkgewogCQkvKgogCQkgKiBXZSBkb24mIzM5O3Qgd2FudCB0byBwcmVzc3VyZSBhIHBhcnRpY3VsYXIgbm9kZS4KIAkJICogU28gYWRkaW5nIHBlbmFsdHkgdG8gdGhlIGZpcnN0IG5vZGUgaW4gc2FtZQogCQkgKiBkaXN0YW5jZSBncm91cCB0byBtYWtlIGl0IHJvdW5kLXJvYmluLgogCQkgKi8KLQkJaWYgKG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgbm9kZSkgIT0KJiM0MzsJCWlmICh1cGRhdGVfbG9hZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPQogCQkgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBwcmV2X25vZGUpKQogCQkJbm9kZV9sb2FkW25vZGVdICYjNDM7PSAxOwogCkBAIC01OTA3LDggJiM0Mzs1OTEyLDIyIEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KQogCQlwcmV2X25vZGUgPSBub2RlOwogCX0KIAotCWJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2Rlcyk7CiYjNDM7CWJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2RlcywgemxpZHgpOwomIzQzOwkqbnIgPSBucl9ub2RlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCiYjNDM7ewomIzQzOwlzdGF0aWMgaW50IG5vZGVfb3JkZXJbTUFYX05VTU5PREVTXTsKJiM0MzsJaW50IGxvY2FsX25vZGUgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKJiM0MzsJaW50IG5vZGUsIG5yX25vZGVzID0gMDsKJiM0MzsKJiM0MzsJbWVtc2V0KG5vZGVfb3JkZXIsIDAsIHNpemVvZihub2RlX29yZGVyKSk7CiYjNDM7CiYjNDM7CWJ1aWxkX25vZGVfem9uZWxpc3QocGdkYXQsICZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBaT05FTElTVF9GQUxMQkFDSywKJiM0MzsJCQkgICAgdHJ1ZSwgbm9kZV9vcmRlciwgJmFtcDtucl9ub2Rlcyk7CiAJYnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTsKJiM0MzsKIAlwcl9pbmZvKCYjMzQ7RmFsbGJhY2sgb3JkZXIgZm9yIE5vZGUgJWQ6ICYjMzQ7LCBsb2NhbF9ub2RlKTsKIAlmb3IgKG5vZGUgPSAwOyBub2RlICZsdDsgbnJfbm9kZXM7IG5vZGUmIzQzOyYjNDM7KQogCQlwcl9jb250KCYjMzQ7JWQgJiMzNDssIG5vZGVfb3JkZXJbbm9kZV0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IFRpZXJpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgbW0vaW50ZXJuYWwuaGAsIGBtbS9tZW1vcnktdGllcnMuY2AsIGFuZCBgbW0vcGFnZV9hbGxvYy5jYCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGdvaW5nIHRvIGJlIGNvcmUgdG8gbWVtb3J5IGFsbG9jYXRpb24gYW5kIE5VTUEgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3QgdGhlIGZ1bmRhbWVudGFsIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbm9kZSBzZWxlY3Rpb24gYWxnb3JpdGhtcy4KClNwZWNpZmljYWxseSwgSSBzZWUgYSBzaWduaWZpY2FudCBjaGFuZ2Ugd2l0aCB0aGUgcmVuYW1pbmcvbW9kaWZpY2F0aW9uIG9mIGBmaW5kX25leHRfYmVzdF9ub2RlYCB0byBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYGNhbmRpZGF0ZSBub2RlbWFza2AgcGFyYW1ldGVyIGlzIGEga2V5IGluZGljYXRvci4gVGhpcyBzdWdnZXN0cyBhIG1vcmUgcmVmaW5lZCBvciB0YXJnZXRlZCBhcHByb2FjaCB0byBub2RlIHNlbGVjdGlvbiwgcHJvYmFibHkgd2l0aCB0aGUgZ29hbCB0byB0YWtlIGFkdmFudGFnZSBvZiBOVU1BLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IG1hc2sgaXMgcG9wdWxhdGVkIGFuZCB1c2VkLiBUaGUgY2hhbmdlcyB0byBgbmV4dF9kZW1vdGlvbl9ub2RlYCBhbmQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBpbiBgbW0vbWVtb3J5LXRpZXJzLmNgIGFyZSBhbHNvIHdvcnRoIGltbWVkaWF0ZSBhdHRlbnRpb24g4oCTIGxpa2VseSByZWxhdGVkIHRvIHRpZXJlZCBtZW1vcnkgcHJvbW90aW9uL2RlbW90aW9uIHN0cmF0ZWdpZXMuIFRoZW4gdGhlcmUgaXMgdGhpcyBzZXQgb2YgY2hhbmdlcyBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgd2l0aCB0aGUgYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYCwgYGJ1aWxkX25vZGVfem9uZWxpc3RgLCBhbmQgYGJ1aWxkX3pvbmVsaXN0c2AgZnVuY3Rpb25zIGFsbCBiZWluZyB0b3VjaGVkLiBUaGlzIGhhcyB0aGUgaGFsbG1hcmtzIG9mIGEgcHJvZm91bmQgaW1wYWN0IG9uIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0b3BvbG9neSwgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGFsbG9jYXRpb24gem9uZWxpc3RzIGFyZSBidWlsdCBpbiB0aGlzIG5vZGUgb3JkZXIgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB0aGUgZXhhY3QgY2FsbCBzaXRlcyBhbmQgaG93IHRoZXNlIGNoYW5nZWQgZnVuY3Rpb25zIGFyZSB1dGlsaXplZC4gSXQgd2lsbCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCB0byBzZWUgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX25leHRfYmVzdF9ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTEzMT1leHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL2ludGVybmFsLmgtMTEzMi1cdFx0XHRcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XG5tbS9pbnRlcm5hbC5oOjExMzM6ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL2ludGVybmFsLmgtMTEzNC1cdFx0XHRcdCAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyk7XG4tLVxubW0vaW50ZXJuYWwuaD0xMTM4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS9pbnRlcm5hbC5oLTExNDItfVxubW0vaW50ZXJuYWwuaDoxMTQzOnN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxubW0vaW50ZXJuYWwuaC0xMTQ0LVx0XHRcdFx0XHQgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcbi0tXG5tbS9tZW1vcnktdGllcnMuYz0zMzA9aW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTM3Mi1cdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XG5tbS9tZW1vcnktdGllcnMuYzozNzM6XHRyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcdTAwMjZtYXNrLCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xubW0vbWVtb3J5LXRpZXJzLmMtMzc0LX1cbi0tXG5tbS9tZW1vcnktdGllcnMuYz00MjU9c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbi0tXG5tbS9tZW1vcnktdGllcnMuYy00NTItXHRcdC8qXG5tbS9tZW1vcnktdGllcnMuYzo0NTM6XHRcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAmIzM5O3VzZWQmIzM5OyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC5cbm1tL21lbW9yeS10aWVycy5jLTQ1NC1cdFx0ICogQWRkIGFsbCBtZW1vcnkgbm9kZXMgZXhjZXB0IHRoZSBzZWxlY3RlZCBtZW1vcnkgdGllclxuLS1cbm1tL21lbW9yeS10aWVycy5jLTQ2NS1cdFx0ZG8ge1xubW0vbWVtb3J5LXRpZXJzLmM6NDY2Olx0XHRcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2dGllcl9ub2Rlcyxcbm1tL21lbW9yeS10aWVycy5jLTQ2Ny1cdFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTU3Nzk9c3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTc4MS0vKipcbm1tL3BhZ2VfYWxsb2MuYzo1NzgyOiAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0XG5tbS9wYWdlX2FsbG9jLmMtNTc4My0gKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJiMzOTtyZSBhcHBlbmRpbmdcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTc5Ni0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo1Nzk3OmludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy01Nzk4LVx0XHRcdCAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01ODk4LVxubW0vcGFnZV9hbGxvYy5jOjU4OTk6XHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFx1MDAyNnVzZWRfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy01OTAwLVx0XHRcdFx0XHQgICAgICBjYW5kaWRhdGVzKSkgXHUwMDNlPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQ6CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgVGllciBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBzcGVuZCBzb21lIHRpbWUgZXhwbG9yaW5nIHRoZSByZWxhdGVkIGNvZGUgaW4gYG1tL21lbW9yeS10aWVycy5jYCBhbmQgYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGdvYWwgaGVyZSBpc24mIzM5O3QgdG8gbmVjZXNzYXJpbHkgbWVtb3JpemUgZXZlcnkgZGV0YWlsLCBidXQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSB0aGlzIHNwZWNpZmljIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGFsc28gdG8gdHJhY2UgZG93biB3aGVyZSB0aGUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYXJlIGJlaW5nIHVzZWQsIHRoZSBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgZmlsZXMgd2lsbCBwcm92aWRlIGEgbW9yZSBzb2xpZCBmb3VuZGF0aW9uIHRvIHN0YXJ0IGFzc2Vzc2luZyB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgcGFydGljdWxhciBsaW5lIG9mIGNvZGUuIEl0JiMzOTtsbCBhbHNvIGxpa2VseSByZXZlYWwgc29tZSBvZiB0aGUgYXNzdW1wdGlvbnMgYW5kIGNvbnN0cmFpbnRzIHRoYXQgd2VyZSBjb25zaWRlcmVkIGJ5IHRoZSBkZXZlbG9wZXJzIHdoZW4gdGhleSB3cm90ZSBpdC4gSG9wZWZ1bGx5LCB0aGlzIHByb3ZpZGVzIHRoZSBiYWNrZ3JvdW5kIEkgbmVlZCB0byBmb3JtIGEgcHJvcGVyIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnktdGllcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzNTE6XHRcbiAzNTI6XHRcdC8qXG4gMzUzOlx0XHQgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGFyZ2V0IG5vZGVzLCBqdXN0IHNlbGVjdCBvbmVcbiAzNTQ6XHRcdCAqIHRhcmdldCBub2RlIHJhbmRvbWx5LlxuIDM1NTpcdFx0ICpcbiAzNTY6XHRcdCAqIEluIGFkZGl0aW9uLCB3ZSBjYW4gYWxzbyB1c2Ugcm91bmQtcm9iaW4gdG8gc2VsZWN0XG4gMzU3Olx0XHQgKiB0YXJnZXQgbm9kZSwgYnV0IHdlIHNob3VsZCBpbnRyb2R1Y2UgYW5vdGhlciB2YXJpYWJsZVxuIDM1ODpcdFx0ICogZm9yIG5vZGVfZGVtb3Rpb25bXSB0byByZWNvcmQgbGFzdCBzZWxlY3RlZCB0YXJnZXQgbm9kZSxcbiAzNTk6XHRcdCAqIHRoYXQgbWF5IGNhdXNlIGNhY2hlIHBpbmctcG9uZyBkdWUgdG8gdGhlIGNoYW5naW5nIG9mXG4gMzYwOlx0XHQgKiBsYXN0IHRhcmdldCBub2RlLiBPciBpbnRyb2R1Y2luZyBwZXItY3B1IGRhdGEgdG8gYXZvaWRcbiAzNjE6XHRcdCAqIGNhY2hpbmcgaXNzdWUsIHdoaWNoIHNlZW1zIG1vcmUgY29tcGxpY2F0ZWQuIFNvIHNlbGVjdGluZ1xuIDM2MjpcdFx0ICogdGFyZ2V0IG5vZGUgcmFuZG9tbHkgc2VlbXMgYmV0dGVyIHVudGlsIG5vdy5cbiAzNjM6XHRcdCAqL1xuIDM2NDpcdFx0aWYgKCFub2Rlc19lbXB0eShtYXNrKSlcbiAzNjU6XHRcdFx0cmV0dXJuIG5vZGVfcmFuZG9tKFx1MDAyNm1hc2spO1xuIDM2NjpcdFxuIDM2NzpcdFx0LypcbiAzNjg6XHRcdCAqIFByZWZlcnJlZCBub2RlcyBhcmUgbm90IGluIGFsbG93ZWRfbWFzay4gRmxpcCBiaXRzIGluXG4gMzY5Olx0XHQgKiBhbGxvd2VkX21hc2sgYXMgdXNlZCBub2RlIG1hc2suIFRoZW4sIHVzZSBpdCB0byBnZXQgdGhlXG4gMzcwOlx0XHQgKiBjbG9zZXN0IGRlbW90aW9uIHRhcmdldC5cbiAzNzE6XHRcdCAqL1xuIDM3MjpcdFx0bm9kZXNfY29tcGxlbWVudChtYXNrLCAqYWxsb3dlZF9tYXNrKTtcbiAzNzM6XHRcdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFx1MDAyNm1hc2ssIFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4gMzc0Olx0fVxuIDM3NTpcdFxuIDM3NjpcdHN0YXRpYyB2b2lkIGRpc2FibGVfYWxsX2RlbW90aW9uX3RhcmdldHModm9pZClcbiAzNzc6XHR7XG4gMzc4Olx0XHRzdHJ1Y3QgbWVtb3J5X3RpZXIgKm1lbXRpZXI7XG4gMzc5Olx0XHRpbnQgbm9kZTtcbiAzODA6XHRcbiAzODE6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpIHtcbiAzODI6XHRcdFx0bm9kZV9kZW1vdGlvbltub2RlXS5wcmVmZXJyZWQgPSBOT0RFX01BU0tfTk9ORTtcbiAzODM6XHRcdFx0LypcbiAzODQ6XHRcdFx0ICogV2UgYXJlIGhvbGRpbmcgbWVtb3J5X3RpZXJfbG9jaywgaXQgaXMgc2FmZVxuIDM4NTpcdFx0XHQgKiB0byBhY2Nlc3MgcGdkYS1cdTAwM2VtZW10aWVyLlxuIDM4NjpcdFx0XHQgKi9cbiAzODc6XHRcdFx0bWVtdGllciA9IF9fbm9kZV9nZXRfbWVtb3J5X3RpZXIobm9kZSk7XG4gMzg4Olx0XHRcdGlmIChtZW10aWVyKVxuIDM4OTpcdFx0XHRcdG1lbXRpZXItXHUwMDNlbG93ZXJfdGllcl9tYXNrID0gTk9ERV9NQVNLX05PTkU7XG4gMzkwOlx0XHR9XG4gMzkxOlx0XHQvKlxuIDM5MjpcdFx0ICogRW5zdXJlIHRoYXQgdGhlIFwmIzM0O2Rpc2FibGVcJiMzNDsgaXMgdmlzaWJsZSBhY3Jvc3MgdGhlIHN5c3RlbS5cbiAzOTM6XHRcdCAqIFJlYWRlcnMgd2lsbCBzZWUgZWl0aGVyIGEgY29tYmluYXRpb24gb2YgYmVmb3JlJiM0MztkaXNhYmxlXG4gMzk0Olx0XHQgKiBzdGF0ZSBvciBkaXNhYmxlJiM0MzthZnRlci4gIFRoZXkgd2lsbCBuZXZlciBzZWUgYmVmb3JlIGFuZFxuIDM5NTpcdFx0ICogYWZ0ZXIgc3RhdGUgdG9nZXRoZXIuXG4gMzk2Olx0XHQgKi9cbiAzOTc6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDM5ODpcdH1cbiAzOTk6XHRcbiA0MDA6XHRzdGF0aWMgdm9pZCBkdW1wX2RlbW90aW9uX3RhcmdldHModm9pZClcbiA0MDE6XHR7XG4gNDAyOlx0XHRpbnQgbm9kZTtcbiA0MDM6XHRcbiA0MDQ6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpIHtcbiA0MDU6XHRcdFx0c3RydWN0IG1lbW9yeV90aWVyICptZW10aWVyID0gX19ub2RlX2dldF9tZW1vcnlfdGllcihub2RlKTtcbiA0MDY6XHRcdFx0bm9kZW1hc2tfdCBwcmVmZXJyZWQgPSBub2RlX2RlbW90aW9uW25vZGVdLnByZWZlcnJlZDtcbiA0MDc6XHRcbiA0MDg6XHRcdFx0aWYgKCFtZW10aWVyKVxuIDQwOTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBEZW1vdGlvbiBMb2dpYyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgZGVtb3Rpb24gcHJvY2VzcyBhZ2Fpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGVzZSBub2RlcyBhcmUgZ2V0dGluZyBkZW1vdGVkIGFuZCB3aHkuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGwgc2l0ZXMgb2YgYG5leHRfZGVtb3Rpb25fbm9kZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiAqaG93KiB0aGUgc3lzdGVtIGlzIHNlbGVjdGluZyBub2RlcyBmb3IgZGVtb3Rpb24uIFRoZW4sIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AuIFVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYG5leHRfZGVtb3Rpb25fbm9kZWAgd2lsbCBiZSBjcnVjaWFsLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIG1ha2VzIG5vZGVzIGEgdGFyZ2V0IGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoZXJlIHRoYXQgZGVjaXNpb24gcHJvY2VzcyBoYXBwZW5zLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGUgem9uZWxpc3QgaXMgYnVpbHQsIHRvIGJlIHN1cmUgdGhlIGRlbW90aW9uIHRhcmdldHMgYXJlIGNvcnJlY3QuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSB0YXJnZXRzIGFyZSBjb3JyZWN0LCBhbmQgcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtLCBhbmQgdGhhdCBhbGwgbm9kZXMgd2hpY2ggc2hvdWxkIGJlIGluIHRoZSB6b25lcywgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25leHRfZGVtb3Rpb25fbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTU0PXZvaWQgbXRfcHV0X21lbW9yeV90eXBlcyhzdHJ1Y3QgbGlzdF9oZWFkICptZW1vcnlfdHlwZXMpO1xuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC01NS0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjU2OmludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzayk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTU3LXZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpO1xuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaD01OD1ib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTU5LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjYwOnN0YXRpYyBpbmxpbmUgaW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC02MS17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaD05OT1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbm9kZV9tZW1vcnlfdHlwZShpbnQgbm9kZSwgc3RydWN0IG1lbW9yeV9kZXZfdHlwZSAqbWVtdHlwZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTEwMy1cbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg6MTA0OnN0YXRpYyBpbmxpbmUgaW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC0xMDUte1xuLS1cbm1tL21lbW9yeS10aWVycy5jPTMwMj12b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTMyMC0vKipcbm1tL21lbW9yeS10aWVycy5jOjMyMTogKiBuZXh0X2RlbW90aW9uX25vZGUoKSAtIEdldCB0aGUgbmV4dCBub2RlIGluIHRoZSBkZW1vdGlvbiBwYXRoXG5tbS9tZW1vcnktdGllcnMuYy0zMjItICogQG5vZGU6IFRoZSBzdGFydGluZyBub2RlIHRvIGxvb2t1cCB0aGUgbmV4dCBub2RlXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtMzI5LSAqL1xubW0vbWVtb3J5LXRpZXJzLmM6MzMwOmludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcbm1tL21lbW9yeS10aWVycy5jLTMzMS17XG4tLVxubW0vdm1zY2FuLmM9MTAxNz1zdGF0aWMgdW5zaWduZWQgaW50IGRlbW90ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRlbW90ZV9mb2xpb3MsXG4tLVxubW0vdm1zY2FuLmMtMTA0NC1cbm1tL3Ztc2Nhbi5jOjEwNDU6XHR0YXJnZXRfbmlkID0gbmV4dF9kZW1vdGlvbl9ub2RlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIFx1MDAyNmFsbG93ZWRfbWFzayk7XG5tbS92bXNjYW4uYy0xMDQ2LVx0aWYgKHRhcmdldF9uaWQgPT0gTlVNQV9OT19OT0RFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBab25lbGlzdCBDb25zdHJ1Y3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBhcm91bmQgem9uZWxpc3RzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBidWlsZF9hbGxfem9uZWxpc3RzYCBzcGVjaWZpY2FsbHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGggaGVyZS4gV2hvJiMzOTtzIGludm9raW5nIHRoaXMgZnVuY3Rpb24/IEtub3dpbmcgdGhlIGNhbGxlcnMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMgYW5kIHRoZSBvdmVyYWxsIGZsb3cgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHN5c3RlbS4KCkkmIzM5O2xsIGFsc28ga2VlcCBhIGNsb3NlIGV5ZSBvbiBgYnVpbGRfem9uZWxpc3RzYCBhbmQgYGJ1aWxkX25vZGVfem9uZWxpc3RgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgYnVpbGRfYWxsX3pvbmVsaXN0c2AgZGVsZWdhdGVzIHNvbWUgb2YgaXRzIHdvcmsgdG8gdGhvc2UgZnVuY3Rpb25zIG9yIHBlcmhhcHMgY2FsbHMgdGhlbSBkaXJlY3RseS4gVW5kZXJzdGFuZGluZyB0aGUgZGl2aXNpb24gb2YgcmVzcG9uc2liaWxpdHkgYmV0d2VlbiB0aGVzZSB0aHJlZSBpcyBrZXkgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBjYWxscyBhcmUgcmVjdXJzaXZlLCBhcyBpdCBjb3VsZCBjaGFuZ2UgdGhlIHdheSB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIG5vdGUgaG93IHRoZXkgYXJlIHVzZWQgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBOVU1BIG5vZGUgaGFuZGxpbmcsIGFuZCBob3cgdGhlc2Ugem9uZWxpc3RzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBtZSBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGJ1aWxkcyB0aGVzZSB6b25lbGlzdHMsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgaW5mb3JtZWQgZGVjaXNpb25zIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX3pvbmVsaXN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NTc5Nz1pbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU4NTAtICovXG5tbS9wYWdlX2FsbG9jLmM6NTg1MTpzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ19kYXRhX3QgKnBnZGF0LCBpbnQgKm5vZGVfb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNTg1Mi1cdFx0dW5zaWduZWQgaW50IG5yX25vZGVzLCBpbnQgemxpZHgpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01OTE0LVxubW0vcGFnZV9hbGxvYy5jOjU5MTU6XHRidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ2RhdCwgbm9kZV9vcmRlciwgbnJfbm9kZXMsIHpsaWR4KTtcbm1tL3BhZ2VfYWxsb2MuYy01OTE2LVx0Km5yID0gbnJfbm9kZXM7XG4tLVxubW0vcGFnZV9hbGxvYy5jLTU5MTgtXG5tbS9wYWdlX2FsbG9jLmM6NTkxOTpzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbm1tL3BhZ2VfYWxsb2MuYy01OTIwLXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTk1Nj1zdGF0aWMgdm9pZCBzZXR1cF9taW5fc2xhYl9yYXRpbyh2b2lkKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTk1OC1cbm1tL3BhZ2VfYWxsb2MuYzo1OTU5OnN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxubW0vcGFnZV9hbGxvYy5jLTU5NjAte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01OTk2PXN0YXRpYyB2b2lkIF9fYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy02MDI0LVx0aWYgKHNlbGYgXHUwMDI2XHUwMDI2ICFub2RlX29ubGluZShzZWxmLVx1MDAzZW5vZGVfaWQpKSB7XG5tbS9wYWdlX2FsbG9jLmM6NjAyNTpcdFx0YnVpbGRfem9uZWxpc3RzKHNlbGYpO1xubW0vcGFnZV9hbGxvYy5jLTYwMjYtXHR9IGVsc2Uge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy02MDMzLVxubW0vcGFnZV9hbGxvYy5jOjYwMzQ6XHRcdFx0YnVpbGRfem9uZWxpc3RzKHBnZGF0KTtcbm1tL3BhZ2VfYWxsb2MuYy02MDM1LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugem9uZWxpc3RzIGFyZSBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgdXRpbGl6ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYF9fYnVpbGRfYWxsX3pvbmVsaXN0c2AgYW5kIGBidWlsZF9hbGxfem9uZWxpc3RzYCBzcGVjaWZpY2FsbHkuIEkgd2FudCB0byBzZWUgKndoZXJlKiB0aGV5JiMzOTtyZSBiZWluZyBpbnZva2VkLCBiZWNhdXNlIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZWlyIHB1cnBvc2UuIEFyZSB0aGV5IHRyaWdnZXJlZCBieSBtZW1vcnkgaG90cGx1ZyBldmVudHM/IElzIHRoZSBOVU1BIHpvbmVsaXN0IHN5c2N0bCBpbnZvbHZlZCBpbiBzb21lIHdheT8gT3IgYXJlIHRoZXJlIG90aGVyIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gY29uc2lkZXI/IEtub3dpbmcgdGhlIGNhbGxlciBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzIGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX2FsbF96b25lbGlzdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xMTQwPWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjE1LVx0aWYgKG5lZWRfem9uZWxpc3RzX3JlYnVpbGQpXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyMTY6XHRcdGJ1aWxkX2FsbF96b25lbGlzdHMoTlVMTCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMTctXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMjU2PXN0YXRpYyBwZ19kYXRhX3QgKmhvdGFkZF9pbml0X3BnZGF0KGludCBuaWQpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjc1LVx0ICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyNzY6XHRidWlsZF9hbGxfem9uZWxpc3RzKHBnZGF0KTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTI3Ny1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5NTU9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTM5LVx0XHR6b25lX3BjcF9yZXNldCh6b25lKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjE0MDpcdFx0YnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE0MS1cdH1cbi0tXG5tbS9tbV9pbml0LmM9MjY5OD12b2lkIF9faW5pdCBtbV9jb3JlX2luaXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMjcwNC1cdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFx1MDAzZSAyKTtcbm1tL21tX2luaXQuYzoyNzA1Olx0YnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcbm1tL21tX2luaXQuYy0yNzA2LVx0cGFnZV9hbGxvY19pbml0X2NwdWhwKCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTU5OTQ9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJfY3B1X3pvbmVzdGF0LCBib290X3pvbmVzdGF0cyk7XG5tbS9wYWdlX2FsbG9jLmMtNTk5NS1cbm1tL3BhZ2VfYWxsb2MuYzo1OTk2OnN0YXRpYyB2b2lkIF9fYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKVxubW0vcGFnZV9hbGxvYy5jLTU5OTcte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz02MDU1PXN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdFxubW0vcGFnZV9hbGxvYy5jOjYwNTY6YnVpbGRfYWxsX3pvbmVsaXN0c19pbml0KHZvaWQpXG5tbS9wYWdlX2FsbG9jLmMtNjA1Ny17XG4tLVxubW0vcGFnZV9hbGxvYy5jLTYwNTktXG5tbS9wYWdlX2FsbG9jLmM6NjA2MDpcdF9fYnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcbm1tL3BhZ2VfYWxsb2MuYy02MDYxLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy02MDg0LSAqXG5tbS9wYWdlX2FsbG9jLmM6NjA4NTogKiBfX3JlZiBkdWUgdG8gY2FsbCBvZiBfX2luaXQgYW5ub3RhdGVkIGhlbHBlciBidWlsZF9hbGxfem9uZWxpc3RzX2luaXRcbm1tL3BhZ2VfYWxsb2MuYy02MDg2LSAqIFtwcm90ZWN0ZWQgYnkgU1lTVEVNX0JPT1RJTkddLlxubW0vcGFnZV9hbGxvYy5jLTYwODctICovXG5tbS9wYWdlX2FsbG9jLmM6NjA4ODp2b2lkIF9fcmVmIGJ1aWxkX2FsbF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbm1tL3BhZ2VfYWxsb2MuYy02MDg5LXtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjA5Mi1cdGlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpIHtcbm1tL3BhZ2VfYWxsb2MuYzo2MDkzOlx0XHRidWlsZF9hbGxfem9uZWxpc3RzX2luaXQoKTtcbm1tL3BhZ2VfYWxsb2MuYy02MDk0LVx0fSBlbHNlIHtcbm1tL3BhZ2VfYWxsb2MuYzo2MDk1Olx0XHRfX2J1aWxkX2FsbF96b25lbGlzdHMocGdkYXQpO1xubW0vcGFnZV9hbGxvYy5jLTYwOTYtXHRcdC8qIGNwdXNldCByZWZyZXNoIHJvdXRpbmUgc2hvdWxkIGJlIGhlcmUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYGJ1aWxkX2FsbF96b25lbGlzdHNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGJ1aWxkX2FsbF96b25lbGlzdHNgIGlzIHVzZWQuIFJpZ2h0LCBpdCYjMzk7cyBub3QganVzdCBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uIEJlc2lkZXMgdGhlIG9idmlvdXMgc2NlbmFyaW9zLCBpdCYjMzk7cyBhbHNvIGNydWNpYWwgZm9yIG1hbmFnaW5nIG9ubGluZSBhbmQgb2ZmbGluZSBwYWdlcyDigJMgdGhhdCBpbmNsdWRlcyBtZW1vcnkgaG90cGx1ZyB0aHJvdWdoIHN5c2ZzIGFuZCBwcm9iaW5nLCBhbmQgaXQmIzM5O3MgaW50ZXJ0d2luZWQgd2l0aCBtZW1vcnkgdGllcnMgYW5kIE5VTUEgZGVtb3Rpb24gc3RyYXRlZ2llcy4gVGhhdCYjMzk7cyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiByZXNwb25zaWJpbGl0aWVzLiBHaXZlbiB0aGUgY29ubmVjdGlvbiB0byBtZW1vcnkgdGllcnMsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaW4gYG1tL21lbW9yeS10aWVycy5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS10aWVycy5jPTQwMD1zdGF0aWMgdm9pZCBkdW1wX2RlbW90aW9uX3RhcmdldHModm9pZClcbi0tXG5tbS9tZW1vcnktdGllcnMuYy00MjQtICovXG5tbS9tZW1vcnktdGllcnMuYzo0MjU6c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbm1tL21lbW9yeS10aWVycy5jLTQyNi17XG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNTIxLSNlbHNlXG5tbS9tZW1vcnktdGllcnMuYzo1MjI6c3RhdGljIGlubGluZSB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpIHt9XG5tbS9tZW1vcnktdGllcnMuYy01MjMtI2VuZGlmIC8qIENPTkZJR19OVU1BX01JR1JBVElPTiAqL1xuLS1cbm1tL21lbW9yeS10aWVycy5jPTcwOD1zdGF0aWMgaW50IF9faW5pdCBtZW1vcnlfdGllcl9sYXRlX2luaXQodm9pZClcbi0tXG5tbS9tZW1vcnktdGllcnMuYy03MzEtXG5tbS9tZW1vcnktdGllcnMuYzo3MzI6XHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xubW0vbWVtb3J5LXRpZXJzLmMtNzMzLVx0cHV0X29ubGluZV9tZW1zKCk7XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9ODgyPXN0YXRpYyBpbnQgX19tZW1pbml0IG1lbXRpZXJfaG90cGx1Z19jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtODkxLVx0XHRpZiAoY2xlYXJfbm9kZV9tZW1vcnlfdGllcihubi1cdTAwM2VuaWQpKVxubW0vbWVtb3J5LXRpZXJzLmM6ODkyOlx0XHRcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XG5tbS9tZW1vcnktdGllcnMuYy04OTMtXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZW1vcnlfdGllcl9sb2NrKTtcbi0tXG5tbS9tZW1vcnktdGllcnMuYy04OTgtXHRcdGlmICghSVNfRVJSKG1lbXRpZXIpKVxubW0vbWVtb3J5LXRpZXJzLmM6ODk5Olx0XHRcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XG5tbS9tZW1vcnktdGllcnMuYy05MDAtXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZW1vcnlfdGllcl9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhhdCBgbmV4dF9kZW1vdGlvbl9ub2RlYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgYnkgYGRlbW90ZV9mb2xpb19saXN0YCB3aGljaCBpcyBpdHNlbGYgdHJpZ2dlcmVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbSBvciBkZW1vdGlvbiBjeWNsZXMuIFRoYXQgbWVhbnMgdGhlIHJlbGV2YW50IGNvZGUgcGF0aCBpcyBleGVyY2lzZWQgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbiwgYnkga3N3YXBkLCBvciB3aGVuIHRoZSBzeXN0ZW0gZXhwbGljaXRseSB0cmlnZ2VycyBhIGRlbW90aW9uIHRocm91Z2ggc3lzZnMuIFdlJiMzOTt2ZSBhbHNvIGdvdCBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgYmVpbmcgY2FsbGVkIGJ5IGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLCBhbmQgYGJ1aWxkX25vZGVfem9uZWxpc3RgLCBhbmQgdGhhdCBgYnVpbGRfbm9kZV96b25lbGlzdGAgaXMgY2FsbGVkIHdoZW4gem9uZWxpc3RzIGFyZSBjb25zdHJ1Y3RlZC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgcHJvbXB0IGNsZWFybHkgbGF5cyBvdXQgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBJdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIGlmIHRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBjb3JlIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtZW50aW9uaW5nIGBtbS9gLCBzeW5jaHJvbml6YXRpb24sIEJQRiwgYW5kIG90aGVycy4gRnVydGhlcm1vcmUsIGl0IGluY2x1ZGVzIHJlZmFjdG9yaW5nIGFuZCBjb2RlIGNsZWFudXAgaWYgaXQgdG91Y2hlcyBkYXRhc3RydWN0dXJlcywgaGVscGVycyBvciBhbGdvcml0aG1zLgoKVGhpcyBwYXRjaCBpcyB1bmRlbmlhYmx5IHRvdWNoaW5nIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vYCksIGRpcmVjdGx5IGltcGFjdGluZyBOVU1BIGZhbGxiYWNrIG5vZGUgc2VsZWN0aW9uIChgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmApLCB6b25lbGlzdCBidWlsZGluZyAoYGJ1aWxkX25vZGVfem9uZWxpc3RgKSwgYW5kIHRoZSB2ZXJ5IGhlYXJ0IG9mIG1lbW9yeSB0aWVyIGRlbW90aW9uIHRhcmdldCBjYWxjdWxhdGlvbiAoYG5leHRfZGVtb3Rpb25fbm9kZWAsIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2ApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNvcmUgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtZW1vcnkgYW5kIHRoZSBkZWNpc2lvbnMgaXQgbWFrZXMgZHVyaW5nIHJlY2xhaW0gYW5kIGRlbW90aW9uLiBJdCYjMzk7cyBhIGNsZWFyIGZpdCBmb3IgdGhlIGNyaXRlcmlhLiBUaGVyZWZvcmUsICoqYFdvcnRoRnV6emluZyA9IHRydWVgKiouCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYC4gVGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYG1tL21lbW9yeS10aWVycy5jYCBhbmQgdHJhY2UgZGVwZW5kZW5jaWVzIGZvciBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSB0aGlzIGNvZGUgYW5kIHRoZSBsZWFzdCB1YmlxdWl0b3VzIHN5bWJvbHMgdGhhdCBhcmUgZXhlcmNpc2VkIGR1cmluZyB0aGlzIGNvZGUgcGF0aC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBmb2N1c2VkIGFwcHJvYWNoIHRvIGZ1enppbmcgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9uZXh0X2Jlc3Rfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTExMzE9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS9pbnRlcm5hbC5oLTExMzItXHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xubW0vaW50ZXJuYWwuaDoxMTMzOmV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG5tbS9pbnRlcm5hbC5oLTExMzQtXHRcdFx0XHQgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpO1xuLS1cbm1tL2ludGVybmFsLmg9MTEzOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vaW50ZXJuYWwuaC0xMTQyLX1cbm1tL2ludGVybmFsLmg6MTE0MzpzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL2ludGVybmFsLmgtMTE0NC1cdFx0XHRcdFx0IGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9MzMwPWludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcbi0tXG5tbS9tZW1vcnktdGllcnMuYy0zNzItXHRub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spO1xubW0vbWVtb3J5LXRpZXJzLmM6MzczOlx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2bWFzaywgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbm1tL21lbW9yeS10aWVycy5jLTM3NC19XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9NDI1PXN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNDUyLVx0XHQvKlxubW0vbWVtb3J5LXRpZXJzLmM6NDUzOlx0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlX2luLCB1c2UgJiMzOTt1c2VkJiMzOTsgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG5tbS9tZW1vcnktdGllcnMuYy00NTQtXHRcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcbi0tXG5tbS9tZW1vcnktdGllcnMuYy00NjUtXHRcdGRvIHtcbm1tL21lbW9yeS10aWVycy5jOjQ2NjpcdFx0XHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFx1MDAyNnRpZXJfbm9kZXMsXG5tbS9tZW1vcnktdGllcnMuYy00NjctXHRcdFx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Nzc5PXN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XG4tLVxubW0vcGFnZV9hbGxvYy5jLTU3ODEtLyoqXG5tbS9wYWdlX2FsbG9jLmM6NTc4MjogKiBmaW5kX25leHRfYmVzdF9ub2RlX2luIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUmIzM5O3MgZmFsbGJhY2sgbGlzdFxubW0vcGFnZV9hbGxvYy5jLTU3ODMtICogQG5vZGU6IG5vZGUgd2hvc2UgZmFsbGJhY2sgbGlzdCB3ZSYjMzk7cmUgYXBwZW5kaW5nXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU3OTYtICovXG5tbS9wYWdlX2FsbG9jLmM6NTc5NzppbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNTc5OC1cdFx0XHQgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01ODkwPXN0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTg5OC1cbm1tL3BhZ2VfYWxsb2MuYzo1ODk5Olx0d2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihsb2NhbF9ub2RlLCBcdTAwMjZ1c2VkX21hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNTkwMC1cdFx0XHRcdFx0ICAgICAgY2FuZGlkYXRlcykpIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29tcGlsZXIgRGlyZWN0aXZlIENvbmZsaWN0cyoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBtbS9pbnRlcm5hbC5oYCBhcm91bmQgbGluZSAxMTMwLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYW4gaXNzdWUgd2l0aCBzb21lIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBzcGVjaWZpY2FsbHkgYCNpZmRlZmAgZ3VhcmRzLCB0aGF0IGFyZSBjcmVhdGluZyBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluIHRoYXQgYXJlYSBhbmQgaWYgYW55IG9mIHRob3NlIGNvbmRpdGlvbnMgYXJlIGNhdXNpbmcgdGhpcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyb3VuZCBsaW5lIDExMzAuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJIHN1c3BlY3QgYW4gaXNzdWUgd2l0aCBkaWZmZXJpbmcgY29tcGlsYXRpb24gc3RhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHQjZWxzZSAvKiAhQ09ORklHX01NVSAqL1xuMTEyMTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB1bm1hcF9tYXBwaW5nX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxuMTEyMjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19uZXdfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XG4xMTIzOlx0c3RhdGljIGlubGluZSBib29sIG5lZWRfbWxvY2tfZHJhaW4oaW50IGNwdSkgeyByZXR1cm4gZmFsc2U7IH1cbjExMjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfZHJhaW5fbG9jYWwodm9pZCkgeyB9XG4xMTI1Olx0c3RhdGljIGlubGluZSB2b2lkIG1sb2NrX2RyYWluX3JlbW90ZShpbnQgY3B1KSB7IH1cbjExMjY6XHQjZW5kaWYgLyogIUNPTkZJR19NTVUgKi9cbjExMjc6XHRcbjExMjg6XHQjaWZkZWYgQ09ORklHX05VTUFcbjExMjk6XHRleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xuMTEzMDpcdFxuMTEzMTpcdGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuMTEzMjpcdFx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbjExMzM6XHRleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxuMTEzNDpcdFx0XHRcdFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcbjExMzU6XHQjZWxzZVxuMTEzNjpcdCNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxuMTEzNzpcdFxuMTEzODpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbjExMzk6XHRcdFx0XHRcdFx0IGdmcF90IG1hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbjExNDA6XHR7XG4xMTQxOlx0XHRyZXR1cm4gMDtcbjExNDI6XHR9XG4xMTQzOlx0c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4xMTQ0Olx0XHRcdFx0XHRcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuMTE0NTpcdHtcbjExNDY6XHRcdHJldHVybiBOVU1BX05PX05PREU7XG4xMTQ3Olx0fVxuMTE0ODpcdCNlbmRpZlxuMTE0OTpcdFxuMTE1MDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxuMTE1MTpcdHtcbjExNTI6XHRcdC8qIElzIGFueSBub2RlX3JlY2xhaW1fbW9kZSBiaXQgc2V0PyAqL1xuMTE1MzpcdFx0cmV0dXJuIG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiAoUkVDTEFJTV9aT05FfFJFQ0xBSU1fV1JJVEV8UkVDTEFJTV9VTk1BUCk7XG4xMTU0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIE5VTUEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgaXMgZGVmaW5pdGVseSBiZWhpbmQgdGhlIGBDT05GSUdfTlVNQWAgZ2F0ZS4gVGltZSB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBydWxlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBMZXQmIzM5O3MgZGlnIGludG8gYG1tL21lbW9yeS10aWVycy5jYCBhbmQgc2VlIHdoYXQgdGhlIGBtbS9NYWtlZmlsZWAgaGFzIHRvIHNheSBhYm91dCBpdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZ2V0cyBidWlsdCBhbmQgbGlua2VkIGluIHJlbGF0aW9uIHRvIE5VTUEgc3VwcG9ydC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21waWxhdGlvbiBkZXBlbmRlbmN5IHRob3JvdWdobHkgdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5LXRpZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTk5PW9iai0kKENPTkZJR19NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlLm9cbm1tL01ha2VmaWxlOjEwMDpvYmotJChDT05GSUdfTlVNQSkgJiM0Mzs9IG1lbW9yeS10aWVycy5vXG5tbS9NYWtlZmlsZS0xMDEtb2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FwLmhcdTAwM2Vcbm1tL2RhbW9uL3BhZGRyLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LXRpZXJzLmhcdTAwM2Vcbm1tL2RhbW9uL3BhZGRyLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2Vcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3N5c2N0bC5oXHUwMDNlXG5tbS9odWdlX21lbW9yeS5jOjM5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS10aWVycy5oXHUwMDNlXG5tbS9odWdlX21lbW9yeS5jLTQwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnkuaFx1MDAzZVxubW0vbWVtb3J5LXRpZXJzLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFx1MDAzZVxubW0vbWVtb3J5LXRpZXJzLmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9NzQ3PWludCBtdF9zZXRfZGVmYXVsdF9kcmFtX3BlcmYoaW50IG5pZCwgc3RydWN0IGFjY2Vzc19jb29yZGluYXRlICpwZXJmLFxuLS1cbm1tL21lbW9yeS10aWVycy5jLTc3OS1cdFx0cHJfaW5mbyhcbm1tL21lbW9yeS10aWVycy5jOjc4MDpcJiMzNDttZW1vcnktdGllcnM6IHRoZSBwZXJmb3JtYW5jZSBvZiBEUkFNIG5vZGUgJWQgbWlzbWF0Y2hlcyB0aGF0IG9mIHRoZSByZWZlcmVuY2VcXG5cJiMzNDtcbm1tL21lbW9yeS10aWVycy5jLTc4MS1cJiMzNDtEUkFNIG5vZGUgJWQuXFxuXCYjMzQ7LCBuaWQsIGRlZmF1bHRfZHJhbV9wZXJmX3JlZl9uaWQpO1xuLS1cbm1tL21lbW9yeS5jLTY4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2Vcbm1tL21lbW9yeS5jOjY5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS10aWVycy5oXHUwMDNlXG5tbS9tZW1vcnkuYy03MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2Vcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMDItI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvY19mcy5oXHUwMDNlXG5tbS9tZW1wb2xpY3kuYzoxMDM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LXRpZXJzLmhcdTAwM2Vcbm1tL21lbXBvbGljeS5jLTEwNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2Vcbi0tXG5tbS9taWdyYXRlLmMtNDMtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcdTAwM2Vcbm1tL21pZ3JhdGUuYzo0NDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFx1MDAzZVxubW0vbWlncmF0ZS5jLTQ1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2Vcbi0tXG5tbS92bXNjYW4uYy00NC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxubW0vdm1zY2FuLmM6NDU6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LXRpZXJzLmhcdTAwM2Vcbm1tL3Ztc2Nhbi5jLTQ2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L29vbS5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE5VTUEgTWlncmF0aW9uIGluIE1lbW9yeSBUaWVycyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgdGllcmluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIE5VTUEgbWlncmF0aW9uIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gYG1tL21lbW9yeS10aWVycy5jYC4gTGV0JiMzOTtzIGZvY3VzIG9uIHRoYXQgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCBhcm91bmQgdGhlIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgYW5kIGBuZXh0X2RlbW90aW9uX25vZGVgIGZ1bmN0aW9ucy4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3BvdHMgd2hlcmUgTlVNQSBtaWdyYXRpb24gcG9saWNpZXMgd291bGQgaW50ZXJhY3Qgd2l0aCB0aGUgdGllcmluZyBsb2dpYy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGVjaWRlcyB3aGVyZSB0byBtb3ZlIG1lbW9yeSB3aXRoaW4gdGhlIE5VTUEgbm9kZXMsIG9yIGluZGVlZCwgaWYgdGhhdCYjMzk7cyBldmVuIGNvbnNpZGVyZWQgZGlyZWN0bHkgZHVyaW5nIGRlbW90aW9uLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBzb21lIGxvZ2ljLCBldmVuIGlmIGl0JiMzOTtzIGluZGlyZWN0LCByZWxhdGVkIHRvIGBDT05GSUdfTlVNQV9NSUdSQVRJT05gLCBzbyBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHRoYXQgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhhdCBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBhcmUgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnktdGllcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0LyoqXG4gMzIxOlx0ICogbmV4dF9kZW1vdGlvbl9ub2RlKCkgLSBHZXQgdGhlIG5leHQgbm9kZSBpbiB0aGUgZGVtb3Rpb24gcGF0aFxuIDMyMjpcdCAqIEBub2RlOiBUaGUgc3RhcnRpbmcgbm9kZSB0byBsb29rdXAgdGhlIG5leHQgbm9kZVxuIDMyMzpcdCAqIEBhbGxvd2VkX21hc2s6IFRoZSBwb2ludGVyIHRvIGFsbG93ZWQgbm9kZSBtYXNrXG4gMzI0Olx0ICpcbiAzMjU6XHQgKiBSZXR1cm46IG5vZGUgaWQgZm9yIG5leHQgbWVtb3J5IG5vZGUgaW4gdGhlIGRlbW90aW9uIHBhdGggaGllcmFyY2h5XG4gMzI2Olx0ICogZnJvbSBAbm9kZTsgTlVNQV9OT19OT0RFIGlmIEBub2RlIGlzIHRlcm1pbmFsLiAgVGhpcyBkb2VzIG5vdCBrZWVwXG4gMzI3Olx0ICogQG5vZGUgb25saW5lIG9yIGd1YXJhbnRlZSB0aGF0IGl0ICpjb250aW51ZXMqIHRvIGJlIHRoZSBuZXh0IGRlbW90aW9uXG4gMzI4Olx0ICogdGFyZ2V0LlxuIDMyOTpcdCAqL1xuIDMzMDpcdGludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcbiAzMzE6XHR7XG4gMzMyOlx0XHRzdHJ1Y3QgZGVtb3Rpb25fbm9kZXMgKm5kO1xuIDMzMzpcdFx0bm9kZW1hc2tfdCBtYXNrO1xuIDMzNDpcdFxuIDMzNTpcdFx0aWYgKCFub2RlX2RlbW90aW9uKVxuIDMzNjpcdFx0XHRyZXR1cm4gTlVNQV9OT19OT0RFO1xuIDMzNzpcdFxuIDMzODpcdFx0bmQgPSBcdTAwMjZub2RlX2RlbW90aW9uW25vZGVdO1xuIDMzOTpcdFxuIDM0MDpcdFx0LypcbiAzNDE6XHRcdCAqIG5vZGVfZGVtb3Rpb25bXSBpcyB1cGRhdGVkIHdpdGhvdXQgZXhjbHVkaW5nIHRoaXNcbiAzNDI6XHRcdCAqIGZ1bmN0aW9uIGZyb20gcnVubmluZy5cbiAzNDM6XHRcdCAqXG4gMzQ0Olx0XHQgKiBNYWtlIHN1cmUgdG8gdXNlIFJDVSBvdmVyIGVudGlyZSBjb2RlIGJsb2NrcyBpZlxuIDM0NTpcdFx0ICogbm9kZV9kZW1vdGlvbltdIHJlYWRzIG5lZWQgdG8gYmUgY29uc2lzdGVudC5cbiAzNDY6XHRcdCAqL1xuIDM0NzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDM0ODpcdFx0LyogRmlsdGVyIG91dCBub2RlcyB0aGF0IGFyZSBub3QgaW4gYWxsb3dlZF9tYXNrLiAqL1xuIDM0OTpcdFx0bm9kZXNfYW5kKG1hc2ssIG5kLVx1MDAzZXByZWZlcnJlZCwgKmFsbG93ZWRfbWFzayk7XG4gMzUwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzNTE6XHRcbiAzNTI6XHRcdC8qXG4gMzUzOlx0XHQgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGFyZ2V0IG5vZGVzLCBqdXN0IHNlbGVjdCBvbmVcbiAzNTQ6XHRcdCAqIHRhcmdldCBub2RlIHJhbmRvbWx5LlxuIDM1NTpcdFx0ICpcbiAzNTY6XHRcdCAqIEluIGFkZGl0aW9uLCB3ZSBjYW4gYWxzbyB1c2Ugcm91bmQtcm9iaW4gdG8gc2VsZWN0XG4gMzU3Olx0XHQgKiB0YXJnZXQgbm9kZSwgYnV0IHdlIHNob3VsZCBpbnRyb2R1Y2UgYW5vdGhlciB2YXJpYWJsZVxuIDM1ODpcdFx0ICogZm9yIG5vZGVfZGVtb3Rpb25bXSB0byByZWNvcmQgbGFzdCBzZWxlY3RlZCB0YXJnZXQgbm9kZSxcbiAzNTk6XHRcdCAqIHRoYXQgbWF5IGNhdXNlIGNhY2hlIHBpbmctcG9uZyBkdWUgdG8gdGhlIGNoYW5naW5nIG9mXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5VTUEgTWlncmF0aW9uIGluIGBtbS9tZW1vcnktdGllcnMuY2AqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBgbW0vbWVtb3J5LXRpZXJzLmNgIGFnYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgTlVNQSBtaWdyYXRpb24gd2l0aGluIHRoaXMgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gYCNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05gLiBUaGlzIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgZ29pbmcgdG8gZGljdGF0ZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgYWxsIHRoZSByZWxldmFudCBtaWdyYXRpb24gbG9naWMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoZSBOVU1BIG1pZ3JhdGlvbiBjb2RlIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBtZW1vcnkgdGllcmluZyBmcmFtZXdvcmsuIEFyZSB0aGV5IHdvcmtpbmcgaW4gdGFuZGVtPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGhvb2tzIG9yIGludGVyYWN0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bSBob3BpbmcgdG8gdW5jb3ZlciBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIG9mIGNvdXJzZSwgdW5kZXJzdGFuZCBob3cgdGhlIE5VTUEtYXdhcmUgbWVjaGFuaXNtcyBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgdGllcmluZyBwb2xpY3kuIFRpbWUgdG8gZmluZCB0aGF0IGAjaWZkZWZgIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOVU1BX01JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY2MD1jb25maWcgUEFHRV9SRVBPUlRJTkdcbi0tXG5tbS9LY29uZmlnLTY2Ny1cbm1tL0tjb25maWc6NjY4OmNvbmZpZyBOVU1BX01JR1JBVElPTlxubW0vS2NvbmZpZy02NjktXHRib29sIFwmIzM0O05VTUEgcGFnZSBtaWdyYXRpb25cJiMzNDtcbi0tXG5tbS9tZW1vcnktdGllcnMuYz02NT1ib29sIGZvbGlvX3VzZV9hY2Nlc3NfdGltZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTcxLVxubW0vbWVtb3J5LXRpZXJzLmM6NzI6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxubW0vbWVtb3J5LXRpZXJzLmMtNzMtc3RhdGljIGludCB0b3BfdGllcl9hZGlzdGFuY2U7XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9MTMxPXN0YXRpYyBzdHJ1Y3QgZGVtb3Rpb25fbm9kZXMgKm5vZGVfZGVtb3Rpb24gX19yZWFkX21vc3RseTtcbm1tL21lbW9yeS10aWVycy5jOjEzMjojZW5kaWYgLyogQ09ORklHX05VTUFfTUlHUkFUSU9OICovXG5tbS9tZW1vcnktdGllcnMuYy0xMzMtXG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9MjYwPXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3RpZXIgKl9fbm9kZV9nZXRfbWVtb3J5X3RpZXIoaW50IG5vZGUpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtMjc1LVxubW0vbWVtb3J5LXRpZXJzLmM6Mjc2OiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cbm1tL21lbW9yeS10aWVycy5jLTI3Ny1ib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSlcbi0tXG5tbS9tZW1vcnktdGllcnMuYz01MjI9c3RhdGljIGlubGluZSB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpIHt9XG5tbS9tZW1vcnktdGllcnMuYzo1MjM6I2VuZGlmIC8qIENPTkZJR19OVU1BX01JR1JBVElPTiAqL1xubW0vbWVtb3J5LXRpZXJzLmMtNTI0LVxuLS1cbm1tL21lbW9yeS10aWVycy5jPTkwNz1zdGF0aWMgaW50IF9faW5pdCBtZW1vcnlfdGllcl9pbml0KHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtOTE0LVxubW0vbWVtb3J5LXRpZXJzLmM6OTE1OiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cbm1tL21lbW9yeS10aWVycy5jLTkxNi1cdG5vZGVfZGVtb3Rpb24gPSBremFsbG9jX29ianMoc3RydWN0IGRlbW90aW9uX25vZGVzLCBucl9ub2RlX2lkcyk7XG4tLVxubW0vbWVtb3J5LXRpZXJzLmM9OTQwPWJvb2wgbnVtYV9kZW1vdGlvbl9lbmFibGVkID0gZmFsc2U7XG5tbS9tZW1vcnktdGllcnMuYy05NDEtXG5tbS9tZW1vcnktdGllcnMuYzo5NDI6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxubW0vbWVtb3J5LXRpZXJzLmMtOTQzLSNpZmRlZiBDT05GSUdfU1lTRlNcbi0tXG5tbS9tZW1wb2xpY3kuYz0xMTY5PXN0YXRpYyBsb25nIGRvX2dldF9tZW1wb2xpY3koaW50ICpwb2xpY3ksIG5vZGVtYXNrX3QgKm5tYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jLTEyNjktXG5tbS9tZW1wb2xpY3kuYzoxMjcwOiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cbm1tL21lbXBvbGljeS5jLTEyNzEtc3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxuLS1cbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxuLS1cbm1tL21pZ3JhdGUuYy0yMjM1LVxubW0vbWlncmF0ZS5jOjIyMzY6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxubW0vbWlncmF0ZS5jLTIyMzctc3RhdGljIGludCBzdG9yZV9zdGF0dXMoaW50IF9fdXNlciAqc3RhdHVzLCBpbnQgc3RhcnQsIGludCB2YWx1ZSwgaW50IG5yKVxuLS1cbm1tL21pZ3JhdGUuYz0yNjMzPVNZU0NBTExfREVGSU5FNihtb3ZlX3BhZ2VzLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcbi0tXG5tbS9taWdyYXRlLmMtMjYzOS19XG5tbS9taWdyYXRlLmM6MjY0MDojZW5kaWYgLyogQ09ORklHX05VTUFfTUlHUkFUSU9OICovXG5tbS9taWdyYXRlLmMtMjY0MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3ODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKk5VTUEgTWlncmF0aW9uIERlcGVuZGVuY3kgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTlVNQV9NSUdSQVRJT05gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSAqcmVxdWlyZWQqIGZvciB0aGlzIHRvIGJlIGVuYWJsZWQsIGFuZCB3aGF0IG90aGVyIHNldHRpbmdzIGl0IG1pZ2h0IGluZmx1ZW5jZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYW55IGhpZGRlbiBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBObyBzZW5zZSBpbiByZWx5aW5nIG9uIGd1ZXNzd29yayB3aGVuIHRoZSBkZWZpbml0aXZlIGluZm9ybWF0aW9uIGlzIHJpZ2h0IHRoZXJlLCByZWFkeSB0byBiZSBwYXJzZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMgb3IgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBOVU1BIG1pZ3JhdGlvbiBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2NTpcdFx0ICB0aG9zZSBwYWdlcyB0byBhbm90aGVyIGVudGl0eSwgc3VjaCBhcyBhIGh5cGVydmlzb3IsIHNvIHRoYXQgdGhlXG4gNjY2Olx0XHQgIG1lbW9yeSBjYW4gYmUgZnJlZWQgd2l0aGluIHRoZSBob3N0IGZvciBvdGhlciB1c2VzLlxuIDY2NzpcdFxuIDY2ODpcdGNvbmZpZyBOVU1BX01JR1JBVElPTlxuIDY2OTpcdFx0Ym9vbCBcJiMzNDtOVU1BIHBhZ2UgbWlncmF0aW9uXCYjMzQ7XG4gNjcwOlx0XHRkZWZhdWx0IHlcbiA2NzE6XHRcdGRlcGVuZHMgb24gTlVNQSBcdTAwMjZcdTAwMjYgTU1VXG4gNjcyOlx0XHRzZWxlY3QgTUlHUkFUSU9OXG4gNjczOlx0XHRoZWxwXG4gNjc0Olx0XHQgIFN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBwYWdlcyB0byBvdGhlciBOVU1BIG5vZGVzLCBhdmFpbGFibGUgdG9cbiA2NzU6XHRcdCAgdXNlciBzcGFjZSB0aHJvdWdoIGludGVyZmFjZXMgbGlrZSBtaWdyYXRlX3BhZ2VzKCksIG1vdmVfcGFnZXMoKSxcbiA2NzY6XHRcdCAgYW5kIG1iaW5kKCkuIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFnZVxuIDY3NzpcdFx0ICBkZW1vdGlvbiBmb3IgbWVtb3J5IHRpZXJpbmcuXG4gNjc4Olx0XG4gNjc5Olx0Y29uZmlnIE1JR1JBVElPTlxuIDY4MDpcdFx0Ym9vbFxuIDY4MTpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA2ODI6XHRcbiA2ODM6XHRjb25maWcgREVWSUNFX01JR1JBVElPTlxuIDY4NDpcdFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI3OQoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA4NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbmZsdWVuY2VkIGJ5IHRoZSBgTlVNQWAgYW5kIGBOVU1BX01JR1JBVElPTmAgY29uZmlndXJhdGlvbnMgYW5kIGFyZSBub3QgdWJpcXVpdG91cyBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBmdW5kYW1lbnRhbCB0byB0aGUgc3lzdGVtLgoKSSBzZWUgdGhhdCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIGFyZToKCjEuICBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgZnJvbSBgbW0vcGFnZV9hbGxvYy5jYCwgdXNlZCB0byBmaW5kIHRoZSBiZXN0IE5VTUEgbm9kZS4KMi4gIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLCBhIGhlbHBlciBpbiB6b25lbGlzdCBidWlsZGluZy4KMy4gIGBidWlsZF96b25lbGlzdHNgIC8gYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgIC0gaW52b2x2ZWQgaW4gem9uZWxpc3QgY29uc3RydWN0aW9uLgo0LiAgYG5leHRfZGVtb3Rpb25fbm9kZWAgZnJvbSBgbW0vbWVtb3J5LXRpZXJzLmNgLCB1c2VkIGZvciBmaW5kaW5nIGRlbW90aW9uIHRhcmdldHMuCjUuICBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgIGZyb20gYG1tL21lbW9yeS10aWVycy5jYCwgc2V0cyB1cCBkZW1vdGlvbiB0YXJnZXRzLgoKTm93LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZWlyIHViaXF1aXR5LiBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgaXMgY2FsbGVkIG9ubHkgZHVyaW5nIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbWVtb3J5IHRpZXJpbmc7IGl0JiMzOTtzIG5vdCBhIGNvcmUsIHViaXF1aXRvdXMgZnVuY3Rpb24uIGBuZXh0X2RlbW90aW9uX25vZGVgIGlzIHRyaWdnZXJlZCBkdXJpbmcgZm9saW8gZGVtb3Rpb24vbWVtb3J5IHJlY2xhbWF0aW9uLCBzbyBpdCBhbHNvIGFwcGVhcnMgbm9uLXViaXF1aXRvdXMuIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaXMgY2FsbGVkIGF0IGJvb3QgYW5kIG9uIGhvdHBsdWcgZXZlbnRzLCBsaWtld2lzZSwgbm90IHViaXF1aXRvdXMuIFRoZW4sIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBhbmQgYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYCBhcmUgb25seSBpbnZvbHZlZCBpbiB6b25lbGlzdCBidWlsZGluZywgYW5kIHRoZXkgYXJlIGFsc28gbm90IHViaXF1aXRvdXMuCgpgYnVpbGRfYWxsX3pvbmVsaXN0c2AgaXMgY2FsbGVkIG9uIGJvb3Qgb3IgaG90cGx1ZywgYnV0IHRoZXNlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5LCBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAsIGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLCBgYnVpbGRfbm9kZV96b25lbGlzdGAsIGFuZCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgIGFwcGVhciB0byBpbXBsZW1lbnQgdGhlIGNvcmUsIHJlbGV2YW50IGxvZ2ljLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBzeW1ib2xzOiBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAsIGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLCBgYnVpbGRfbm9kZV96b25lbGlzdGAsIGFuZCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgLiBZZXAsIGFsbCBvZiB0aG9zZSBhcmUgdGhlIGtleSBvbmVzLgoKSSYjMzk7bGwgY29uZmlybSB0aGUgc3RhdGljIHN0YXR1cyBvZiB0aGUgZnVuY3Rpb25zLiBgYnVpbGRfbm9kZV96b25lbGlzdGAgYW5kIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgYXJlLCBpbmRlZWQsIHN0YXRpYy4gSG93ZXZlciwgdGhleSBhcmUgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBOb3csIHJlLWNoZWNraW5nIHRoZSBkZWNsYXJhdGlvbnM6IGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBpcyBhIG5vbi1zdGF0aWMgZXhwb3J0ZWQgc3ltYm9sLCBgbmV4dF9kZW1vdGlvbl9ub2RlYCBpcyBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBpcyBzdGF0aWMsIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBpcyBzdGF0aWMuCgpBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBOVU1BYCBhbmQgYE5VTUFfTUlHUkFUSU9OYC4KCkdpdmVuIHRoZSBhbmFseXNpcywgaGVyZSBpcyB3aGF0IEkgd2lsbCBmZWVkIHRvIGBzZXQtcmVzdWx0c2AuCgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtOVU1BX01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmRfbmV4dF9iZXN0X25vZGVfaW4mIzM0OywKICAgICYjMzQ7bmV4dF9kZW1vdGlvbl9ub2RlJiMzNDssCiAgICAmIzM0O2VzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzJiMzNDssCiAgICAmIzM0O2J1aWxkX25vZGVfem9uZWxpc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYW5kIG1tL21lbW9yeS10aWVycy5jLiBJdCByZWZhY3RvcnMgbm9kZSBmYWxsYmFjayBsaXN0IGdlbmVyYXRpb24gKGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIGJ1aWxkX25vZGVfem9uZWxpc3QpIHRvIGFjY2VwdCBleHBsaWNpdCBjYW5kaWRhdGUgbm9kZW1hc2tzIGFuZCB1cGRhdGVzIG1lbW9yeSB0aWVyaW5nIC8gZGVtb3Rpb24gdGFyZ2V0IGNhbGN1bGF0aW9ucyAobmV4dF9kZW1vdGlvbl9ub2RlLCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cykuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgbWVtb3J5IHRpZXJpbmcgZGVtb3Rpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5kX25leHRfYmVzdF9ub2RlX2luJiMzNDssCiAgICAmIzM0O25leHRfZGVtb3Rpb25fbm9kZSYjMzQ7LAogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7LAogICAgJiMzNDtidWlsZF9ub2RlX3pvbmVsaXN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIGFuZCBtbS9tZW1vcnktdGllcnMuYy4gSXQgcmVmYWN0b3JzIG5vZGUgZmFsbGJhY2sgbGlzdCBnZW5lcmF0aW9uIChmaW5kX25leHRfYmVzdF9ub2RlX2luLCBidWlsZF9ub2RlX3pvbmVsaXN0KSB0byBhY2NlcHQgZXhwbGljaXQgY2FuZGlkYXRlIG5vZGVtYXNrcyBhbmQgdXBkYXRlcyBtZW1vcnkgdGllcmluZyAvIGRlbW90aW9uIHRhcmdldCBjYWxjdWxhdGlvbnMgKG5leHRfZGVtb3Rpb25fbm9kZSwgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIG1lbW9yeSB0aWVyaW5nIGRlbW90aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU2YmVjNmVmZDI4ZDllMjFkY2Y0YzllNWY4MDE4NDA4Yjc4Mjc4MTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIyOjQ1OjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggZTE2ZjEyNTBiMjVjOC4uMThkMDQxZmY1YzUyYyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0xMTMwLDcgJiM0MzsxMTMwLDggQEAgZXh0ZXJuIGludCBub2RlX3JlY2xhaW1fbW9kZTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCiAJCQkJICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTsKLWV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spOwomIzQzO2V4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssCiYjNDM7CQkJCSAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyk7CiAjZWxzZQogI2RlZmluZSBub2RlX3JlY2xhaW1fbW9kZSAwCiAKQEAgLTExMzksNyAmIzQzOzExNDAsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaywKJiM0MzsJCQkJCSBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKQogewogCXJldHVybiBOVU1BX05PX05PREU7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktdGllcnMuYyBiL21tL21lbW9yeS10aWVycy5jCmluZGV4IDU0ODUxZDhhMTk1YjAuLjI1ZTEyMTg1MWI1ODYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS10aWVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS10aWVycy5jCkBAIC0zNzAsNyAmIzQzOzM3MCw3IEBAIGludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaykKIAkgKiBjbG9zZXN0IGRlbW90aW9uIHRhcmdldC4KIAkgKi8KIAlub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spOwotCXJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsICZhbXA7bWFzayk7CiYjNDM7CXJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsICZhbXA7bWFzaywgJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV0pOwogfQogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2FsbF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpCkBAIC00NTAsNyAmIzQzOzQ1MCw3IEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpCiAJCW1lbXRpZXIgPSBsaXN0X25leHRfZW50cnkobWVtdGllciwgbGlzdCk7CiAJCXRpZXJfbm9kZXMgPSBnZXRfbWVtdGllcl9ub2RlbWFzayhtZW10aWVyKTsKIAkJLyoKLQkJICogZmluZF9uZXh0X2Jlc3Rfbm9kZSwgdXNlICYjMzk7dXNlZCYjMzk7IG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0LgomIzQzOwkJICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiwgdXNlICYjMzk7dXNlZCYjMzk7IG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0LgogCQkgKiBBZGQgYWxsIG1lbW9yeSBub2RlcyBleGNlcHQgdGhlIHNlbGVjdGVkIG1lbW9yeSB0aWVyCiAJCSAqIG5vZGVsaXN0IHRvIHNraXAgbGlzdCBzbyB0aGF0IHdlIGZpbmQgdGhlIGJlc3Qgbm9kZSBmcm9tIHRoZQogCQkgKiBtZW10aWVyIG5vZGVsaXN0LgpAQCAtNDYzLDcgJiM0Mzs0NjMsOCBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKQogCQkgKiBpbiB0aGUgcHJlZmVycmVkIG1hc2sgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGR1cmluZyBkZW1vdGlvbi4KIAkJICovCiAJCWRvIHsKLQkJCXRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGUobm9kZSwgJmFtcDt0aWVyX25vZGVzKTsKJiM0MzsJCQl0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsICZhbXA7dGllcl9ub2RlcywKJiM0MzsJCQkJCQkJJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV0pOwogCQkJaWYgKHRhcmdldCA9PSBOVU1BX05PX05PREUpCiAJCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBjNGRjNjFlYzY2M2VlLi5lMWQ3YzhiMjIxZDBkIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01Nzc5LDkgJiM0Mzs1Nzc5LDEwIEBAIHN0YXRpYyBpbnQgbnVtYV96b25lbGlzdF9vcmRlcl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiBzdGF0aWMgaW50IG5vZGVfbG9hZFtNQVhfTlVNTk9ERVNdOwogCiAvKioKLSAqIGZpbmRfbmV4dF9iZXN0X25vZGUgLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0CiYjNDM7ICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJiMzOTtzIGZhbGxiYWNrIGxpc3QKICAqIEBub2RlOiBub2RlIHdob3NlIGZhbGxiYWNrIGxpc3Qgd2UmIzM5O3JlIGFwcGVuZGluZwogICogQHVzZWRfbm9kZV9tYXNrOiBub2RlbWFza190IG9mIGFscmVhZHkgdXNlZCBub2RlcwomIzQzOyAqIEBjYW5kaWRhdGVzOiBub2RlbWFza190IG9mIG5vZGVzIGVsaWdpYmxlIGZvciBzZWxlY3Rpb24KICAqCiAgKiBXZSB1c2UgYSBudW1iZXIgb2YgZmFjdG9ycyB0byBkZXRlcm1pbmUgd2hpY2ggaXMgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZAogICogYXBwZWFyIG9uIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0LiAgVGhlIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFwcGVhcmVkCkBAIC01NzkzLDcgJiM0Mzs1Nzk0LDggQEAgc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTsKICAqCiAgKiBSZXR1cm46IG5vZGUgaWQgb2YgdGhlIGZvdW5kIG5vZGUgb3IgJU5VTUFfTk9fTk9ERSBpZiBubyBub2RlIGlzIGZvdW5kLgogICovCi1pbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spCiYjNDM7aW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLAomIzQzOwkJCSAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpCiB7CiAJaW50IG4sIHZhbDsKIAlpbnQgbWluX3ZhbCA9IElOVF9NQVg7CkBAIC01ODAzLDEyICYjNDM7NTgwNSwxMiBAQCBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spCiAJICogVXNlIHRoZSBsb2NhbCBub2RlIGlmIHdlIGhhdmVuJiMzOTt0IGFscmVhZHksIGJ1dCBmb3IgbWVtb3J5bGVzcyBsb2NhbAogCSAqIG5vZGUsIHdlIHNob3VsZCBza2lwIGl0IGFuZCBmYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXMuCiAJICovCi0JaWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgJmFtcDsmYW1wOyBub2RlX3N0YXRlKG5vZGUsIE5fTUVNT1JZKSkgewomIzQzOwlpZiAoIW5vZGVfaXNzZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobm9kZSwgKmNhbmRpZGF0ZXMpKSB7CiAJCW5vZGVfc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzayk7CiAJCXJldHVybiBub2RlOwogCX0KIAotCWZvcl9lYWNoX25vZGVfc3RhdGUobiwgTl9NRU1PUlkpIHsKJiM0MzsJZm9yX2VhY2hfbm9kZV9tYXNrKG4sICpjYW5kaWRhdGVzKSB7CiAKIAkJLyogRG9uJiMzOTt0IHdhbnQgYSBub2RlIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZSAqLwogCQlpZiAobm9kZV9pc3NldChuLCAqdXNlZF9ub2RlX21hc2spKQpAQCAtNTg0NywxMiAmIzQzOzU4NDksMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKQogICogRE1BIHpvbmUsIGlmIGFueS0tYnV0IHJpc2tzIGV4aGF1c3RpbmcgRE1BIHpvbmUuCiAgKi8KIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlciwKLQkJdW5zaWduZWQgbnJfbm9kZXMpCiYjNDM7CQl1bnNpZ25lZCBpbnQgbnJfbm9kZXMsIGludCB6bGlkeCkKIHsKIAlzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZnM7CiAJaW50IGk7CiAKLQl6b25lcmVmcyA9IHBnZGF0LSZndDtub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS10uX3pvbmVyZWZzOwomIzQzOwl6b25lcmVmcyA9IHBnZGF0LSZndDtub2RlX3pvbmVsaXN0c1t6bGlkeF0uX3pvbmVyZWZzOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX25vZGVzOyBpJiM0MzsmIzQzOykgewogCQlpbnQgbnJfem9uZXM7CkBAIC01ODgxLDI1ICYjNDM7NTg4MywyOCBAQCBzdGF0aWMgdm9pZCBidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdCkKIAl6b25lcmVmcy0mZ3Q7em9uZV9pZHggPSAwOwogfQogCi1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdCkKJiM0MzsvKgomIzQzOyAqIEJ1aWxkIG9uZSBub2RlLW9yZGVyZWQgZmFsbGJhY2sgbGlzdCBmcm9tIGEgY2FuZGlkYXRlIG5vZGVtYXNrLgomIzQzOyAqIHVwZGF0ZV9sb2FkIHJvdW5kLXJvYmlucyBub2RlX2xvYWQgYWNyb3NzIGVxdWlkaXN0YW50IG5vZGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcywKJiM0MzsJCQkJaW50IHpsaWR4LCBib29sIHVwZGF0ZV9sb2FkLAomIzQzOwkJCQlpbnQgKm5vZGVfb3JkZXIsIGludCAqbnIpCiB7Ci0Jc3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107Ci0JaW50IG5vZGUsIG5yX25vZGVzID0gMDsKIAlub2RlbWFza190IHVzZWRfbWFzayA9IE5PREVfTUFTS19OT05FOwotCWludCBsb2NhbF9ub2RlLCBwcmV2X25vZGU7Ci0KLQkvKiBOVU1BLWF3YXJlIG9yZGVyaW5nIG9mIG5vZGVzICovCi0JbG9jYWxfbm9kZSA9IHBnZGF0LSZndDtub2RlX2lkOwotCXByZXZfbm9kZSA9IGxvY2FsX25vZGU7CiYjNDM7CWludCBsb2NhbF9ub2RlID0gcGdkYXQtJmd0O25vZGVfaWQ7CiYjNDM7CWludCBwcmV2X25vZGUgPSBsb2NhbF9ub2RlOwomIzQzOwlpbnQgbm9kZSwgbnJfbm9kZXMgPSAwOwogCi0JbWVtc2V0KG5vZGVfb3JkZXIsIDAsIHNpemVvZihub2RlX29yZGVyKSk7Ci0Jd2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZShsb2NhbF9ub2RlLCAmYW1wO3VzZWRfbWFzaykpICZndDs9IDApIHsKJiM0MzsJd2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihsb2NhbF9ub2RlLCAmYW1wO3VzZWRfbWFzaywKJiM0MzsJCQkJCSAgICAgIGNhbmRpZGF0ZXMpKSAmZ3Q7PSAwKSB7CiAJCS8qCiAJCSAqIFdlIGRvbiYjMzk7dCB3YW50IHRvIHByZXNzdXJlIGEgcGFydGljdWxhciBub2RlLgogCQkgKiBTbyBhZGRpbmcgcGVuYWx0eSB0byB0aGUgZmlyc3Qgbm9kZSBpbiBzYW1lCiAJCSAqIGRpc3RhbmNlIGdyb3VwIHRvIG1ha2UgaXQgcm91bmQtcm9iaW4uCiAJCSAqLwotCQlpZiAobm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPQomIzQzOwkJaWYgKHVwZGF0ZV9sb2FkICZhbXA7JmFtcDsKJiM0MzsJCSAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9CiAJCSAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIHByZXZfbm9kZSkpCiAJCQlub2RlX2xvYWRbbm9kZV0gJiM0Mzs9IDE7CiAKQEAgLTU5MDcsOCAmIzQzOzU5MTIsMjIgQEAgc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCiAJCXByZXZfbm9kZSA9IG5vZGU7CiAJfQogCi0JYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzKTsKJiM0MzsJYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7CiYjNDM7CSpuciA9IG5yX25vZGVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdOwomIzQzOwlpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlpbnQgbm9kZSwgbnJfbm9kZXMgPSAwOwomIzQzOwomIzQzOwltZW1zZXQobm9kZV9vcmRlciwgMCwgc2l6ZW9mKG5vZGVfb3JkZXIpKTsKJiM0MzsKJiM0MzsJYnVpbGRfbm9kZV96b25lbGlzdChwZ2RhdCwgJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV0sIFpPTkVMSVNUX0ZBTExCQUNLLAomIzQzOwkJCSAgICB0cnVlLCBub2RlX29yZGVyLCAmYW1wO25yX25vZGVzKTsKIAlidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdkYXQpOwomIzQzOwogCXByX2luZm8oJiMzNDtGYWxsYmFjayBvcmRlciBmb3IgTm9kZSAlZDogJiMzNDssIGxvY2FsX25vZGUpOwogCWZvciAobm9kZSA9IDA7IG5vZGUgJmx0OyBucl9ub2Rlczsgbm9kZSYjNDM7JiM0MzspCiAJCXByX2NvbnQoJiMzNDslZCAmIzM0Oywgbm9kZV9vcmRlcltub2RlXSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IE5vZGUgU2VsZWN0aW9uIFJlZmFjdG9yKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZywgc3BlY2lmaWNhbGx5IGFpbWVkIGF0IGltcHJvdmluZyB0aGUgbm9kZSBzZWxlY3Rpb24gbG9naWMsIGxpa2VseSBmb3IgbWVtb3J5IHRpZXJpbmcgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIG1ha2luZyBgZmluZF9uZXh0X2Jlc3Rfbm9kZWAgbW9yZSBmbGV4aWJsZSBieSByZW5hbWluZyBpdCB0byBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgYW5kIGFkZGluZyBhIGBjYW5kaWRhdGVzYCBub2RlbWFzayBwYXJhbWV0ZXIuIFRoaXMgaW5kaWNhdGVzIGEgc2hpZnQgdG93YXJkcyBzcGVjaWZ5aW5nIGEgc3Vic2V0IG9mIG5vZGVzIHRvIGNvbnNpZGVyLCByYXRoZXIgdGhhbiBzZWFyY2hpbmcgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLgoKTG9va2luZyBhdCB0aGUgY2hhbmdlcywgSSBzZWU6CgoqICAgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjaGFuZ2UgaW4gYG1tL2ludGVybmFsLmhgIHJlZmxlY3RzIHRoZSBuZXcgYGNhbmRpZGF0ZXNgIHBhcmFtZXRlciwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KKiAgIEluIGBtbS9tZW1vcnktdGllcnMuY2AsIGNhbGxzIHRvIHRoZSB1cGRhdGVkIGZ1bmN0aW9uIGFyZSBiZWluZyBtYWRlIHdpdGggYSBgJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV1gIG1hc2suIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGBOX01FTU9SWWAgcHJvYmFibHkgcmVmZXJzIHRvIGEgbWVtb3J5IHRpZXIgc3RhdGUuIFRoaXMgbGlrZWx5IHRpZXMgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBtZW1vcnktdGllcmluZyBzdWJzeXN0ZW0uCiogICBgbW0vcGFnZV9hbGxvYy5jYCBoYXMgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMuIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBub2RlX2lzc2V0YCBjaGVja3MgYW5kIGBmb3JfZWFjaF9ub2RlX21hc2tgIGl0ZXJhdGlvbiwgYWxsIHVzaW5nIHRoYXQgYGNhbmRpZGF0ZXNgIG1hc2suIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkOyBpdCBjb25zdHJhaW5zIHRoZSBzZWFyY2ggdG8gYSBzcGVjaWZpYyBzZXQgb2Ygbm9kZXMuIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgaGFzIGFuIGFkZGVkIGB6bGlkeGAgcGFyYW1ldGVyLCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byB6b25lbGlzdCBpbmRleGluZy4gVGhlcmUmIzM5O3MgYWxzbyBgYnVpbGRfbm9kZV96b25lbGlzdGAsIGFuZCBgYnVpbGRfem9uZWxpc3RzYCBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCBhcmUgbmV3LgoKSSYjMzk7bSBub3cgZ29pbmcgdG8gZm9jdXMgb24gcG90ZW50aWFsIHJpc2tzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgYGNvcHlfdG9fdXNlcmAgcHJvYmxlbXMsIGV2ZW4gdGhvdWdoIHRoaXMgZG9lc24mIzM5O3QgbG9vayBsaWtlIGEgZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJmYWNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYnVpbGRfbm9kZV96b25lbGlzdGAgYW5kIGBidWlsZF96b25lbGlzdHNgLgoKSW5zaWRlIGBidWlsZF96b25lbGlzdHNgLCBJIGNhbiBzZWUgYSBgbm9kZV9vcmRlcmAgYXJyYXkgaW5pdGlhbGl6ZWQsIHVzZWQsIGFuZCB0aGUgbnVtYmVyIG9mIG5vZGVzIHRyYWNrZWQuIFRoZSBjcnVjaWFsIHBhcnQgaXMgd2l0aGluIGBidWlsZF9ub2RlX3pvbmVsaXN0YDogSXQgbG9va3MgbGlrZSB0aGUgYG5vZGVfb3JkZXJgIGFycmF5IGlzIGJlaW5nIHBvcHVsYXRlZCBiYXNlZCBvbiBhIGNhbGwgdG8gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gLiBJIHNlZSBhbiBgdXNlZF9tYXNrYCB0aGF0IGVuc3VyZXMgd2UgZG9uJiMzOTt0IHJldHVybiB0aGUgc2FtZSBub2RlIHR3aWNlLCBhbmQgSSBjYW4gYWxzbyBzZWUgYSBgbnJfbm9kZXNgIHZhcmlhYmxlIHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2Ygbm9kZXMgYWRkZWQgdG8gYG5vZGVfb3JkZXJgLiBUaGlzIGFsbCBsb29rcyBva2F5IHNvIGZhci4gVGhlIGZpbmFsIHN0ZXAgaXMgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoaXMgYG5vZGVfb3JkZXJgIGluIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAuIEkgYWxzbyBzZWUgdGhhdCB0aGUgYWN0dWFsIGBub2RlX29yZGVyYCBpdHNlbGYgYXBwZWFycyB0byBiZSBwcmludGVkIHRvIHRoZSBrZXJuZWwgY29uc29sZSB3aXRoIGBwcl9jb250KClgLiBOb3QgYSBjcml0aWNhbCBpc3N1ZSBhcyBpcywgYnV0IHRoYXQgd291bGQgbmVlZCB0byBiZSBjaGVja2VkIGluIHByb2R1Y3Rpb24gdG8gc2VlIGlmIGFueSBub2RlcyBhcmUgc2Vuc2l0aXZlLgoKVGhpcyBpcyBhbGwgcHJldHR5IGNsZWFuLCBidXQgSSYjMzk7bSBub3QgZnVsbHkgY29udmluY2VkIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBpc3N1ZXMuIFRvIGVuc3VyZSBteSBwZWFjZSBvZiBtaW5kLCBJJiMzOTttIGdvaW5nIHRvIHJ1biBgZ3JlcHBlcmAgYWNyb3NzIHRoZSBjb2RlYmFzZSB0byBsb29rIGZvciBhbnkgb3RoZXIgdXNlcyBvZiB0aGUgb2xkIGBmaW5kX25leHRfYmVzdF9ub2RlYCBmdW5jdGlvbiwgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGJlZW4gY2xlYW5seSByZXBsYWNlZCBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBlZGdlIGNhc2VzIEkmIzM5O20gbWlzc2luZy4gVGhpcyB3aWxsIGFsc28gY2F0Y2ggaWYgSSBzb21laG93IG92ZXJsb29rZWQgd2hlcmUgYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIGlzIGNhbGxlZCB0aGF0IGNvdWxkIGNhdXNlIGFuIGlzc3VlLiBJIGFsd2F5cyB3YW50IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX25leHRfYmVzdF9ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTEzMT1leHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL2ludGVybmFsLmgtMTEzMi1cdFx0XHRcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XG5tbS9pbnRlcm5hbC5oOjExMzM6ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL2ludGVybmFsLmgtMTEzNC1cdFx0XHRcdCAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyk7XG4tLVxubW0vaW50ZXJuYWwuaD0xMTM4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS9pbnRlcm5hbC5oLTExNDItfVxubW0vaW50ZXJuYWwuaDoxMTQzOnN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxubW0vaW50ZXJuYWwuaC0xMTQ0LVx0XHRcdFx0XHQgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcbi0tXG5tbS9tZW1vcnktdGllcnMuYz0zMzA9aW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTM3Mi1cdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XG5tbS9tZW1vcnktdGllcnMuYzozNzM6XHRyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcdTAwMjZtYXNrLCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xubW0vbWVtb3J5LXRpZXJzLmMtMzc0LX1cbi0tXG5tbS9tZW1vcnktdGllcnMuYz00MjU9c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbi0tXG5tbS9tZW1vcnktdGllcnMuYy00NTItXHRcdC8qXG5tbS9tZW1vcnktdGllcnMuYzo0NTM6XHRcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAmIzM5O3VzZWQmIzM5OyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC5cbm1tL21lbW9yeS10aWVycy5jLTQ1NC1cdFx0ICogQWRkIGFsbCBtZW1vcnkgbm9kZXMgZXhjZXB0IHRoZSBzZWxlY3RlZCBtZW1vcnkgdGllclxuLS1cbm1tL21lbW9yeS10aWVycy5jLTQ2NS1cdFx0ZG8ge1xubW0vbWVtb3J5LXRpZXJzLmM6NDY2Olx0XHRcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2dGllcl9ub2Rlcyxcbm1tL21lbW9yeS10aWVycy5jLTQ2Ny1cdFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTU3Nzk9c3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTc4MS0vKipcbm1tL3BhZ2VfYWxsb2MuYzo1NzgyOiAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSYjMzk7cyBmYWxsYmFjayBsaXN0XG5tbS9wYWdlX2FsbG9jLmMtNTc4My0gKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJiMzOTtyZSBhcHBlbmRpbmdcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTc5Ni0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo1Nzk3OmludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy01Nzk4LVx0XHRcdCAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01ODk4LVxubW0vcGFnZV9hbGxvYy5jOjU4OTk6XHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFx1MDAyNnVzZWRfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy01OTAwLVx0XHRcdFx0XHQgICAgICBjYW5kaWRhdGVzKSkgXHUwMDNlPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipEZWVwIERpdmUgaW50byBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgKioKCk9rYXksIHNvIEkmIzM5O20ganVzdCBxdWlja2x5IHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBCZWZvcmUgd2UgY29tbWl0LCBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBzbyBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgIGFuZCB0aGUgY29kZSBhcm91bmQgaXQgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGxvZ2ljIHRoZXJlIGlzIHNvdW5kLCBnaXZlbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28gYSBxdWljayB2ZXJpZmljYXRpb24gbmV2ZXIgaHVydHMuIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGFzc3VtcHRpb25zIGhvbGQgYW5kIHRoYXQgd2UgaGF2ZW4mIzM5O3QgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucyBvciBvdmVybG9va2VkIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBBIGZldyBtaW51dGVzIG5vdyBjb3VsZCBzYXZlIGEgbG90IG9mIGhlYWRhY2hlcyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4NDA6XHRcdFx0bm9kZV9zZXQoYmVzdF9ub2RlLCAqdXNlZF9ub2RlX21hc2spO1xuNTg0MTpcdFxuNTg0MjpcdFx0cmV0dXJuIGJlc3Rfbm9kZTtcbjU4NDM6XHR9XG41ODQ0Olx0XG41ODQ1Olx0XG41ODQ2Olx0LypcbjU4NDc6XHQgKiBCdWlsZCB6b25lbGlzdHMgb3JkZXJlZCBieSBub2RlIGFuZCB6b25lcyB3aXRoaW4gbm9kZS5cbjU4NDg6XHQgKiBUaGlzIHJlc3VsdHMgaW4gbWF4aW11bSBsb2NhbGl0eS0tbm9ybWFsIHpvbmUgb3ZlcmZsb3dzIGludG8gbG9jYWxcbjU4NDk6XHQgKiBETUEgem9uZSwgaWYgYW55LS1idXQgcmlza3MgZXhoYXVzdGluZyBETUEgem9uZS5cbjU4NTA6XHQgKi9cbjU4NTE6XHRzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ19kYXRhX3QgKnBnZGF0LCBpbnQgKm5vZGVfb3JkZXIsXG41ODUyOlx0XHRcdHVuc2lnbmVkIGludCBucl9ub2RlcywgaW50IHpsaWR4KVxuNTg1MzpcdHtcbjU4NTQ6XHRcdHN0cnVjdCB6b25lcmVmICp6b25lcmVmcztcbjU4NTU6XHRcdGludCBpO1xuNTg1NjpcdFxuNTg1NzpcdFx0em9uZXJlZnMgPSBwZ2RhdC1cdTAwM2Vub2RlX3pvbmVsaXN0c1t6bGlkeF0uX3pvbmVyZWZzO1xuNTg1ODpcdFxuNTg1OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZXM7IGkmIzQzOyYjNDM7KSB7XG41ODYwOlx0XHRcdGludCBucl96b25lcztcbjU4NjE6XHRcbjU4NjI6XHRcdFx0cGdfZGF0YV90ICpub2RlID0gTk9ERV9EQVRBKG5vZGVfb3JkZXJbaV0pO1xuNTg2MzpcdFxuNTg2NDpcdFx0XHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUobm9kZSwgem9uZXJlZnMpO1xuNTg2NTpcdFx0XHR6b25lcmVmcyAmIzQzOz0gbnJfem9uZXM7XG41ODY2Olx0XHR9XG41ODY3Olx0XHR6b25lcmVmcy1cdTAwM2V6b25lID0gTlVMTDtcbjU4Njg6XHRcdHpvbmVyZWZzLVx1MDAzZXpvbmVfaWR4ID0gMDtcbjU4Njk6XHR9XG41ODcwOlx0XG41ODcxOlx0LypcbjU4NzI6XHQgKiBCdWlsZCBfX0dGUF9USElTTk9ERSB6b25lbGlzdHNcbjU4NzM6XHQgKi9cbjU4NzQ6XHRzdGF0aWMgdm9pZCBidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbjU4NzU6XHR7XG41ODc2Olx0XHRzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZnM7XG41ODc3Olx0XHRpbnQgbnJfem9uZXM7XG41ODc4Olx0XG41ODc5Olx0XHR6b25lcmVmcyA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX05PRkFMTEJBQ0tdLl96b25lcmVmcztcbjU4ODA6XHRcdG5yX3pvbmVzID0gYnVpbGRfem9uZXJlZnNfbm9kZShwZ2RhdCwgem9uZXJlZnMpO1xuNTg4MTpcdFx0em9uZXJlZnMgJiM0Mzs9IG5yX3pvbmVzO1xuNTg4MjpcdFx0em9uZXJlZnMtXHUwMDNlem9uZSA9IE5VTEw7XG41ODgzOlx0XHR6b25lcmVmcy1cdTAwM2V6b25lX2lkeCA9IDA7XG41ODg0Olx0fVxuNTg4NTpcdFxuNTg4NjpcdC8qXG41ODg3Olx0ICogQnVpbGQgb25lIG5vZGUtb3JkZXJlZCBmYWxsYmFjayBsaXN0IGZyb20gYSBjYW5kaWRhdGUgbm9kZW1hc2suXG41ODg4Olx0ICogdXBkYXRlX2xvYWQgcm91bmQtcm9iaW5zIG5vZGVfbG9hZCBhY3Jvc3MgZXF1aWRpc3RhbnQgbm9kZXMuXG41ODg5Olx0ICovXG41ODkwOlx0c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxuNTg5MTpcdFx0XHRcdFx0aW50IHpsaWR4LCBib29sIHVwZGF0ZV9sb2FkLFxuNTg5MjpcdFx0XHRcdFx0aW50ICpub2RlX29yZGVyLCBpbnQgKm5yKVxuNTg5MzpcdHtcbjU4OTQ6XHRcdG5vZGVtYXNrX3QgdXNlZF9tYXNrID0gTk9ERV9NQVNLX05PTkU7XG41ODk1Olx0XHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG41ODk2Olx0XHRpbnQgcHJldl9ub2RlID0gbG9jYWxfbm9kZTtcbjU4OTc6XHRcdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG41ODk4Olx0XG41ODk5Olx0XHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFx1MDAyNnVzZWRfbWFzayxcbjU5MDA6XHRcdFx0XHRcdFx0ICAgICAgY2FuZGlkYXRlcykpIFx1MDAzZT0gMCkge1xuNTkwMTpcdFx0XHQvKlxuNTkwMjpcdFx0XHQgKiBXZSBkb24mIzM5O3Qgd2FudCB0byBwcmVzc3VyZSBhIHBhcnRpY3VsYXIgbm9kZS5cbjU5MDM6XHRcdFx0ICogU28gYWRkaW5nIHBlbmFsdHkgdG8gdGhlIGZpcnN0IG5vZGUgaW4gc2FtZVxuNTkwNDpcdFx0XHQgKiBkaXN0YW5jZSBncm91cCB0byBtYWtlIGl0IHJvdW5kLXJvYmluLlxuNTkwNTpcdFx0XHQgKi9cbjU5MDY6XHRcdFx0aWYgKHVwZGF0ZV9sb2FkIFx1MDAyNlx1MDAyNlxuNTkwNzpcdFx0XHQgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPVxuNTkwODpcdFx0XHQgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBwcmV2X25vZGUpKVxuNTkwOTpcdFx0XHRcdG5vZGVfbG9hZFtub2RlXSAmIzQzOz0gMTtcbjU5MTA6XHRcbjU5MTE6XHRcdFx0bm9kZV9vcmRlcltucl9ub2RlcyYjNDM7JiM0MztdID0gbm9kZTtcbjU5MTI6XHRcdFx0cHJldl9ub2RlID0gbm9kZTtcbjU5MTM6XHRcdH1cbjU5MTQ6XHRcbjU5MTU6XHRcdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2RlcywgemxpZHgpO1xuNTkxNjpcdFx0Km5yID0gbnJfbm9kZXM7XG41OTE3Olx0fVxuNTkxODpcdFxuNTkxOTpcdHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuNTkyMDpcdHtcbjU5MjE6XHRcdHN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdO1xuNTkyMjpcdFx0aW50IGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuNTkyMzpcdFx0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcbjU5MjQ6XHRcbjU5MjU6XHRcdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xuNTkyNjpcdFxuNTkyNzpcdFx0YnVpbGRfbm9kZV96b25lbGlzdChwZ2RhdCwgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBaT05FTElTVF9GQUxMQkFDSyxcbjU5Mjg6XHRcdFx0XHQgICAgdHJ1ZSwgbm9kZV9vcmRlciwgXHUwMDI2bnJfbm9kZXMpO1xuNTkyOTpcdFx0YnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5NwoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2VybmVsIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBpcyBhbGwgaW50ZXJuYWwga2VybmVsIHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgdGhlIE5VTUEgem9uZWxpc3QgaXMgZ2VuZXJhdGVkIGFuZCBob3cgdGhlIHRhcmdldCBub2RlIGZvciBkZW1vdGlvbiBpcyBzZWxlY3RlZC4gTm8gZGF0YSBmcm9tIHRoZSBrZXJuZWwgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZCDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIHNvdXJjZSBvZiBoZWFkYWNoZXMuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYWxsIHRoZSBrZXkgdmFyaWFibGVzIGFuZCBidWZmZXJzIGxpa2UgYG5vZGVfb3JkZXJgIGFuZCBgdXNlZF9tYXNrYCBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgbGlrZSBgTk9ERV9NQVNLX05PTkVgIGFuZCBgbWVtc2V0KC4uLiwgMCwgLi4uKWAsIG1lYW5pbmcgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgY3JlZXBpbmcgaW4uIEkmIzM5O20gY29uZmlkZW50IHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgZXhwb3NlZC4KCkV2ZW4gaWYgdGhlcmUgKndlcmUqIHNvbWUgYm91bmRhcnkgaXNzdWVzIHdpdGggaW5kZXhpbmcgc29tZXRoaW5nIGxpa2UgYG5vZGVfb3JkZXJgIG9yIHRoZSB6b25lbGlzdHMsIHRoZSBrZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXIgKEtBU0FOKSB3b3VsZCBjYXRjaCB0aGF0IGFzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBTbywgYmFzZWQgb24gdGhhdCwgS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBoZXJlOyBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKQWxyaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGNyYWZ0IGEgY29uY2lzZSByZXNwb25zZSwgYW5kIHRoZW4gdHJpZ2dlciB0aGUgc2V0LXJlc3VsdHMgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIGRlbW90aW9uIG5vZGUgc2VsZWN0aW9uIGxvZ2ljIChpbnRyb2R1Y2luZyBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgd2l0aCBhIGNhbmRpZGF0ZSBub2RlbWFzayBwYXJhbWV0ZXIgYW5kIGZhY3RvcmluZyBvdXQgYGJ1aWxkX25vZGVfem9uZWxpc3RgKS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgbm9kZW1hc2tzLCBhbmQgYXJyYXlzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiBgTk9ERV9NQVNLX05PTkVgLCBgbWVtc2V0KG5vZGVfb3JkZXIsIDAsIC4uLilgKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBpc3N1ZXMgaW4gem9uZWxpc3QgaW5kZXhpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ1OjQ5LjI0Nzk1NjEyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NDcyNjIzMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIk5VTUFfTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmluZF9uZXh0X2Jlc3Rfbm9kZV9pblwiLFxuICAgIFwibmV4dF9kZW1vdGlvbl9ub2RlXCIsXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiLFxuICAgIFwiYnVpbGRfbm9kZV96b25lbGlzdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBhbmQgbW0vbWVtb3J5LXRpZXJzLmMuIEl0IHJlZmFjdG9ycyBub2RlIGZhbGxiYWNrIGxpc3QgZ2VuZXJhdGlvbiAoZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiwgYnVpbGRfbm9kZV96b25lbGlzdCkgdG8gYWNjZXB0IGV4cGxpY2l0IGNhbmRpZGF0ZSBub2RlbWFza3MgYW5kIHVwZGF0ZXMgbWVtb3J5IHRpZXJpbmcgLyBkZW1vdGlvbiB0YXJnZXQgY2FsY3VsYXRpb25zIChuZXh0X2RlbW90aW9uX25vZGUsIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIE5VTUEgem9uZWxpc3QgY29uc3RydWN0aW9uIGFuZCBtZW1vcnkgdGllcmluZyBkZW1vdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDU6NDkuMjQ3OTYyMDExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAwOTYxNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTZiZWM2ZWZkMjhkOWUyMWRjZjRjOWU1ZjgwMTg0MDhiNzgyNzgxN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIyOjQ1OjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggZTE2ZjEyNTBiMjVjOC4uMThkMDQxZmY1YzUyYyAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xMTMwLDcgKzExMzAsOCBAQCBleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xcbiBcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XFxuLWV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spO1xcbitleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpO1xcbiAjZWxzZVxcbiAjZGVmaW5lIG5vZGVfcmVjbGFpbV9tb2RlIDBcXG4gXFxuQEAgLTExMzksNyArMTE0MCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcXG4rc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxcbiB7XFxuIFxcdHJldHVybiBOVU1BX05PX05PREU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LXRpZXJzLmMgYi9tbS9tZW1vcnktdGllcnMuY1xcbmluZGV4IDU0ODUxZDhhMTk1YjAuLjI1ZTEyMTg1MWI1ODYgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LXRpZXJzLmNcXG4rKysgYi9tbS9tZW1vcnktdGllcnMuY1xcbkBAIC0zNzAsNyArMzcwLDcgQEAgaW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxcbiBcXHQgKiBjbG9zZXN0IGRlbW90aW9uIHRhcmdldC5cXG4gXFx0ICovXFxuIFxcdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XFxuLVxcdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIFxcdTAwMjZtYXNrKTtcXG4rXFx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNm1hc2ssIFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkaXNhYmxlX2FsbF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbiBcXHRcXHRtZW10aWVyID0gbGlzdF9uZXh0X2VudHJ5KG1lbXRpZXIsIGxpc3QpO1xcbiBcXHRcXHR0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGUsIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXFxuK1xcdFxcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXFxuIFxcdFxcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcXG4gXFx0XFx0ICogbm9kZWxpc3QgdG8gc2tpcCBsaXN0IHNvIHRoYXQgd2UgZmluZCB0aGUgYmVzdCBub2RlIGZyb20gdGhlXFxuIFxcdFxcdCAqIG1lbXRpZXIgbm9kZWxpc3QuXFxuQEAgLTQ2Myw3ICs0NjMsOCBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbiBcXHRcXHQgKiBpbiB0aGUgcHJlZmVycmVkIG1hc2sgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGR1cmluZyBkZW1vdGlvbi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGRvIHtcXG4tXFx0XFx0XFx0dGFyZ2V0ID0gZmluZF9uZXh0X2Jlc3Rfbm9kZShub2RlLCBcXHUwMDI2dGllcl9ub2Rlcyk7XFxuK1xcdFxcdFxcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNnRpZXJfbm9kZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbiBcXHRcXHRcXHRpZiAodGFyZ2V0ID09IE5VTUFfTk9fTk9ERSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCBjNGRjNjFlYzY2M2VlLi5lMWQ3YzhiMjIxZDBkIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC01Nzc5LDkgKzU3NzksMTAgQEAgc3RhdGljIGludCBudW1hX3pvbmVsaXN0X29yZGVyX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4gc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcXG4gXFxuIC8qKlxcbi0gKiBmaW5kX25leHRfYmVzdF9ub2RlIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0XFxuKyAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3RcXG4gICogQG5vZGU6IG5vZGUgd2hvc2UgZmFsbGJhY2sgbGlzdCB3ZSdyZSBhcHBlbmRpbmdcXG4gICogQHVzZWRfbm9kZV9tYXNrOiBub2RlbWFza190IG9mIGFscmVhZHkgdXNlZCBub2Rlc1xcbisgKiBAY2FuZGlkYXRlczogbm9kZW1hc2tfdCBvZiBub2RlcyBlbGlnaWJsZSBmb3Igc2VsZWN0aW9uXFxuICAqXFxuICAqIFdlIHVzZSBhIG51bWJlciBvZiBmYWN0b3JzIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkXFxuICAqIGFwcGVhciBvbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0LiAgVGhlIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFwcGVhcmVkXFxuQEAgLTU3OTMsNyArNTc5NCw4IEBAIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XFxuICAqXFxuICAqIFJldHVybjogbm9kZSBpZCBvZiB0aGUgZm91bmQgbm9kZSBvciAlTlVNQV9OT19OT0RFIGlmIG5vIG5vZGUgaXMgZm91bmQuXFxuICAqL1xcbi1pbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXFxuK2ludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcXG4ge1xcbiBcXHRpbnQgbiwgdmFsO1xcbiBcXHRpbnQgbWluX3ZhbCA9IElOVF9NQVg7XFxuQEAgLTU4MDMsMTIgKzU4MDUsMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxcbiBcXHQgKiBVc2UgdGhlIGxvY2FsIG5vZGUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LCBidXQgZm9yIG1lbW9yeWxlc3MgbG9jYWxcXG4gXFx0ICogbm9kZSwgd2Ugc2hvdWxkIHNraXAgaXQgYW5kIGZhbGwgYmFjayB0byBvdGhlciBub2Rlcy5cXG4gXFx0ICovXFxuLVxcdGlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spIFxcdTAwMjZcXHUwMDI2IG5vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpKSB7XFxuK1xcdGlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spIFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgKmNhbmRpZGF0ZXMpKSB7XFxuIFxcdFxcdG5vZGVfc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzayk7XFxuIFxcdFxcdHJldHVybiBub2RlO1xcbiBcXHR9XFxuIFxcbi1cXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG4sIE5fTUVNT1JZKSB7XFxuK1xcdGZvcl9lYWNoX25vZGVfbWFzayhuLCAqY2FuZGlkYXRlcykge1xcbiBcXG4gXFx0XFx0LyogRG9uJ3Qgd2FudCBhIG5vZGUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlICovXFxuIFxcdFxcdGlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVfbWFzaykpXFxuQEAgLTU4NDcsMTIgKzU4NDksMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxcbiAgKiBETUEgem9uZSwgaWYgYW55LS1idXQgcmlza3MgZXhoYXVzdGluZyBETUEgem9uZS5cXG4gICovXFxuIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlcixcXG4tXFx0XFx0dW5zaWduZWQgbnJfbm9kZXMpXFxuK1xcdFxcdHVuc2lnbmVkIGludCBucl9ub2RlcywgaW50IHpsaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCB6b25lcmVmICp6b25lcmVmcztcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHR6b25lcmVmcyA9IHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS10uX3pvbmVyZWZzO1xcbitcXHR6b25lcmVmcyA9IHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVsaXN0c1t6bGlkeF0uX3pvbmVyZWZzO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVzOyBpKyspIHtcXG4gXFx0XFx0aW50IG5yX3pvbmVzO1xcbkBAIC01ODgxLDI1ICs1ODgzLDI4IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbiBcXHR6b25lcmVmcy1cXHUwMDNlem9uZV9pZHggPSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcXG4rLypcXG4rICogQnVpbGQgb25lIG5vZGUtb3JkZXJlZCBmYWxsYmFjayBsaXN0IGZyb20gYSBjYW5kaWRhdGUgbm9kZW1hc2suXFxuKyAqIHVwZGF0ZV9sb2FkIHJvdW5kLXJvYmlucyBub2RlX2xvYWQgYWNyb3NzIGVxdWlkaXN0YW50IG5vZGVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxcbitcXHRcXHRcXHRcXHRpbnQgemxpZHgsIGJvb2wgdXBkYXRlX2xvYWQsXFxuK1xcdFxcdFxcdFxcdGludCAqbm9kZV9vcmRlciwgaW50ICpucilcXG4ge1xcbi1cXHRzdGF0aWMgaW50IG5vZGVfb3JkZXJbTUFYX05VTU5PREVTXTtcXG4tXFx0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcXG4gXFx0bm9kZW1hc2tfdCB1c2VkX21hc2sgPSBOT0RFX01BU0tfTk9ORTtcXG4tXFx0aW50IGxvY2FsX25vZGUsIHByZXZfbm9kZTtcXG4tXFxuLVxcdC8qIE5VTUEtYXdhcmUgb3JkZXJpbmcgb2Ygbm9kZXMgKi9cXG4tXFx0bG9jYWxfbm9kZSA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbi1cXHRwcmV2X25vZGUgPSBsb2NhbF9ub2RlO1xcbitcXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbitcXHRpbnQgcHJldl9ub2RlID0gbG9jYWxfbm9kZTtcXG4rXFx0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcXG4gXFxuLVxcdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xcbi1cXHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlKGxvY2FsX25vZGUsIFxcdTAwMjZ1c2VkX21hc2spKSBcXHUwMDNlPSAwKSB7XFxuK1xcdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obG9jYWxfbm9kZSwgXFx1MDAyNnVzZWRfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FuZGlkYXRlcykpIFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgZG9uJ3Qgd2FudCB0byBwcmVzc3VyZSBhIHBhcnRpY3VsYXIgbm9kZS5cXG4gXFx0XFx0ICogU28gYWRkaW5nIHBlbmFsdHkgdG8gdGhlIGZpcnN0IG5vZGUgaW4gc2FtZVxcbiBcXHRcXHQgKiBkaXN0YW5jZSBncm91cCB0byBtYWtlIGl0IHJvdW5kLXJvYmluLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgbm9kZSkgIT1cXG4rXFx0XFx0aWYgKHVwZGF0ZV9sb2FkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9XFxuIFxcdFxcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIHByZXZfbm9kZSkpXFxuIFxcdFxcdFxcdG5vZGVfbG9hZFtub2RlXSArPSAxO1xcbiBcXG5AQCAtNTkwNyw4ICs1OTEyLDIyIEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbiBcXHRcXHRwcmV2X25vZGUgPSBub2RlO1xcbiBcXHR9XFxuIFxcbi1cXHRidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ2RhdCwgbm9kZV9vcmRlciwgbnJfbm9kZXMpO1xcbitcXHRidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ2RhdCwgbm9kZV9vcmRlciwgbnJfbm9kZXMsIHpsaWR4KTtcXG4rXFx0Km5yID0gbnJfbm9kZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbit7XFxuK1xcdHN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdO1xcbitcXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbitcXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xcbitcXG4rXFx0bWVtc2V0KG5vZGVfb3JkZXIsIDAsIHNpemVvZihub2RlX29yZGVyKSk7XFxuK1xcbitcXHRidWlsZF9ub2RlX3pvbmVsaXN0KHBnZGF0LCBcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBaT05FTElTVF9GQUxMQkFDSyxcXG4rXFx0XFx0XFx0ICAgIHRydWUsIG5vZGVfb3JkZXIsIFxcdTAwMjZucl9ub2Rlcyk7XFxuIFxcdGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ2RhdCk7XFxuK1xcbiBcXHRwcl9pbmZvKFxcXCJGYWxsYmFjayBvcmRlciBmb3IgTm9kZSAlZDogXFxcIiwgbG9jYWxfbm9kZSk7XFxuIFxcdGZvciAobm9kZSA9IDA7IG5vZGUgXFx1MDAzYyBucl9ub2Rlczsgbm9kZSsrKVxcbiBcXHRcXHRwcl9jb250KFxcXCIlZCBcXFwiLCBub2RlX29yZGVyW25vZGVdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDU6NTAuNzQ5NDQ3NTY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjEzNTMyOTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJOVU1BX01JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpbmRfbmV4dF9iZXN0X25vZGVfaW5cIixcbiAgICBcIm5leHRfZGVtb3Rpb25fbm9kZVwiLFxuICAgIFwiZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNcIixcbiAgICBcImJ1aWxkX25vZGVfem9uZWxpc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBhbmQgbW0vbWVtb3J5LXRpZXJzLmMuIEl0IHJlZmFjdG9ycyBub2RlIGZhbGxiYWNrIGxpc3QgZ2VuZXJhdGlvbiAoZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiwgYnVpbGRfbm9kZV96b25lbGlzdCkgdG8gYWNjZXB0IGV4cGxpY2l0IGNhbmRpZGF0ZSBub2RlbWFza3MgYW5kIHVwZGF0ZXMgbWVtb3J5IHRpZXJpbmcgLyBkZW1vdGlvbiB0YXJnZXQgY2FsY3VsYXRpb25zIChuZXh0X2RlbW90aW9uX25vZGUsIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIE5VTUEgem9uZWxpc3QgY29uc3RydWN0aW9uIGFuZCBtZW1vcnkgdGllcmluZyBkZW1vdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNmJlYzZlZmQyOGQ5ZTIxZGNmNGM5ZTVmODAxODQwOGI3ODI3ODE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMjo0NTo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCBlMTZmMTI1MGIyNWM4Li4xOGQwNDFmZjVjNTJjIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTExMzAsNyArMTEzMCw4IEBAIGV4dGVybiBpbnQgbm9kZV9yZWNsYWltX21vZGU7XG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLWV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spO1xuK2V4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4rXHRcdFx0XHQgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpO1xuICNlbHNlXG4gI2RlZmluZSBub2RlX3JlY2xhaW1fbW9kZSAwXG4gXG5AQCAtMTEzOSw3ICsxMTQwLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIHtcbiBcdHJldHVybiAwO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcbitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbitcdFx0XHRcdFx0IGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4ge1xuIFx0cmV0dXJuIE5VTUFfTk9fTk9ERTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LXRpZXJzLmMgYi9tbS9tZW1vcnktdGllcnMuY1xuaW5kZXggNTQ4NTFkOGExOTViMC4uMjVlMTIxODUxYjU4NiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS10aWVycy5jXG4rKysgYi9tbS9tZW1vcnktdGllcnMuY1xuQEAgLTM3MCw3ICszNzAsNyBAQCBpbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spXG4gXHQgKiBjbG9zZXN0IGRlbW90aW9uIHRhcmdldC5cbiBcdCAqL1xuIFx0bm9kZXNfY29tcGxlbWVudChtYXNrLCAqYWxsb3dlZF9tYXNrKTtcbi1cdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIFx1MDAyNm1hc2spO1xuK1x0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2bWFzaywgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGlzYWJsZV9hbGxfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuIFx0XHRtZW10aWVyID0gbGlzdF9uZXh0X2VudHJ5KG1lbXRpZXIsIGxpc3QpO1xuIFx0XHR0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7XG4gXHRcdC8qXG4tXHRcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGUsIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG4rXHRcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXG4gXHRcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcbiBcdFx0ICogbm9kZWxpc3QgdG8gc2tpcCBsaXN0IHNvIHRoYXQgd2UgZmluZCB0aGUgYmVzdCBub2RlIGZyb20gdGhlXG4gXHRcdCAqIG1lbXRpZXIgbm9kZWxpc3QuXG5AQCAtNDYzLDcgKzQ2Myw4IEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4gXHRcdCAqIGluIHRoZSBwcmVmZXJyZWQgbWFzayB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZHVyaW5nIGRlbW90aW9uLlxuIFx0XHQgKi9cbiBcdFx0ZG8ge1xuLVx0XHRcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGUobm9kZSwgXHUwMDI2dGllcl9ub2Rlcyk7XG4rXHRcdFx0dGFyZ2V0ID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcdTAwMjZ0aWVyX25vZGVzLFxuK1x0XHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcbiBcdFx0XHRpZiAodGFyZ2V0ID09IE5VTUFfTk9fTk9ERSlcbiBcdFx0XHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYzRkYzYxZWM2NjNlZS4uZTFkN2M4YjIyMWQwZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTc3OSw5ICs1Nzc5LDEwIEBAIHN0YXRpYyBpbnQgbnVtYV96b25lbGlzdF9vcmRlcl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcbiBcbiAvKipcbi0gKiBmaW5kX25leHRfYmVzdF9ub2RlIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0XG4rICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJ3MgZmFsbGJhY2sgbGlzdFxuICAqIEBub2RlOiBub2RlIHdob3NlIGZhbGxiYWNrIGxpc3Qgd2UncmUgYXBwZW5kaW5nXG4gICogQHVzZWRfbm9kZV9tYXNrOiBub2RlbWFza190IG9mIGFscmVhZHkgdXNlZCBub2Rlc1xuKyAqIEBjYW5kaWRhdGVzOiBub2RlbWFza190IG9mIG5vZGVzIGVsaWdpYmxlIGZvciBzZWxlY3Rpb25cbiAgKlxuICAqIFdlIHVzZSBhIG51bWJlciBvZiBmYWN0b3JzIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkXG4gICogYXBwZWFyIG9uIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3QuICBUaGUgbm9kZSBzaG91bGQgbm90IGhhdmUgYXBwZWFyZWRcbkBAIC01NzkzLDcgKzU3OTQsOCBAQCBzdGF0aWMgaW50IG5vZGVfbG9hZFtNQVhfTlVNTk9ERVNdO1xuICAqXG4gICogUmV0dXJuOiBub2RlIGlkIG9mIHRoZSBmb3VuZCBub2RlIG9yICVOVU1BX05PX05PREUgaWYgbm8gbm9kZSBpcyBmb3VuZC5cbiAgKi9cbi1pbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4raW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxuK1x0XHRcdCAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXG4ge1xuIFx0aW50IG4sIHZhbDtcbiBcdGludCBtaW5fdmFsID0gSU5UX01BWDtcbkBAIC01ODAzLDEyICs1ODA1LDEyIEBAIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzaylcbiBcdCAqIFVzZSB0aGUgbG9jYWwgbm9kZSBpZiB3ZSBoYXZlbid0IGFscmVhZHksIGJ1dCBmb3IgbWVtb3J5bGVzcyBsb2NhbFxuIFx0ICogbm9kZSwgd2Ugc2hvdWxkIHNraXAgaXQgYW5kIGZhbGwgYmFjayB0byBvdGhlciBub2Rlcy5cbiBcdCAqL1xuLVx0aWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgXHUwMDI2XHUwMDI2IG5vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpKSB7XG4rXHRpZiAoIW5vZGVfaXNzZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChub2RlLCAqY2FuZGlkYXRlcykpIHtcbiBcdFx0bm9kZV9zZXQobm9kZSwgKnVzZWRfbm9kZV9tYXNrKTtcbiBcdFx0cmV0dXJuIG5vZGU7XG4gXHR9XG4gXG4tXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG4sIE5fTUVNT1JZKSB7XG4rXHRmb3JfZWFjaF9ub2RlX21hc2sobiwgKmNhbmRpZGF0ZXMpIHtcbiBcbiBcdFx0LyogRG9uJ3Qgd2FudCBhIG5vZGUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlICovXG4gXHRcdGlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVfbWFzaykpXG5AQCAtNTg0NywxMiArNTg0OSwxMiBAQCBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4gICogRE1BIHpvbmUsIGlmIGFueS0tYnV0IHJpc2tzIGV4aGF1c3RpbmcgRE1BIHpvbmUuXG4gICovXG4gc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdfZGF0YV90ICpwZ2RhdCwgaW50ICpub2RlX29yZGVyLFxuLVx0XHR1bnNpZ25lZCBucl9ub2RlcylcbitcdFx0dW5zaWduZWQgaW50IG5yX25vZGVzLCBpbnQgemxpZHgpXG4ge1xuIFx0c3RydWN0IHpvbmVyZWYgKnpvbmVyZWZzO1xuIFx0aW50IGk7XG4gXG4tXHR6b25lcmVmcyA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW1pPTkVMSVNUX0ZBTExCQUNLXS5fem9uZXJlZnM7XG4rXHR6b25lcmVmcyA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZWxpc3RzW3psaWR4XS5fem9uZXJlZnM7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9ub2RlczsgaSsrKSB7XG4gXHRcdGludCBucl96b25lcztcbkBAIC01ODgxLDI1ICs1ODgzLDI4IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuIFx0em9uZXJlZnMtXHUwMDNlem9uZV9pZHggPSAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbisvKlxuKyAqIEJ1aWxkIG9uZSBub2RlLW9yZGVyZWQgZmFsbGJhY2sgbGlzdCBmcm9tIGEgY2FuZGlkYXRlIG5vZGVtYXNrLlxuKyAqIHVwZGF0ZV9sb2FkIHJvdW5kLXJvYmlucyBub2RlX2xvYWQgYWNyb3NzIGVxdWlkaXN0YW50IG5vZGVzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyxcbitcdFx0XHRcdGludCB6bGlkeCwgYm9vbCB1cGRhdGVfbG9hZCxcbitcdFx0XHRcdGludCAqbm9kZV9vcmRlciwgaW50ICpucilcbiB7XG4tXHRzdGF0aWMgaW50IG5vZGVfb3JkZXJbTUFYX05VTU5PREVTXTtcbi1cdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG4gXHRub2RlbWFza190IHVzZWRfbWFzayA9IE5PREVfTUFTS19OT05FO1xuLVx0aW50IGxvY2FsX25vZGUsIHByZXZfbm9kZTtcbi1cbi1cdC8qIE5VTUEtYXdhcmUgb3JkZXJpbmcgb2Ygbm9kZXMgKi9cbi1cdGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuLVx0cHJldl9ub2RlID0gbG9jYWxfbm9kZTtcbitcdGludCBsb2NhbF9ub2RlID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdGludCBwcmV2X25vZGUgPSBsb2NhbF9ub2RlO1xuK1x0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcbiBcbi1cdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xuLVx0d2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZShsb2NhbF9ub2RlLCBcdTAwMjZ1c2VkX21hc2spKSBcdTAwM2U9IDApIHtcbitcdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obG9jYWxfbm9kZSwgXHUwMDI2dXNlZF9tYXNrLFxuK1x0XHRcdFx0XHQgICAgICBjYW5kaWRhdGVzKSkgXHUwMDNlPSAwKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFdlIGRvbid0IHdhbnQgdG8gcHJlc3N1cmUgYSBwYXJ0aWN1bGFyIG5vZGUuXG4gXHRcdCAqIFNvIGFkZGluZyBwZW5hbHR5IHRvIHRoZSBmaXJzdCBub2RlIGluIHNhbWVcbiBcdFx0ICogZGlzdGFuY2UgZ3JvdXAgdG8gbWFrZSBpdCByb3VuZC1yb2Jpbi5cbiBcdFx0ICovXG4tXHRcdGlmIChub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9XG4rXHRcdGlmICh1cGRhdGVfbG9hZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgbm9kZSkgIT1cbiBcdFx0ICAgIG5vZGVfZGlzdGFuY2UobG9jYWxfbm9kZSwgcHJldl9ub2RlKSlcbiBcdFx0XHRub2RlX2xvYWRbbm9kZV0gKz0gMTtcbiBcbkBAIC01OTA3LDggKzU5MTIsMjIgQEAgc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG4gXHRcdHByZXZfbm9kZSA9IG5vZGU7XG4gXHR9XG4gXG4tXHRidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcihwZ2RhdCwgbm9kZV9vcmRlciwgbnJfbm9kZXMpO1xuK1x0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7XG4rXHQqbnIgPSBucl9ub2Rlcztcbit9XG4rXG4rc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG4re1xuK1x0c3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107XG4rXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4rXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xuK1xuK1x0bWVtc2V0KG5vZGVfb3JkZXIsIDAsIHNpemVvZihub2RlX29yZGVyKSk7XG4rXG4rXHRidWlsZF9ub2RlX3pvbmVsaXN0KHBnZGF0LCBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIFpPTkVMSVNUX0ZBTExCQUNLLFxuK1x0XHRcdCAgICB0cnVlLCBub2RlX29yZGVyLCBcdTAwMjZucl9ub2Rlcyk7XG4gXHRidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdkYXQpO1xuK1xuIFx0cHJfaW5mbyhcIkZhbGxiYWNrIG9yZGVyIGZvciBOb2RlICVkOiBcIiwgbG9jYWxfbm9kZSk7XG4gXHRmb3IgKG5vZGUgPSAwOyBub2RlIFx1MDAzYyBucl9ub2Rlczsgbm9kZSsrKVxuIFx0XHRwcl9jb250KFwiJWQgXCIsIG5vZGVfb3JkZXJbbm9kZV0pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDU6NTAuNzQ5NDQ5Mjg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgxNzU2MDkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBUaWVyaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0aG9yb3VnaGx5IGFuYWx5emUgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gVGhlIGZhY3QgdGhhdCBpdCB0b3VjaGVzIGBtbS9pbnRlcm5hbC5oYCwgYG1tL21lbW9yeS10aWVycy5jYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgY29yZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgTlVNQSBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGltcGFjdCB0aGUgZnVuZGFtZW50YWwgem9uZWxpc3QgY29uc3RydWN0aW9uIGFuZCBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG1zLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHdpdGggdGhlIHJlbmFtaW5nL21vZGlmaWNhdGlvbiBvZiBgZmluZF9uZXh0X2Jlc3Rfbm9kZWAgdG8gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gLiBUaGUgYWRkaXRpb24gb2YgdGhlIGBjYW5kaWRhdGUgbm9kZW1hc2tgIHBhcmFtZXRlciBpcyBhIGtleSBpbmRpY2F0b3IuIFRoaXMgc3VnZ2VzdHMgYSBtb3JlIHJlZmluZWQgb3IgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gbm9kZSBzZWxlY3Rpb24sIHByb2JhYmx5IHdpdGggdGhlIGdvYWwgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgTlVNQS4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBtYXNrIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gVGhlIGNoYW5nZXMgdG8gYG5leHRfZGVtb3Rpb25fbm9kZWAgYW5kIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaW4gYG1tL21lbW9yeS10aWVycy5jYCBhcmUgYWxzbyB3b3J0aCBpbW1lZGlhdGUgYXR0ZW50aW9uIOKAkyBsaWtlbHkgcmVsYXRlZCB0byB0aWVyZWQgbWVtb3J5IHByb21vdGlvbi9kZW1vdGlvbiBzdHJhdGVnaWVzLiBUaGVuIHRoZXJlIGlzIHRoaXMgc2V0IG9mIGNoYW5nZXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHdpdGggdGhlIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAsIGBidWlsZF9ub2RlX3pvbmVsaXN0YCwgYW5kIGBidWlsZF96b25lbGlzdHNgIGZ1bmN0aW9ucyBhbGwgYmVpbmcgdG91Y2hlZC4gVGhpcyBoYXMgdGhlIGhhbGxtYXJrcyBvZiBhIHByb2ZvdW5kIGltcGFjdCBvbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdG9wb2xvZ3ksIHNvIEkgbmVlZCB0byBzZWUgaG93IHRoZSBhbGxvY2F0aW9uIHpvbmVsaXN0cyBhcmUgYnVpbHQgaW4gdGhpcyBub2RlIG9yZGVyIGFuZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB0aGUgZXhhY3QgY2FsbCBzaXRlcyBhbmQgaG93IHRoZXNlIGNoYW5nZWQgZnVuY3Rpb25zIGFyZSB1dGlsaXplZC4gSXQgd2lsbCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCB0byBzZWUgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ1OjU5LjU2NzAxMjUwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTgwMzE1NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfbmV4dF9iZXN0X25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0xMTMxPWV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL2ludGVybmFsLmgtMTEzMi1cXHRcXHRcXHRcXHQgIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbm1tL2ludGVybmFsLmg6MTEzMzpleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbm1tL2ludGVybmFsLmgtMTEzNC1cXHRcXHRcXHRcXHQgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0xMTM4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTE0Mi19XFxubW0vaW50ZXJuYWwuaDoxMTQzOnN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbm1tL2ludGVybmFsLmgtMTE0NC1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTMzMD1pbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy0zNzItXFx0bm9kZXNfY29tcGxlbWVudChtYXNrLCAqYWxsb3dlZF9tYXNrKTtcXG5tbS9tZW1vcnktdGllcnMuYzozNzM6XFx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNm1hc2ssIFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbm1tL21lbW9yeS10aWVycy5jLTM3NC19XFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz00MjU9c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTQ1Mi1cXHRcXHQvKlxcbm1tL21lbW9yeS10aWVycy5jOjQ1MzpcXHRcXHQgKiBmaW5kX25leHRfYmVzdF9ub2RlX2luLCB1c2UgJ3VzZWQnIG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0Llxcbm1tL21lbW9yeS10aWVycy5jLTQ1NC1cXHRcXHQgKiBBZGQgYWxsIG1lbW9yeSBub2RlcyBleGNlcHQgdGhlIHNlbGVjdGVkIG1lbW9yeSB0aWVyXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy00NjUtXFx0XFx0ZG8ge1xcbm1tL21lbW9yeS10aWVycy5jOjQ2NjpcXHRcXHRcXHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFxcdTAwMjZ0aWVyX25vZGVzLFxcbm1tL21lbW9yeS10aWVycy5jLTQ2Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Nzc5PXN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTc4MS0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NTc4MjogKiBmaW5kX25leHRfYmVzdF9ub2RlX2luIC0gZmluZCB0aGUgbmV4dCBub2RlIHRoYXQgc2hvdWxkIGFwcGVhciBpbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0XFxubW0vcGFnZV9hbGxvYy5jLTU3ODMtICogQG5vZGU6IG5vZGUgd2hvc2UgZmFsbGJhY2sgbGlzdCB3ZSdyZSBhcHBlbmRpbmdcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01Nzk2LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1Nzk3OmludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcXG5tbS9wYWdlX2FsbG9jLmMtNTc5OC1cXHRcXHRcXHQgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU4OTgtXFxubW0vcGFnZV9hbGxvYy5jOjU4OTk6XFx0d2hpbGUgKChub2RlID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihsb2NhbF9ub2RlLCBcXHUwMDI2dXNlZF9tYXNrLFxcbm1tL3BhZ2VfYWxsb2MuYy01OTAwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNhbmRpZGF0ZXMpKSBcXHUwMDNlPSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjAyLjU0NzMzMjI0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTU1MjEzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBpdDpcblxuKipEaWdnaW5nIGludG8gTWVtb3J5IFRpZXIgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGdvaW5nIHRvIHNwZW5kIHNvbWUgdGltZSBleHBsb3JpbmcgdGhlIHJlbGF0ZWQgY29kZSBpbiBgbW0vbWVtb3J5LXRpZXJzLmNgIGFuZCBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgZ29hbCBoZXJlIGlzbid0IHRvIG5lY2Vzc2FyaWx5IG1lbW9yaXplIGV2ZXJ5IGRldGFpbCwgYnV0IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSSB3YW50IHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhbHNvIHRvIHRyYWNlIGRvd24gd2hlcmUgdGhlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBiZWluZyB1c2VkLCB0aGUgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IGZpbGVzIHdpbGwgcHJvdmlkZSBhIG1vcmUgc29saWQgZm91bmRhdGlvbiB0byBzdGFydCBhc3Nlc3NpbmcgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlLiBJdCdsbCBhbHNvIGxpa2VseSByZXZlYWwgc29tZSBvZiB0aGUgYXNzdW1wdGlvbnMgYW5kIGNvbnN0cmFpbnRzIHRoYXQgd2VyZSBjb25zaWRlcmVkIGJ5IHRoZSBkZXZlbG9wZXJzIHdoZW4gdGhleSB3cm90ZSBpdC4gSG9wZWZ1bGx5LCB0aGlzIHByb3ZpZGVzIHRoZSBiYWNrZ3JvdW5kIEkgbmVlZCB0byBmb3JtIGEgcHJvcGVyIGV2YWx1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjowNC43MDI4NTcwMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LXRpZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHQvKlxcbiAzNTM6XFx0XFx0ICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIHRhcmdldCBub2RlcywganVzdCBzZWxlY3Qgb25lXFxuIDM1NDpcXHRcXHQgKiB0YXJnZXQgbm9kZSByYW5kb21seS5cXG4gMzU1OlxcdFxcdCAqXFxuIDM1NjpcXHRcXHQgKiBJbiBhZGRpdGlvbiwgd2UgY2FuIGFsc28gdXNlIHJvdW5kLXJvYmluIHRvIHNlbGVjdFxcbiAzNTc6XFx0XFx0ICogdGFyZ2V0IG5vZGUsIGJ1dCB3ZSBzaG91bGQgaW50cm9kdWNlIGFub3RoZXIgdmFyaWFibGVcXG4gMzU4OlxcdFxcdCAqIGZvciBub2RlX2RlbW90aW9uW10gdG8gcmVjb3JkIGxhc3Qgc2VsZWN0ZWQgdGFyZ2V0IG5vZGUsXFxuIDM1OTpcXHRcXHQgKiB0aGF0IG1heSBjYXVzZSBjYWNoZSBwaW5nLXBvbmcgZHVlIHRvIHRoZSBjaGFuZ2luZyBvZlxcbiAzNjA6XFx0XFx0ICogbGFzdCB0YXJnZXQgbm9kZS4gT3IgaW50cm9kdWNpbmcgcGVyLWNwdSBkYXRhIHRvIGF2b2lkXFxuIDM2MTpcXHRcXHQgKiBjYWNoaW5nIGlzc3VlLCB3aGljaCBzZWVtcyBtb3JlIGNvbXBsaWNhdGVkLiBTbyBzZWxlY3RpbmdcXG4gMzYyOlxcdFxcdCAqIHRhcmdldCBub2RlIHJhbmRvbWx5IHNlZW1zIGJldHRlciB1bnRpbCBub3cuXFxuIDM2MzpcXHRcXHQgKi9cXG4gMzY0OlxcdFxcdGlmICghbm9kZXNfZW1wdHkobWFzaykpXFxuIDM2NTpcXHRcXHRcXHRyZXR1cm4gbm9kZV9yYW5kb20oXFx1MDAyNm1hc2spO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHQvKlxcbiAzNjg6XFx0XFx0ICogUHJlZmVycmVkIG5vZGVzIGFyZSBub3QgaW4gYWxsb3dlZF9tYXNrLiBGbGlwIGJpdHMgaW5cXG4gMzY5OlxcdFxcdCAqIGFsbG93ZWRfbWFzayBhcyB1c2VkIG5vZGUgbWFzay4gVGhlbiwgdXNlIGl0IHRvIGdldCB0aGVcXG4gMzcwOlxcdFxcdCAqIGNsb3Nlc3QgZGVtb3Rpb24gdGFyZ2V0LlxcbiAzNzE6XFx0XFx0ICovXFxuIDM3MjpcXHRcXHRub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spO1xcbiAzNzM6XFx0XFx0cmV0dXJuIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNm1hc2ssIFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbiAzNzQ6XFx0fVxcbiAzNzU6XFx0XFxuIDM3NjpcXHRzdGF0aWMgdm9pZCBkaXNhYmxlX2FsbF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuIDM3NzpcXHR7XFxuIDM3ODpcXHRcXHRzdHJ1Y3QgbWVtb3J5X3RpZXIgKm1lbXRpZXI7XFxuIDM3OTpcXHRcXHRpbnQgbm9kZTtcXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShub2RlLCBOX01FTU9SWSkge1xcbiAzODI6XFx0XFx0XFx0bm9kZV9kZW1vdGlvbltub2RlXS5wcmVmZXJyZWQgPSBOT0RFX01BU0tfTk9ORTtcXG4gMzgzOlxcdFxcdFxcdC8qXFxuIDM4NDpcXHRcXHRcXHQgKiBXZSBhcmUgaG9sZGluZyBtZW1vcnlfdGllcl9sb2NrLCBpdCBpcyBzYWZlXFxuIDM4NTpcXHRcXHRcXHQgKiB0byBhY2Nlc3MgcGdkYS1cXHUwMDNlbWVtdGllci5cXG4gMzg2OlxcdFxcdFxcdCAqL1xcbiAzODc6XFx0XFx0XFx0bWVtdGllciA9IF9fbm9kZV9nZXRfbWVtb3J5X3RpZXIobm9kZSk7XFxuIDM4ODpcXHRcXHRcXHRpZiAobWVtdGllcilcXG4gMzg5OlxcdFxcdFxcdFxcdG1lbXRpZXItXFx1MDAzZWxvd2VyX3RpZXJfbWFzayA9IE5PREVfTUFTS19OT05FO1xcbiAzOTA6XFx0XFx0fVxcbiAzOTE6XFx0XFx0LypcXG4gMzkyOlxcdFxcdCAqIEVuc3VyZSB0aGF0IHRoZSBcXFwiZGlzYWJsZVxcXCIgaXMgdmlzaWJsZSBhY3Jvc3MgdGhlIHN5c3RlbS5cXG4gMzkzOlxcdFxcdCAqIFJlYWRlcnMgd2lsbCBzZWUgZWl0aGVyIGEgY29tYmluYXRpb24gb2YgYmVmb3JlK2Rpc2FibGVcXG4gMzk0OlxcdFxcdCAqIHN0YXRlIG9yIGRpc2FibGUrYWZ0ZXIuICBUaGV5IHdpbGwgbmV2ZXIgc2VlIGJlZm9yZSBhbmRcXG4gMzk1OlxcdFxcdCAqIGFmdGVyIHN0YXRlIHRvZ2V0aGVyLlxcbiAzOTY6XFx0XFx0ICovXFxuIDM5NzpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0c3RhdGljIHZvaWQgZHVtcF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuIDQwMTpcXHR7XFxuIDQwMjpcXHRcXHRpbnQgbm9kZTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShub2RlLCBOX01FTU9SWSkge1xcbiA0MDU6XFx0XFx0XFx0c3RydWN0IG1lbW9yeV90aWVyICptZW10aWVyID0gX19ub2RlX2dldF9tZW1vcnlfdGllcihub2RlKTtcXG4gNDA2OlxcdFxcdFxcdG5vZGVtYXNrX3QgcHJlZmVycmVkID0gbm9kZV9kZW1vdGlvbltub2RlXS5wcmVmZXJyZWQ7XFxuIDQwNzpcXHRcXG4gNDA4OlxcdFxcdFxcdGlmICghbWVtdGllcilcXG4gNDA5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjowNC43MDMwMzY3NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyMDA4OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlbW90aW9uIExvZ2ljKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGRlbW90aW9uIHByb2Nlc3MgYWdhaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlc2Ugbm9kZXMgYXJlIGdldHRpbmcgZGVtb3RlZCBhbmQgd2h5LiBGaXJzdCwgSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGwgc2l0ZXMgb2YgYG5leHRfZGVtb3Rpb25fbm9kZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiAqaG93KiB0aGUgc3lzdGVtIGlzIHNlbGVjdGluZyBub2RlcyBmb3IgZGVtb3Rpb24uIFRoZW4sIEknbGwgdHVybiBteSBhdHRlbnRpb24gdG8gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYC4gVW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgbmV4dF9kZW1vdGlvbl9ub2RlYCB3aWxsIGJlIGNydWNpYWwuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8ga25vdyAqd2hhdCogbWFrZXMgbm9kZXMgYSB0YXJnZXQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hlcmUgdGhhdCBkZWNpc2lvbiBwcm9jZXNzIGhhcHBlbnMuIEZpbmFsbHksIEknbGwgbmVlZCB0byByZW1lbWJlciBob3cgdGhlIHpvbmVsaXN0IGlzIGJ1aWx0LCB0byBiZSBzdXJlIHRoZSBkZW1vdGlvbiB0YXJnZXRzIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0cyBhcmUgY29ycmVjdCwgYW5kIHByb3Blcmx5IHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN5c3RlbSwgYW5kIHRoYXQgYWxsIG5vZGVzIHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgem9uZXMsIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MDYuODU1MDQ4NjUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzAwODAzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV4dF9kZW1vdGlvbl9ub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg9NTQ9dm9pZCBtdF9wdXRfbWVtb3J5X3R5cGVzKHN0cnVjdCBsaXN0X2hlYWQgKm1lbW9yeV90eXBlcyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC01NS0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaDo1NjppbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtNTctdm9pZCBub2RlX2dldF9hbGxvd2VkX3RhcmdldHMocGdfZGF0YV90ICpwZ2RhdCwgbm9kZW1hc2tfdCAqdGFyZ2V0cyk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaD01OD1ib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSk7XFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC01OS0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg6NjA6c3RhdGljIGlubGluZSBpbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC02MS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTk5PXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ub2RlX21lbW9yeV90eXBlKGludCBub2RlLCBzdHJ1Y3QgbWVtb3J5X2Rldl90eXBlICptZW10eXBlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC0xMDMtXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaDoxMDQ6c3RhdGljIGlubGluZSBpbnQgbmV4dF9kZW1vdGlvbl9ub2RlKGludCBub2RlLCBjb25zdCBub2RlbWFza190ICphbGxvd2VkX21hc2spXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC0xMDUte1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9MzAyPXZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy0zMjAtLyoqXFxubW0vbWVtb3J5LXRpZXJzLmM6MzIxOiAqIG5leHRfZGVtb3Rpb25fbm9kZSgpIC0gR2V0IHRoZSBuZXh0IG5vZGUgaW4gdGhlIGRlbW90aW9uIHBhdGhcXG5tbS9tZW1vcnktdGllcnMuYy0zMjItICogQG5vZGU6IFRoZSBzdGFydGluZyBub2RlIHRvIGxvb2t1cCB0aGUgbmV4dCBub2RlXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy0zMjktICovXFxubW0vbWVtb3J5LXRpZXJzLmM6MzMwOmludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcXG5tbS9tZW1vcnktdGllcnMuYy0zMzEte1xcbi0tXFxubW0vdm1zY2FuLmM9MTAxNz1zdGF0aWMgdW5zaWduZWQgaW50IGRlbW90ZV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRlbW90ZV9mb2xpb3MsXFxuLS1cXG5tbS92bXNjYW4uYy0xMDQ0LVxcbm1tL3Ztc2Nhbi5jOjEwNDU6XFx0dGFyZ2V0X25pZCA9IG5leHRfZGVtb3Rpb25fbm9kZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgXFx1MDAyNmFsbG93ZWRfbWFzayk7XFxubW0vdm1zY2FuLmMtMTA0Ni1cXHRpZiAodGFyZ2V0X25pZCA9PSBOVU1BX05PX05PREUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjA5LjAyNTEzNDgzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2OTM1NDE1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFpvbmVsaXN0IENvbnN0cnVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgYXJvdW5kIHpvbmVsaXN0cy4gSSdtIGZvY3VzaW5nIG9uIGBidWlsZF9hbGxfem9uZWxpc3RzYCBzcGVjaWZpY2FsbHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGggaGVyZS4gV2hvJ3MgaW52b2tpbmcgdGhpcyBmdW5jdGlvbj8gS25vd2luZyB0aGUgY2FsbGVycyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHRyaWdnZXJpbmcgY29uZGl0aW9ucyBhbmQgdGhlIG92ZXJhbGwgZmxvdyBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5JJ2xsIGFsc28ga2VlcCBhIGNsb3NlIGV5ZSBvbiBgYnVpbGRfem9uZWxpc3RzYCBhbmQgYGJ1aWxkX25vZGVfem9uZWxpc3RgLiBJdCdzIGxpa2VseSB0aGF0IGBidWlsZF9hbGxfem9uZWxpc3RzYCBkZWxlZ2F0ZXMgc29tZSBvZiBpdHMgd29yayB0byB0aG9zZSBmdW5jdGlvbnMgb3IgcGVyaGFwcyBjYWxscyB0aGVtIGRpcmVjdGx5LiBVbmRlcnN0YW5kaW5nIHRoZSBkaXZpc2lvbiBvZiByZXNwb25zaWJpbGl0eSBiZXR3ZWVuIHRoZXNlIHRocmVlIGlzIGtleSB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgY2FsbHMgYXJlIHJlY3Vyc2l2ZSwgYXMgaXQgY291bGQgY2hhbmdlIHRoZSB3YXkgdGhleSBhcmUgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBub3RlIGhvdyB0aGV5IGFyZSB1c2VkIGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uLCBOVU1BIG5vZGUgaGFuZGxpbmcsIGFuZCBob3cgdGhlc2Ugem9uZWxpc3RzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBtZSBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGJ1aWxkcyB0aGVzZSB6b25lbGlzdHMsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgaW5mb3JtZWQgZGVjaXNpb25zIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjoxMS43MTg2Nzk1NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDY4MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1aWxkX3pvbmVsaXN0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTU3OTc9aW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU4NTAtICovXFxubW0vcGFnZV9hbGxvYy5jOjU4NTE6c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdfZGF0YV90ICpwZ2RhdCwgaW50ICpub2RlX29yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy01ODUyLVxcdFxcdHVuc2lnbmVkIGludCBucl9ub2RlcywgaW50IHpsaWR4KVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU4OTA9c3RhdGljIHZvaWQgYnVpbGRfbm9kZV96b25lbGlzdChwZ19kYXRhX3QgKnBnZGF0LCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU5MTQtXFxubW0vcGFnZV9hbGxvYy5jOjU5MTU6XFx0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7XFxubW0vcGFnZV9hbGxvYy5jLTU5MTYtXFx0Km5yID0gbnJfbm9kZXM7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTkxOC1cXG5tbS9wYWdlX2FsbG9jLmM6NTkxOTpzdGF0aWMgdm9pZCBidWlsZF96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcXG5tbS9wYWdlX2FsbG9jLmMtNTkyMC17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTk1Nj1zdGF0aWMgdm9pZCBzZXR1cF9taW5fc2xhYl9yYXRpbyh2b2lkKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01OTU4LVxcbm1tL3BhZ2VfYWxsb2MuYzo1OTU5OnN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3BhZ2VfYWxsb2MuYy01OTYwLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01OTk2PXN0YXRpYyB2b2lkIF9fYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTYwMjQtXFx0aWYgKHNlbGYgXFx1MDAyNlxcdTAwMjYgIW5vZGVfb25saW5lKHNlbGYtXFx1MDAzZW5vZGVfaWQpKSB7XFxubW0vcGFnZV9hbGxvYy5jOjYwMjU6XFx0XFx0YnVpbGRfem9uZWxpc3RzKHNlbGYpO1xcbm1tL3BhZ2VfYWxsb2MuYy02MDI2LVxcdH0gZWxzZSB7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNjAzMy1cXG5tbS9wYWdlX2FsbG9jLmM6NjAzNDpcXHRcXHRcXHRidWlsZF96b25lbGlzdHMocGdkYXQpO1xcbm1tL3BhZ2VfYWxsb2MuYy02MDM1LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MTEuNzk2NzUzODE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTE4ODgwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugem9uZWxpc3RzIGFyZSBiZWluZyBjb25zdHJ1Y3RlZCBhbmQgdXRpbGl6ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYF9fYnVpbGRfYWxsX3pvbmVsaXN0c2AgYW5kIGBidWlsZF9hbGxfem9uZWxpc3RzYCBzcGVjaWZpY2FsbHkuIEkgd2FudCB0byBzZWUgKndoZXJlKiB0aGV5J3JlIGJlaW5nIGludm9rZWQsIGJlY2F1c2UgdGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlaXIgcHVycG9zZS4gQXJlIHRoZXkgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBob3RwbHVnIGV2ZW50cz8gSXMgdGhlIE5VTUEgem9uZWxpc3Qgc3lzY3RsIGludm9sdmVkIGluIHNvbWUgd2F5PyBPciBhcmUgdGhlcmUgb3RoZXIgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBjb25zaWRlcj8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIGNoYW5nZXMgaW4gdGhpcyBhcmVhLiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCBhbmQgbWFwIG91dCB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjAwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MTMuOTg4NjQ0NjAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgyNjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidWlsZF9hbGxfem9uZWxpc3RzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTExNDA9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIxNS1cXHRpZiAobmVlZF96b25lbGlzdHNfcmVidWlsZClcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyMTY6XFx0XFx0YnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMTctXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTEyNTY9c3RhdGljIHBnX2RhdGFfdCAqaG90YWRkX2luaXRfcGdkYXQoaW50IG5pZClcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTI3NS1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyNzY6XFx0YnVpbGRfYWxsX3pvbmVsaXN0cyhwZ2RhdCk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjc3LVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTU1PWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTM5LVxcdFxcdHpvbmVfcGNwX3Jlc2V0KHpvbmUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjE0MDpcXHRcXHRidWlsZF9hbGxfem9uZWxpc3RzKE5VTEwpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE0MS1cXHR9XFxuLS1cXG5tbS9tbV9pbml0LmM9MjY5OD12b2lkIF9faW5pdCBtbV9jb3JlX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0yNzA0LVxcdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFxcdTAwM2UgMik7XFxubW0vbW1faW5pdC5jOjI3MDU6XFx0YnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcXG5tbS9tbV9pbml0LmMtMjcwNi1cXHRwYWdlX2FsbG9jX2luaXRfY3B1aHAoKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01OTk0PXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyX2NwdV96b25lc3RhdCwgYm9vdF96b25lc3RhdHMpO1xcbm1tL3BhZ2VfYWxsb2MuYy01OTk1LVxcbm1tL3BhZ2VfYWxsb2MuYzo1OTk2OnN0YXRpYyB2b2lkIF9fYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKVxcbm1tL3BhZ2VfYWxsb2MuYy01OTk3LXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02MDU1PXN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdFxcbm1tL3BhZ2VfYWxsb2MuYzo2MDU2OmJ1aWxkX2FsbF96b25lbGlzdHNfaW5pdCh2b2lkKVxcbm1tL3BhZ2VfYWxsb2MuYy02MDU3LXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02MDU5LVxcbm1tL3BhZ2VfYWxsb2MuYzo2MDYwOlxcdF9fYnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTtcXG5tbS9wYWdlX2FsbG9jLmMtNjA2MS1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02MDg0LSAqXFxubW0vcGFnZV9hbGxvYy5jOjYwODU6ICogX19yZWYgZHVlIHRvIGNhbGwgb2YgX19pbml0IGFubm90YXRlZCBoZWxwZXIgYnVpbGRfYWxsX3pvbmVsaXN0c19pbml0XFxubW0vcGFnZV9hbGxvYy5jLTYwODYtICogW3Byb3RlY3RlZCBieSBTWVNURU1fQk9PVElOR10uXFxubW0vcGFnZV9hbGxvYy5jLTYwODctICovXFxubW0vcGFnZV9hbGxvYy5jOjYwODg6dm9pZCBfX3JlZiBidWlsZF9hbGxfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXFxubW0vcGFnZV9hbGxvYy5jLTYwODkte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTYwOTItXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykge1xcbm1tL3BhZ2VfYWxsb2MuYzo2MDkzOlxcdFxcdGJ1aWxkX2FsbF96b25lbGlzdHNfaW5pdCgpO1xcbm1tL3BhZ2VfYWxsb2MuYy02MDk0LVxcdH0gZWxzZSB7XFxubW0vcGFnZV9hbGxvYy5jOjYwOTU6XFx0XFx0X19idWlsZF9hbGxfem9uZWxpc3RzKHBnZGF0KTtcXG5tbS9wYWdlX2FsbG9jLmMtNjA5Ni1cXHRcXHQvKiBjcHVzZXQgcmVmcmVzaCByb3V0aW5lIHNob3VsZCBiZSBoZXJlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjE0LjA2NDQ3NTgxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzk5Njg4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYGJ1aWxkX2FsbF96b25lbGlzdHNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBidWlsZF9hbGxfem9uZWxpc3RzYCBpcyB1c2VkLiBSaWdodCwgaXQncyBub3QganVzdCBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uIEJlc2lkZXMgdGhlIG9idmlvdXMgc2NlbmFyaW9zLCBpdCdzIGFsc28gY3J1Y2lhbCBmb3IgbWFuYWdpbmcgb25saW5lIGFuZCBvZmZsaW5lIHBhZ2VzIOKAkyB0aGF0IGluY2x1ZGVzIG1lbW9yeSBob3RwbHVnIHRocm91Z2ggc3lzZnMgYW5kIHByb2JpbmcsIGFuZCBpdCdzIGludGVydHdpbmVkIHdpdGggbWVtb3J5IHRpZXJzIGFuZCBOVU1BIGRlbW90aW9uIHN0cmF0ZWdpZXMuIFRoYXQncyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiByZXNwb25zaWJpbGl0aWVzLiBHaXZlbiB0aGUgY29ubmVjdGlvbiB0byBtZW1vcnkgdGllcnMsIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBpbiBgbW0vbWVtb3J5LXRpZXJzLmNgLiBMZXQncyBzZWUgd2hhdCB0aGF0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzIzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MTcuNDY0MTY1OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5ODMxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktdGllcnMuYz00MDA9c3RhdGljIHZvaWQgZHVtcF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy00MjQtICovXFxubW0vbWVtb3J5LXRpZXJzLmM6NDI1OnN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxubW0vbWVtb3J5LXRpZXJzLmMtNDI2LXtcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTUyMS0jZWxzZVxcbm1tL21lbW9yeS10aWVycy5jOjUyMjpzdGF0aWMgaW5saW5lIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZCkge31cXG5tbS9tZW1vcnktdGllcnMuYy01MjMtI2VuZGlmIC8qIENPTkZJR19OVU1BX01JR1JBVElPTiAqL1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9NzA4PXN0YXRpYyBpbnQgX19pbml0IG1lbW9yeV90aWVyX2xhdGVfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNzMxLVxcbm1tL21lbW9yeS10aWVycy5jOjczMjpcXHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xcbm1tL21lbW9yeS10aWVycy5jLTczMy1cXHRwdXRfb25saW5lX21lbXMoKTtcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTg4Mj1zdGF0aWMgaW50IF9fbWVtaW5pdCBtZW10aWVyX2hvdHBsdWdfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLFxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtODkxLVxcdFxcdGlmIChjbGVhcl9ub2RlX21lbW9yeV90aWVyKG5uLVxcdTAwM2VuaWQpKVxcbm1tL21lbW9yeS10aWVycy5jOjg5MjpcXHRcXHRcXHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xcbm1tL21lbW9yeS10aWVycy5jLTg5My1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1lbW9yeV90aWVyX2xvY2spO1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtODk4LVxcdFxcdGlmICghSVNfRVJSKG1lbXRpZXIpKVxcbm1tL21lbW9yeS10aWVycy5jOjg5OTpcXHRcXHRcXHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xcbm1tL21lbW9yeS10aWVycy5jLTkwMC1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1lbW9yeV90aWVyX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjoxNy41NjQwMDIzNDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU5NzkwNTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGF0IGBuZXh0X2RlbW90aW9uX25vZGVgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBieSBgZGVtb3RlX2ZvbGlvX2xpc3RgIHdoaWNoIGlzIGl0c2VsZiB0cmlnZ2VyZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltIG9yIGRlbW90aW9uIGN5Y2xlcy4gVGhhdCBtZWFucyB0aGUgcmVsZXZhbnQgY29kZSBwYXRoIGlzIGV4ZXJjaXNlZCBkdXJpbmcgcGFnZSBhbGxvY2F0aW9uLCBieSBrc3dhcGQsIG9yIHdoZW4gdGhlIHN5c3RlbSBleHBsaWNpdGx5IHRyaWdnZXJzIGEgZGVtb3Rpb24gdGhyb3VnaCBzeXNmcy4gV2UndmUgYWxzbyBnb3QgYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIGJlaW5nIGNhbGxlZCBieSBgbmV4dF9kZW1vdGlvbl9ub2RlYCwgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCwgYW5kIGBidWlsZF9ub2RlX3pvbmVsaXN0YCwgYW5kIHRoYXQgYGJ1aWxkX25vZGVfem9uZWxpc3RgIGlzIGNhbGxlZCB3aGVuIHpvbmVsaXN0cyBhcmUgY29uc3RydWN0ZWQuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIGZ1enppbmcgY3JpdGVyaWEuIFRoZSBwcm9tcHQgY2xlYXJseSBsYXlzIG91dCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgdGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgYG1tL2AsIHN5bmNocm9uaXphdGlvbiwgQlBGLCBhbmQgb3RoZXJzLiBGdXJ0aGVybW9yZSwgaXQgaW5jbHVkZXMgcmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cCBpZiBpdCB0b3VjaGVzIGRhdGFzdHJ1Y3R1cmVzLCBoZWxwZXJzIG9yIGFsZ29yaXRobXMuXG5cblRoaXMgcGF0Y2ggaXMgdW5kZW5pYWJseSB0b3VjaGluZyBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApLCBkaXJlY3RseSBpbXBhY3RpbmcgTlVNQSBmYWxsYmFjayBub2RlIHNlbGVjdGlvbiAoYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gKSwgem9uZWxpc3QgYnVpbGRpbmcgKGBidWlsZF9ub2RlX3pvbmVsaXN0YCksIGFuZCB0aGUgdmVyeSBoZWFydCBvZiBtZW1vcnkgdGllciBkZW1vdGlvbiB0YXJnZXQgY2FsY3VsYXRpb24gKGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JlIHRvIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbWVtb3J5IGFuZCB0aGUgZGVjaXNpb25zIGl0IG1ha2VzIGR1cmluZyByZWNsYWltIGFuZCBkZW1vdGlvbi4gSXQncyBhIGNsZWFyIGZpdCBmb3IgdGhlIGNyaXRlcmlhLiBUaGVyZWZvcmUsICoqYFdvcnRoRnV6emluZyA9IHRydWVgKiouXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgbW0vbWVtb3J5LXRpZXJzLmNgIGFuZCB0cmFjZSBkZXBlbmRlbmNpZXMgZm9yIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgY29kZSBhbmQgdGhlIGxlYXN0IHViaXF1aXRvdXMgc3ltYm9scyB0aGF0IGFyZSBleGVyY2lzZWQgZHVyaW5nIHRoaXMgY29kZSBwYXRoLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGZvY3VzZWQgYXBwcm9hY2ggdG8gZnV6emluZyB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjoyMy4xNjE5MTA0NzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTM5MTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX25leHRfYmVzdF9ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTExMzE9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxubW0vaW50ZXJuYWwuaC0xMTMyLVxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XFxubW0vaW50ZXJuYWwuaDoxMTMzOmV4dGVybiBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxubW0vaW50ZXJuYWwuaC0xMTM0LVxcdFxcdFxcdFxcdCAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTExMzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMTQyLX1cXG5tbS9pbnRlcm5hbC5oOjExNDM6c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxubW0vaW50ZXJuYWwuaC0xMTQ0LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9MzMwPWludCBuZXh0X2RlbW90aW9uX25vZGUoaW50IG5vZGUsIGNvbnN0IG5vZGVtYXNrX3QgKmFsbG93ZWRfbWFzaylcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTM3Mi1cXHRub2Rlc19jb21wbGVtZW50KG1hc2ssICphbGxvd2VkX21hc2spO1xcbm1tL21lbW9yeS10aWVycy5jOjM3MzpcXHRyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcXHUwMDI2bWFzaywgXFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxubW0vbWVtb3J5LXRpZXJzLmMtMzc0LX1cXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTQyNT1zdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNDUyLVxcdFxcdC8qXFxubW0vbWVtb3J5LXRpZXJzLmM6NDUzOlxcdFxcdCAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4sIHVzZSAndXNlZCcgbm9kZW1hc2sgYXMgYSBza2lwIGxpc3QuXFxubW0vbWVtb3J5LXRpZXJzLmMtNDU0LVxcdFxcdCAqIEFkZCBhbGwgbWVtb3J5IG5vZGVzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgbWVtb3J5IHRpZXJcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTQ2NS1cXHRcXHRkbyB7XFxubW0vbWVtb3J5LXRpZXJzLmM6NDY2OlxcdFxcdFxcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXFx1MDAyNnRpZXJfbm9kZXMsXFxubW0vbWVtb3J5LXRpZXJzLmMtNDY3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0pO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU3Nzk9c3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NzgxLS8qKlxcbm1tL3BhZ2VfYWxsb2MuYzo1NzgyOiAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3RcXG5tbS9wYWdlX2FsbG9jLmMtNTc4My0gKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJ3JlIGFwcGVuZGluZ1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU3OTYtICovXFxubW0vcGFnZV9hbGxvYy5jOjU3OTc6aW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbm1tL3BhZ2VfYWxsb2MuYy01Nzk4LVxcdFxcdFxcdCAgIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTg5MD1zdGF0aWMgdm9pZCBidWlsZF9ub2RlX3pvbmVsaXN0KHBnX2RhdGFfdCAqcGdkYXQsIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTg5OC1cXG5tbS9wYWdlX2FsbG9jLmM6NTg5OTpcXHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFxcdTAwMjZ1c2VkX21hc2ssXFxubW0vcGFnZV9hbGxvYy5jLTU5MDAtXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FuZGlkYXRlcykpIFxcdTAwM2U9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MjMuMjY3MzA1NzMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODExNTIzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29tcGlsZXIgRGlyZWN0aXZlIENvbmZsaWN0cyoqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbiBvbiB0aGlzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1tL2ludGVybmFsLmhgIGFyb3VuZCBsaW5lIDExMzAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBhbiBpc3N1ZSB3aXRoIHNvbWUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHNwZWNpZmljYWxseSBgI2lmZGVmYCBndWFyZHMsIHRoYXQgYXJlIGNyZWF0aW5nIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluIHRoYXQgYXJlYSBhbmQgaWYgYW55IG9mIHRob3NlIGNvbmRpdGlvbnMgYXJlIGNhdXNpbmcgdGhpcy4gSSdsbCBmb2N1cyBvbiB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJvdW5kIGxpbmUgMTEzMC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSBzdXNwZWN0IGFuIGlzc3VlIHdpdGggZGlmZmVyaW5nIGNvbXBpbGF0aW9uIHN0YXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjoyNS4wNDg0NjA0MTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMDpcXHQjZWxzZSAvKiAhQ09ORklHX01NVSAqL1xcbjExMjE6XFx0c3RhdGljIGlubGluZSB2b2lkIHVubWFwX21hcHBpbmdfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XFxuMTEyMjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfbmV3X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxcbjExMjM6XFx0c3RhdGljIGlubGluZSBib29sIG5lZWRfbWxvY2tfZHJhaW4oaW50IGNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG4xMTI0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19kcmFpbl9sb2NhbCh2b2lkKSB7IH1cXG4xMTI1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19kcmFpbl9yZW1vdGUoaW50IGNwdSkgeyB9XFxuMTEyNjpcXHQjZW5kaWYgLyogIUNPTkZJR19NTVUgKi9cXG4xMTI3OlxcdFxcbjExMjg6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMTEyOTpcXHRleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xcbjExMzA6XFx0XFxuMTEzMTpcXHRleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4xMTMyOlxcdFxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7XFxuMTEzMzpcXHRleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxcbjExMzQ6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcXG4xMTM1OlxcdCNlbHNlXFxuMTEzNjpcXHQjZGVmaW5lIG5vZGVfcmVjbGFpbV9tb2RlIDBcXG4xMTM3OlxcdFxcbjExMzg6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbjExMzk6XFx0XFx0XFx0XFx0XFx0XFx0IGdmcF90IG1hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4xMTQwOlxcdHtcXG4xMTQxOlxcdFxcdHJldHVybiAwO1xcbjExNDI6XFx0fVxcbjExNDM6XFx0c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxuMTE0NDpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcXG4xMTQ1OlxcdHtcXG4xMTQ2OlxcdFxcdHJldHVybiBOVU1BX05PX05PREU7XFxuMTE0NzpcXHR9XFxuMTE0ODpcXHQjZW5kaWZcXG4xMTQ5OlxcdFxcbjExNTA6XFx0c3RhdGljIGlubGluZSBib29sIG5vZGVfcmVjbGFpbV9lbmFibGVkKHZvaWQpXFxuMTE1MTpcXHR7XFxuMTE1MjpcXHRcXHQvKiBJcyBhbnkgbm9kZV9yZWNsYWltX21vZGUgYml0IHNldD8gKi9cXG4xMTUzOlxcdFxcdHJldHVybiBub2RlX3JlY2xhaW1fbW9kZSBcXHUwMDI2IChSRUNMQUlNX1pPTkV8UkVDTEFJTV9XUklURXxSRUNMQUlNX1VOTUFQKTtcXG4xMTU0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MjUuMDQ4NjAwODM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTcxODEzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgTlVNQSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIGlzIGRlZmluaXRlbHkgYmVoaW5kIHRoZSBgQ09ORklHX05VTUFgIGdhdGUuIFRpbWUgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gcnVsZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTGV0J3MgZGlnIGludG8gYG1tL21lbW9yeS10aWVycy5jYCBhbmQgc2VlIHdoYXQgdGhlIGBtbS9NYWtlZmlsZWAgaGFzIHRvIHNheSBhYm91dCBpdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZ2V0cyBidWlsdCBhbmQgbGlua2VkIGluIHJlbGF0aW9uIHRvIE5VTUEgc3VwcG9ydC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21waWxhdGlvbiBkZXBlbmRlbmN5IHRob3JvdWdobHkgdG8gcHJvcGVybHkgYXNzZXNzIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MTQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjI2Ljg2NTc4NjQyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxNzAxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5LXRpZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT05OT1vYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm9cXG5tbS9NYWtlZmlsZToxMDA6b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlXFxubW0vZGFtb24vcGFkZHIuYzoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5LXRpZXJzLmhcXHUwMDNlXFxubW0vZGFtb24vcGFkZHIuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1faW5saW5lLmhcXHUwMDNlXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zeXNjdGwuaFxcdTAwM2VcXG5tbS9odWdlX21lbW9yeS5jOjM5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFxcdTAwM2VcXG5tbS9odWdlX21lbW9yeS5jLTQwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYXQuaFxcdTAwM2VcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeS5oXFx1MDAzZVxcbm1tL21lbW9yeS10aWVycy5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeS10aWVycy5oXFx1MDAzZVxcbm1tL21lbW9yeS10aWVycy5jLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz03NDc9aW50IG10X3NldF9kZWZhdWx0X2RyYW1fcGVyZihpbnQgbmlkLCBzdHJ1Y3QgYWNjZXNzX2Nvb3JkaW5hdGUgKnBlcmYsXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy03NzktXFx0XFx0cHJfaW5mbyhcXG5tbS9tZW1vcnktdGllcnMuYzo3ODA6XFxcIm1lbW9yeS10aWVyczogdGhlIHBlcmZvcm1hbmNlIG9mIERSQU0gbm9kZSAlZCBtaXNtYXRjaGVzIHRoYXQgb2YgdGhlIHJlZmVyZW5jZVxcXFxuXFxcIlxcbm1tL21lbW9yeS10aWVycy5jLTc4MS1cXFwiRFJBTSBub2RlICVkLlxcXFxuXFxcIiwgbmlkLCBkZWZhdWx0X2RyYW1fcGVyZl9yZWZfbmlkKTtcXG4tLVxcbm1tL21lbW9yeS5jLTY4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaG1lbV9mcy5oXFx1MDAzZVxcbm1tL21lbW9yeS5jOjY5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFxcdTAwM2VcXG5tbS9tZW1vcnkuYy03MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTAyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9jX2ZzLmhcXHUwMDNlXFxubW0vbWVtcG9saWN5LmM6MTAzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFxcdTAwM2VcXG5tbS9tZW1wb2xpY3kuYy0xMDQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4tLVxcbm1tL21pZ3JhdGUuYy00My0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc3lzY3RsLmhcXHUwMDNlXFxubW0vbWlncmF0ZS5jOjQ0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnktdGllcnMuaFxcdTAwM2VcXG5tbS9taWdyYXRlLmMtNDUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuLS1cXG5tbS92bXNjYW4uYy00NC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxubW0vdm1zY2FuLmM6NDU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeS10aWVycy5oXFx1MDAzZVxcbm1tL3Ztc2Nhbi5jLTQ2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vb20uaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MjYuOTU1OTYyNDU1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMzYzNDYxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE5VTUEgTWlncmF0aW9uIGluIE1lbW9yeSBUaWVycyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbWVtb3J5IHRpZXJpbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIE5VTUEgbWlncmF0aW9uIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gYG1tL21lbW9yeS10aWVycy5jYC4gTGV0J3MgZm9jdXMgb24gdGhhdCBmaWxlLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgYXJvdW5kIHRoZSBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgIGFuZCBgbmV4dF9kZW1vdGlvbl9ub2RlYCBmdW5jdGlvbnMuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IHNwb3RzIHdoZXJlIE5VTUEgbWlncmF0aW9uIHBvbGljaWVzIHdvdWxkIGludGVyYWN0IHdpdGggdGhlIHRpZXJpbmcgbG9naWMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlY2lkZXMgd2hlcmUgdG8gbW92ZSBtZW1vcnkgd2l0aGluIHRoZSBOVU1BIG5vZGVzLCBvciBpbmRlZWQsIGlmIHRoYXQncyBldmVuIGNvbnNpZGVyZWQgZGlyZWN0bHkgZHVyaW5nIGRlbW90aW9uLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBzb21lIGxvZ2ljLCBldmVuIGlmIGl0J3MgaW5kaXJlY3QsIHJlbGF0ZWQgdG8gYENPTkZJR19OVU1BX01JR1JBVElPTmAsIHNvIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciB0aGF0IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gd2l0aGluIHRoYXQgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbWVtb3J5IHRpZXJpbmcgYW5kIE5VTUEgYXJlIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MjkuOTkyMzEzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnktdGllcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0LyoqXFxuIDMyMTpcXHQgKiBuZXh0X2RlbW90aW9uX25vZGUoKSAtIEdldCB0aGUgbmV4dCBub2RlIGluIHRoZSBkZW1vdGlvbiBwYXRoXFxuIDMyMjpcXHQgKiBAbm9kZTogVGhlIHN0YXJ0aW5nIG5vZGUgdG8gbG9va3VwIHRoZSBuZXh0IG5vZGVcXG4gMzIzOlxcdCAqIEBhbGxvd2VkX21hc2s6IFRoZSBwb2ludGVyIHRvIGFsbG93ZWQgbm9kZSBtYXNrXFxuIDMyNDpcXHQgKlxcbiAzMjU6XFx0ICogUmV0dXJuOiBub2RlIGlkIGZvciBuZXh0IG1lbW9yeSBub2RlIGluIHRoZSBkZW1vdGlvbiBwYXRoIGhpZXJhcmNoeVxcbiAzMjY6XFx0ICogZnJvbSBAbm9kZTsgTlVNQV9OT19OT0RFIGlmIEBub2RlIGlzIHRlcm1pbmFsLiAgVGhpcyBkb2VzIG5vdCBrZWVwXFxuIDMyNzpcXHQgKiBAbm9kZSBvbmxpbmUgb3IgZ3VhcmFudGVlIHRoYXQgaXQgKmNvbnRpbnVlcyogdG8gYmUgdGhlIG5leHQgZGVtb3Rpb25cXG4gMzI4OlxcdCAqIHRhcmdldC5cXG4gMzI5OlxcdCAqL1xcbiAzMzA6XFx0aW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxcbiAzMzE6XFx0e1xcbiAzMzI6XFx0XFx0c3RydWN0IGRlbW90aW9uX25vZGVzICpuZDtcXG4gMzMzOlxcdFxcdG5vZGVtYXNrX3QgbWFzaztcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0aWYgKCFub2RlX2RlbW90aW9uKVxcbiAzMzY6XFx0XFx0XFx0cmV0dXJuIE5VTUFfTk9fTk9ERTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0bmQgPSBcXHUwMDI2bm9kZV9kZW1vdGlvbltub2RlXTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0LypcXG4gMzQxOlxcdFxcdCAqIG5vZGVfZGVtb3Rpb25bXSBpcyB1cGRhdGVkIHdpdGhvdXQgZXhjbHVkaW5nIHRoaXNcXG4gMzQyOlxcdFxcdCAqIGZ1bmN0aW9uIGZyb20gcnVubmluZy5cXG4gMzQzOlxcdFxcdCAqXFxuIDM0NDpcXHRcXHQgKiBNYWtlIHN1cmUgdG8gdXNlIFJDVSBvdmVyIGVudGlyZSBjb2RlIGJsb2NrcyBpZlxcbiAzNDU6XFx0XFx0ICogbm9kZV9kZW1vdGlvbltdIHJlYWRzIG5lZWQgdG8gYmUgY29uc2lzdGVudC5cXG4gMzQ2OlxcdFxcdCAqL1xcbiAzNDc6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzNDg6XFx0XFx0LyogRmlsdGVyIG91dCBub2RlcyB0aGF0IGFyZSBub3QgaW4gYWxsb3dlZF9tYXNrLiAqL1xcbiAzNDk6XFx0XFx0bm9kZXNfYW5kKG1hc2ssIG5kLVxcdTAwM2VwcmVmZXJyZWQsICphbGxvd2VkX21hc2spO1xcbiAzNTA6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdC8qXFxuIDM1MzpcXHRcXHQgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGFyZ2V0IG5vZGVzLCBqdXN0IHNlbGVjdCBvbmVcXG4gMzU0OlxcdFxcdCAqIHRhcmdldCBub2RlIHJhbmRvbWx5LlxcbiAzNTU6XFx0XFx0ICpcXG4gMzU2OlxcdFxcdCAqIEluIGFkZGl0aW9uLCB3ZSBjYW4gYWxzbyB1c2Ugcm91bmQtcm9iaW4gdG8gc2VsZWN0XFxuIDM1NzpcXHRcXHQgKiB0YXJnZXQgbm9kZSwgYnV0IHdlIHNob3VsZCBpbnRyb2R1Y2UgYW5vdGhlciB2YXJpYWJsZVxcbiAzNTg6XFx0XFx0ICogZm9yIG5vZGVfZGVtb3Rpb25bXSB0byByZWNvcmQgbGFzdCBzZWxlY3RlZCB0YXJnZXQgbm9kZSxcXG4gMzU5OlxcdFxcdCAqIHRoYXQgbWF5IGNhdXNlIGNhY2hlIHBpbmctcG9uZyBkdWUgdG8gdGhlIGNoYW5naW5nIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjI5Ljk5MjQ3ODIyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNTA3NDc1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOVU1BIE1pZ3JhdGlvbiBpbiBgbW0vbWVtb3J5LXRpZXJzLmNgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBtbS9tZW1vcnktdGllcnMuY2AgYWdhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBOVU1BIG1pZ3JhdGlvbiB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTmAuIFRoaXMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyB0aGUga2V5IOKAkyBpdCdzIGdvaW5nIHRvIGRpY3RhdGUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIGFsbCB0aGUgcmVsZXZhbnQgbWlncmF0aW9uIGxvZ2ljLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSAqaG93KiB0aGUgTlVNQSBtaWdyYXRpb24gY29kZSBpcyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbWVtb3J5IHRpZXJpbmcgZnJhbWV3b3JrLiBBcmUgdGhleSB3b3JraW5nIGluIHRhbmRlbT8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBob29rcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEknbSBob3BpbmcgdG8gdW5jb3ZlciBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIG9mIGNvdXJzZSwgdW5kZXJzdGFuZCBob3cgdGhlIE5VTUEtYXdhcmUgbWVjaGFuaXNtcyBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgdGllcmluZyBwb2xpY3kuIFRpbWUgdG8gZmluZCB0aGF0IGAjaWZkZWZgIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MzMuMjQzMjI4ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDI5NzMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOVU1BX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02NjA9Y29uZmlnIFBBR0VfUkVQT1JUSU5HXFxuLS1cXG5tbS9LY29uZmlnLTY2Ny1cXG5tbS9LY29uZmlnOjY2ODpjb25maWcgTlVNQV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTY2OS1cXHRib29sIFxcXCJOVU1BIHBhZ2UgbWlncmF0aW9uXFxcIlxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9NjU9Ym9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTcxLVxcbm1tL21lbW9yeS10aWVycy5jOjcyOiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cXG5tbS9tZW1vcnktdGllcnMuYy03My1zdGF0aWMgaW50IHRvcF90aWVyX2FkaXN0YW5jZTtcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTEzMT1zdGF0aWMgc3RydWN0IGRlbW90aW9uX25vZGVzICpub2RlX2RlbW90aW9uIF9fcmVhZF9tb3N0bHk7XFxubW0vbWVtb3J5LXRpZXJzLmM6MTMyOiNlbmRpZiAvKiBDT05GSUdfTlVNQV9NSUdSQVRJT04gKi9cXG5tbS9tZW1vcnktdGllcnMuYy0xMzMtXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz0yNjA9c3RhdGljIHN0cnVjdCBtZW1vcnlfdGllciAqX19ub2RlX2dldF9tZW1vcnlfdGllcihpbnQgbm9kZSlcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTI3NS1cXG5tbS9tZW1vcnktdGllcnMuYzoyNzY6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxcbm1tL21lbW9yeS10aWVycy5jLTI3Ny1ib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSlcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTUyMj1zdGF0aWMgaW5saW5lIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZCkge31cXG5tbS9tZW1vcnktdGllcnMuYzo1MjM6I2VuZGlmIC8qIENPTkZJR19OVU1BX01JR1JBVElPTiAqL1xcbm1tL21lbW9yeS10aWVycy5jLTUyNC1cXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTkwNz1zdGF0aWMgaW50IF9faW5pdCBtZW1vcnlfdGllcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy05MTQtXFxubW0vbWVtb3J5LXRpZXJzLmM6OTE1OiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cXG5tbS9tZW1vcnktdGllcnMuYy05MTYtXFx0bm9kZV9kZW1vdGlvbiA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgZGVtb3Rpb25fbm9kZXMsIG5yX25vZGVfaWRzKTtcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTk0MD1ib29sIG51bWFfZGVtb3Rpb25fZW5hYmxlZCA9IGZhbHNlO1xcbm1tL21lbW9yeS10aWVycy5jLTk0MS1cXG5tbS9tZW1vcnktdGllcnMuYzo5NDI6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxcbm1tL21lbW9yeS10aWVycy5jLTk0My0jaWZkZWYgQ09ORklHX1NZU0ZTXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMTY5PXN0YXRpYyBsb25nIGRvX2dldF9tZW1wb2xpY3koaW50ICpwb2xpY3ksIG5vZGVtYXNrX3QgKm5tYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTI2OS1cXG5tbS9tZW1wb2xpY3kuYzoxMjcwOiNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cXG5tbS9tZW1wb2xpY3kuYy0xMjcxLXN0YXRpYyBib29sIG1pZ3JhdGVfZm9saW9fYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvbGlzdCxcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTIyMzUtXFxubW0vbWlncmF0ZS5jOjIyMzY6I2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxcbm1tL21pZ3JhdGUuYy0yMjM3LXN0YXRpYyBpbnQgc3RvcmVfc3RhdHVzKGludCBfX3VzZXIgKnN0YXR1cywgaW50IHN0YXJ0LCBpbnQgdmFsdWUsIGludCBucilcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNjMzPVNZU0NBTExfREVGSU5FNihtb3ZlX3BhZ2VzLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBsb25nLCBucl9wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yNjM5LX1cXG5tbS9taWdyYXRlLmM6MjY0MDojZW5kaWYgLyogQ09ORklHX05VTUFfTUlHUkFUSU9OICovXFxubW0vbWlncmF0ZS5jLTI2NDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjMzLjM1NzUzMDQyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTI0OTg4MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKk5VTUEgTWlncmF0aW9uIERlcGVuZGVuY3kgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBOVU1BX01JR1JBVElPTmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyBhcmUgZGVmaW5lZC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5ICpyZXF1aXJlZCogZm9yIHRoaXMgdG8gYmUgZW5hYmxlZCwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgaXQgbWlnaHQgaW5mbHVlbmNlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBoaWRkZW4gZ290Y2hhcyBvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gTm8gc2Vuc2UgaW4gcmVseWluZyBvbiBndWVzc3dvcmsgd2hlbiB0aGUgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBpcyByaWdodCB0aGVyZSwgcmVhZHkgdG8gYmUgcGFyc2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzIG9yIGludmVzdGlnYXRpb24gaW50byB0aGUgTlVNQSBtaWdyYXRpb24gZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3ODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0NjozNi4yODI1MjE0NDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjY1OlxcdFxcdCAgdGhvc2UgcGFnZXMgdG8gYW5vdGhlciBlbnRpdHksIHN1Y2ggYXMgYSBoeXBlcnZpc29yLCBzbyB0aGF0IHRoZVxcbiA2NjY6XFx0XFx0ICBtZW1vcnkgY2FuIGJlIGZyZWVkIHdpdGhpbiB0aGUgaG9zdCBmb3Igb3RoZXIgdXNlcy5cXG4gNjY3OlxcdFxcbiA2Njg6XFx0Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuIDY2OTpcXHRcXHRib29sIFxcXCJOVU1BIHBhZ2UgbWlncmF0aW9uXFxcIlxcbiA2NzA6XFx0XFx0ZGVmYXVsdCB5XFxuIDY3MTpcXHRcXHRkZXBlbmRzIG9uIE5VTUEgXFx1MDAyNlxcdTAwMjYgTU1VXFxuIDY3MjpcXHRcXHRzZWxlY3QgTUlHUkFUSU9OXFxuIDY3MzpcXHRcXHRoZWxwXFxuIDY3NDpcXHRcXHQgIFN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBwYWdlcyB0byBvdGhlciBOVU1BIG5vZGVzLCBhdmFpbGFibGUgdG9cXG4gNjc1OlxcdFxcdCAgdXNlciBzcGFjZSB0aHJvdWdoIGludGVyZmFjZXMgbGlrZSBtaWdyYXRlX3BhZ2VzKCksIG1vdmVfcGFnZXMoKSxcXG4gNjc2OlxcdFxcdCAgYW5kIG1iaW5kKCkuIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFnZVxcbiA2Nzc6XFx0XFx0ICBkZW1vdGlvbiBmb3IgbWVtb3J5IHRpZXJpbmcuXFxuIDY3ODpcXHRcXG4gNjc5OlxcdGNvbmZpZyBNSUdSQVRJT05cXG4gNjgwOlxcdFxcdGJvb2xcXG4gNjgxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDY4MjpcXHRcXG4gNjgzOlxcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxuIDY4NDpcXHRcXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6MzYuMjgyNjYwMTA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NzU1MTIzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW5mbHVlbmNlZCBieSB0aGUgYE5VTUFgIGFuZCBgTlVNQV9NSUdSQVRJT05gIGNvbmZpZ3VyYXRpb25zIGFuZCBhcmUgbm90IHViaXF1aXRvdXMgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgZnVuZGFtZW50YWwgdG8gdGhlIHN5c3RlbS5cblxuSSBzZWUgdGhhdCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIGFyZTpcblxuMS4gIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLCB1c2VkIHRvIGZpbmQgdGhlIGJlc3QgTlVNQSBub2RlLlxuMi4gIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLCBhIGhlbHBlciBpbiB6b25lbGlzdCBidWlsZGluZy5cbjMuICBgYnVpbGRfem9uZWxpc3RzYCAvIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgZnJvbSBgbW0vcGFnZV9hbGxvYy5jYCAtIGludm9sdmVkIGluIHpvbmVsaXN0IGNvbnN0cnVjdGlvbi5cbjQuICBgbmV4dF9kZW1vdGlvbl9ub2RlYCBmcm9tIGBtbS9tZW1vcnktdGllcnMuY2AsIHVzZWQgZm9yIGZpbmRpbmcgZGVtb3Rpb24gdGFyZ2V0cy5cbjUuICBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgIGZyb20gYG1tL21lbW9yeS10aWVycy5jYCwgc2V0cyB1cCBkZW1vdGlvbiB0YXJnZXRzLlxuXG5Ob3csIGxldCdzIGRldGVybWluZSB0aGVpciB1YmlxdWl0eS4gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIGlzIGNhbGxlZCBvbmx5IGR1cmluZyB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIG1lbW9yeSB0aWVyaW5nOyBpdCdzIG5vdCBhIGNvcmUsIHViaXF1aXRvdXMgZnVuY3Rpb24uIGBuZXh0X2RlbW90aW9uX25vZGVgIGlzIHRyaWdnZXJlZCBkdXJpbmcgZm9saW8gZGVtb3Rpb24vbWVtb3J5IHJlY2xhbWF0aW9uLCBzbyBpdCBhbHNvIGFwcGVhcnMgbm9uLXViaXF1aXRvdXMuIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaXMgY2FsbGVkIGF0IGJvb3QgYW5kIG9uIGhvdHBsdWcgZXZlbnRzLCBsaWtld2lzZSwgbm90IHViaXF1aXRvdXMuIFRoZW4sIGBidWlsZF9ub2RlX3pvbmVsaXN0YCBhbmQgYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYCBhcmUgb25seSBpbnZvbHZlZCBpbiB6b25lbGlzdCBidWlsZGluZywgYW5kIHRoZXkgYXJlIGFsc28gbm90IHViaXF1aXRvdXMuXG5cbmBidWlsZF9hbGxfem9uZWxpc3RzYCBpcyBjYWxsZWQgb24gYm9vdCBvciBob3RwbHVnLCBidXQgdGhlc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHksIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCwgYG5leHRfZGVtb3Rpb25fbm9kZWAsIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AsIGBidWlsZF9ub2RlX3pvbmVsaXN0YCwgYW5kIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgYXBwZWFyIHRvIGltcGxlbWVudCB0aGUgY29yZSwgcmVsZXZhbnQgbG9naWMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBzeW1ib2xzOiBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAsIGBuZXh0X2RlbW90aW9uX25vZGVgLCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLCBgYnVpbGRfbm9kZV96b25lbGlzdGAsIGFuZCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgLiBZZXAsIGFsbCBvZiB0aG9zZSBhcmUgdGhlIGtleSBvbmVzLlxuXG5JJ2xsIGNvbmZpcm0gdGhlIHN0YXRpYyBzdGF0dXMgb2YgdGhlIGZ1bmN0aW9ucy4gYGJ1aWxkX25vZGVfem9uZWxpc3RgIGFuZCBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgIGFyZSwgaW5kZWVkLCBzdGF0aWMuIEhvd2V2ZXIsIHRoZXkgYXJlIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gTm93LCByZS1jaGVja2luZyB0aGUgZGVjbGFyYXRpb25zOiBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgaXMgYSBub24tc3RhdGljIGV4cG9ydGVkIHN5bWJvbCwgYG5leHRfZGVtb3Rpb25fbm9kZWAgaXMgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQuIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaXMgc3RhdGljLCBgYnVpbGRfbm9kZV96b25lbGlzdGAgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBOVU1BYCBhbmQgYE5VTUFfTUlHUkFUSU9OYC5cblxuR2l2ZW4gdGhlIGFuYWx5c2lzLCBoZXJlIGlzIHdoYXQgSSB3aWxsIGZlZWQgdG8gYHNldC1yZXN1bHRzYC5cblxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI3OSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Njo0Mi43NTgxNzQ0NzVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY1OTcyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIk5VTUFfTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmluZF9uZXh0X2Jlc3Rfbm9kZV9pblwiLFxuICAgIFwibmV4dF9kZW1vdGlvbl9ub2RlXCIsXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiLFxuICAgIFwiYnVpbGRfbm9kZV96b25lbGlzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIGFuZCBtbS9tZW1vcnktdGllcnMuYy4gSXQgcmVmYWN0b3JzIG5vZGUgZmFsbGJhY2sgbGlzdCBnZW5lcmF0aW9uIChmaW5kX25leHRfYmVzdF9ub2RlX2luLCBidWlsZF9ub2RlX3pvbmVsaXN0KSB0byBhY2NlcHQgZXhwbGljaXQgY2FuZGlkYXRlIG5vZGVtYXNrcyBhbmQgdXBkYXRlcyBtZW1vcnkgdGllcmluZyAvIGRlbW90aW9uIHRhcmdldCBjYWxjdWxhdGlvbnMgKG5leHRfZGVtb3Rpb25fbm9kZSwgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIG1lbW9yeSB0aWVyaW5nIGRlbW90aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIk5VTUFfTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmluZF9uZXh0X2Jlc3Rfbm9kZV9pblwiLFxuICAgIFwibmV4dF9kZW1vdGlvbl9ub2RlXCIsXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiLFxuICAgIFwiYnVpbGRfbm9kZV96b25lbGlzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIGFuZCBtbS9tZW1vcnktdGllcnMuYy4gSXQgcmVmYWN0b3JzIG5vZGUgZmFsbGJhY2sgbGlzdCBnZW5lcmF0aW9uIChmaW5kX25leHRfYmVzdF9ub2RlX2luLCBidWlsZF9ub2RlX3pvbmVsaXN0KSB0byBhY2NlcHQgZXhwbGljaXQgY2FuZGlkYXRlIG5vZGVtYXNrcyBhbmQgdXBkYXRlcyBtZW1vcnkgdGllcmluZyAvIGRlbW90aW9uIHRhcmdldCBjYWxjdWxhdGlvbnMgKG5leHRfZGVtb3Rpb25fbm9kZSwgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIG1lbW9yeSB0aWVyaW5nIGRlbW90aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Njo0Mi44ODQ3ODI1NTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODM1Nzc5ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6NDIuODg1Njg4OTg0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ4MzQ4NjczOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTlVNQSB6b25lbGlzdCBjb25zdHJ1Y3Rpb24gYW5kIGRlbW90aW9uIG5vZGUgc2VsZWN0aW9uIGxvZ2ljIChpbnRyb2R1Y2luZyBgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbmAgd2l0aCBhIGNhbmRpZGF0ZSBub2RlbWFzayBwYXJhbWV0ZXIgYW5kIGZhY3RvcmluZyBvdXQgYGJ1aWxkX25vZGVfem9uZWxpc3RgKS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgbm9kZW1hc2tzLCBhbmQgYXJyYXlzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiBgTk9ERV9NQVNLX05PTkVgLCBgbWVtc2V0KG5vZGVfb3JkZXIsIDAsIC4uLilgKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBpc3N1ZXMgaW4gem9uZWxpc3QgaW5kZXhpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTZiZWM2ZWZkMjhkOWUyMWRjZjRjOWU1ZjgwMTg0MDhiNzgyNzgxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjI6NDU6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggZTE2ZjEyNTBiMjVjOC4uMThkMDQxZmY1YzUyYyAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC0xMTMwLDcgKzExMzAsOCBAQCBleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xuIFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIFx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbi1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTtcbitleHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4oaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrLFxuK1x0XHRcdFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcbiAjZWxzZVxuICNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxuIFxuQEAgLTExMzksNyArMTE0MCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4tc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4rc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXG4rXHRcdFx0XHRcdCBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuIHtcbiBcdHJldHVybiBOVU1BX05PX05PREU7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS10aWVycy5jIGIvbW0vbWVtb3J5LXRpZXJzLmNcbmluZGV4IDU0ODUxZDhhMTk1YjAuLjI1ZTEyMTg1MWI1ODYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktdGllcnMuY1xuKysrIGIvbW0vbWVtb3J5LXRpZXJzLmNcbkBAIC0zNzAsNyArMzcwLDcgQEAgaW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxuIFx0ICogY2xvc2VzdCBkZW1vdGlvbiB0YXJnZXQuXG4gXHQgKi9cbiBcdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XG4tXHRyZXR1cm4gZmluZF9uZXh0X2Jlc3Rfbm9kZShub2RlLCBcdTAwMjZtYXNrKTtcbitcdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFx1MDAyNm1hc2ssIFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRpc2FibGVfYWxsX2RlbW90aW9uX3RhcmdldHModm9pZClcbkBAIC00NTAsNyArNDUwLDcgQEAgc3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcbiBcdFx0bWVtdGllciA9IGxpc3RfbmV4dF9lbnRyeShtZW10aWVyLCBsaXN0KTtcbiBcdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuIFx0XHQvKlxuLVx0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlLCB1c2UgJ3VzZWQnIG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0LlxuK1x0XHQgKiBmaW5kX25leHRfYmVzdF9ub2RlX2luLCB1c2UgJ3VzZWQnIG5vZGVtYXNrIGFzIGEgc2tpcCBsaXN0LlxuIFx0XHQgKiBBZGQgYWxsIG1lbW9yeSBub2RlcyBleGNlcHQgdGhlIHNlbGVjdGVkIG1lbW9yeSB0aWVyXG4gXHRcdCAqIG5vZGVsaXN0IHRvIHNraXAgbGlzdCBzbyB0aGF0IHdlIGZpbmQgdGhlIGJlc3Qgbm9kZSBmcm9tIHRoZVxuIFx0XHQgKiBtZW10aWVyIG5vZGVsaXN0LlxuQEAgLTQ2Myw3ICs0NjMsOCBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxuIFx0XHQgKiBpbiB0aGUgcHJlZmVycmVkIG1hc2sgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGR1cmluZyBkZW1vdGlvbi5cbiBcdFx0ICovXG4gXHRcdGRvIHtcbi1cdFx0XHR0YXJnZXQgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIFx1MDAyNnRpZXJfbm9kZXMpO1xuK1x0XHRcdHRhcmdldCA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obm9kZSwgXHUwMDI2dGllcl9ub2RlcyxcbitcdFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG4gXHRcdFx0aWYgKHRhcmdldCA9PSBOVU1BX05PX05PREUpXG4gXHRcdFx0XHRicmVhaztcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGM0ZGM2MWVjNjYzZWUuLmUxZDdjOGIyMjFkMGQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTU3NzksOSArNTc3OSwxMCBAQCBzdGF0aWMgaW50IG51bWFfem9uZWxpc3Rfb3JkZXJfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIHN0YXRpYyBpbnQgbm9kZV9sb2FkW01BWF9OVU1OT0RFU107XG4gXG4gLyoqXG4tICogZmluZF9uZXh0X2Jlc3Rfbm9kZSAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJ3MgZmFsbGJhY2sgbGlzdFxuKyAqIGZpbmRfbmV4dF9iZXN0X25vZGVfaW4gLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3RcbiAgKiBAbm9kZTogbm9kZSB3aG9zZSBmYWxsYmFjayBsaXN0IHdlJ3JlIGFwcGVuZGluZ1xuICAqIEB1c2VkX25vZGVfbWFzazogbm9kZW1hc2tfdCBvZiBhbHJlYWR5IHVzZWQgbm9kZXNcbisgKiBAY2FuZGlkYXRlczogbm9kZW1hc2tfdCBvZiBub2RlcyBlbGlnaWJsZSBmb3Igc2VsZWN0aW9uXG4gICpcbiAgKiBXZSB1c2UgYSBudW1iZXIgb2YgZmFjdG9ycyB0byBkZXRlcm1pbmUgd2hpY2ggaXMgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZFxuICAqIGFwcGVhciBvbiBhIGdpdmVuIG5vZGUncyBmYWxsYmFjayBsaXN0LiAgVGhlIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFwcGVhcmVkXG5AQCAtNTc5Myw3ICs1Nzk0LDggQEAgc3RhdGljIGludCBub2RlX2xvYWRbTUFYX05VTU5PREVTXTtcbiAgKlxuICAqIFJldHVybjogbm9kZSBpZCBvZiB0aGUgZm91bmQgbm9kZSBvciAlTlVNQV9OT19OT0RFIGlmIG5vIG5vZGUgaXMgZm91bmQuXG4gICovXG4taW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuK2ludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcbitcdFx0XHQgICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKVxuIHtcbiBcdGludCBuLCB2YWw7XG4gXHRpbnQgbWluX3ZhbCA9IElOVF9NQVg7XG5AQCAtNTgwMywxMiArNTgwNSwxMiBAQCBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4gXHQgKiBVc2UgdGhlIGxvY2FsIG5vZGUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LCBidXQgZm9yIG1lbW9yeWxlc3MgbG9jYWxcbiBcdCAqIG5vZGUsIHdlIHNob3VsZCBza2lwIGl0IGFuZCBmYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXMuXG4gXHQgKi9cbi1cdGlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spIFx1MDAyNlx1MDAyNiBub2RlX3N0YXRlKG5vZGUsIE5fTUVNT1JZKSkge1xuK1x0aWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykgXHUwMDI2XHUwMDI2IG5vZGVfaXNzZXQobm9kZSwgKmNhbmRpZGF0ZXMpKSB7XG4gXHRcdG5vZGVfc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzayk7XG4gXHRcdHJldHVybiBub2RlO1xuIFx0fVxuIFxuLVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuLCBOX01FTU9SWSkge1xuK1x0Zm9yX2VhY2hfbm9kZV9tYXNrKG4sICpjYW5kaWRhdGVzKSB7XG4gXG4gXHRcdC8qIERvbid0IHdhbnQgYSBub2RlIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZSAqL1xuIFx0XHRpZiAobm9kZV9pc3NldChuLCAqdXNlZF9ub2RlX21hc2spKVxuQEAgLTU4NDcsMTIgKzU4NDksMTIgQEAgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxuICAqIERNQSB6b25lLCBpZiBhbnktLWJ1dCByaXNrcyBleGhhdXN0aW5nIERNQSB6b25lLlxuICAqL1xuIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnX2RhdGFfdCAqcGdkYXQsIGludCAqbm9kZV9vcmRlcixcbi1cdFx0dW5zaWduZWQgbnJfbm9kZXMpXG4rXHRcdHVuc2lnbmVkIGludCBucl9ub2RlcywgaW50IHpsaWR4KVxuIHtcbiBcdHN0cnVjdCB6b25lcmVmICp6b25lcmVmcztcbiBcdGludCBpO1xuIFxuLVx0em9uZXJlZnMgPSBwZ2RhdC1cdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9GQUxMQkFDS10uX3pvbmVyZWZzO1xuK1x0em9uZXJlZnMgPSBwZ2RhdC1cdTAwM2Vub2RlX3pvbmVsaXN0c1t6bGlkeF0uX3pvbmVyZWZzO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbm9kZXM7IGkrKykge1xuIFx0XHRpbnQgbnJfem9uZXM7XG5AQCAtNTg4MSwyNSArNTg4MywyOCBAQCBzdGF0aWMgdm9pZCBidWlsZF90aGlzbm9kZV96b25lbGlzdHMocGdfZGF0YV90ICpwZ2RhdClcbiBcdHpvbmVyZWZzLVx1MDAzZXpvbmVfaWR4ID0gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXG4rLypcbisgKiBCdWlsZCBvbmUgbm9kZS1vcmRlcmVkIGZhbGxiYWNrIGxpc3QgZnJvbSBhIGNhbmRpZGF0ZSBub2RlbWFzay5cbisgKiB1cGRhdGVfbG9hZCByb3VuZC1yb2JpbnMgbm9kZV9sb2FkIGFjcm9zcyBlcXVpZGlzdGFudCBub2Rlcy5cbisgKi9cbitzdGF0aWMgdm9pZCBidWlsZF9ub2RlX3pvbmVsaXN0KHBnX2RhdGFfdCAqcGdkYXQsIGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMsXG4rXHRcdFx0XHRpbnQgemxpZHgsIGJvb2wgdXBkYXRlX2xvYWQsXG4rXHRcdFx0XHRpbnQgKm5vZGVfb3JkZXIsIGludCAqbnIpXG4ge1xuLVx0c3RhdGljIGludCBub2RlX29yZGVyW01BWF9OVU1OT0RFU107XG4tXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xuIFx0bm9kZW1hc2tfdCB1c2VkX21hc2sgPSBOT0RFX01BU0tfTk9ORTtcbi1cdGludCBsb2NhbF9ub2RlLCBwcmV2X25vZGU7XG4tXG4tXHQvKiBOVU1BLWF3YXJlIG9yZGVyaW5nIG9mIG5vZGVzICovXG4tXHRsb2NhbF9ub2RlID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbi1cdHByZXZfbm9kZSA9IGxvY2FsX25vZGU7XG4rXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4rXHRpbnQgcHJldl9ub2RlID0gbG9jYWxfbm9kZTtcbitcdGludCBub2RlLCBucl9ub2RlcyA9IDA7XG4gXG4tXHRtZW1zZXQobm9kZV9vcmRlciwgMCwgc2l6ZW9mKG5vZGVfb3JkZXIpKTtcbi1cdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGUobG9jYWxfbm9kZSwgXHUwMDI2dXNlZF9tYXNrKSkgXHUwMDNlPSAwKSB7XG4rXHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFx1MDAyNnVzZWRfbWFzayxcbitcdFx0XHRcdFx0ICAgICAgY2FuZGlkYXRlcykpIFx1MDAzZT0gMCkge1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBkb24ndCB3YW50IHRvIHByZXNzdXJlIGEgcGFydGljdWxhciBub2RlLlxuIFx0XHQgKiBTbyBhZGRpbmcgcGVuYWx0eSB0byB0aGUgZmlyc3Qgbm9kZSBpbiBzYW1lXG4gXHRcdCAqIGRpc3RhbmNlIGdyb3VwIHRvIG1ha2UgaXQgcm91bmQtcm9iaW4uXG4gXHRcdCAqL1xuLVx0XHRpZiAobm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBub2RlKSAhPVxuK1x0XHRpZiAodXBkYXRlX2xvYWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9XG4gXHRcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIHByZXZfbm9kZSkpXG4gXHRcdFx0bm9kZV9sb2FkW25vZGVdICs9IDE7XG4gXG5AQCAtNTkwNyw4ICs1OTEyLDIyIEBAIHN0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuIFx0XHRwcmV2X25vZGUgPSBub2RlO1xuIFx0fVxuIFxuLVx0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzKTtcbitcdGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyKHBnZGF0LCBub2RlX29yZGVyLCBucl9ub2RlcywgemxpZHgpO1xuK1x0Km5yID0gbnJfbm9kZXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxuK3tcbitcdHN0YXRpYyBpbnQgbm9kZV9vcmRlcltNQVhfTlVNTk9ERVNdO1xuK1x0aW50IGxvY2FsX25vZGUgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuK1x0aW50IG5vZGUsIG5yX25vZGVzID0gMDtcbitcbitcdG1lbXNldChub2RlX29yZGVyLCAwLCBzaXplb2Yobm9kZV9vcmRlcikpO1xuK1xuK1x0YnVpbGRfbm9kZV96b25lbGlzdChwZ2RhdCwgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBaT05FTElTVF9GQUxMQkFDSyxcbitcdFx0XHQgICAgdHJ1ZSwgbm9kZV9vcmRlciwgXHUwMDI2bnJfbm9kZXMpO1xuIFx0YnVpbGRfdGhpc25vZGVfem9uZWxpc3RzKHBnZGF0KTtcbitcbiBcdHByX2luZm8oXCJGYWxsYmFjayBvcmRlciBmb3IgTm9kZSAlZDogXCIsIGxvY2FsX25vZGUpO1xuIFx0Zm9yIChub2RlID0gMDsgbm9kZSBcdTAwM2MgbnJfbm9kZXM7IG5vZGUrKylcbiBcdFx0cHJfY29udChcIiVkIFwiLCBub2RlX29yZGVyW25vZGVdKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjQyLjg4NTY5MDg4NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDYxMzI0NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IE5vZGUgU2VsZWN0aW9uIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSByZWZhY3RvcmluZywgc3BlY2lmaWNhbGx5IGFpbWVkIGF0IGltcHJvdmluZyB0aGUgbm9kZSBzZWxlY3Rpb24gbG9naWMsIGxpa2VseSBmb3IgbWVtb3J5IHRpZXJpbmcgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEl0IHNlZW1zIHRoZXkncmUgbWFraW5nIGBmaW5kX25leHRfYmVzdF9ub2RlYCBtb3JlIGZsZXhpYmxlIGJ5IHJlbmFtaW5nIGl0IHRvIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBhbmQgYWRkaW5nIGEgYGNhbmRpZGF0ZXNgIG5vZGVtYXNrIHBhcmFtZXRlci4gVGhpcyBpbmRpY2F0ZXMgYSBzaGlmdCB0b3dhcmRzIHNwZWNpZnlpbmcgYSBzdWJzZXQgb2Ygbm9kZXMgdG8gY29uc2lkZXIsIHJhdGhlciB0aGFuIHNlYXJjaGluZyBhY3Jvc3MgdGhlIGVudGlyZSBzeXN0ZW0uXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkgc2VlOlxuXG4qICAgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjaGFuZ2UgaW4gYG1tL2ludGVybmFsLmhgIHJlZmxlY3RzIHRoZSBuZXcgYGNhbmRpZGF0ZXNgIHBhcmFtZXRlciwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC5cbiogICBJbiBgbW0vbWVtb3J5LXRpZXJzLmNgLCBjYWxscyB0byB0aGUgdXBkYXRlZCBmdW5jdGlvbiBhcmUgYmVpbmcgbWFkZSB3aXRoIGEgYFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXWAgbWFzay4gVGhpcyBpcyBpbnRlcmVzdGluZzsgYE5fTUVNT1JZYCBwcm9iYWJseSByZWZlcnMgdG8gYSBtZW1vcnkgdGllciBzdGF0ZS4gVGhpcyBsaWtlbHkgdGllcyB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdGhlIG1lbW9yeS10aWVyaW5nIHN1YnN5c3RlbS5cbiogICBgbW0vcGFnZV9hbGxvYy5jYCBoYXMgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMuIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBub2RlX2lzc2V0YCBjaGVja3MgYW5kIGBmb3JfZWFjaF9ub2RlX21hc2tgIGl0ZXJhdGlvbiwgYWxsIHVzaW5nIHRoYXQgYGNhbmRpZGF0ZXNgIG1hc2suIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkOyBpdCBjb25zdHJhaW5zIHRoZSBzZWFyY2ggdG8gYSBzcGVjaWZpYyBzZXQgb2Ygbm9kZXMuIGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgaGFzIGFuIGFkZGVkIGB6bGlkeGAgcGFyYW1ldGVyLCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byB6b25lbGlzdCBpbmRleGluZy4gVGhlcmUncyBhbHNvIGBidWlsZF9ub2RlX3pvbmVsaXN0YCwgYW5kIGBidWlsZF96b25lbGlzdHNgIGhlbHBlciBmdW5jdGlvbnMsIHdoaWNoIGFyZSBuZXcuXG5cbkknbSBub3cgZ29pbmcgdG8gZm9jdXMgb24gcG90ZW50aWFsIHJpc2tzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgYGNvcHlfdG9fdXNlcmAgcHJvYmxlbXMsIGV2ZW4gdGhvdWdoIHRoaXMgZG9lc24ndCBsb29rIGxpa2UgYSBkaXJlY3QgdXNlci1zcGFjZSBpbnRlcmZhY2UuIExldCdzIHN0YXJ0IHdpdGggYGJ1aWxkX25vZGVfem9uZWxpc3RgIGFuZCBgYnVpbGRfem9uZWxpc3RzYC5cblxuSW5zaWRlIGBidWlsZF96b25lbGlzdHNgLCBJIGNhbiBzZWUgYSBgbm9kZV9vcmRlcmAgYXJyYXkgaW5pdGlhbGl6ZWQsIHVzZWQsIGFuZCB0aGUgbnVtYmVyIG9mIG5vZGVzIHRyYWNrZWQuIFRoZSBjcnVjaWFsIHBhcnQgaXMgd2l0aGluIGBidWlsZF9ub2RlX3pvbmVsaXN0YDogSXQgbG9va3MgbGlrZSB0aGUgYG5vZGVfb3JkZXJgIGFycmF5IGlzIGJlaW5nIHBvcHVsYXRlZCBiYXNlZCBvbiBhIGNhbGwgdG8gYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gLiBJIHNlZSBhbiBgdXNlZF9tYXNrYCB0aGF0IGVuc3VyZXMgd2UgZG9uJ3QgcmV0dXJuIHRoZSBzYW1lIG5vZGUgdHdpY2UsIGFuZCBJIGNhbiBhbHNvIHNlZSBhIGBucl9ub2Rlc2AgdmFyaWFibGUgdGhhdCB0cmFja3MgdGhlIG51bWJlciBvZiBub2RlcyBhZGRlZCB0byBgbm9kZV9vcmRlcmAuIFRoaXMgYWxsIGxvb2tzIG9rYXkgc28gZmFyLiBUaGUgZmluYWwgc3RlcCBpcyB0byBpdGVyYXRlIHRocm91Z2ggdGhpcyBgbm9kZV9vcmRlcmAgaW4gYGJ1aWxkX3pvbmVsaXN0c19pbl9ub2RlX29yZGVyYC4gSSBhbHNvIHNlZSB0aGF0IHRoZSBhY3R1YWwgYG5vZGVfb3JkZXJgIGl0c2VsZiBhcHBlYXJzIHRvIGJlIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBjb25zb2xlIHdpdGggYHByX2NvbnQoKWAuIE5vdCBhIGNyaXRpY2FsIGlzc3VlIGFzIGlzLCBidXQgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGNoZWNrZWQgaW4gcHJvZHVjdGlvbiB0byBzZWUgaWYgYW55IG5vZGVzIGFyZSBzZW5zaXRpdmUuXG5cblRoaXMgaXMgYWxsIHByZXR0eSBjbGVhbiwgYnV0IEknbSBub3QgZnVsbHkgY29udmluY2VkIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVG8gZW5zdXJlIG15IHBlYWNlIG9mIG1pbmQsIEknbSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFjcm9zcyB0aGUgY29kZWJhc2UgdG8gbG9vayBmb3IgYW55IG90aGVyIHVzZXMgb2YgdGhlIG9sZCBgZmluZF9uZXh0X2Jlc3Rfbm9kZWAgZnVuY3Rpb24sIHRvIG1ha2Ugc3VyZSBpdCdzIGJlZW4gY2xlYW5seSByZXBsYWNlZCBhbmQgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGVkZ2UgY2FzZXMgSSdtIG1pc3NpbmcuIFRoaXMgd2lsbCBhbHNvIGNhdGNoIGlmIEkgc29tZWhvdyBvdmVybG9va2VkIHdoZXJlIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCBpcyBjYWxsZWQgdGhhdCBjb3VsZCBjYXVzZSBhbiBpc3N1ZS4gSSBhbHdheXMgd2FudCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjQ4Ljk0NzAxODcxNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNTM1MTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX25leHRfYmVzdF9ub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9MTEzMT1leHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9pbnRlcm5hbC5oLTExMzItXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9pbnRlcm5hbC5oOjExMzM6ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcXG5tbS9pbnRlcm5hbC5oLTExMzQtXFx0XFx0XFx0XFx0ICBjb25zdCBub2RlbWFza190ICpjYW5kaWRhdGVzKTtcXG4tLVxcbm1tL2ludGVybmFsLmg9MTEzOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTExNDItfVxcbm1tL2ludGVybmFsLmg6MTE0MzpzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfYmVzdF9ub2RlX2luKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayxcXG5tbS9pbnRlcm5hbC5oLTExNDQtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IG5vZGVtYXNrX3QgKmNhbmRpZGF0ZXMpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz0zMzA9aW50IG5leHRfZGVtb3Rpb25fbm9kZShpbnQgbm9kZSwgY29uc3Qgbm9kZW1hc2tfdCAqYWxsb3dlZF9tYXNrKVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtMzcyLVxcdG5vZGVzX2NvbXBsZW1lbnQobWFzaywgKmFsbG93ZWRfbWFzayk7XFxubW0vbWVtb3J5LXRpZXJzLmM6MzczOlxcdHJldHVybiBmaW5kX25leHRfYmVzdF9ub2RlX2luKG5vZGUsIFxcdTAwMjZtYXNrLCBcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldKTtcXG5tbS9tZW1vcnktdGllcnMuYy0zNzQtfVxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9NDI1PXN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy00NTItXFx0XFx0LypcXG5tbS9tZW1vcnktdGllcnMuYzo0NTM6XFx0XFx0ICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiwgdXNlICd1c2VkJyBub2RlbWFzayBhcyBhIHNraXAgbGlzdC5cXG5tbS9tZW1vcnktdGllcnMuYy00NTQtXFx0XFx0ICogQWRkIGFsbCBtZW1vcnkgbm9kZXMgZXhjZXB0IHRoZSBzZWxlY3RlZCBtZW1vcnkgdGllclxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNDY1LVxcdFxcdGRvIHtcXG5tbS9tZW1vcnktdGllcnMuYzo0NjY6XFx0XFx0XFx0dGFyZ2V0ID0gZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihub2RlLCBcXHUwMDI2dGllcl9ub2RlcyxcXG5tbS9tZW1vcnktdGllcnMuYy00NjctXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTc3OT1zdGF0aWMgaW50IG5vZGVfbG9hZFtNQVhfTlVNTk9ERVNdO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU3ODEtLyoqXFxubW0vcGFnZV9hbGxvYy5jOjU3ODI6ICogZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbiAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbiBub2RlJ3MgZmFsbGJhY2sgbGlzdFxcbm1tL3BhZ2VfYWxsb2MuYy01NzgzLSAqIEBub2RlOiBub2RlIHdob3NlIGZhbGxiYWNrIGxpc3Qgd2UncmUgYXBwZW5kaW5nXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTc5Ni0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTc5NzppbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZV9pbihpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2ssXFxubW0vcGFnZV9hbGxvYy5jLTU3OTgtXFx0XFx0XFx0ICAgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01ODkwPXN0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01ODk4LVxcbm1tL3BhZ2VfYWxsb2MuYzo1ODk5OlxcdHdoaWxlICgobm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGVfaW4obG9jYWxfbm9kZSwgXFx1MDAyNnVzZWRfbWFzayxcXG5tbS9wYWdlX2FsbG9jLmMtNTkwMC1cXHRcXHRcXHRcXHRcXHQgICAgICBjYW5kaWRhdGVzKSkgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Njo1MS43NzIzNzUwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzg3NTI1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipEZWVwIERpdmUgaW50byBgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXJgKipcblxuT2theSwgc28gSSdtIGp1c3QgcXVpY2tseSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gQmVmb3JlIHdlIGNvbW1pdCwgSSB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBzbyBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBidWlsZF96b25lbGlzdHNfaW5fbm9kZV9vcmRlcmAgYW5kIHRoZSBjb2RlIGFyb3VuZCBpdCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgbG9naWMgdGhlcmUgaXMgc291bmQsIGdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG5ldmVyIGh1cnRzLiBMZXQncyBtYWtlIHN1cmUgb3VyIGFzc3VtcHRpb25zIGhvbGQgYW5kIHRoYXQgd2UgaGF2ZW4ndCBpbmFkdmVydGVudGx5IGludHJvZHVjZWQgYW55IHJlZ3Jlc3Npb25zIG9yIG92ZXJsb29rZWQgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMuIEEgZmV3IG1pbnV0ZXMgbm93IGNvdWxkIHNhdmUgYSBsb3Qgb2YgaGVhZGFjaGVzIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDY6NTQuNTU5OTAyOTQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg0MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTg0MDpcXHRcXHRcXHRub2RlX3NldChiZXN0X25vZGUsICp1c2VkX25vZGVfbWFzayk7XFxuNTg0MTpcXHRcXG41ODQyOlxcdFxcdHJldHVybiBiZXN0X25vZGU7XFxuNTg0MzpcXHR9XFxuNTg0NDpcXHRcXG41ODQ1OlxcdFxcbjU4NDY6XFx0LypcXG41ODQ3OlxcdCAqIEJ1aWxkIHpvbmVsaXN0cyBvcmRlcmVkIGJ5IG5vZGUgYW5kIHpvbmVzIHdpdGhpbiBub2RlLlxcbjU4NDg6XFx0ICogVGhpcyByZXN1bHRzIGluIG1heGltdW0gbG9jYWxpdHktLW5vcm1hbCB6b25lIG92ZXJmbG93cyBpbnRvIGxvY2FsXFxuNTg0OTpcXHQgKiBETUEgem9uZSwgaWYgYW55LS1idXQgcmlza3MgZXhoYXVzdGluZyBETUEgem9uZS5cXG41ODUwOlxcdCAqL1xcbjU4NTE6XFx0c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdfZGF0YV90ICpwZ2RhdCwgaW50ICpub2RlX29yZGVyLFxcbjU4NTI6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yX25vZGVzLCBpbnQgemxpZHgpXFxuNTg1MzpcXHR7XFxuNTg1NDpcXHRcXHRzdHJ1Y3Qgem9uZXJlZiAqem9uZXJlZnM7XFxuNTg1NTpcXHRcXHRpbnQgaTtcXG41ODU2OlxcdFxcbjU4NTc6XFx0XFx0em9uZXJlZnMgPSBwZ2RhdC1cXHUwMDNlbm9kZV96b25lbGlzdHNbemxpZHhdLl96b25lcmVmcztcXG41ODU4OlxcdFxcbjU4NTk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX25vZGVzOyBpKyspIHtcXG41ODYwOlxcdFxcdFxcdGludCBucl96b25lcztcXG41ODYxOlxcdFxcbjU4NjI6XFx0XFx0XFx0cGdfZGF0YV90ICpub2RlID0gTk9ERV9EQVRBKG5vZGVfb3JkZXJbaV0pO1xcbjU4NjM6XFx0XFxuNTg2NDpcXHRcXHRcXHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUobm9kZSwgem9uZXJlZnMpO1xcbjU4NjU6XFx0XFx0XFx0em9uZXJlZnMgKz0gbnJfem9uZXM7XFxuNTg2NjpcXHRcXHR9XFxuNTg2NzpcXHRcXHR6b25lcmVmcy1cXHUwMDNlem9uZSA9IE5VTEw7XFxuNTg2ODpcXHRcXHR6b25lcmVmcy1cXHUwMDNlem9uZV9pZHggPSAwO1xcbjU4Njk6XFx0fVxcbjU4NzA6XFx0XFxuNTg3MTpcXHQvKlxcbjU4NzI6XFx0ICogQnVpbGQgX19HRlBfVEhJU05PREUgem9uZWxpc3RzXFxuNTg3MzpcXHQgKi9cXG41ODc0OlxcdHN0YXRpYyB2b2lkIGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KVxcbjU4NzU6XFx0e1xcbjU4NzY6XFx0XFx0c3RydWN0IHpvbmVyZWYgKnpvbmVyZWZzO1xcbjU4Nzc6XFx0XFx0aW50IG5yX3pvbmVzO1xcbjU4Nzg6XFx0XFxuNTg3OTpcXHRcXHR6b25lcmVmcyA9IHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVsaXN0c1taT05FTElTVF9OT0ZBTExCQUNLXS5fem9uZXJlZnM7XFxuNTg4MDpcXHRcXHRucl96b25lcyA9IGJ1aWxkX3pvbmVyZWZzX25vZGUocGdkYXQsIHpvbmVyZWZzKTtcXG41ODgxOlxcdFxcdHpvbmVyZWZzICs9IG5yX3pvbmVzO1xcbjU4ODI6XFx0XFx0em9uZXJlZnMtXFx1MDAzZXpvbmUgPSBOVUxMO1xcbjU4ODM6XFx0XFx0em9uZXJlZnMtXFx1MDAzZXpvbmVfaWR4ID0gMDtcXG41ODg0OlxcdH1cXG41ODg1OlxcdFxcbjU4ODY6XFx0LypcXG41ODg3OlxcdCAqIEJ1aWxkIG9uZSBub2RlLW9yZGVyZWQgZmFsbGJhY2sgbGlzdCBmcm9tIGEgY2FuZGlkYXRlIG5vZGVtYXNrLlxcbjU4ODg6XFx0ICogdXBkYXRlX2xvYWQgcm91bmQtcm9iaW5zIG5vZGVfbG9hZCBhY3Jvc3MgZXF1aWRpc3RhbnQgbm9kZXMuXFxuNTg4OTpcXHQgKi9cXG41ODkwOlxcdHN0YXRpYyB2b2lkIGJ1aWxkX25vZGVfem9uZWxpc3QocGdfZGF0YV90ICpwZ2RhdCwgY29uc3Qgbm9kZW1hc2tfdCAqY2FuZGlkYXRlcyxcXG41ODkxOlxcdFxcdFxcdFxcdFxcdGludCB6bGlkeCwgYm9vbCB1cGRhdGVfbG9hZCxcXG41ODkyOlxcdFxcdFxcdFxcdFxcdGludCAqbm9kZV9vcmRlciwgaW50ICpucilcXG41ODkzOlxcdHtcXG41ODk0OlxcdFxcdG5vZGVtYXNrX3QgdXNlZF9tYXNrID0gTk9ERV9NQVNLX05PTkU7XFxuNTg5NTpcXHRcXHRpbnQgbG9jYWxfbm9kZSA9IHBnZGF0LVxcdTAwM2Vub2RlX2lkO1xcbjU4OTY6XFx0XFx0aW50IHByZXZfbm9kZSA9IGxvY2FsX25vZGU7XFxuNTg5NzpcXHRcXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xcbjU4OTg6XFx0XFxuNTg5OTpcXHRcXHR3aGlsZSAoKG5vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlX2luKGxvY2FsX25vZGUsIFxcdTAwMjZ1c2VkX21hc2ssXFxuNTkwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBjYW5kaWRhdGVzKSkgXFx1MDAzZT0gMCkge1xcbjU5MDE6XFx0XFx0XFx0LypcXG41OTAyOlxcdFxcdFxcdCAqIFdlIGRvbid0IHdhbnQgdG8gcHJlc3N1cmUgYSBwYXJ0aWN1bGFyIG5vZGUuXFxuNTkwMzpcXHRcXHRcXHQgKiBTbyBhZGRpbmcgcGVuYWx0eSB0byB0aGUgZmlyc3Qgbm9kZSBpbiBzYW1lXFxuNTkwNDpcXHRcXHRcXHQgKiBkaXN0YW5jZSBncm91cCB0byBtYWtlIGl0IHJvdW5kLXJvYmluLlxcbjU5MDU6XFx0XFx0XFx0ICovXFxuNTkwNjpcXHRcXHRcXHRpZiAodXBkYXRlX2xvYWQgXFx1MDAyNlxcdTAwMjZcXG41OTA3OlxcdFxcdFxcdCAgICBub2RlX2Rpc3RhbmNlKGxvY2FsX25vZGUsIG5vZGUpICE9XFxuNTkwODpcXHRcXHRcXHQgICAgbm9kZV9kaXN0YW5jZShsb2NhbF9ub2RlLCBwcmV2X25vZGUpKVxcbjU5MDk6XFx0XFx0XFx0XFx0bm9kZV9sb2FkW25vZGVdICs9IDE7XFxuNTkxMDpcXHRcXG41OTExOlxcdFxcdFxcdG5vZGVfb3JkZXJbbnJfbm9kZXMrK10gPSBub2RlO1xcbjU5MTI6XFx0XFx0XFx0cHJldl9ub2RlID0gbm9kZTtcXG41OTEzOlxcdFxcdH1cXG41OTE0OlxcdFxcbjU5MTU6XFx0XFx0YnVpbGRfem9uZWxpc3RzX2luX25vZGVfb3JkZXIocGdkYXQsIG5vZGVfb3JkZXIsIG5yX25vZGVzLCB6bGlkeCk7XFxuNTkxNjpcXHRcXHQqbnIgPSBucl9ub2RlcztcXG41OTE3OlxcdH1cXG41OTE4OlxcdFxcbjU5MTk6XFx0c3RhdGljIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpXFxuNTkyMDpcXHR7XFxuNTkyMTpcXHRcXHRzdGF0aWMgaW50IG5vZGVfb3JkZXJbTUFYX05VTU5PREVTXTtcXG41OTIyOlxcdFxcdGludCBsb2NhbF9ub2RlID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuNTkyMzpcXHRcXHRpbnQgbm9kZSwgbnJfbm9kZXMgPSAwO1xcbjU5MjQ6XFx0XFxuNTkyNTpcXHRcXHRtZW1zZXQobm9kZV9vcmRlciwgMCwgc2l6ZW9mKG5vZGVfb3JkZXIpKTtcXG41OTI2OlxcdFxcbjU5Mjc6XFx0XFx0YnVpbGRfbm9kZV96b25lbGlzdChwZ2RhdCwgXFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgWk9ORUxJU1RfRkFMTEJBQ0ssXFxuNTkyODpcXHRcXHRcXHRcXHQgICAgdHJ1ZSwgbm9kZV9vcmRlciwgXFx1MDAyNm5yX25vZGVzKTtcXG41OTI5OlxcdFxcdGJ1aWxkX3RoaXNub2RlX3pvbmVsaXN0cyhwZ2RhdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQ2OjU0LjU2MDUwNDI2OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTYwMDI0NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBpcyBhbGwgaW50ZXJuYWwga2VybmVsIHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgdGhlIE5VTUEgem9uZWxpc3QgaXMgZ2VuZXJhdGVkIGFuZCBob3cgdGhlIHRhcmdldCBub2RlIGZvciBkZW1vdGlvbiBpcyBzZWxlY3RlZC4gTm8gZGF0YSBmcm9tIHRoZSBrZXJuZWwgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZCDigJMgdGhhdCdzIG9mdGVuIGEgc291cmNlIG9mIGhlYWRhY2hlcy4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGFsbCB0aGUga2V5IHZhcmlhYmxlcyBhbmQgYnVmZmVycyBsaWtlIGBub2RlX29yZGVyYCBhbmQgYHVzZWRfbWFza2AgYXJlIGJlaW5nIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGxpa2UgYE5PREVfTUFTS19OT05FYCBhbmQgYG1lbXNldCguLi4sIDAsIC4uLilgLCBtZWFuaW5nIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgY3JlZXBpbmcgaW4uIEknbSBjb25maWRlbnQgdGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGV4cG9zZWQuXG5cbkV2ZW4gaWYgdGhlcmUgKndlcmUqIHNvbWUgYm91bmRhcnkgaXNzdWVzIHdpdGggaW5kZXhpbmcgc29tZXRoaW5nIGxpa2UgYG5vZGVfb3JkZXJgIG9yIHRoZSB6b25lbGlzdHMsIHRoZSBrZXJuZWwgYWRkcmVzcyBzYW5pdGl6ZXIgKEtBU0FOKSB3b3VsZCBjYXRjaCB0aGF0IGFzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBTbywgYmFzZWQgb24gdGhhdCwgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGhlcmU7IGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGNyYWZ0IGEgY29uY2lzZSByZXNwb25zZSwgYW5kIHRoZW4gdHJpZ2dlciB0aGUgc2V0LXJlc3VsdHMgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ5NywiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Njo1Ny43MjA1MzIxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBOVU1BIHpvbmVsaXN0IGNvbnN0cnVjdGlvbiBhbmQgZGVtb3Rpb24gbm9kZSBzZWxlY3Rpb24gbG9naWMgKGludHJvZHVjaW5nIGBmaW5kX25leHRfYmVzdF9ub2RlX2luYCB3aXRoIGEgY2FuZGlkYXRlIG5vZGVtYXNrIHBhcmFtZXRlciBhbmQgZmFjdG9yaW5nIG91dCBgYnVpbGRfbm9kZV96b25lbGlzdGApLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBub2RlbWFza3MsIGFuZCBhcnJheXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuIGBOT0RFX01BU0tfTk9ORWAsIGBtZW1zZXQobm9kZV9vcmRlciwgMCwgLi4uKWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIGlzc3VlcyBpbiB6b25lbGlzdCBpbmRleGluZyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE5VTUEgem9uZWxpc3QgY29uc3RydWN0aW9uIGFuZCBkZW1vdGlvbiBub2RlIHNlbGVjdGlvbiBsb2dpYyAoaW50cm9kdWNpbmcgYGZpbmRfbmV4dF9iZXN0X25vZGVfaW5gIHdpdGggYSBjYW5kaWRhdGUgbm9kZW1hc2sgcGFyYW1ldGVyIGFuZCBmYWN0b3Jpbmcgb3V0IGBidWlsZF9ub2RlX3pvbmVsaXN0YCkuIEFsbCBsb2NhbCB2YXJpYWJsZXMsIG5vZGVtYXNrcywgYW5kIGFycmF5cyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4gYE5PREVfTUFTS19OT05FYCwgYG1lbXNldChub2RlX29yZGVyLCAwLCAuLi4pYCkuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYnl0ZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgaXNzdWVzIGluIHpvbmVsaXN0IGluZGV4aW5nIGFyZSBhZGRyZXNzYWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmtjx4[1] Phase: Succeeded StartedAt: 2026-09-03 22:47:08 +0000 UTC FinishedAt: 2026-09-03 22:47:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 22:47:08 +0000 UTC FinishedAt: 2026-09-03 22:47:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2] Phase: Succeeded StartedAt: 2026-09-03 22:47:08 +0000 UTC FinishedAt: 2026-09-04 02:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 22:47:08 +0000 UTC FinishedAt: 2026-09-04 02:27:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 22:47:08 +0000 UTC FinishedAt: 2026-09-03 22:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 22:47:08 +0000 UTC FinishedAt: 2026-09-03 22:47:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowmtjx4/series-workflowmtjx4-convert-artifact-430491368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 22:47:18 +0000 UTC FinishedAt: 2026-09-03 23:04:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 22:47:18 +0000 UTC FinishedAt: 2026-09-03 23:04:45 +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:*58dc6a5f-0cfa-4748-a45c-40fa97e0038f,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-workflowmtjx4/series-workflowmtjx4-convert-artifact-430491368/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": "fbc5ec38-e7f6-48e1-80ce-cec9eb926647", "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-workflowmtjx4/series-workflowmtjx4-build-action-3369946206/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 22:47:18 +0000 UTC FinishedAt: 2026-09-03 23:04:35 +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:*58dc6a5f-0cfa-4748-a45c-40fa97e0038f,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-workflowmtjx4/series-workflowmtjx4-convert-artifact-430491368/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": "fbc5ec38-e7f6-48e1-80ce-cec9eb926647", "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-workflowmtjx4/series-workflowmtjx4-build-action-3369946206/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 23:04:45 +0000 UTC FinishedAt: 2026-09-03 23:04:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 23:04:45 +0000 UTC FinishedAt: 2026-09-03 23:04:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 23:04:45 +0000 UTC FinishedAt: 2026-09-03 23:04:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 23:04:45 +0000 UTC FinishedAt: 2026-09-03 23:04:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowmtjx4/series-workflowmtjx4-convert-artifact-2253120463/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 23:04:55 +0000 UTC FinishedAt: 2026-09-03 23:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 23:04:55 +0000 UTC FinishedAt: 2026-09-03 23:06:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fbc5ec38-e7f6-48e1-80ce-cec9eb926647,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-workflowmtjx4/series-workflowmtjx4-build-action-3369946206/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-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 23:06:48 +0000 UTC FinishedAt: 2026-09-03 23:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 23:06:48 +0000 UTC FinishedAt: 2026-09-03 23:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 23:06:48 +0000 UTC FinishedAt: 2026-09-03 23:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 23:06:48 +0000 UTC FinishedAt: 2026-09-03 23:24: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:*58dc6a5f-0cfa-4748-a45c-40fa97e0038f,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-workflowmtjx4/series-workflowmtjx4-convert-artifact-2253120463/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": "bda6957f-d891-4d99-af1a-ba4764281832", "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-workflowmtjx4/series-workflowmtjx4-build-action-1359440867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 23:06:48 +0000 UTC FinishedAt: 2026-09-03 23:24:20 +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:*58dc6a5f-0cfa-4748-a45c-40fa97e0038f,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-workflowmtjx4/series-workflowmtjx4-convert-artifact-2253120463/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": "bda6957f-d891-4d99-af1a-ba4764281832", "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-workflowmtjx4/series-workflowmtjx4-build-action-1359440867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 23:24:30 +0000 UTC FinishedAt: 2026-09-03 23:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 23:24:30 +0000 UTC FinishedAt: 2026-09-03 23:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 23:24:30 +0000 UTC FinishedAt: 2026-09-03 23:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 23:24:30 +0000 UTC FinishedAt: 2026-09-03 23:26:08 +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:*bda6957f-d891-4d99-af1a-ba4764281832,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-workflowmtjx4/series-workflowmtjx4-build-action-1359440867/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-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 23:26:18 +0000 UTC FinishedAt: 2026-09-04 02:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 23:26:18 +0000 UTC FinishedAt: 2026-09-04 02:27:47 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},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:*fbc5ec38-e7f6-48e1-80ce-cec9eb926647,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bda6957f-d891-4d99-af1a-ba4764281832,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-workflowmtjx4/series-workflowmtjx4-build-action-3369946206/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-workflowmtjx4/series-workflowmtjx4-build-action-1359440867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 23:26:18 +0000 UTC FinishedAt: 2026-09-03 23:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 23:26:18 +0000 UTC FinishedAt: 2026-09-03 23:26:25 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},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-workflowmtjx4/series-workflowmtjx4-convert-artifact-3330227592/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 23:26:18 +0000 UTC FinishedAt: 2026-09-03 23:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 23:26:18 +0000 UTC FinishedAt: 2026-09-03 23:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 23:26:18 +0000 UTC FinishedAt: 2026-09-03 23:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 23:26:28 +0000 UTC FinishedAt: 2026-09-04 02:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmtjx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_best_node_in","next_demotion_node","establish_demotion_targets","build_node_zonelist"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"576fec8b9d4cbef3a2dfdb068ae9ad18f24ec328","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"b88d2d9f-4508-450f-8683-46a117fe6840","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 23:26:28 +0000 UTC FinishedAt: 2026-09-04 02:27:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fbc5ec38-e7f6-48e1-80ce-cec9eb926647,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bda6957f-d891-4d99-af1a-ba4764281832,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-workflowmtjx4/series-workflowmtjx4-build-action-3369946206/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-workflowmtjx4/series-workflowmtjx4-build-action-1359440867/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-workflowmtjx4/series-workflowmtjx4-convert-artifact-3330227592/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,}