Name: series-workflow666lt Phase: Succeeded StartedAt: 2026-08-18 09:04:54 +0000 UTC FinishedAt: 2026-08-18 13:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[0] Phase: Succeeded StartedAt: 2026-08-18 09:04:54 +0000 UTC FinishedAt: 2026-08-18 09:47:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 09:04:54 +0000 UTC FinishedAt: 2026-08-18 09:47:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "0af0a153-3d93-47a0-9936-a68f8f81fe3c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_tx_error", "skb_zerocopy", "ovs_dp_process_packet" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNrYnMsIGFzIHRoZSBzdGF0ZSBsaXZlcyBpbiBgc2tiX3NoaW5mbygpYCB3aGljaCBjbG9uZXMgc2hhcmUuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbGVycyBvZiBgc2tiX3R4X2Vycm9yYCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCAvIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIHplcm9jb3B5IHN0YXRlIG1hbmFnZW1lbnQsIHJlZmNvdW50aW5nLCBhbmQgcHJldmVudGluZyBpbmNvcnJlY3Qgc3RhdGUgY2xlYXJpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIGFzIHdlbGwgYXMgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgb3BlbnZzd2l0Y2ggZW50cnkgcG9pbnRzLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzQzOWYxMTYwNTY5MWY3Y2QxNzMyM2VmYWRiMjMyYWZlOTUwNjc0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjQ2OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbiAgKlxuICAqXHRSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi5cbiAgKlx0c2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy5cbiYjNDM7ICpcbiYjNDM7ICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbiYjNDM7ICpcdHNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS5cbiAgKi9cbiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChza2IpIHtcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiAhc2tiX2Nsb25lZChza2IpKSB7XG4gXHRcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuIFx0XHRza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTtcbiBcdH1cbkBAIC0zOTA3LDEwICYjNDM7MzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gJiM0MzsgcGxlbik7XG4gXG4tXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHtcbi1cdFx0c2tiX3R4X2Vycm9yKGZyb20pO1xuJiM0MztcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4mIzQzO1xuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oZnJvbSktXHUwMDNlbnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggYWU2OWIyY2FiYWI5ZS4uZmZmNzVjM2VlZDExNiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0c2tiX3R4X2Vycm9yKHNrYik7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC02MDEsOCAmIzQzOzYwMiw2IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZXJyID0gZ2VubG1zZ191bmljYXN0KG92c19kcF9nZXRfbmV0KGRwKSwgdXNlcl9za2IsIHVwY2FsbF9pbmZvLVx1MDAzZXBvcnRpZCk7XG4gXHR1c2VyX3NrYiA9IE5VTEw7XG4gb3V0OlxuLVx0aWYgKGVycilcbi1cdFx0c2tiX3R4X2Vycm9yKHNrYik7XG4gXHRjb25zdW1lX3NrYih1c2VyX3NrYik7XG4gXHRjb25zdW1lX3NrYihuc2tiKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBhcyB3ZWxsIGFzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIG9wZW52c3dpdGNoIGVudHJ5IHBvaW50cywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0MzlmMTE2MDU2OTFmN2NkMTczMjNlZmFkYjIzMmFmZTk1MDY3NDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTo0NjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYmEzZGJhYzgwZmI0OS4uMDQ3NzZhMTEyMzM0MiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTE0MTcsMTAgJiM0MzsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApOwogICoKICAqCVJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLgogICoJc2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy4KJiM0MzsgKgomIzQzOyAqCURvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW4KJiM0MzsgKglza2Jfc2hpbmZvKCksIHdoaWNoIHRoZSBjbG9uZXMgc2hhcmUuCiAgKi8KIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHNrYikgewomIzQzOwlpZiAoc2tiICZhbXA7JmFtcDsgIXNrYl9jbG9uZWQoc2tiKSkgewogCQlza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTsKIAkJc2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7CiAJfQpAQCAtMzkwNywxMCAmIzQzOzM5MTAsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCiAKIAlza2JfbGVuX2FkZCh0bywgbGVuICYjNDM7IHBsZW4pOwogCi0JaWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7Ci0JCXNrYl90eF9lcnJvcihmcm9tKTsKJiM0MzsJaWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiYjNDM7CiAJc2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBza2Jfc2hpbmZvKGZyb20pLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKaW5kZXggYWU2OWIyY2FiYWI5ZS4uZmZmNzVjM2VlZDExNiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpCiAJCQljb25zdW1lX3NrYihza2IpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiYjNDM7CQkJc2tiX3R4X2Vycm9yKHNrYik7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQl9CkBAIC02MDEsOCAmIzQzOzYwMiw2IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby0mZ3Q7cG9ydGlkKTsKIAl1c2VyX3NrYiA9IE5VTEw7CiBvdXQ6Ci0JaWYgKGVycikKLQkJc2tiX3R4X2Vycm9yKHNrYik7CiAJY29uc3VtZV9za2IodXNlcl9za2IpOwogCWNvbnN1bWVfc2tiKG5za2IpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIGJvdGggY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2NvcmUvc2tidWZmLmNgLCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGRhdGFwYXRoLCB3aGljaCBpcyBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGhvdyBlcnJvciBoYW5kbGluZyBpcyBkb25lIHdoZW4gaXQgY29tZXMgdG8gdHJhbnNtaXR0aW5nIFNLQnMgKHNvY2tldCBidWZmZXIpLgoKRmlyc3QsIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAuIE5vdywgaWYgdGhlIFNLQiBiZWluZyB0cmFuc21pdHRlZCBpcyBjbG9uZWQgKGBza2JfY2xvbmVkKHNrYilgIGlzIHRydWUpLCB0aGUgYHNrYl90eF9lcnJvcmAgZnVuY3Rpb24gZXNzZW50aWFsbHkgZG9lcyBub3RoaW5nLiBUaGF0IGZlZWxzIGxpa2UgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIGNoYW5nZSBvbiBob3cgd2UgbWFuYWdlIGVycm9ycyB3aXRoIGNsb25lZCBwYWNrZXRzLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KClNlY29uZGx5LCBpdCBsb29rcyBsaWtlIGBza2JfdHhfZXJyb3IoZnJvbSlgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgcmVtb3ZhbCwgc28gSSYjMzk7bGwgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdGFraW5nIGl0cyBwbGFjZSAoaWYgYW55dGhpbmcpIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC4gYHNrYl96ZXJvY29weWAgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgemVyby1jb3B5IHRyYW5zZmVycywgc28gYSBjaGFuZ2UgaGVyZSBkZXNlcnZlcyBhIGRlZXBlciBkaXZlLgoKRmluYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFNwZWNpZmljYWxseSwgYHNrYl90eF9lcnJvcihza2IpYCBpcyBhZGRlZCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgYnV0IHJlbW92ZWQgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgT3BlbiB2U3dpdGNoIGRhdGEgcGF0aC4gSSBzdXNwZWN0IHRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZyB3aXRoIHJlZ2FyZHMgdG8gcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4KClNvLCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggY29yZSBuZXR3b3JraW5nIChzcGVjaWZpY2FsbHkgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgKSBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGRhdGFwYXRoLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBib3RoIGFyZWFzLCB3aGljaCBtZWFucyBpdCB3YXJyYW50cyBmdXp6aW5nIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5leHBlY3RlZCByZWdyZXNzaW9ucy4KCkkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gSXQmIzM5O3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIE9wZW4gdlN3aXRjaCBjb25maWcgKGBPUEVOVlNXSVRDSGApIHNob3VsZCBkZWZpbml0ZWx5IGJlIGFjdGl2ZSBkdXJpbmcgdGVzdGluZy4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYWxsIHRocmVlIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuIEdvb2QsIHRoZXkmIzM5O3JlIGFsbCBnbG9iYWwuIFRoaXMgaGVscHMgd2l0aCB0aGUgZnV6emluZy4KCldhaXQsIGBza2JfdHhfZXJyb3JgIGlzIGJlaW5nICptb2RpZmllZCogaW4gdGhpcyBwYXRjaCwgc28gbGV0IG1lIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0xNDEyPUVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTQtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoxNDE1OiAqXHRza2JfdHhfZXJyb3IgLSByZXBvcnQgYW4gc2tfYnVmZiB4bWl0IGVycm9yXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE2LSAqXHRAc2tiOiBidWZmZXIgdGhhdCB0cmlnZ2VyZWQgYW4gZXJyb3Jcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDIzLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MTQyNDp2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2tidWZmLmMtMTQyNS17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTQzMC19XG5uZXQvY29yZS9za2J1ZmYuYzoxNDMxOkVYUE9SVF9TWU1CT0woc2tiX3R4X2Vycm9yKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGF0YSBUcmFuc2ZlcioqCgpBbHJpZ2h0LCBzbyBpdCYjMzk7cyBiZWVuICpleHBvcnRlZCouIFRoYXQmIzM5O3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBtZWNoYW5pc21zIHVzZWQuIFNwZWNpZmljYWxseSwgdGhlIHRyYW5zZmVyIG1lY2hhbmlzbSB0aGF0IEkgd2FudCB0byB1bmRlcnN0YW5kIGlzIGBza2JfemVyb2NvcHlgLiBLbm93aW5nIHRoYXQgdGhpcyBtZWNoYW5pc20gaXMgaW52b2x2ZWQgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSB6ZXJvLWNvcHkgZGF0YSB0cmFuc2Zlciwgb3Igc29tZSBzcGVjaWZpYyB1c2Ugb2YgdGhlIHNrYiBzdHJ1Y3R1cmUgdG8gYWNjb21wbGlzaCB0aGF0IGdvYWwsIG9yIGEgcGFydGljdWxhciBzdGFnZSBvZiBhbiBleHBvcnQgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhlIGBza2JfemVyb2NvcHlgIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dCwgYW5kIHdoYXQgdGhhdCBtaWdodCBtZWFuIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBhbmQgb3ZlcmhlYWQgb2YgdGhpcyB0cmFuc2ZlciwgYW5kIGlmIGFueSBkYXRhIGNvcGllcyB3ZXJlIG5lZWRlZC4gTm93LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTgxNT1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfcmVhbGxvYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xODE2LVxubmV0L2NvcmUvc2tidWZmLmM6MTgxNzpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0xODE4LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODM3PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTg3My1cdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cdTAwM2VlZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1pFUk9DT1BZIHx8XG5uZXQvY29yZS9za2J1ZmYuYzoxODc0Olx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTg3NS1cdFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTM9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTE1OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxNi1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUyLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTM6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTk2Mz1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTY0LVxubmV0L2NvcmUvc2tidWZmLmM6MTk2NTpzdGF0aWMgaW50IHNrYl96ZXJvY29weV9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKm9yaWcsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTY2LVx0XHRcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjg9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI1Mi1cdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTM6XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTQtXHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4MzE9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzMy0gLyoqXG5uZXQvY29yZS9za2J1ZmYuYzozODM0OiAqXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXG5uZXQvY29yZS9za2J1ZmYuYy0zODM1LSAqXHRAZnJvbTogc291cmNlIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzctICpcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAmIzM5O3RvJiMzOTsgc2tiIHBhc3NlZFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODogKlx0aW50byBza2JfemVyb2NvcHkoKS5cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzktICovXG5uZXQvY29yZS9za2J1ZmYuYz0zODQwPXVuc2lnbmVkIGludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg0MTpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NDIte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTctfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LVxubmV0L2NvcmUvc2tidWZmLmMtMzg2MC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NjE6ICpcdHNrYl96ZXJvY29weSAtIFplcm8gY29weSBza2IgdG8gc2tiXG5uZXQvY29yZS9za2J1ZmYuYy0zODYyLSAqXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjktICpcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NzA6ICpcdFRoZSBgaGxlbmAgYXMgY2FsY3VsYXRlZCBieSBza2JfemVyb2NvcHlfaGVhZGxlbigpIHNwZWNpZmllcyB0aGVcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NzEtICpcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc4PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3OTpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODgwLXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTE1LVxubmV0L2NvcmUvc2tidWZmLmM6MzkxNjpcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTE3LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5MzQtfVxubmV0L2NvcmUvc2tidWZmLmM6MzkzNTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzkzNi1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00MjMzPXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQyNDAtXHRza2Jfc2hpbmZvKHNrYjEpLVx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgemNfZmxhZ3M7XG5uZXQvY29yZS9za2J1ZmYuYzo0MjQxOlx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XG5uZXQvY29yZS9za2J1ZmYuYy00MjQyLVx0aWYgKGxlbiBcdTAwM2MgcG9zKVx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3Nzk9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MDAyLVxubmV0L2NvcmUvc2tidWZmLmM6NTAwMzpcdFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01MDA0LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMDgtXHRcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMDk6XHRcdFx0XHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTAxMC1cdFx0XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHllcCwgY29uZmlybWluZywgYHNrYl96ZXJvY29weWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgd2hhdCYjMzk7cyB0aGUgc3RhdHVzIG9mIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDQtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrLiAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggUGFja2V0IFByb2Nlc3NpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgT3BlbiB2U3dpdGNoIGNvZGUsIHNwZWNpZmljYWxseSB3aGVyZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQuIEl0JiMzOTtzIGFuIGludGVybmFsIGVudHJ5IHBvaW50LCBub3Qgc29tZXRoaW5nIGV4cG9ydGVkIGRpcmVjdGx5LCBidXQgY3J1Y2lhbCBmb3IgaGFuZGxpbmcgcGFja2V0IGZsb3cuIEkmIzM5O3ZlIHNwb3R0ZWQgYSBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBwYXRjaDogaXQgaW50cm9kdWNlcyBgc2tiX3R4X2Vycm9yYC4gVGhpcyBmdW5jdGlvbiBzZWVtcyB0byBiZSBkZXNpZ25lZCB0byBoYW5kbGUgZXJyb3JzIGluIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIGBza19idWZmYC4gSXQgY2hlY2tzIGlmIHRoZSBgc2tfYnVmZmAgaXMgY2xvbmVkLCBhbmQgaWYgaXQmIzM5O3Mgbm90LCBpdCBkb3duZ3JhZGVzIGFuZCBjbGVhcnMgaXQgd2l0aCBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkYCBhbmQgYHNrYl96Y29weV9jbGVhcmAuIFRoaXMgaXMgYWxsIHRvIGRvIHdpdGggemVyby1jb3B5IG9wZXJhdGlvbnMgb24gdGhlIHNrYi4KCk5vdywgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBTcGVjaWZpY2FsbHksIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGhhcyBiZWVuIHVwZGF0ZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHNrYl90eF9lcnJvcmAgaXMgbm93IGNhbGxlZCBpbiB0aGUgYGRlZmF1bHRgIGNhc2Ugb2YgYSBgc3dpdGNoYCBzdGF0ZW1lbnQsIHdoaWNoIGluZGljYXRlcyBhIGZhaWx1cmUgaW4gaGFuZGxpbmcgdGhlIHBhY2tldCB3aXRoaW4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0JiMzOTtzIHVzZWQgdG8gY2xlYW4gdXAgdGhlIHBhY2tldCBidWZmZXIgYmVmb3JlIGl0IGlzIHJlbGVhc2VkLgoKQWxzbywgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGhhcyBiZWVuIG1vZGlmaWVkLiBJdCYjMzk7cyB3b3J0aCBub3RpbmcgdGhhdCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBmaWxlLiBUaGUgZXJyb3IgaGFuZGxpbmcgdGhlcmUgbG9va3MgZGlmZmVyZW50OyB0aGUgY2hlY2sgYGlmIChlcnIpYCB0aGF0IHVzZWQgdG8gY2FsbCBgc2tiX3R4X2Vycm9yYCBoYXMgYmVlbiByZW1vdmVkLiBJbnN0ZWFkLCBgY29uc3VtZV9za2JgIGlzIGNhbGxlZCBkaXJlY3RseS4KCk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXRzZWxmIGlzIGV4cG9ydGVkLCBvciBpZiBpdCYjMzk7cyBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBmYXItcmVhY2hpbmcgdGhlc2UgY2hhbmdlcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNDgzPXN0YXRpYyBpbnQgY2xvbmVfZXhlY3V0ZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUxNy1cdFx0XHRjbG9uZS1cdTAwM2VyZWNpcmNfaWQgPSByZWNpcmNfaWQ7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MTg6XHRcdFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTE5LVx0XHR9XG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNTQ5PXN0YXRpYyB2b2lkIHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU2Ny1cdFx0ZWxzZVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTY4Olx0XHRcdG92c19kcF9wcm9jZXNzX3BhY2tldChza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1NjktXHR9IHdoaWxlICghYWN0aW9uX2ZpZm9faXNfZW1wdHkoZmlmbykpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMz12b2lkIG92c19kcF9kZXRhY2hfcG9ydChzdHJ1Y3QgdnBvcnQgKnApXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ0LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jay4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI0NTp2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzE4PWV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfdnBvcnRfZ2VubF9mYW1pbHk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMTktXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjA6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIxLXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYz00OTc9aW50IG92c192cG9ydF9yZWNlaXZlKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNTIyLVx0fVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NTIzOlx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgXHUwMDI2a2V5KTtcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTUyNC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDk3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhY2tldCBSZWNlcHRpb24gRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IE9wZW4gdlN3aXRjaCBoYW5kbGVzIGluY29taW5nIHBhY2tldHMsIGFuZCBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIHNlZSB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20gYG92c192cG9ydF9yZWNlaXZlYCwgYGNsb25lX2V4ZWN1dGVgLCBhbmQgYHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9uc2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBvdnNfdnBvcnRfcmVjZWl2ZWAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBwYWNrZXRzIGNvbWluZyAqaW50byogT3BlbiB2U3dpdGNoIGl0c2VsZiwgYWx0aG91Z2ggSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgaWYgYG92c192cG9ydF9yZWNlaXZlYCBpcyBldmVuIGV4cG9ydGVkLCBvciBpZiBpdCYjMzk7cyBpbnRlcm5hbCB0byBzb21lIG1vZHVsZS4gSWYgaXQmIzM5O3MgZXhwb3J0ZWQsIHRoYXQgZnVydGhlciB2YWxpZGF0ZXMgbXkgaHlwb3RoZXNpcyBhbmQgb2ZmZXJzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGV0YWlsZWQgYW5hbHlzaXMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBwYWNrZXRzIGVudGVyIHNvIEkgY2FuIHdvcmsgYmFjayBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfdnBvcnRfcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jPTM0PWludGVybmFsX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTM3LVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jOjM4Olx0Lyogc3RvcmUgbGVuIHZhbHVlIGJlY2F1c2Ugc2tiIGNhbiBiZSBmcmVlZCBpbnNpZGUgb3ZzX3Zwb3J0X3JlY2VpdmUoKSAqL1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTM5LVx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmMtNDEtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmM6NDI6XHRlcnIgPSBvdnNfdnBvcnRfcmVjZWl2ZShpbnRlcm5hbF9kZXZfcHJpdihuZXRkZXYpLVx1MDAzZXZwb3J0LCBza2IsIE5VTEwpO1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTQzLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LW5ldGRldi5jPTI5PXN0YXRpYyB2b2lkIG5ldGRldl9wb3J0X3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmMtNDktXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmM6NTA6XHRvdnNfdnBvcnRfcmVjZWl2ZSh2cG9ydCwgc2tiLCBza2JfdHVubmVsX2luZm8oc2tiKSk7XG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmMtNTEtXHRyZXR1cm47XG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDY5PXUzMiBvdnNfdnBvcnRfZmluZF91cGNhbGxfcG9ydGlkKGNvbnN0IHN0cnVjdCB2cG9ydCAqdnBvcnQsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDg3LS8qKlxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NDg4OiAqXHRvdnNfdnBvcnRfcmVjZWl2ZSAtIHBhc3MgdXAgcmVjZWl2ZWQgcGFja2V0IHRvIHRoZSBkYXRhcGF0aCBmb3IgcHJvY2Vzc2luZ1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDg5LSAqXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDk2LSAqL1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NDk3OmludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDk4LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oPTE5NT1zdGF0aWMgaW5saW5lIHN0cnVjdCB2cG9ydCAqdnBvcnRfZnJvbV9wcml2KHZvaWQgKnByaXYpXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmgtMTk5LVxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg6MjAwOmludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKiwgc3RydWN0IHNrX2J1ZmYgKixcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oLTIwMS1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9WUyBQYWNrZXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBPcGVuIHZTd2l0Y2ggaGFuZGxlcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCB0cmFuc21pc3Npb24uIEl0IHNlZW1zIGxpa2UgYG92c192cG9ydF9yZWNlaXZlYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBgbmV0ZGV2X3BvcnRfcmVjZWl2ZWAgYW5kIGBpbnRlcm5hbF9kZXZfeG1pdGAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHNvbWUgb2YgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBwYWNrZXQgdHJhbnNtaXNzaW9uIGVycm9ycyBhcmUgb2NjdXJyaW5nLCBzbyBgc2tiX3R4X2Vycm9yYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gdG8gaW5zcGVjdC4gSXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsIG5ldHdvcmtpbmcgc3RhY2ssIHNvIEkgc2hvdWxkIGJlIGZhbWlsaWFyIHdpdGggaXQsIGJ1dCBjb250ZXh0IGlzIGFsd2F5cyBpbXBvcnRhbnQuIFRoZW4sIEkgbmVlZCB0byBsb29rIGludG8gemVyby1jb3B5IHBhY2tldCBoYW5kbGluZywgc28gYHNrYl96ZXJvY29weWAgaXMgYW5vdGhlciBjb3JlIGZ1bmN0aW9uIHRvIGtlZXAgaW4gbWluZC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyB3ZWxsLCBidXQgSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgKnNwZWNpZmljYWxseSogYmVpbmcgdXNlZCBpbiB0aGlzIE9WUyBjb250ZXh0LgoKU28sIHRvIHN1bW1hcml6ZSwgdGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZToKCiogICBgc2tiX3R4X2Vycm9yYCAoZm9yIGVycm9yIGhhbmRsaW5nKQoqICAgYHNrYl96ZXJvY29weWAgKGZvciBlZmZpY2llbnQgcGFja2V0IHRyYW5zZmVyKQoqICAgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgKHRoZSBjZW50cmFsIHByb2Nlc3NpbmcgcG9pbnQpCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBPUEVOVlNXSVRDSGAgaXMgZW5hYmxlZCwgYXMgdGhpcyB3aWxsIGltcGFjdCBob3cgdGhpcyBzZWN0aW9uIG9mIGNvZGUgYmVoYXZlcy4gVGhpcyBzZWVtcyBsaWtlIGEgdmFsaWQgY29uZmlnLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9QRU5WU1dJVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maXJtaW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBEaXZpbmcgRGVlcGVyKioKClJpZ2h0LCBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24sIGdvdCBpdC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSByb3V0ZSB0byBnby4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGNvbnRleHRzIHdoZXJlIHRoYXQgYHNrYl90eF9lcnJvcmAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaCB0byBmdWxseSBncmFzcCBpdHMgaW1wYWN0IGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBkYXRhIHBhdGguIEFyZSB0aGVyZSBvdGhlciBwb2ludHMgb2YgZmFpbHVyZSB1cHN0cmVhbSB0aGF0IGZlZWQgaW50byBpdD8gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIHBhdGhzPyBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgbm93IHRvIGNvbmZpcm0gdGhlIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jPTM1Nj1uZXRkZXZfdHhfdCBvdnBuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0My1cdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKG92cG4tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYzo0NDQ6XHRza2JfdHhfZXJyb3Ioc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYy00NDUtXHRrZnJlZV9za2JfbGlzdChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEwMDM9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEwODMtXHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuZHJpdmVycy9uZXQvdHVuLmM6MTA4NDpcdHNrYl90eF9lcnJvcihza2IpO1xuZHJpdmVycy9uZXQvdHVuLmMtMTA4NS1cdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xMzM4PXZvaWQgc2tiX2R1bXAoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnVsbF9wa3QpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzM5OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzQwLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE0MTI9RVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTQxNC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MTU6ICpcdHNrYl90eF9lcnJvciAtIHJlcG9ydCBhbiBza19idWZmIHhtaXQgZXJyb3Jcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTYtICpcdEBza2I6IGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCBhbiBlcnJvclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjMtICovXG5uZXQvY29yZS9za2J1ZmYuYzoxNDI0OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy0xNDI1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDMwLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE0MzE6RVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpO1xubmV0L2NvcmUvc2tidWZmLmMtMTQzMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwNT1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MDMtXHRpZiAoIXNrYikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MDQ6XHRcdHNrYl90eF9lcnJvcihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MDUtXHRcdGdvdG8gbmxtc2dfZmFpbHVyZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxMi1cdGlmICghbmxoKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgxMzpcdFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxNC1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjMtbmxhX3B1dF9mYWlsdXJlOlxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NjQ6XHRza2JfdHhfZXJyb3IoZW50c2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTY1LVx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4Ny1cdFx0ZGVmYXVsdDpcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4ODpcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4OS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYz0xNTI1PWludCBza2JfbWV0YV9pbnZhbGlkX2N0eCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jOjE1MzU6U0VDKFwmIzM0O2ZlbnRyeS9za2JfdHhfZXJyb3JcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTM2LV9fZmFpbHVyZSBfX21zZyhcJiMzNDttdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jPTE1Mzc9aW50IEJQRl9QUk9HKHNrYl9pbnZhbGlkX2N0eF9mZW50cnksIHZvaWQgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM6MTU0NzpTRUMoXCYjMzQ7ZmV4aXQvc2tiX3R4X2Vycm9yXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTU0OC1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7bXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjkwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIFBhY2tldCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgbmV0d29ya2luZyBjb21wb25lbnRzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGludm9sdmVzIHBhY2tldCB0cmFuc21pc3Npb24sIHNwZWNpZmljYWxseSBob3cgZXJyb3JzIGFyZSBoYW5kbGVkLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgb3Zwbl9uZXRfeG1pdGAsIGB0dW5fbmV0X3htaXRgLCBgbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2VgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgdG91Y2hpbmcgdmFyaW91cyBwYWNrZXQgcGF0aHMuCgpUaGUgbWFpbiB0aGluZyB0aGF0IGp1bXBlZCBvdXQgYXQgbWUgaXMgdGhlIHJlbW92YWwgYW5kIGFkZGl0aW9uIG9mIGBza2JfdHhfZXJyb3JgLiBJdCYjMzk7cyBnZXR0aW5nIHN0cmlwcGVkIGZyb20gYHNrYl96ZXJvY29weWAgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCwgdGhlbiBhZGRlZCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGVycm9yIGhhbmRsaW5nIHJlc3BvbnNpYmlsaXR5LCB3aGljaCBtZWFucyBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIGlzIGhhcHBlbmluZyBhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGNoYW5nZSBhbHNvIHRvdWNoZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2JfdHhfZXJyb3JgIGl0c2VsZiwgc28gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhhdCBjbG9zZWx5LgoKU28sIG15IGtleSBmb2N1cyBhcmVhcyBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZToKLSAgIGBza2JfdHhfZXJyb3JgICh0aGUgb2J2aW91cyBvbmUpCi0gICBgc2tiX3plcm9jb3B5YCAod2hlcmUgaXQmIzM5O3MgYmVpbmcgcmVtb3ZlZCkKLSAgIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgICh3aGVyZSBpdCYjMzk7cyBiZWluZyBhZGRlZCkKClRoZSBjb25maWcgZm9yIHRoaXMgaXMgYE9QRU5WU1dJVENIYC4gVGhhdCYjMzk7cyBub3QgdG9vIHN1cnByaXNpbmcgZ2l2ZW4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAgYmVpbmcgaW52b2x2ZWQuIEJ1dCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGRlcGVuZGVuY2llcyBoZXJlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgYXJlIGFsd2F5cyBjb21waWxlZCB3aGljaCBpcyBnb29kIHRvIGtub3csIGxlc3Mgbm9pc2UuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiBgT1BFTlZTV0lUQ0hgIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGF0IGEgdmVyeSBsb3cgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGl2aW5nIGludG8gdGhlIE9wZW4gdlN3aXRjaCBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB3aXRoIHRoaXMgJiMzOTtPcGVuIHZTd2l0Y2gmIzM5OyBjb25jZXB0LiBJdCYjMzk7cyBjcnVjaWFsIHRvIGhhdmUgdGhhdCBmb3VuZGF0aW9uYWwgdW5kZXJzdGFuZGluZy4gVGhlIHRlY2huaWNhbCBhc3BlY3RzIGFyZSBmYW1pbGlhciwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGhhdmUgdGhlIGV4YWN0LCBjb21wcmVoZW5zaXZlIGRlZmluaXRpb24gbG9ja2VkIGRvd24gaW4gbXkgaGVhZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSYjMzk7bSBnb2luZyB0byBjb25zdWx0IHRoZSBtb3N0IGF1dGhvcml0YXRpdmUgc291cmNlIHBvc3NpYmxlIGZvciB0aGF0IGRlZmluaXRpb24gYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gd29ya2luZyBmcm9tIGEgcHJlY2lzZSBhbmQgY29tcGxldGUgcGljdHVyZS4gTm8gc2hvcnRjdXRzIGhlcmU7IGEgc29saWQgZGVmaW5pdGlvbiBpcyBwYXJhbW91bnQsIGFuZCBpdCYjMzk7cyB0aW1lIHRvIHJlZnJlc2ggYW5kIGVuc3VyZSB0aGF0IEkgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XG4gIDMyOlx0XHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXG4gIDMzOlx0XHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcbiAgMzQ6XHRcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNlZSBodHRwOi8vb3BlbnZzd2l0Y2gub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2VcbiAgMzc6XHRcdCAgdXRpbGl0aWVzLlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDQwOlx0XHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MTkKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVwZW5kZW5jeSBNYXBwaW5nIGFuZCBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gaW50ZWdyYXRpbmcgYE9QRU5WU1dJVENIYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBpdCBjbGVhcmx5IHJlbGllcyBvbiBgSU5FVGAsIHNvIGBPUEVOVlNXSVRDSGAgZ2V0cyBpbmNsdWRlZC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byBjb25maXJtIGEgY291cGxlIG9mIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgd2hlcmUgSSBleHBlY3QgdGhlbSB0byBiZSwgZXNwZWNpYWxseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcgYW5kIHplcm8tY29weSBvcGVyYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIG9mIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoZXkgcmVzaWRlIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEdvb2QsIHRoYXQgYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJiMzOTtzIGFyY2hpdGVjdHVyZS4KCldpdGggdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBsb2NhdGlvbnMgdmVyaWZpZWQsIEkgY2FuIG5vdyBjb25maWRlbnRseSBzZXQgdGhlIHJlc3VsdHMuIFJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBza2JzLCBhcyB0aGUgc3RhdGUgbGl2ZXMgaW4gYHNrYl9zaGluZm8oKWAgd2hpY2ggY2xvbmVzIHNoYXJlLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGxlcnMgb2YgYHNrYl90eF9lcnJvcmAgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCYjMzk7cyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NDM5ZjExNjA1NjkxZjdjZDE3MzIzZWZhZGIyMzJhZmU5NTA2NzQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDk6NDY6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTsKICAqCiAgKglSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi4KICAqCXNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuCiYjNDM7ICoKJiM0MzsgKglEb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluCiYjNDM7ICoJc2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLgogICovCiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChza2IpIHsKJiM0MzsJaWYgKHNrYiAmYW1wOyZhbXA7ICFza2JfY2xvbmVkKHNrYikpIHsKIAkJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiAJCXNrYl96Y29weV9jbGVhcihza2IsIHRydWUpOwogCX0KQEAgLTM5MDcsMTAgJiM0MzszOTEwLDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAotCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewotCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwogCXNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhmcm9tKS0mZ3Q7bnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQogCQkJY29uc3VtZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgomIzQzOwkJCXNrYl90eF9lcnJvcihza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJfQpAQCAtNjAxLDggJiM0Mzs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tJmd0O3BvcnRpZCk7CiAJdXNlcl9za2IgPSBOVUxMOwogb3V0OgotCWlmIChlcnIpCi0JCXNrYl90eF9lcnJvcihza2IpOwogCWNvbnN1bWVfc2tiKHVzZXJfc2tiKTsKIAljb25zdW1lX3NrYihuc2tiKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NgoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA2ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWmVyb2NvcHkgU3RhdGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHR3ZWFraW5nIGBza2JfdHhfZXJyb3JgIGFuZCBpdHMgdXNlcyBhY3Jvc3MgYSBmZXcga2V5IGFyZWFzIGluIHRoZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjay4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVmaW5pbmcgaG93IHdlIGhhbmRsZSB0aGUgemVyb2NvcHkgc3RhdGUsIHBhcnRpY3VsYXJseSBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuCgpFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIG1ha2luZyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBgc2tiX3R4X2Vycm9yYDogaXQmIzM5O3Mgbm8gbG9uZ2VyIGdvaW5nIHRvIGNsZWFyIHRoZSB6ZXJvY29weSBzdGF0ZSBpZiB0aGUgYHNrYmAgaXMgYSBjbG9uZS4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIHNoYXJlZCBzdGF0ZSBpbiBgc2tiX3NoaW5mbygpYCB3b3VsZCBnZXQgbWVzc2VkIHVwLCBhbmQgdGhhdCBjb3VsZCBsZWFkIHRvIG5hc3R5IGlzc3Vlcy4gSXQmIzM5O3MgYW4gaW1wb3J0YW50IGZpeCB0byBwcmV2ZW50IGluY29ycmVjdCByZWZjb3VudGluZywgYSBkb3VibGUtZnJlZSwgb3IgdXNlLWFmdGVyLWZyZWUsIG9yIGEgbWVtb3J5IGxlYWsuCgpEaWdnaW5nIGRlZXBlciwgdGhlIHBhdGNoIHJlbW92ZXMgdGhlIGRpcmVjdCBjYWxsIHRvIGBza2JfdHhfZXJyb3IoZnJvbSlgIHdpdGhpbiBgc2tiX3plcm9jb3B5YCB3aGVuIGBza2Jfb3JwaGFuX2ZyYWdzYCBmYWlscywgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBhbiBlcnJvciBhbHJlYWR5IGhhcHBlbmVkLiBJdCBhbHNvIHNoaWZ0cyB0aGUgYHNrYl90eF9lcnJvcihza2IpYCBjYWxsIGluIE9wZW4gdlN3aXRjaCBmcm9tIHRoZSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAgZXJyb3IgcGF0aHMuIFRoaXMgYXBwZWFycyB0byBiZSBjbGVhbnVwLCBlbnN1cmluZyBgc2tiX3R4X2Vycm9yYCBpcyBjYWxsZWQgaW4gdGhlIGFwcHJvcHJpYXRlIGNvbnRleHRzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgoKTm93LCB0aGUgcXVlc3Rpb24gSSBhbHdheXMgYXNrIG15c2VsZjogaXMgdGhpcyBnb2luZyB0byBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU/IEFuZCBteSBhc3Nlc3NtZW50IGlzIG5vLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgKnN0YXRlIG1hbmFnZW1lbnQqLCBzcGVjaWZpY2FsbHkgemVyb2NvcHkgc3RhdGUsIGFuZCB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGBza2JgIGNsb25lcy4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgd2UgZG9uJiMzOTt0IGFjY2lkZW50YWxseSBjbGVhciB0aGUgc3RhdGUgb2YgYSBzaGFyZWQgYnVmZmVyIG9yIHBvdGVudGlhbGx5IGxlYWsgbWVtb3J5LgoKV2UgYXJlbiYjMzk7dCBkZWFsaW5nIHdpdGggS01TQU4gdGVycml0b3J5IGhlcmU7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS0FTQU4gY29uY2VybnMsIHN1Y2ggYXMgYSBVQUYuIGBza2JfemNvcHlfY2xlYXJgIGRvZXMgbm90IHNlZW0gdG8gaW50cm9kdWNlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBJdCBpcyBtb3JlIGxpa2VseSB0byBjYXVzZSBtZW1vcnkgbGVha3MgaWYgbm90IGNhbGxlZCwgb3IgYSBVQUYgaWYgY2FsbGVkIGluY29ycmVjdGx5LgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgZm9jdXMgb24gemVyb2NvcHkgc3RhdGUgcmVmY291bnRpbmcgYW5kIGF2b2lkYW5jZSBvZiBpbmNvcnJlY3QgY2xlYXJpbmcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGZhbHNlLiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzIHByZXZlbnRpbmcgZG91YmxlIGZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgYW5kIGVuc3VyaW5nIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBza2JzLCBhcyB0aGUgc3RhdGUgbGl2ZXMgaW4gYHNrYl9zaGluZm8oKWAgd2hpY2ggY2xvbmVzIHNoYXJlLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGxlcnMgb2YgYHNrYl90eF9lcnJvcmAgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCYjMzk7cyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBza2JzLCBhcyB0aGUgc3RhdGUgbGl2ZXMgaW4gYHNrYl9zaGluZm8oKWAgd2hpY2ggY2xvbmVzIHNoYXJlLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGxlcnMgb2YgYHNrYl90eF9lcnJvcmAgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCYjMzk7cyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjowOC4wNTE2MzU5OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTYxMjY3NTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl90eF9lcnJvclwiLFxuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc2ticywgYXMgdGhlIHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGNsb25lcyBzaGFyZS4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsZXJzIG9mIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIGFzIHdlbGwgYXMgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgb3BlbnZzd2l0Y2ggZW50cnkgcG9pbnRzLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjowOC4wNTE2NDExNTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY3NTA4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDM5ZjExNjA1NjkxZjdjZDE3MzIzZWZhZGIyMzJhZmU5NTA2NzQyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjQ2OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCBiYTNkYmFjODBmYjQ5Li4wNDc3NmExMTIzMzQyIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXFxuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5AQCAtMTQxNywxMCArMTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcXG4gICpcXG4gICpcXHRSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi5cXG4gICpcXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxcbisgKlxcbisgKlxcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cXG4rICpcXHRza2Jfc2hpbmZvKCksIHdoaWNoIHRoZSBjbG9uZXMgc2hhcmUuXFxuICAqL1xcbiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdGlmIChza2IpIHtcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiAhc2tiX2Nsb25lZChza2IpKSB7XFxuIFxcdFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbiBcXHRcXHRza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTtcXG4gXFx0fVxcbkBAIC0zOTA3LDEwICszOTEwLDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbiBcXG4gXFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XFxuLVxcdFxcdHNrYl90eF9lcnJvcihmcm9tKTtcXG4rXFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbitcXG4gXFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKGZyb20pLVxcdTAwM2Vucl9mcmFnczsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcXG5pbmRleCBhZTY5YjJjYWJhYjllLi5mZmY3NWMzZWVkMTE2IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcXG5AQCAtMjg1LDYgKzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbiBcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0c2tiX3R4X2Vycm9yKHNrYik7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC02MDEsOCArNjAyLDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cXHUwMDNlcG9ydGlkKTtcXG4gXFx0dXNlcl9za2IgPSBOVUxMO1xcbiBvdXQ6XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHNrYl90eF9lcnJvcihza2IpO1xcbiBcXHRjb25zdW1lX3NrYih1c2VyX3NrYik7XFxuIFxcdGNvbnN1bWVfc2tiKG5za2IpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MDkuMzY5MTU4OTA5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDkzMDMyNzM0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfdHhfZXJyb3JcIixcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0MzlmMTE2MDU2OTFmN2NkMTczMjNlZmFkYjIzMmFmZTk1MDY3NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTo0NjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkwNywxMCArMzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcbiBcbi1cdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuLVx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4rXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1xuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oZnJvbSktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwMSw4ICs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjowOS4zNjkxNjAyNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjg4MDQ2NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBtYWtpbmcgY2hhbmdlcyB0byBib3RoIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL3NrYnVmZi5jYCwgYW5kIE9wZW4gdlN3aXRjaCdzIGRhdGFwYXRoLCB3aGljaCBpcyBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGhvdyBlcnJvciBoYW5kbGluZyBpcyBkb25lIHdoZW4gaXQgY29tZXMgdG8gdHJhbnNtaXR0aW5nIFNLQnMgKHNvY2tldCBidWZmZXIpLlxuXG5GaXJzdCwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yYC4gTm93LCBpZiB0aGUgU0tCIGJlaW5nIHRyYW5zbWl0dGVkIGlzIGNsb25lZCAoYHNrYl9jbG9uZWQoc2tiKWAgaXMgdHJ1ZSksIHRoZSBgc2tiX3R4X2Vycm9yYCBmdW5jdGlvbiBlc3NlbnRpYWxseSBkb2VzIG5vdGhpbmcuIFRoYXQgZmVlbHMgbGlrZSBhIHNpZ25pZmljYW50IGJlaGF2aW9yYWwgY2hhbmdlIG9uIGhvdyB3ZSBtYW5hZ2UgZXJyb3JzIHdpdGggY2xvbmVkIHBhY2tldHMsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uXG5cblNlY29uZGx5LCBpdCBsb29rcyBsaWtlIGBza2JfdHhfZXJyb3IoZnJvbSlgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQncyBhbiBpbnRlcmVzdGluZyByZW1vdmFsLCBzbyBJJ2xsIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdGFraW5nIGl0cyBwbGFjZSAoaWYgYW55dGhpbmcpIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC4gYHNrYl96ZXJvY29weWAgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgemVyby1jb3B5IHRyYW5zZmVycywgc28gYSBjaGFuZ2UgaGVyZSBkZXNlcnZlcyBhIGRlZXBlciBkaXZlLlxuXG5GaW5hbGx5LCBpdCdzIG1vZGlmeWluZyBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBTcGVjaWZpY2FsbHksIGBza2JfdHhfZXJyb3Ioc2tiKWAgaXMgYWRkZWQgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGJ1dCByZW1vdmVkIGZyb20gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIE9wZW4gdlN3aXRjaCBkYXRhIHBhdGguIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgaW50ZXJlc3Rpbmcgd2l0aCByZWdhcmRzIHRvIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblNvLCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggY29yZSBuZXR3b3JraW5nIChzcGVjaWZpY2FsbHkgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgKSBhbmQgT3BlbiB2U3dpdGNoJ3MgZGF0YXBhdGguIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGJvdGggYXJlYXMsIHdoaWNoIG1lYW5zIGl0IHdhcnJhbnRzIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIHJlZ3Jlc3Npb25zLlxuXG5JIHNob3VsZCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIE9wZW4gdlN3aXRjaCBjb25maWcgKGBPUEVOVlNXSVRDSGApIHNob3VsZCBkZWZpbml0ZWx5IGJlIGFjdGl2ZSBkdXJpbmcgdGVzdGluZy5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBhbGwgdGhyZWUgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gR29vZCwgdGhleSdyZSBhbGwgZ2xvYmFsLiBUaGlzIGhlbHBzIHdpdGggdGhlIGZ1enppbmcuXG5cbldhaXQsIGBza2JfdHhfZXJyb3JgIGlzIGJlaW5nICptb2RpZmllZCogaW4gdGhpcyBwYXRjaCwgc28gbGV0IG1lIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MTcuNjU3MjA5MTkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjAyNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl90eF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xNDEyPUVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTQxNC0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzoxNDE1OiAqXFx0c2tiX3R4X2Vycm9yIC0gcmVwb3J0IGFuIHNrX2J1ZmYgeG1pdCBlcnJvclxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTYtICpcXHRAc2tiOiBidWZmZXIgdGhhdCB0cmlnZ2VyZWQgYW4gZXJyb3JcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjMtICovXFxubmV0L2NvcmUvc2tidWZmLmM6MTQyNDp2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTQzMC19XFxubmV0L2NvcmUvc2tidWZmLmM6MTQzMTpFWFBPUlRfU1lNQk9MKHNrYl90eF9lcnJvcik7XFxubmV0L2NvcmUvc2tidWZmLmMtMTQzMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MTcuNzAyNDE1NTA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNTczNDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEYXRhIFRyYW5zZmVyKipcblxuQWxyaWdodCwgc28gaXQncyBiZWVuICpleHBvcnRlZCouIFRoYXQncyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIG1lY2hhbmlzbXMgdXNlZC4gU3BlY2lmaWNhbGx5LCB0aGUgdHJhbnNmZXIgbWVjaGFuaXNtIHRoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgYHNrYl96ZXJvY29weWAuIEtub3dpbmcgdGhhdCB0aGlzIG1lY2hhbmlzbSBpcyBpbnZvbHZlZCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGEgemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIG9yIHNvbWUgc3BlY2lmaWMgdXNlIG9mIHRoZSBza2Igc3RydWN0dXJlIHRvIGFjY29tcGxpc2ggdGhhdCBnb2FsLCBvciBhIHBhcnRpY3VsYXIgc3RhZ2Ugb2YgYW4gZXhwb3J0IG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYXJhY3RlcmlzdGljcyBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSBgc2tiX3plcm9jb3B5YCBmdW5jdGlvbiBpbiB0aGlzIGNvbnRleHQsIGFuZCB3aGF0IHRoYXQgbWlnaHQgbWVhbiBhYm91dCB0aGUgcGVyZm9ybWFuY2UgYW5kIG92ZXJoZWFkIG9mIHRoaXMgdHJhbnNmZXIsIGFuZCBpZiBhbnkgZGF0YSBjb3BpZXMgd2VyZSBuZWVkZWQuIE5vdywgSSBoYXZlIHRvIGRldGVybWluZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjoyMC42MzgxNTIyOTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMjA3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3plcm9jb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTE4MTU9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3JlYWxsb2MpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTYtXFxubmV0L2NvcmUvc2tidWZmLmM6MTgxNzpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMTgxOC17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODM3PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xODczLVxcdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cXHUwMDNlZWUuZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9aRVJPQ09QWSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4NzQ6XFx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE4NzUtXFx0XFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMz1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkxNTppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTE2LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk1Mi19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MzpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xOTYzPUVYUE9SVF9TWU1CT0xfR1BMKF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTY0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NjU6c3RhdGljIGludCBza2JfemVyb2NvcHlfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm5za2IsIHN0cnVjdCBza19idWZmICpvcmlnLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NjYtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjI4PXN0cnVjdCBza19idWZmICpfX3Bza2JfY29weV9mY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhlYWRyb29tLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjI1Mi1cXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTM6XFx0XFx0ICAgIHNrYl96ZXJvY29weV9jbG9uZShuLCBza2IsIGdmcF9tYXNrKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTQtXFx0XFx0XFx0a2ZyZWVfc2tiKG4pO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzgzMT1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzMtIC8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzQ6ICpcXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNS0gKlxcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM3LSAqXFx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICd0bycgc2tiIHBhc3NlZFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Mzg6ICpcXHRpbnRvIHNrYl96ZXJvY29weSgpLlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzktICovXFxubmV0L2NvcmUvc2tidWZmLmM9Mzg0MD11bnNpZ25lZCBpbnRcXG5uZXQvY29yZS9za2J1ZmYuYzozODQxOnNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NDIte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny19XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XFxubmV0L2NvcmUvc2tidWZmLmMtMzg1OS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODYwLS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NjE6ICpcXHRza2JfemVyb2NvcHkgLSBaZXJvIGNvcHkgc2tiIHRvIHNrYlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjItICpcXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg2OS0gKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NzA6ICpcXHRUaGUgYGhsZW5gIGFzIGNhbGN1bGF0ZWQgYnkgc2tiX3plcm9jb3B5X2hlYWRsZW4oKSBzcGVjaWZpZXMgdGhlXFxubmV0L2NvcmUvc2tidWZmLmMtMzg3MS0gKlxcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzg9aW50XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3OTpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMzg4MC17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTE1LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM5MTY6XFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0zOTE3LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkzNC19XFxubmV0L2NvcmUvc2tidWZmLmM6MzkzNTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MzYtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00MjMzPXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDI0MC1cXHRza2Jfc2hpbmZvKHNrYjEpLVxcdTAwM2VmbGFncyB8PSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgemNfZmxhZ3M7XFxubmV0L2NvcmUvc2tidWZmLmM6NDI0MTpcXHRza2JfemVyb2NvcHlfY2xvbmUoc2tiMSwgc2tiLCAwKTtcXG5uZXQvY29yZS9za2J1ZmYuYy00MjQyLVxcdGlmIChsZW4gXFx1MDAzYyBwb3MpXFx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDc3OT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTAwMi1cXG5uZXQvY29yZS9za2J1ZmYuYzo1MDAzOlxcdFxcdGlmIChza2JfemVyb2NvcHlfY2xvbmUobnNrYiwgZnJhZ19za2IsIEdGUF9BVE9NSUMpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMDQtXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MDA4LVxcdFxcdFxcdFxcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKGxpc3Rfc2tiLCBHRlBfQVRPTUlDKSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMDk6XFx0XFx0XFx0XFx0ICAgIHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBsaXN0X3NrYixcXG5uZXQvY29yZS9za2J1ZmYuYy01MDEwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBHRlBfQVRPTUlDKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MjAuNjg0Mjc5OTA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0MTQ4OTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIEZ1bmN0aW9uIFZpc2liaWxpdHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4geWVwLCBjb25maXJtaW5nLCBgc2tiX3plcm9jb3B5YCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIHdoYXQncyB0aGUgc3RhdHVzIG9mIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjoyMy4xMjU3NzE1MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTc3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMz12b2lkIG92c19kcF9kZXRhY2hfcG9ydChzdHJ1Y3QgdnBvcnQgKnApXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDQtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI0NTp2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjoyMy4xNzEyNzY3OTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODM4NzMyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggUGFja2V0IFByb2Nlc3NpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIE9wZW4gdlN3aXRjaCBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlcmUgcGFja2V0cyBhcmUgcHJvY2Vzc2VkLiBJdCdzIGFuIGludGVybmFsIGVudHJ5IHBvaW50LCBub3Qgc29tZXRoaW5nIGV4cG9ydGVkIGRpcmVjdGx5LCBidXQgY3J1Y2lhbCBmb3IgaGFuZGxpbmcgcGFja2V0IGZsb3cuIEkndmUgc3BvdHRlZCBhIHBhdGNoIHRoYXQncyBiZWVuIGFwcGxpZWQuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIHBhdGNoOiBpdCBpbnRyb2R1Y2VzIGBza2JfdHhfZXJyb3JgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGRlc2lnbmVkIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGUgYHNrX2J1ZmZgLiBJdCBjaGVja3MgaWYgdGhlIGBza19idWZmYCBpcyBjbG9uZWQsIGFuZCBpZiBpdCdzIG5vdCwgaXQgZG93bmdyYWRlcyBhbmQgY2xlYXJzIGl0IHdpdGggYHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZGAgYW5kIGBza2JfemNvcHlfY2xlYXJgLiBUaGlzIGlzIGFsbCB0byBkbyB3aXRoIHplcm8tY29weSBvcGVyYXRpb25zIG9uIHRoZSBza2IuXG5cbk5vdywgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBTcGVjaWZpY2FsbHksIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGhhcyBiZWVuIHVwZGF0ZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHNrYl90eF9lcnJvcmAgaXMgbm93IGNhbGxlZCBpbiB0aGUgYGRlZmF1bHRgIGNhc2Ugb2YgYSBgc3dpdGNoYCBzdGF0ZW1lbnQsIHdoaWNoIGluZGljYXRlcyBhIGZhaWx1cmUgaW4gaGFuZGxpbmcgdGhlIHBhY2tldCB3aXRoaW4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0J3MgdXNlZCB0byBjbGVhbiB1cCB0aGUgcGFja2V0IGJ1ZmZlciBiZWZvcmUgaXQgaXMgcmVsZWFzZWQuXG5cbkFsc28sIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBoYXMgYmVlbiBtb2RpZmllZC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIGZpbGUuIFRoZSBlcnJvciBoYW5kbGluZyB0aGVyZSBsb29rcyBkaWZmZXJlbnQ7IHRoZSBjaGVjayBgaWYgKGVycilgIHRoYXQgdXNlZCB0byBjYWxsIGBza2JfdHhfZXJyb3JgIGhhcyBiZWVuIHJlbW92ZWQuIEluc3RlYWQsIGBjb25zdW1lX3NrYmAgaXMgY2FsbGVkIGRpcmVjdGx5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGl0c2VsZiBpcyBleHBvcnRlZCwgb3IgaWYgaXQncyBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBmYXItcmVhY2hpbmcgdGhlc2UgY2hhbmdlcyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MzAuMDEwMDExNzc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI2MjU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0ODM9c3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1MTctXFx0XFx0XFx0Y2xvbmUtXFx1MDAzZXJlY2lyY19pZCA9IHJlY2lyY19pZDtcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MTg6XFx0XFx0XFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUxOS1cXHRcXHR9XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE1NDk9c3RhdGljIHZvaWQgcHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHApXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1NjctXFx0XFx0ZWxzZVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTU2ODpcXHRcXHRcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU2OS1cXHR9IHdoaWxlICghYWN0aW9uX2ZpZm9faXNfZW1wdHkoZmlmbykpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaD0zMTg9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF92cG9ydF9nZW5sX2ZhbWlseTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMTktXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg6MzIwOnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMjEtdm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICopO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDk3PWludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNTIyLVxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzo1MjM6XFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgXFx1MDAyNmtleSk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNTI0LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjozMC4wNTkyNzg4ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwODI0NjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFja2V0IFJlY2VwdGlvbiBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IE9wZW4gdlN3aXRjaCBoYW5kbGVzIGluY29taW5nIHBhY2tldHMsIGFuZCBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIHNlZSB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20gYG92c192cG9ydF9yZWNlaXZlYCwgYGNsb25lX2V4ZWN1dGVgLCBhbmQgYHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9uc2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBvdnNfdnBvcnRfcmVjZWl2ZWAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBwYWNrZXRzIGNvbWluZyAqaW50byogT3BlbiB2U3dpdGNoIGl0c2VsZiwgYWx0aG91Z2ggSSBuZWVkIHRvIGJlIHN1cmUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBjaGVjayBpZiBgb3ZzX3Zwb3J0X3JlY2VpdmVgIGlzIGV2ZW4gZXhwb3J0ZWQsIG9yIGlmIGl0J3MgaW50ZXJuYWwgdG8gc29tZSBtb2R1bGUuIElmIGl0J3MgZXhwb3J0ZWQsIHRoYXQgZnVydGhlciB2YWxpZGF0ZXMgbXkgaHlwb3RoZXNpcyBhbmQgb2ZmZXJzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGV0YWlsZWQgYW5hbHlzaXMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBwYWNrZXRzIGVudGVyIHNvIEkgY2FuIHdvcmsgYmFjayBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDk3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MzMuMjY3NTI4Mzc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQzNDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfdnBvcnRfcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYz0zND1pbnRlcm5hbF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTM3LVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYzozODpcXHQvKiBzdG9yZSBsZW4gdmFsdWUgYmVjYXVzZSBza2IgY2FuIGJlIGZyZWVkIGluc2lkZSBvdnNfdnBvcnRfcmVjZWl2ZSgpICovXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTM5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTQxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmM6NDI6XFx0ZXJyID0gb3ZzX3Zwb3J0X3JlY2VpdmUoaW50ZXJuYWxfZGV2X3ByaXYobmV0ZGV2KS1cXHUwMDNldnBvcnQsIHNrYiwgTlVMTCk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTQzLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LW5ldGRldi5jPTI5PXN0YXRpYyB2b2lkIG5ldGRldl9wb3J0X3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1uZXRkZXYuYy00OS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmM6NTA6XFx0b3ZzX3Zwb3J0X3JlY2VpdmUodnBvcnQsIHNrYiwgc2tiX3R1bm5lbF9pbmZvKHNrYikpO1xcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1uZXRkZXYuYy01MS1cXHRyZXR1cm47XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYz00Njk9dTMyIG92c192cG9ydF9maW5kX3VwY2FsbF9wb3J0aWQoY29uc3Qgc3RydWN0IHZwb3J0ICp2cG9ydCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTQ4Ny0vKipcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzo0ODg6ICpcXHRvdnNfdnBvcnRfcmVjZWl2ZSAtIHBhc3MgdXAgcmVjZWl2ZWQgcGFja2V0IHRvIHRoZSBkYXRhcGF0aCBmb3IgcHJvY2Vzc2luZ1xcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTQ4OS0gKlxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDk2LSAqL1xcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jOjQ5NzppbnQgb3ZzX3Zwb3J0X3JlY2VpdmUoc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy00OTgtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oPTE5NT1zdGF0aWMgaW5saW5lIHN0cnVjdCB2cG9ydCAqdnBvcnRfZnJvbV9wcml2KHZvaWQgKnByaXYpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaC0xOTktXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg6MjAwOmludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKiwgc3RydWN0IHNrX2J1ZmYgKixcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaC0yMDEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjozMy4zMTM5Njg4OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNDg2Njc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBPVlMgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IE9wZW4gdlN3aXRjaCBoYW5kbGVzIHBhY2tldCByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbi4gSXQgc2VlbXMgbGlrZSBgb3ZzX3Zwb3J0X3JlY2VpdmVgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBuZXRkZXZfcG9ydF9yZWNlaXZlYCBhbmQgYGludGVybmFsX2Rldl94bWl0YC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHNvbWUgb2YgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBwYWNrZXQgdHJhbnNtaXNzaW9uIGVycm9ycyBhcmUgb2NjdXJyaW5nLCBzbyBgc2tiX3R4X2Vycm9yYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gdG8gaW5zcGVjdC4gSXQncyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBrZXJuZWwgbmV0d29ya2luZyBzdGFjaywgc28gSSBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aCBpdCwgYnV0IGNvbnRleHQgaXMgYWx3YXlzIGltcG9ydGFudC4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgaW50byB6ZXJvLWNvcHkgcGFja2V0IGhhbmRsaW5nLCBzbyBgc2tiX3plcm9jb3B5YCBpcyBhbm90aGVyIGNvcmUgZnVuY3Rpb24gdG8ga2VlcCBpbiBtaW5kLiBJIGtub3cgdGhlc2UgZnVuY3Rpb25zIHdlbGwsIGJ1dCBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlICpzcGVjaWZpY2FsbHkqIGJlaW5nIHVzZWQgaW4gdGhpcyBPVlMgY29udGV4dC5cblxuU28sIHRvIHN1bW1hcml6ZSwgdGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTpcblxuKiAgIGBza2JfdHhfZXJyb3JgIChmb3IgZXJyb3IgaGFuZGxpbmcpXG4qICAgYHNrYl96ZXJvY29weWAgKGZvciBlZmZpY2llbnQgcGFja2V0IHRyYW5zZmVyKVxuKiAgIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgICh0aGUgY2VudHJhbCBwcm9jZXNzaW5nIHBvaW50KVxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBPUEVOVlNXSVRDSGAgaXMgZW5hYmxlZCwgYXMgdGhpcyB3aWxsIGltcGFjdCBob3cgdGhpcyBzZWN0aW9uIG9mIGNvZGUgYmVoYXZlcy4gVGhpcyBzZWVtcyBsaWtlIGEgdmFsaWQgY29uZmlnLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjQ2OjM4LjA0ODgzNzg2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjAwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjQ2OjM4LjA5MjkwMDAxNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU1NDc4MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maXJtaW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBEaXZpbmcgRGVlcGVyKipcblxuUmlnaHQsIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbiwgZ290IGl0LiBUaGF0J3MgZGVmaW5pdGVseSB0aGUgcm91dGUgdG8gZ28uIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBjb250ZXh0cyB3aGVyZSB0aGF0IGBza2JfdHhfZXJyb3JgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGggdG8gZnVsbHkgZ3Jhc3AgaXRzIGltcGFjdCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZGF0YSBwYXRoLiBBcmUgdGhlcmUgb3RoZXIgcG9pbnRzIG9mIGZhaWx1cmUgdXBzdHJlYW0gdGhhdCBmZWVkIGludG8gaXQ/IEFyZSB0aGVyZSBhbnkgdW5leHBlY3RlZCBwYXRocz8gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgbm93IHRvIGNvbmZpcm0gdGhlIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTkyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6NDEuMTQ4MzgwNTQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExMDYyNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl90eF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9pby5jPTM1Nj1uZXRkZXZfdHhfdCBvdnBuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQzLVxcdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKG92cG4tXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjQ0NDpcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQ1LVxcdGtmcmVlX3NrYl9saXN0KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMDAzPXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwODMtXFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG5kcml2ZXJzL25ldC90dW4uYzoxMDg0OlxcdHNrYl90eF9lcnJvcihza2IpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTEwODUtXFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMzOD12b2lkIHNrYl9kdW1wKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZ1bGxfcGt0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzk6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzQwLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTQxMj1FWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTQtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MTQxNTogKlxcdHNrYl90eF9lcnJvciAtIHJlcG9ydCBhbiBza19idWZmIHhtaXQgZXJyb3JcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE2LSAqXFx0QHNrYjogYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIGFuIGVycm9yXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNDIzLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MjQ6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDI1LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzAtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MzE6RVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwNT1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgwMy1cXHRpZiAoIXNrYikge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODA0OlxcdFxcdHNrYl90eF9lcnJvcihlbnRza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODA1LVxcdFxcdGdvdG8gbmxtc2dfZmFpbHVyZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODEyLVxcdGlmICghbmxoKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MTM6XFx0XFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MTQtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2My1ubGFfcHV0X2ZhaWx1cmU6XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NjQ6XFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjUtXFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODctXFx0XFx0ZGVmYXVsdDpcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyODg6XFx0XFx0XFx0c2tiX3R4X2Vycm9yKHNrYik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg5LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM9MTUyNT1pbnQgc2tiX21ldGFfaW52YWxpZF9jdHgodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYzoxNTM1OlNFQyhcXFwiZmVudHJ5L3NrYl90eF9lcnJvclxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNi1fX2ZhaWx1cmUgX19tc2coXFxcIm11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYz0xNTM3PWludCBCUEZfUFJPRyhza2JfaW52YWxpZF9jdHhfZmVudHJ5LCB2b2lkICpza2IpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jOjE1NDc6U0VDKFxcXCJmZXhpdC9za2JfdHhfZXJyb3JcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1NDgtX19mYWlsdXJlIF9fbXNnKFxcXCJtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjQ2OjQyLjc1OTQ0NzU1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDYzMjY4MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIFBhY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpbnZvbHZlcyBwYWNrZXQgdHJhbnNtaXNzaW9uLCBzcGVjaWZpY2FsbHkgaG93IGVycm9ycyBhcmUgaGFuZGxlZC4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgb3Zwbl9uZXRfeG1pdGAsIGB0dW5fbmV0X3htaXRgLCBgbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2VgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgdG91Y2hpbmcgdmFyaW91cyBwYWNrZXQgcGF0aHMuXG5cblRoZSBtYWluIHRoaW5nIHRoYXQganVtcGVkIG91dCBhdCBtZSBpcyB0aGUgcmVtb3ZhbCBhbmQgYWRkaXRpb24gb2YgYHNrYl90eF9lcnJvcmAuIEl0J3MgZ2V0dGluZyBzdHJpcHBlZCBmcm9tIGBza2JfemVyb2NvcHlgIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAsIHRoZW4gYWRkZWQgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBlcnJvciBoYW5kbGluZyByZXNwb25zaWJpbGl0eSwgd2hpY2ggbWVhbnMgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSBpcyBoYXBwZW5pbmcgYW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBjaGFuZ2UgYWxzbyB0b3VjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2tiX3R4X2Vycm9yYCBpdHNlbGYsIHNvIEknbGwgbmVlZCB0byByZXZpZXcgdGhhdCBjbG9zZWx5LlxuXG5TbywgbXkga2V5IGZvY3VzIGFyZWFzIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlOlxuLSAgIGBza2JfdHhfZXJyb3JgICh0aGUgb2J2aW91cyBvbmUpXG4tICAgYHNrYl96ZXJvY29weWAgKHdoZXJlIGl0J3MgYmVpbmcgcmVtb3ZlZClcbi0gICBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCAod2hlcmUgaXQncyBiZWluZyBhZGRlZClcblxuVGhlIGNvbmZpZyBmb3IgdGhpcyBpcyBgT1BFTlZTV0lUQ0hgLiBUaGF0J3Mgbm90IHRvbyBzdXJwcmlzaW5nIGdpdmVuIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGJlaW5nIGludm9sdmVkLiBCdXQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgZGVwZW5kZW5jaWVzIGhlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBhcmUgYWx3YXlzIGNvbXBpbGVkIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgbGVzcyBub2lzZS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYE9QRU5WU1dJVENIYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhdCBhIHZlcnkgbG93IGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo0OC4yMjI3MTgzNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2MTY3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6NDguNjM4ODkwNzU5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTg1Nzk1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCB3ZSdyZSB0YWxraW5nIGFib3V0IHdpdGggdGhpcyAnT3BlbiB2U3dpdGNoJyBjb25jZXB0LiBJdCdzIGNydWNpYWwgdG8gaGF2ZSB0aGF0IGZvdW5kYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBUaGUgdGVjaG5pY2FsIGFzcGVjdHMgYXJlIGZhbWlsaWFyLCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBoYXZlIHRoZSBleGFjdCwgY29tcHJlaGVuc2l2ZSBkZWZpbml0aW9uIGxvY2tlZCBkb3duIGluIG15IGhlYWQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byBjb25zdWx0IHRoZSBtb3N0IGF1dGhvcml0YXRpdmUgc291cmNlIHBvc3NpYmxlIGZvciB0aGF0IGRlZmluaXRpb24gYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSB3b3JraW5nIGZyb20gYSBwcmVjaXNlIGFuZCBjb21wbGV0ZSBwaWN0dXJlLiBObyBzaG9ydGN1dHMgaGVyZTsgYSBzb2xpZCBkZWZpbml0aW9uIGlzIHBhcmFtb3VudCwgYW5kIGl0J3MgdGltZSB0byByZWZyZXNoIGFuZCBlbnN1cmUgdGhhdCBJIGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo1Mi40OTc0NzI1MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6NTIuNDk3NTM2MjIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTI4MzMwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkRlcGVuZGVuY3kgTWFwcGluZyBhbmQgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBpbnRlZ3JhdGluZyBgT1BFTlZTV0lUQ0hgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgaXQgY2xlYXJseSByZWxpZXMgb24gYElORVRgLCBzbyBgT1BFTlZTV0lUQ0hgIGdldHMgaW5jbHVkZWQuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byBjb25maXJtIGEgY291cGxlIG9mIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgd2hlcmUgSSBleHBlY3QgdGhlbSB0byBiZSwgZXNwZWNpYWxseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcgYW5kIHplcm8tY29weSBvcGVyYXRpb25zLiBJJ20gdGhpbmtpbmcgb2YgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSByZXNpZGUgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gR29vZCwgdGhhdCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUuXG5cbldpdGggdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBsb2NhdGlvbnMgdmVyaWZpZWQsIEkgY2FuIG5vdyBjb25maWRlbnRseSBzZXQgdGhlIHJlc3VsdHMuIFJlYWR5IHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTksIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo1OC41OTAzNzIwMDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjA1NzQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfdHhfZXJyb3JcIixcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfdHhfZXJyb3JcIixcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjQ2OjU4LjY3MjQzNTk0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5OTE4NjM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo1OC42NzMwMTQ3MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5OTEyODAxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc2ticywgYXMgdGhlIHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGNsb25lcyBzaGFyZS4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsZXJzIG9mIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0MzlmMTE2MDU2OTFmN2NkMTczMjNlZmFkYjIzMmFmZTk1MDY3NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTo0NjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkwNywxMCArMzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcbiBcbi1cdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuLVx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4rXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1xuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oZnJvbSktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwMSw4ICs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo1OC42NzMwMTU5NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5OTEyNTM5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWmVyb2NvcHkgU3RhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIGBza2JfdHhfZXJyb3JgIGFuZCBpdHMgdXNlcyBhY3Jvc3MgYSBmZXcga2V5IGFyZWFzIGluIHRoZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjay4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVmaW5pbmcgaG93IHdlIGhhbmRsZSB0aGUgemVyb2NvcHkgc3RhdGUsIHBhcnRpY3VsYXJseSBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaXMgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGBza2JfdHhfZXJyb3JgOiBpdCdzIG5vIGxvbmdlciBnb2luZyB0byBjbGVhciB0aGUgemVyb2NvcHkgc3RhdGUgaWYgdGhlIGBza2JgIGlzIGEgY2xvbmUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZSBzaGFyZWQgc3RhdGUgaW4gYHNrYl9zaGluZm8oKWAgd291bGQgZ2V0IG1lc3NlZCB1cCwgYW5kIHRoYXQgY291bGQgbGVhZCB0byBuYXN0eSBpc3N1ZXMuIEl0J3MgYW4gaW1wb3J0YW50IGZpeCB0byBwcmV2ZW50IGluY29ycmVjdCByZWZjb3VudGluZywgYSBkb3VibGUtZnJlZSwgb3IgdXNlLWFmdGVyLWZyZWUsIG9yIGEgbWVtb3J5IGxlYWsuXG5cbkRpZ2dpbmcgZGVlcGVyLCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZGlyZWN0IGNhbGwgdG8gYHNrYl90eF9lcnJvcihmcm9tKWAgd2l0aGluIGBza2JfemVyb2NvcHlgIHdoZW4gYHNrYl9vcnBoYW5fZnJhZ3NgIGZhaWxzLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGFuIGVycm9yIGFscmVhZHkgaGFwcGVuZWQuIEl0IGFsc28gc2hpZnRzIHRoZSBgc2tiX3R4X2Vycm9yKHNrYilgIGNhbGwgaW4gT3BlbiB2U3dpdGNoIGZyb20gdGhlIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBlcnJvciBwYXRocy4gVGhpcyBhcHBlYXJzIHRvIGJlIGNsZWFudXAsIGVuc3VyaW5nIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiB0aGUgYXBwcm9wcmlhdGUgY29udGV4dHMgd2hlbiBhbiBlcnJvciBvY2N1cnMuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIEkgYWx3YXlzIGFzayBteXNlbGY6IGlzIHRoaXMgZ29pbmcgdG8gaW50cm9kdWNlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlPyBBbmQgbXkgYXNzZXNzbWVudCBpcyBuby4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0ICpzdGF0ZSBtYW5hZ2VtZW50Kiwgc3BlY2lmaWNhbGx5IHplcm9jb3B5IHN0YXRlLCBhbmQgdGhlIHByb3BlciBoYW5kbGluZyBvZiBgc2tiYCBjbG9uZXMuIEl0J3MgYWJvdXQgZW5zdXJpbmcgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNsZWFyIHRoZSBzdGF0ZSBvZiBhIHNoYXJlZCBidWZmZXIgb3IgcG90ZW50aWFsbHkgbGVhayBtZW1vcnkuXG5cbldlIGFyZW4ndCBkZWFsaW5nIHdpdGggS01TQU4gdGVycml0b3J5IGhlcmU7IHdlJ3JlIGRlYWxpbmcgd2l0aCBLQVNBTiBjb25jZXJucywgc3VjaCBhcyBhIFVBRi4gYHNrYl96Y29weV9jbGVhcmAgZG9lcyBub3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIEl0IGlzIG1vcmUgbGlrZWx5IHRvIGNhdXNlIG1lbW9yeSBsZWFrcyBpZiBub3QgY2FsbGVkLCBvciBhIFVBRiBpZiBjYWxsZWQgaW5jb3JyZWN0bHkuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGZvY3VzIG9uIHplcm9jb3B5IHN0YXRlIHJlZmNvdW50aW5nIGFuZCBhdm9pZGFuY2Ugb2YgaW5jb3JyZWN0IGNsZWFyaW5nLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGZhbHNlLiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzIHByZXZlbnRpbmcgZG91YmxlIGZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgYW5kIGVuc3VyaW5nIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0NiwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NzowOS42NjQyNzMyNTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc2ticywgYXMgdGhlIHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGNsb25lcyBzaGFyZS4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsZXJzIG9mIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc2ticywgYXMgdGhlIHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGNsb25lcyBzaGFyZS4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsZXJzIG9mIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow666lt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 09:04:54 +0000 UTC FinishedAt: 2026-08-18 09:47:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "21040c7f931502070dcc66bb0f1aeed07dec032b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "0af0a153-3d93-47a0-9936-a68f8f81fe3c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_tx_error", "skb_zerocopy", "ovs_dp_process_packet" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNrYnMsIGFzIHRoZSBzdGF0ZSBsaXZlcyBpbiBgc2tiX3NoaW5mbygpYCB3aGljaCBjbG9uZXMgc2hhcmUuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbGVycyBvZiBgc2tiX3R4X2Vycm9yYCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCAvIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIHplcm9jb3B5IHN0YXRlIG1hbmFnZW1lbnQsIHJlZmNvdW50aW5nLCBhbmQgcHJldmVudGluZyBpbmNvcnJlY3Qgc3RhdGUgY2xlYXJpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIGFzIHdlbGwgYXMgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgb3BlbnZzd2l0Y2ggZW50cnkgcG9pbnRzLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzQzOWYxMTYwNTY5MWY3Y2QxNzMyM2VmYWRiMjMyYWZlOTUwNjc0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjQ2OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbiAgKlxuICAqXHRSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi5cbiAgKlx0c2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy5cbiYjNDM7ICpcbiYjNDM7ICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbiYjNDM7ICpcdHNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS5cbiAgKi9cbiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChza2IpIHtcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiAhc2tiX2Nsb25lZChza2IpKSB7XG4gXHRcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuIFx0XHRza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTtcbiBcdH1cbkBAIC0zOTA3LDEwICYjNDM7MzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gJiM0MzsgcGxlbik7XG4gXG4tXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHtcbi1cdFx0c2tiX3R4X2Vycm9yKGZyb20pO1xuJiM0MztcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4mIzQzO1xuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oZnJvbSktXHUwMDNlbnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggYWU2OWIyY2FiYWI5ZS4uZmZmNzVjM2VlZDExNiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0c2tiX3R4X2Vycm9yKHNrYik7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC02MDEsOCAmIzQzOzYwMiw2IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZXJyID0gZ2VubG1zZ191bmljYXN0KG92c19kcF9nZXRfbmV0KGRwKSwgdXNlcl9za2IsIHVwY2FsbF9pbmZvLVx1MDAzZXBvcnRpZCk7XG4gXHR1c2VyX3NrYiA9IE5VTEw7XG4gb3V0OlxuLVx0aWYgKGVycilcbi1cdFx0c2tiX3R4X2Vycm9yKHNrYik7XG4gXHRjb25zdW1lX3NrYih1c2VyX3NrYik7XG4gXHRjb25zdW1lX3NrYihuc2tiKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBhcyB3ZWxsIGFzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIG9wZW52c3dpdGNoIGVudHJ5IHBvaW50cywgc28gdGhleSBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0MzlmMTE2MDU2OTFmN2NkMTczMjNlZmFkYjIzMmFmZTk1MDY3NDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTo0NjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYmEzZGJhYzgwZmI0OS4uMDQ3NzZhMTEyMzM0MiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTE0MTcsMTAgJiM0MzsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApOwogICoKICAqCVJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLgogICoJc2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy4KJiM0MzsgKgomIzQzOyAqCURvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW4KJiM0MzsgKglza2Jfc2hpbmZvKCksIHdoaWNoIHRoZSBjbG9uZXMgc2hhcmUuCiAgKi8KIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHNrYikgewomIzQzOwlpZiAoc2tiICZhbXA7JmFtcDsgIXNrYl9jbG9uZWQoc2tiKSkgewogCQlza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTsKIAkJc2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7CiAJfQpAQCAtMzkwNywxMCAmIzQzOzM5MTAsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCiAKIAlza2JfbGVuX2FkZCh0bywgbGVuICYjNDM7IHBsZW4pOwogCi0JaWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7Ci0JCXNrYl90eF9lcnJvcihmcm9tKTsKJiM0MzsJaWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiYjNDM7CiAJc2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBza2Jfc2hpbmZvKGZyb20pLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKaW5kZXggYWU2OWIyY2FiYWI5ZS4uZmZmNzVjM2VlZDExNiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpCiAJCQljb25zdW1lX3NrYihza2IpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiYjNDM7CQkJc2tiX3R4X2Vycm9yKHNrYik7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQl9CkBAIC02MDEsOCAmIzQzOzYwMiw2IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby0mZ3Q7cG9ydGlkKTsKIAl1c2VyX3NrYiA9IE5VTEw7CiBvdXQ6Ci0JaWYgKGVycikKLQkJc2tiX3R4X2Vycm9yKHNrYik7CiAJY29uc3VtZV9za2IodXNlcl9za2IpOwogCWNvbnN1bWVfc2tiKG5za2IpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIGJvdGggY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2NvcmUvc2tidWZmLmNgLCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGRhdGFwYXRoLCB3aGljaCBpcyBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGhvdyBlcnJvciBoYW5kbGluZyBpcyBkb25lIHdoZW4gaXQgY29tZXMgdG8gdHJhbnNtaXR0aW5nIFNLQnMgKHNvY2tldCBidWZmZXIpLgoKRmlyc3QsIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAuIE5vdywgaWYgdGhlIFNLQiBiZWluZyB0cmFuc21pdHRlZCBpcyBjbG9uZWQgKGBza2JfY2xvbmVkKHNrYilgIGlzIHRydWUpLCB0aGUgYHNrYl90eF9lcnJvcmAgZnVuY3Rpb24gZXNzZW50aWFsbHkgZG9lcyBub3RoaW5nLiBUaGF0IGZlZWxzIGxpa2UgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIGNoYW5nZSBvbiBob3cgd2UgbWFuYWdlIGVycm9ycyB3aXRoIGNsb25lZCBwYWNrZXRzLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KClNlY29uZGx5LCBpdCBsb29rcyBsaWtlIGBza2JfdHhfZXJyb3IoZnJvbSlgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgcmVtb3ZhbCwgc28gSSYjMzk7bGwgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdGFraW5nIGl0cyBwbGFjZSAoaWYgYW55dGhpbmcpIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC4gYHNrYl96ZXJvY29weWAgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgemVyby1jb3B5IHRyYW5zZmVycywgc28gYSBjaGFuZ2UgaGVyZSBkZXNlcnZlcyBhIGRlZXBlciBkaXZlLgoKRmluYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFNwZWNpZmljYWxseSwgYHNrYl90eF9lcnJvcihza2IpYCBpcyBhZGRlZCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgYnV0IHJlbW92ZWQgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgT3BlbiB2U3dpdGNoIGRhdGEgcGF0aC4gSSBzdXNwZWN0IHRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZyB3aXRoIHJlZ2FyZHMgdG8gcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4KClNvLCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggY29yZSBuZXR3b3JraW5nIChzcGVjaWZpY2FsbHkgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgKSBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGRhdGFwYXRoLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBib3RoIGFyZWFzLCB3aGljaCBtZWFucyBpdCB3YXJyYW50cyBmdXp6aW5nIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5leHBlY3RlZCByZWdyZXNzaW9ucy4KCkkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gSXQmIzM5O3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIE9wZW4gdlN3aXRjaCBjb25maWcgKGBPUEVOVlNXSVRDSGApIHNob3VsZCBkZWZpbml0ZWx5IGJlIGFjdGl2ZSBkdXJpbmcgdGVzdGluZy4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYWxsIHRocmVlIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuIEdvb2QsIHRoZXkmIzM5O3JlIGFsbCBnbG9iYWwuIFRoaXMgaGVscHMgd2l0aCB0aGUgZnV6emluZy4KCldhaXQsIGBza2JfdHhfZXJyb3JgIGlzIGJlaW5nICptb2RpZmllZCogaW4gdGhpcyBwYXRjaCwgc28gbGV0IG1lIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0xNDEyPUVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTQtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoxNDE1OiAqXHRza2JfdHhfZXJyb3IgLSByZXBvcnQgYW4gc2tfYnVmZiB4bWl0IGVycm9yXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE2LSAqXHRAc2tiOiBidWZmZXIgdGhhdCB0cmlnZ2VyZWQgYW4gZXJyb3Jcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDIzLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MTQyNDp2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2tidWZmLmMtMTQyNS17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTQzMC19XG5uZXQvY29yZS9za2J1ZmYuYzoxNDMxOkVYUE9SVF9TWU1CT0woc2tiX3R4X2Vycm9yKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGF0YSBUcmFuc2ZlcioqCgpBbHJpZ2h0LCBzbyBpdCYjMzk7cyBiZWVuICpleHBvcnRlZCouIFRoYXQmIzM5O3MgdGhlIGtleSBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBtZWNoYW5pc21zIHVzZWQuIFNwZWNpZmljYWxseSwgdGhlIHRyYW5zZmVyIG1lY2hhbmlzbSB0aGF0IEkgd2FudCB0byB1bmRlcnN0YW5kIGlzIGBza2JfemVyb2NvcHlgLiBLbm93aW5nIHRoYXQgdGhpcyBtZWNoYW5pc20gaXMgaW52b2x2ZWQgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSB6ZXJvLWNvcHkgZGF0YSB0cmFuc2Zlciwgb3Igc29tZSBzcGVjaWZpYyB1c2Ugb2YgdGhlIHNrYiBzdHJ1Y3R1cmUgdG8gYWNjb21wbGlzaCB0aGF0IGdvYWwsIG9yIGEgcGFydGljdWxhciBzdGFnZSBvZiBhbiBleHBvcnQgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhlIGBza2JfemVyb2NvcHlgIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dCwgYW5kIHdoYXQgdGhhdCBtaWdodCBtZWFuIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBhbmQgb3ZlcmhlYWQgb2YgdGhpcyB0cmFuc2ZlciwgYW5kIGlmIGFueSBkYXRhIGNvcGllcyB3ZXJlIG5lZWRlZC4gTm93LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTgxNT1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfcmVhbGxvYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xODE2LVxubmV0L2NvcmUvc2tidWZmLmM6MTgxNzpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0xODE4LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODM3PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTg3My1cdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cdTAwM2VlZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1pFUk9DT1BZIHx8XG5uZXQvY29yZS9za2J1ZmYuYzoxODc0Olx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTg3NS1cdFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTM9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTE1OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxNi1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUyLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTM6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTk2Mz1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTY0LVxubmV0L2NvcmUvc2tidWZmLmM6MTk2NTpzdGF0aWMgaW50IHNrYl96ZXJvY29weV9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKm9yaWcsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTY2LVx0XHRcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjg9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI1Mi1cdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTM6XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTQtXHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4MzE9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzMy0gLyoqXG5uZXQvY29yZS9za2J1ZmYuYzozODM0OiAqXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXG5uZXQvY29yZS9za2J1ZmYuYy0zODM1LSAqXHRAZnJvbTogc291cmNlIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzctICpcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAmIzM5O3RvJiMzOTsgc2tiIHBhc3NlZFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODogKlx0aW50byBza2JfemVyb2NvcHkoKS5cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzktICovXG5uZXQvY29yZS9za2J1ZmYuYz0zODQwPXVuc2lnbmVkIGludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg0MTpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NDIte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTctfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LVxubmV0L2NvcmUvc2tidWZmLmMtMzg2MC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NjE6ICpcdHNrYl96ZXJvY29weSAtIFplcm8gY29weSBza2IgdG8gc2tiXG5uZXQvY29yZS9za2J1ZmYuYy0zODYyLSAqXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjktICpcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NzA6ICpcdFRoZSBgaGxlbmAgYXMgY2FsY3VsYXRlZCBieSBza2JfemVyb2NvcHlfaGVhZGxlbigpIHNwZWNpZmllcyB0aGVcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NzEtICpcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc4PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3OTpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODgwLXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTE1LVxubmV0L2NvcmUvc2tidWZmLmM6MzkxNjpcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTE3LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5MzQtfVxubmV0L2NvcmUvc2tidWZmLmM6MzkzNTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzkzNi1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00MjMzPXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQyNDAtXHRza2Jfc2hpbmZvKHNrYjEpLVx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgemNfZmxhZ3M7XG5uZXQvY29yZS9za2J1ZmYuYzo0MjQxOlx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XG5uZXQvY29yZS9za2J1ZmYuYy00MjQyLVx0aWYgKGxlbiBcdTAwM2MgcG9zKVx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3Nzk9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MDAyLVxubmV0L2NvcmUvc2tidWZmLmM6NTAwMzpcdFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01MDA0LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMDgtXHRcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMDk6XHRcdFx0XHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTAxMC1cdFx0XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHllcCwgY29uZmlybWluZywgYHNrYl96ZXJvY29weWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgd2hhdCYjMzk7cyB0aGUgc3RhdHVzIG9mIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDQtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrLiAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggUGFja2V0IFByb2Nlc3NpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgT3BlbiB2U3dpdGNoIGNvZGUsIHNwZWNpZmljYWxseSB3aGVyZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQuIEl0JiMzOTtzIGFuIGludGVybmFsIGVudHJ5IHBvaW50LCBub3Qgc29tZXRoaW5nIGV4cG9ydGVkIGRpcmVjdGx5LCBidXQgY3J1Y2lhbCBmb3IgaGFuZGxpbmcgcGFja2V0IGZsb3cuIEkmIzM5O3ZlIHNwb3R0ZWQgYSBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBwYXRjaDogaXQgaW50cm9kdWNlcyBgc2tiX3R4X2Vycm9yYC4gVGhpcyBmdW5jdGlvbiBzZWVtcyB0byBiZSBkZXNpZ25lZCB0byBoYW5kbGUgZXJyb3JzIGluIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIGBza19idWZmYC4gSXQgY2hlY2tzIGlmIHRoZSBgc2tfYnVmZmAgaXMgY2xvbmVkLCBhbmQgaWYgaXQmIzM5O3Mgbm90LCBpdCBkb3duZ3JhZGVzIGFuZCBjbGVhcnMgaXQgd2l0aCBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkYCBhbmQgYHNrYl96Y29weV9jbGVhcmAuIFRoaXMgaXMgYWxsIHRvIGRvIHdpdGggemVyby1jb3B5IG9wZXJhdGlvbnMgb24gdGhlIHNrYi4KCk5vdywgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBTcGVjaWZpY2FsbHksIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGhhcyBiZWVuIHVwZGF0ZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHNrYl90eF9lcnJvcmAgaXMgbm93IGNhbGxlZCBpbiB0aGUgYGRlZmF1bHRgIGNhc2Ugb2YgYSBgc3dpdGNoYCBzdGF0ZW1lbnQsIHdoaWNoIGluZGljYXRlcyBhIGZhaWx1cmUgaW4gaGFuZGxpbmcgdGhlIHBhY2tldCB3aXRoaW4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0JiMzOTtzIHVzZWQgdG8gY2xlYW4gdXAgdGhlIHBhY2tldCBidWZmZXIgYmVmb3JlIGl0IGlzIHJlbGVhc2VkLgoKQWxzbywgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGhhcyBiZWVuIG1vZGlmaWVkLiBJdCYjMzk7cyB3b3J0aCBub3RpbmcgdGhhdCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBmaWxlLiBUaGUgZXJyb3IgaGFuZGxpbmcgdGhlcmUgbG9va3MgZGlmZmVyZW50OyB0aGUgY2hlY2sgYGlmIChlcnIpYCB0aGF0IHVzZWQgdG8gY2FsbCBgc2tiX3R4X2Vycm9yYCBoYXMgYmVlbiByZW1vdmVkLiBJbnN0ZWFkLCBgY29uc3VtZV9za2JgIGlzIGNhbGxlZCBkaXJlY3RseS4KCk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXRzZWxmIGlzIGV4cG9ydGVkLCBvciBpZiBpdCYjMzk7cyBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBmYXItcmVhY2hpbmcgdGhlc2UgY2hhbmdlcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNDgzPXN0YXRpYyBpbnQgY2xvbmVfZXhlY3V0ZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUxNy1cdFx0XHRjbG9uZS1cdTAwM2VyZWNpcmNfaWQgPSByZWNpcmNfaWQ7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MTg6XHRcdFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTE5LVx0XHR9XG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz0xNTQ5PXN0YXRpYyB2b2lkIHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9ucyhzdHJ1Y3QgZGF0YXBhdGggKmRwKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU2Ny1cdFx0ZWxzZVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzoxNTY4Olx0XHRcdG92c19kcF9wcm9jZXNzX3BhY2tldChza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1NjktXHR9IHdoaWxlICghYWN0aW9uX2ZpZm9faXNfZW1wdHkoZmlmbykpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMz12b2lkIG92c19kcF9kZXRhY2hfcG9ydChzdHJ1Y3QgdnBvcnQgKnApXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ0LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jay4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI0NTp2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzE4PWV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfdnBvcnRfZ2VubF9mYW1pbHk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMTktXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjA6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIxLXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYz00OTc9aW50IG92c192cG9ydF9yZWNlaXZlKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNTIyLVx0fVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NTIzOlx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgXHUwMDI2a2V5KTtcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTUyNC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDk3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhY2tldCBSZWNlcHRpb24gRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IE9wZW4gdlN3aXRjaCBoYW5kbGVzIGluY29taW5nIHBhY2tldHMsIGFuZCBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIHNlZSB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20gYG92c192cG9ydF9yZWNlaXZlYCwgYGNsb25lX2V4ZWN1dGVgLCBhbmQgYHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9uc2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBvdnNfdnBvcnRfcmVjZWl2ZWAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBwYWNrZXRzIGNvbWluZyAqaW50byogT3BlbiB2U3dpdGNoIGl0c2VsZiwgYWx0aG91Z2ggSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgaWYgYG92c192cG9ydF9yZWNlaXZlYCBpcyBldmVuIGV4cG9ydGVkLCBvciBpZiBpdCYjMzk7cyBpbnRlcm5hbCB0byBzb21lIG1vZHVsZS4gSWYgaXQmIzM5O3MgZXhwb3J0ZWQsIHRoYXQgZnVydGhlciB2YWxpZGF0ZXMgbXkgaHlwb3RoZXNpcyBhbmQgb2ZmZXJzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGV0YWlsZWQgYW5hbHlzaXMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBwYWNrZXRzIGVudGVyIHNvIEkgY2FuIHdvcmsgYmFjayBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfdnBvcnRfcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jPTM0PWludGVybmFsX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTM3LVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jOjM4Olx0Lyogc3RvcmUgbGVuIHZhbHVlIGJlY2F1c2Ugc2tiIGNhbiBiZSBmcmVlZCBpbnNpZGUgb3ZzX3Zwb3J0X3JlY2VpdmUoKSAqL1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTM5LVx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmMtNDEtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmM6NDI6XHRlcnIgPSBvdnNfdnBvcnRfcmVjZWl2ZShpbnRlcm5hbF9kZXZfcHJpdihuZXRkZXYpLVx1MDAzZXZwb3J0LCBza2IsIE5VTEwpO1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTQzLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LW5ldGRldi5jPTI5PXN0YXRpYyB2b2lkIG5ldGRldl9wb3J0X3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmMtNDktXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmM6NTA6XHRvdnNfdnBvcnRfcmVjZWl2ZSh2cG9ydCwgc2tiLCBza2JfdHVubmVsX2luZm8oc2tiKSk7XG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmMtNTEtXHRyZXR1cm47XG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDY5PXUzMiBvdnNfdnBvcnRfZmluZF91cGNhbGxfcG9ydGlkKGNvbnN0IHN0cnVjdCB2cG9ydCAqdnBvcnQsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDg3LS8qKlxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NDg4OiAqXHRvdnNfdnBvcnRfcmVjZWl2ZSAtIHBhc3MgdXAgcmVjZWl2ZWQgcGFja2V0IHRvIHRoZSBkYXRhcGF0aCBmb3IgcHJvY2Vzc2luZ1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDg5LSAqXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDk2LSAqL1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NDk3OmludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDk4LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oPTE5NT1zdGF0aWMgaW5saW5lIHN0cnVjdCB2cG9ydCAqdnBvcnRfZnJvbV9wcml2KHZvaWQgKnByaXYpXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmgtMTk5LVxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg6MjAwOmludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKiwgc3RydWN0IHNrX2J1ZmYgKixcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oLTIwMS1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9WUyBQYWNrZXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBPcGVuIHZTd2l0Y2ggaGFuZGxlcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCB0cmFuc21pc3Npb24uIEl0IHNlZW1zIGxpa2UgYG92c192cG9ydF9yZWNlaXZlYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBgbmV0ZGV2X3BvcnRfcmVjZWl2ZWAgYW5kIGBpbnRlcm5hbF9kZXZfeG1pdGAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHNvbWUgb2YgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBwYWNrZXQgdHJhbnNtaXNzaW9uIGVycm9ycyBhcmUgb2NjdXJyaW5nLCBzbyBgc2tiX3R4X2Vycm9yYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gdG8gaW5zcGVjdC4gSXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsIG5ldHdvcmtpbmcgc3RhY2ssIHNvIEkgc2hvdWxkIGJlIGZhbWlsaWFyIHdpdGggaXQsIGJ1dCBjb250ZXh0IGlzIGFsd2F5cyBpbXBvcnRhbnQuIFRoZW4sIEkgbmVlZCB0byBsb29rIGludG8gemVyby1jb3B5IHBhY2tldCBoYW5kbGluZywgc28gYHNrYl96ZXJvY29weWAgaXMgYW5vdGhlciBjb3JlIGZ1bmN0aW9uIHRvIGtlZXAgaW4gbWluZC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyB3ZWxsLCBidXQgSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgKnNwZWNpZmljYWxseSogYmVpbmcgdXNlZCBpbiB0aGlzIE9WUyBjb250ZXh0LgoKU28sIHRvIHN1bW1hcml6ZSwgdGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZToKCiogICBgc2tiX3R4X2Vycm9yYCAoZm9yIGVycm9yIGhhbmRsaW5nKQoqICAgYHNrYl96ZXJvY29weWAgKGZvciBlZmZpY2llbnQgcGFja2V0IHRyYW5zZmVyKQoqICAgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgKHRoZSBjZW50cmFsIHByb2Nlc3NpbmcgcG9pbnQpCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBPUEVOVlNXSVRDSGAgaXMgZW5hYmxlZCwgYXMgdGhpcyB3aWxsIGltcGFjdCBob3cgdGhpcyBzZWN0aW9uIG9mIGNvZGUgYmVoYXZlcy4gVGhpcyBzZWVtcyBsaWtlIGEgdmFsaWQgY29uZmlnLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9QRU5WU1dJVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maXJtaW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBEaXZpbmcgRGVlcGVyKioKClJpZ2h0LCBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24sIGdvdCBpdC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSByb3V0ZSB0byBnby4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGNvbnRleHRzIHdoZXJlIHRoYXQgYHNrYl90eF9lcnJvcmAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaCB0byBmdWxseSBncmFzcCBpdHMgaW1wYWN0IGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBkYXRhIHBhdGguIEFyZSB0aGVyZSBvdGhlciBwb2ludHMgb2YgZmFpbHVyZSB1cHN0cmVhbSB0aGF0IGZlZWQgaW50byBpdD8gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIHBhdGhzPyBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgbm93IHRvIGNvbmZpcm0gdGhlIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jPTM1Nj1uZXRkZXZfdHhfdCBvdnBuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0My1cdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKG92cG4tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYzo0NDQ6XHRza2JfdHhfZXJyb3Ioc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYy00NDUtXHRrZnJlZV9za2JfbGlzdChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEwMDM9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEwODMtXHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuZHJpdmVycy9uZXQvdHVuLmM6MTA4NDpcdHNrYl90eF9lcnJvcihza2IpO1xuZHJpdmVycy9uZXQvdHVuLmMtMTA4NS1cdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xMzM4PXZvaWQgc2tiX2R1bXAoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnVsbF9wa3QpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzM5OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzQwLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE0MTI9RVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTQxNC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MTU6ICpcdHNrYl90eF9lcnJvciAtIHJlcG9ydCBhbiBza19idWZmIHhtaXQgZXJyb3Jcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTYtICpcdEBza2I6IGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCBhbiBlcnJvclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjMtICovXG5uZXQvY29yZS9za2J1ZmYuYzoxNDI0OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy0xNDI1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDMwLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE0MzE6RVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpO1xubmV0L2NvcmUvc2tidWZmLmMtMTQzMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwNT1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MDMtXHRpZiAoIXNrYikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MDQ6XHRcdHNrYl90eF9lcnJvcihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MDUtXHRcdGdvdG8gbmxtc2dfZmFpbHVyZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxMi1cdGlmICghbmxoKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgxMzpcdFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxNC1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjMtbmxhX3B1dF9mYWlsdXJlOlxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NjQ6XHRza2JfdHhfZXJyb3IoZW50c2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTY1LVx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4Ny1cdFx0ZGVmYXVsdDpcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4ODpcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4OS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYz0xNTI1PWludCBza2JfbWV0YV9pbnZhbGlkX2N0eCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jOjE1MzU6U0VDKFwmIzM0O2ZlbnRyeS9za2JfdHhfZXJyb3JcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTM2LV9fZmFpbHVyZSBfX21zZyhcJiMzNDttdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jPTE1Mzc9aW50IEJQRl9QUk9HKHNrYl9pbnZhbGlkX2N0eF9mZW50cnksIHZvaWQgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM6MTU0NzpTRUMoXCYjMzQ7ZmV4aXQvc2tiX3R4X2Vycm9yXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTU0OC1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7bXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjkwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIFBhY2tldCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgbmV0d29ya2luZyBjb21wb25lbnRzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGludm9sdmVzIHBhY2tldCB0cmFuc21pc3Npb24sIHNwZWNpZmljYWxseSBob3cgZXJyb3JzIGFyZSBoYW5kbGVkLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgb3Zwbl9uZXRfeG1pdGAsIGB0dW5fbmV0X3htaXRgLCBgbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2VgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgdG91Y2hpbmcgdmFyaW91cyBwYWNrZXQgcGF0aHMuCgpUaGUgbWFpbiB0aGluZyB0aGF0IGp1bXBlZCBvdXQgYXQgbWUgaXMgdGhlIHJlbW92YWwgYW5kIGFkZGl0aW9uIG9mIGBza2JfdHhfZXJyb3JgLiBJdCYjMzk7cyBnZXR0aW5nIHN0cmlwcGVkIGZyb20gYHNrYl96ZXJvY29weWAgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCwgdGhlbiBhZGRlZCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGVycm9yIGhhbmRsaW5nIHJlc3BvbnNpYmlsaXR5LCB3aGljaCBtZWFucyBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIGlzIGhhcHBlbmluZyBhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGNoYW5nZSBhbHNvIHRvdWNoZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2JfdHhfZXJyb3JgIGl0c2VsZiwgc28gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhhdCBjbG9zZWx5LgoKU28sIG15IGtleSBmb2N1cyBhcmVhcyBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZToKLSAgIGBza2JfdHhfZXJyb3JgICh0aGUgb2J2aW91cyBvbmUpCi0gICBgc2tiX3plcm9jb3B5YCAod2hlcmUgaXQmIzM5O3MgYmVpbmcgcmVtb3ZlZCkKLSAgIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgICh3aGVyZSBpdCYjMzk7cyBiZWluZyBhZGRlZCkKClRoZSBjb25maWcgZm9yIHRoaXMgaXMgYE9QRU5WU1dJVENIYC4gVGhhdCYjMzk7cyBub3QgdG9vIHN1cnByaXNpbmcgZ2l2ZW4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAgYmVpbmcgaW52b2x2ZWQuIEJ1dCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGRlcGVuZGVuY2llcyBoZXJlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgYXJlIGFsd2F5cyBjb21waWxlZCB3aGljaCBpcyBnb29kIHRvIGtub3csIGxlc3Mgbm9pc2UuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiBgT1BFTlZTV0lUQ0hgIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGF0IGEgdmVyeSBsb3cgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRGl2aW5nIGludG8gdGhlIE9wZW4gdlN3aXRjaCBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB3aXRoIHRoaXMgJiMzOTtPcGVuIHZTd2l0Y2gmIzM5OyBjb25jZXB0LiBJdCYjMzk7cyBjcnVjaWFsIHRvIGhhdmUgdGhhdCBmb3VuZGF0aW9uYWwgdW5kZXJzdGFuZGluZy4gVGhlIHRlY2huaWNhbCBhc3BlY3RzIGFyZSBmYW1pbGlhciwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGhhdmUgdGhlIGV4YWN0LCBjb21wcmVoZW5zaXZlIGRlZmluaXRpb24gbG9ja2VkIGRvd24gaW4gbXkgaGVhZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSYjMzk7bSBnb2luZyB0byBjb25zdWx0IHRoZSBtb3N0IGF1dGhvcml0YXRpdmUgc291cmNlIHBvc3NpYmxlIGZvciB0aGF0IGRlZmluaXRpb24gYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gd29ya2luZyBmcm9tIGEgcHJlY2lzZSBhbmQgY29tcGxldGUgcGljdHVyZS4gTm8gc2hvcnRjdXRzIGhlcmU7IGEgc29saWQgZGVmaW5pdGlvbiBpcyBwYXJhbW91bnQsIGFuZCBpdCYjMzk7cyB0aW1lIHRvIHJlZnJlc2ggYW5kIGVuc3VyZSB0aGF0IEkgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XG4gIDMyOlx0XHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXG4gIDMzOlx0XHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcbiAgMzQ6XHRcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNlZSBodHRwOi8vb3BlbnZzd2l0Y2gub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2VcbiAgMzc6XHRcdCAgdXRpbGl0aWVzLlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDQwOlx0XHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MTkKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVwZW5kZW5jeSBNYXBwaW5nIGFuZCBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gaW50ZWdyYXRpbmcgYE9QRU5WU1dJVENIYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBpdCBjbGVhcmx5IHJlbGllcyBvbiBgSU5FVGAsIHNvIGBPUEVOVlNXSVRDSGAgZ2V0cyBpbmNsdWRlZC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byBjb25maXJtIGEgY291cGxlIG9mIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgd2hlcmUgSSBleHBlY3QgdGhlbSB0byBiZSwgZXNwZWNpYWxseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcgYW5kIHplcm8tY29weSBvcGVyYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIG9mIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoZXkgcmVzaWRlIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEdvb2QsIHRoYXQgYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJiMzOTtzIGFyY2hpdGVjdHVyZS4KCldpdGggdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBsb2NhdGlvbnMgdmVyaWZpZWQsIEkgY2FuIG5vdyBjb25maWRlbnRseSBzZXQgdGhlIHJlc3VsdHMuIFJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBza2JzLCBhcyB0aGUgc3RhdGUgbGl2ZXMgaW4gYHNrYl9zaGluZm8oKWAgd2hpY2ggY2xvbmVzIHNoYXJlLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGxlcnMgb2YgYHNrYl90eF9lcnJvcmAgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCYjMzk7cyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NDM5ZjExNjA1NjkxZjdjZDE3MzIzZWZhZGIyMzJhZmU5NTA2NzQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDk6NDY6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTsKICAqCiAgKglSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi4KICAqCXNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuCiYjNDM7ICoKJiM0MzsgKglEb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluCiYjNDM7ICoJc2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLgogICovCiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChza2IpIHsKJiM0MzsJaWYgKHNrYiAmYW1wOyZhbXA7ICFza2JfY2xvbmVkKHNrYikpIHsKIAkJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiAJCXNrYl96Y29weV9jbGVhcihza2IsIHRydWUpOwogCX0KQEAgLTM5MDcsMTAgJiM0MzszOTEwLDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAotCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewotCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwogCXNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhmcm9tKS0mZ3Q7bnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQogCQkJY29uc3VtZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgomIzQzOwkJCXNrYl90eF9lcnJvcihza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJfQpAQCAtNjAxLDggJiM0Mzs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tJmd0O3BvcnRpZCk7CiAJdXNlcl9za2IgPSBOVUxMOwogb3V0OgotCWlmIChlcnIpCi0JCXNrYl90eF9lcnJvcihza2IpOwogCWNvbnN1bWVfc2tiKHVzZXJfc2tiKTsKIAljb25zdW1lX3NrYihuc2tiKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NgoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA2ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWmVyb2NvcHkgU3RhdGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHR3ZWFraW5nIGBza2JfdHhfZXJyb3JgIGFuZCBpdHMgdXNlcyBhY3Jvc3MgYSBmZXcga2V5IGFyZWFzIGluIHRoZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjay4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVmaW5pbmcgaG93IHdlIGhhbmRsZSB0aGUgemVyb2NvcHkgc3RhdGUsIHBhcnRpY3VsYXJseSBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuCgpFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIG1ha2luZyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBgc2tiX3R4X2Vycm9yYDogaXQmIzM5O3Mgbm8gbG9uZ2VyIGdvaW5nIHRvIGNsZWFyIHRoZSB6ZXJvY29weSBzdGF0ZSBpZiB0aGUgYHNrYmAgaXMgYSBjbG9uZS4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIHNoYXJlZCBzdGF0ZSBpbiBgc2tiX3NoaW5mbygpYCB3b3VsZCBnZXQgbWVzc2VkIHVwLCBhbmQgdGhhdCBjb3VsZCBsZWFkIHRvIG5hc3R5IGlzc3Vlcy4gSXQmIzM5O3MgYW4gaW1wb3J0YW50IGZpeCB0byBwcmV2ZW50IGluY29ycmVjdCByZWZjb3VudGluZywgYSBkb3VibGUtZnJlZSwgb3IgdXNlLWFmdGVyLWZyZWUsIG9yIGEgbWVtb3J5IGxlYWsuCgpEaWdnaW5nIGRlZXBlciwgdGhlIHBhdGNoIHJlbW92ZXMgdGhlIGRpcmVjdCBjYWxsIHRvIGBza2JfdHhfZXJyb3IoZnJvbSlgIHdpdGhpbiBgc2tiX3plcm9jb3B5YCB3aGVuIGBza2Jfb3JwaGFuX2ZyYWdzYCBmYWlscywgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBhbiBlcnJvciBhbHJlYWR5IGhhcHBlbmVkLiBJdCBhbHNvIHNoaWZ0cyB0aGUgYHNrYl90eF9lcnJvcihza2IpYCBjYWxsIGluIE9wZW4gdlN3aXRjaCBmcm9tIHRoZSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAgZXJyb3IgcGF0aHMuIFRoaXMgYXBwZWFycyB0byBiZSBjbGVhbnVwLCBlbnN1cmluZyBgc2tiX3R4X2Vycm9yYCBpcyBjYWxsZWQgaW4gdGhlIGFwcHJvcHJpYXRlIGNvbnRleHRzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgoKTm93LCB0aGUgcXVlc3Rpb24gSSBhbHdheXMgYXNrIG15c2VsZjogaXMgdGhpcyBnb2luZyB0byBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU/IEFuZCBteSBhc3Nlc3NtZW50IGlzIG5vLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgKnN0YXRlIG1hbmFnZW1lbnQqLCBzcGVjaWZpY2FsbHkgemVyb2NvcHkgc3RhdGUsIGFuZCB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGBza2JgIGNsb25lcy4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgd2UgZG9uJiMzOTt0IGFjY2lkZW50YWxseSBjbGVhciB0aGUgc3RhdGUgb2YgYSBzaGFyZWQgYnVmZmVyIG9yIHBvdGVudGlhbGx5IGxlYWsgbWVtb3J5LgoKV2UgYXJlbiYjMzk7dCBkZWFsaW5nIHdpdGggS01TQU4gdGVycml0b3J5IGhlcmU7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS0FTQU4gY29uY2VybnMsIHN1Y2ggYXMgYSBVQUYuIGBza2JfemNvcHlfY2xlYXJgIGRvZXMgbm90IHNlZW0gdG8gaW50cm9kdWNlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBJdCBpcyBtb3JlIGxpa2VseSB0byBjYXVzZSBtZW1vcnkgbGVha3MgaWYgbm90IGNhbGxlZCwgb3IgYSBVQUYgaWYgY2FsbGVkIGluY29ycmVjdGx5LgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgZm9jdXMgb24gemVyb2NvcHkgc3RhdGUgcmVmY291bnRpbmcgYW5kIGF2b2lkYW5jZSBvZiBpbmNvcnJlY3QgY2xlYXJpbmcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGZhbHNlLiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzIHByZXZlbnRpbmcgZG91YmxlIGZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgYW5kIGVuc3VyaW5nIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBza2JzLCBhcyB0aGUgc3RhdGUgbGl2ZXMgaW4gYHNrYl9zaGluZm8oKWAgd2hpY2ggY2xvbmVzIHNoYXJlLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGxlcnMgb2YgYHNrYl90eF9lcnJvcmAgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCYjMzk7cyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBza2JzLCBhcyB0aGUgc3RhdGUgbGl2ZXMgaW4gYHNrYl9zaGluZm8oKWAgd2hpY2ggY2xvbmVzIHNoYXJlLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGxlcnMgb2YgYHNrYl90eF9lcnJvcmAgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCYjMzk7cyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjowOC4wNTE2MzU5OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTYxMjY3NTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl90eF9lcnJvclwiLFxuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc2ticywgYXMgdGhlIHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGNsb25lcyBzaGFyZS4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsZXJzIG9mIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIGFzIHdlbGwgYXMgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgb3BlbnZzd2l0Y2ggZW50cnkgcG9pbnRzLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjowOC4wNTE2NDExNTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY3NTA4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDM5ZjExNjA1NjkxZjdjZDE3MzIzZWZhZGIyMzJhZmU5NTA2NzQyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjQ2OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCBiYTNkYmFjODBmYjQ5Li4wNDc3NmExMTIzMzQyIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXFxuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5AQCAtMTQxNywxMCArMTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcXG4gICpcXG4gICpcXHRSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi5cXG4gICpcXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxcbisgKlxcbisgKlxcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cXG4rICpcXHRza2Jfc2hpbmZvKCksIHdoaWNoIHRoZSBjbG9uZXMgc2hhcmUuXFxuICAqL1xcbiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdGlmIChza2IpIHtcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiAhc2tiX2Nsb25lZChza2IpKSB7XFxuIFxcdFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbiBcXHRcXHRza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTtcXG4gXFx0fVxcbkBAIC0zOTA3LDEwICszOTEwLDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbiBcXG4gXFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XFxuLVxcdFxcdHNrYl90eF9lcnJvcihmcm9tKTtcXG4rXFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbitcXG4gXFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKGZyb20pLVxcdTAwM2Vucl9mcmFnczsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcXG5pbmRleCBhZTY5YjJjYWJhYjllLi5mZmY3NWMzZWVkMTE2IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcXG5AQCAtMjg1LDYgKzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbiBcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0c2tiX3R4X2Vycm9yKHNrYik7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC02MDEsOCArNjAyLDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cXHUwMDNlcG9ydGlkKTtcXG4gXFx0dXNlcl9za2IgPSBOVUxMO1xcbiBvdXQ6XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHNrYl90eF9lcnJvcihza2IpO1xcbiBcXHRjb25zdW1lX3NrYih1c2VyX3NrYik7XFxuIFxcdGNvbnN1bWVfc2tiKG5za2IpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MDkuMzY5MTU4OTA5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDkzMDMyNzM0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfdHhfZXJyb3JcIixcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0MzlmMTE2MDU2OTFmN2NkMTczMjNlZmFkYjIzMmFmZTk1MDY3NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTo0NjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkwNywxMCArMzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcbiBcbi1cdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuLVx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4rXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1xuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oZnJvbSktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwMSw4ICs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjowOS4zNjkxNjAyNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjg4MDQ2NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBtYWtpbmcgY2hhbmdlcyB0byBib3RoIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL3NrYnVmZi5jYCwgYW5kIE9wZW4gdlN3aXRjaCdzIGRhdGFwYXRoLCB3aGljaCBpcyBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGhvdyBlcnJvciBoYW5kbGluZyBpcyBkb25lIHdoZW4gaXQgY29tZXMgdG8gdHJhbnNtaXR0aW5nIFNLQnMgKHNvY2tldCBidWZmZXIpLlxuXG5GaXJzdCwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yYC4gTm93LCBpZiB0aGUgU0tCIGJlaW5nIHRyYW5zbWl0dGVkIGlzIGNsb25lZCAoYHNrYl9jbG9uZWQoc2tiKWAgaXMgdHJ1ZSksIHRoZSBgc2tiX3R4X2Vycm9yYCBmdW5jdGlvbiBlc3NlbnRpYWxseSBkb2VzIG5vdGhpbmcuIFRoYXQgZmVlbHMgbGlrZSBhIHNpZ25pZmljYW50IGJlaGF2aW9yYWwgY2hhbmdlIG9uIGhvdyB3ZSBtYW5hZ2UgZXJyb3JzIHdpdGggY2xvbmVkIHBhY2tldHMsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uXG5cblNlY29uZGx5LCBpdCBsb29rcyBsaWtlIGBza2JfdHhfZXJyb3IoZnJvbSlgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQncyBhbiBpbnRlcmVzdGluZyByZW1vdmFsLCBzbyBJJ2xsIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdGFraW5nIGl0cyBwbGFjZSAoaWYgYW55dGhpbmcpIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC4gYHNrYl96ZXJvY29weWAgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIGhvdyB3ZSBoYW5kbGUgemVyby1jb3B5IHRyYW5zZmVycywgc28gYSBjaGFuZ2UgaGVyZSBkZXNlcnZlcyBhIGRlZXBlciBkaXZlLlxuXG5GaW5hbGx5LCBpdCdzIG1vZGlmeWluZyBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBTcGVjaWZpY2FsbHksIGBza2JfdHhfZXJyb3Ioc2tiKWAgaXMgYWRkZWQgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGJ1dCByZW1vdmVkIGZyb20gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIE9wZW4gdlN3aXRjaCBkYXRhIHBhdGguIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgaW50ZXJlc3Rpbmcgd2l0aCByZWdhcmRzIHRvIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblNvLCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggY29yZSBuZXR3b3JraW5nIChzcGVjaWZpY2FsbHkgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgKSBhbmQgT3BlbiB2U3dpdGNoJ3MgZGF0YXBhdGguIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGJvdGggYXJlYXMsIHdoaWNoIG1lYW5zIGl0IHdhcnJhbnRzIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIHJlZ3Jlc3Npb25zLlxuXG5JIHNob3VsZCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIE9wZW4gdlN3aXRjaCBjb25maWcgKGBPUEVOVlNXSVRDSGApIHNob3VsZCBkZWZpbml0ZWx5IGJlIGFjdGl2ZSBkdXJpbmcgdGVzdGluZy5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBhbGwgdGhyZWUgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gR29vZCwgdGhleSdyZSBhbGwgZ2xvYmFsLiBUaGlzIGhlbHBzIHdpdGggdGhlIGZ1enppbmcuXG5cbldhaXQsIGBza2JfdHhfZXJyb3JgIGlzIGJlaW5nICptb2RpZmllZCogaW4gdGhpcyBwYXRjaCwgc28gbGV0IG1lIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MTcuNjU3MjA5MTkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjAyNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl90eF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xNDEyPUVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTQxNC0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzoxNDE1OiAqXFx0c2tiX3R4X2Vycm9yIC0gcmVwb3J0IGFuIHNrX2J1ZmYgeG1pdCBlcnJvclxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTYtICpcXHRAc2tiOiBidWZmZXIgdGhhdCB0cmlnZ2VyZWQgYW4gZXJyb3JcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjMtICovXFxubmV0L2NvcmUvc2tidWZmLmM6MTQyNDp2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTQzMC19XFxubmV0L2NvcmUvc2tidWZmLmM6MTQzMTpFWFBPUlRfU1lNQk9MKHNrYl90eF9lcnJvcik7XFxubmV0L2NvcmUvc2tidWZmLmMtMTQzMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MTcuNzAyNDE1NTA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNTczNDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEYXRhIFRyYW5zZmVyKipcblxuQWxyaWdodCwgc28gaXQncyBiZWVuICpleHBvcnRlZCouIFRoYXQncyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIG1lY2hhbmlzbXMgdXNlZC4gU3BlY2lmaWNhbGx5LCB0aGUgdHJhbnNmZXIgbWVjaGFuaXNtIHRoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgYHNrYl96ZXJvY29weWAuIEtub3dpbmcgdGhhdCB0aGlzIG1lY2hhbmlzbSBpcyBpbnZvbHZlZCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGEgemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIG9yIHNvbWUgc3BlY2lmaWMgdXNlIG9mIHRoZSBza2Igc3RydWN0dXJlIHRvIGFjY29tcGxpc2ggdGhhdCBnb2FsLCBvciBhIHBhcnRpY3VsYXIgc3RhZ2Ugb2YgYW4gZXhwb3J0IG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYXJhY3RlcmlzdGljcyBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSBgc2tiX3plcm9jb3B5YCBmdW5jdGlvbiBpbiB0aGlzIGNvbnRleHQsIGFuZCB3aGF0IHRoYXQgbWlnaHQgbWVhbiBhYm91dCB0aGUgcGVyZm9ybWFuY2UgYW5kIG92ZXJoZWFkIG9mIHRoaXMgdHJhbnNmZXIsIGFuZCBpZiBhbnkgZGF0YSBjb3BpZXMgd2VyZSBuZWVkZWQuIE5vdywgSSBoYXZlIHRvIGRldGVybWluZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjoyMC42MzgxNTIyOTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMjA3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3plcm9jb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTE4MTU9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3JlYWxsb2MpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTYtXFxubmV0L2NvcmUvc2tidWZmLmM6MTgxNzpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMTgxOC17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODM3PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xODczLVxcdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cXHUwMDNlZWUuZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9aRVJPQ09QWSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4NzQ6XFx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE4NzUtXFx0XFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMz1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkxNTppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTE2LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk1Mi19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MzpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xOTYzPUVYUE9SVF9TWU1CT0xfR1BMKF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTY0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NjU6c3RhdGljIGludCBza2JfemVyb2NvcHlfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm5za2IsIHN0cnVjdCBza19idWZmICpvcmlnLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NjYtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjI4PXN0cnVjdCBza19idWZmICpfX3Bza2JfY29weV9mY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhlYWRyb29tLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjI1Mi1cXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTM6XFx0XFx0ICAgIHNrYl96ZXJvY29weV9jbG9uZShuLCBza2IsIGdmcF9tYXNrKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTQtXFx0XFx0XFx0a2ZyZWVfc2tiKG4pO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzgzMT1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzMtIC8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzQ6ICpcXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNS0gKlxcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM3LSAqXFx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICd0bycgc2tiIHBhc3NlZFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Mzg6ICpcXHRpbnRvIHNrYl96ZXJvY29weSgpLlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzktICovXFxubmV0L2NvcmUvc2tidWZmLmM9Mzg0MD11bnNpZ25lZCBpbnRcXG5uZXQvY29yZS9za2J1ZmYuYzozODQxOnNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NDIte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny19XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XFxubmV0L2NvcmUvc2tidWZmLmMtMzg1OS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODYwLS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NjE6ICpcXHRza2JfemVyb2NvcHkgLSBaZXJvIGNvcHkgc2tiIHRvIHNrYlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjItICpcXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg2OS0gKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NzA6ICpcXHRUaGUgYGhsZW5gIGFzIGNhbGN1bGF0ZWQgYnkgc2tiX3plcm9jb3B5X2hlYWRsZW4oKSBzcGVjaWZpZXMgdGhlXFxubmV0L2NvcmUvc2tidWZmLmMtMzg3MS0gKlxcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzg9aW50XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3OTpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMzg4MC17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTE1LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM5MTY6XFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0zOTE3LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkzNC19XFxubmV0L2NvcmUvc2tidWZmLmM6MzkzNTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MzYtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00MjMzPXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDI0MC1cXHRza2Jfc2hpbmZvKHNrYjEpLVxcdTAwM2VmbGFncyB8PSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgemNfZmxhZ3M7XFxubmV0L2NvcmUvc2tidWZmLmM6NDI0MTpcXHRza2JfemVyb2NvcHlfY2xvbmUoc2tiMSwgc2tiLCAwKTtcXG5uZXQvY29yZS9za2J1ZmYuYy00MjQyLVxcdGlmIChsZW4gXFx1MDAzYyBwb3MpXFx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDc3OT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTAwMi1cXG5uZXQvY29yZS9za2J1ZmYuYzo1MDAzOlxcdFxcdGlmIChza2JfemVyb2NvcHlfY2xvbmUobnNrYiwgZnJhZ19za2IsIEdGUF9BVE9NSUMpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMDQtXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MDA4LVxcdFxcdFxcdFxcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKGxpc3Rfc2tiLCBHRlBfQVRPTUlDKSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMDk6XFx0XFx0XFx0XFx0ICAgIHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBsaXN0X3NrYixcXG5uZXQvY29yZS9za2J1ZmYuYy01MDEwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBHRlBfQVRPTUlDKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MjAuNjg0Mjc5OTA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0MTQ4OTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIEZ1bmN0aW9uIFZpc2liaWxpdHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4geWVwLCBjb25maXJtaW5nLCBgc2tiX3plcm9jb3B5YCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIHdoYXQncyB0aGUgc3RhdHVzIG9mIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjoyMy4xMjU3NzE1MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTc3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMz12b2lkIG92c19kcF9kZXRhY2hfcG9ydChzdHJ1Y3QgdnBvcnQgKnApXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDQtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI0NTp2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjoyMy4xNzEyNzY3OTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODM4NzMyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggUGFja2V0IFByb2Nlc3NpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIE9wZW4gdlN3aXRjaCBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlcmUgcGFja2V0cyBhcmUgcHJvY2Vzc2VkLiBJdCdzIGFuIGludGVybmFsIGVudHJ5IHBvaW50LCBub3Qgc29tZXRoaW5nIGV4cG9ydGVkIGRpcmVjdGx5LCBidXQgY3J1Y2lhbCBmb3IgaGFuZGxpbmcgcGFja2V0IGZsb3cuIEkndmUgc3BvdHRlZCBhIHBhdGNoIHRoYXQncyBiZWVuIGFwcGxpZWQuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIHBhdGNoOiBpdCBpbnRyb2R1Y2VzIGBza2JfdHhfZXJyb3JgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGRlc2lnbmVkIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGUgYHNrX2J1ZmZgLiBJdCBjaGVja3MgaWYgdGhlIGBza19idWZmYCBpcyBjbG9uZWQsIGFuZCBpZiBpdCdzIG5vdCwgaXQgZG93bmdyYWRlcyBhbmQgY2xlYXJzIGl0IHdpdGggYHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZGAgYW5kIGBza2JfemNvcHlfY2xlYXJgLiBUaGlzIGlzIGFsbCB0byBkbyB3aXRoIHplcm8tY29weSBvcGVyYXRpb25zIG9uIHRoZSBza2IuXG5cbk5vdywgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBTcGVjaWZpY2FsbHksIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGhhcyBiZWVuIHVwZGF0ZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHNrYl90eF9lcnJvcmAgaXMgbm93IGNhbGxlZCBpbiB0aGUgYGRlZmF1bHRgIGNhc2Ugb2YgYSBgc3dpdGNoYCBzdGF0ZW1lbnQsIHdoaWNoIGluZGljYXRlcyBhIGZhaWx1cmUgaW4gaGFuZGxpbmcgdGhlIHBhY2tldCB3aXRoaW4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEl0J3MgdXNlZCB0byBjbGVhbiB1cCB0aGUgcGFja2V0IGJ1ZmZlciBiZWZvcmUgaXQgaXMgcmVsZWFzZWQuXG5cbkFsc28sIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBoYXMgYmVlbiBtb2RpZmllZC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIGZpbGUuIFRoZSBlcnJvciBoYW5kbGluZyB0aGVyZSBsb29rcyBkaWZmZXJlbnQ7IHRoZSBjaGVjayBgaWYgKGVycilgIHRoYXQgdXNlZCB0byBjYWxsIGBza2JfdHhfZXJyb3JgIGhhcyBiZWVuIHJlbW92ZWQuIEluc3RlYWQsIGBjb25zdW1lX3NrYmAgaXMgY2FsbGVkIGRpcmVjdGx5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGl0c2VsZiBpcyBleHBvcnRlZCwgb3IgaWYgaXQncyBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBmYXItcmVhY2hpbmcgdGhlc2UgY2hhbmdlcyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MzAuMDEwMDExNzc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI2MjU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0ODM9c3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1MTctXFx0XFx0XFx0Y2xvbmUtXFx1MDAzZXJlY2lyY19pZCA9IHJlY2lyY19pZDtcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MTg6XFx0XFx0XFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUxOS1cXHRcXHR9XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE1NDk9c3RhdGljIHZvaWQgcHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHApXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1NjctXFx0XFx0ZWxzZVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTU2ODpcXHRcXHRcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU2OS1cXHR9IHdoaWxlICghYWN0aW9uX2ZpZm9faXNfZW1wdHkoZmlmbykpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaD0zMTg9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF92cG9ydF9nZW5sX2ZhbWlseTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMTktXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg6MzIwOnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMjEtdm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICopO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDk3PWludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNTIyLVxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzo1MjM6XFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgXFx1MDAyNmtleSk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNTI0LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjozMC4wNTkyNzg4ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwODI0NjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFja2V0IFJlY2VwdGlvbiBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IE9wZW4gdlN3aXRjaCBoYW5kbGVzIGluY29taW5nIHBhY2tldHMsIGFuZCBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIHNlZSB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20gYG92c192cG9ydF9yZWNlaXZlYCwgYGNsb25lX2V4ZWN1dGVgLCBhbmQgYHByb2Nlc3NfZGVmZXJyZWRfYWN0aW9uc2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBvdnNfdnBvcnRfcmVjZWl2ZWAgaXMgbGlrZWx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBwYWNrZXRzIGNvbWluZyAqaW50byogT3BlbiB2U3dpdGNoIGl0c2VsZiwgYWx0aG91Z2ggSSBuZWVkIHRvIGJlIHN1cmUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBjaGVjayBpZiBgb3ZzX3Zwb3J0X3JlY2VpdmVgIGlzIGV2ZW4gZXhwb3J0ZWQsIG9yIGlmIGl0J3MgaW50ZXJuYWwgdG8gc29tZSBtb2R1bGUuIElmIGl0J3MgZXhwb3J0ZWQsIHRoYXQgZnVydGhlciB2YWxpZGF0ZXMgbXkgaHlwb3RoZXNpcyBhbmQgb2ZmZXJzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGV0YWlsZWQgYW5hbHlzaXMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBwYWNrZXRzIGVudGVyIHNvIEkgY2FuIHdvcmsgYmFjayBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDk3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6MzMuMjY3NTI4Mzc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQzNDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfdnBvcnRfcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYz0zND1pbnRlcm5hbF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTM3LVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYzozODpcXHQvKiBzdG9yZSBsZW4gdmFsdWUgYmVjYXVzZSBza2IgY2FuIGJlIGZyZWVkIGluc2lkZSBvdnNfdnBvcnRfcmVjZWl2ZSgpICovXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTM5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTQxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmM6NDI6XFx0ZXJyID0gb3ZzX3Zwb3J0X3JlY2VpdmUoaW50ZXJuYWxfZGV2X3ByaXYobmV0ZGV2KS1cXHUwMDNldnBvcnQsIHNrYiwgTlVMTCk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jLTQzLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LW5ldGRldi5jPTI5PXN0YXRpYyB2b2lkIG5ldGRldl9wb3J0X3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1uZXRkZXYuYy00OS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmM6NTA6XFx0b3ZzX3Zwb3J0X3JlY2VpdmUodnBvcnQsIHNrYiwgc2tiX3R1bm5lbF9pbmZvKHNrYikpO1xcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1uZXRkZXYuYy01MS1cXHRyZXR1cm47XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYz00Njk9dTMyIG92c192cG9ydF9maW5kX3VwY2FsbF9wb3J0aWQoY29uc3Qgc3RydWN0IHZwb3J0ICp2cG9ydCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTQ4Ny0vKipcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzo0ODg6ICpcXHRvdnNfdnBvcnRfcmVjZWl2ZSAtIHBhc3MgdXAgcmVjZWl2ZWQgcGFja2V0IHRvIHRoZSBkYXRhcGF0aCBmb3IgcHJvY2Vzc2luZ1xcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTQ4OS0gKlxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDk2LSAqL1xcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jOjQ5NzppbnQgb3ZzX3Zwb3J0X3JlY2VpdmUoc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy00OTgtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oPTE5NT1zdGF0aWMgaW5saW5lIHN0cnVjdCB2cG9ydCAqdnBvcnRfZnJvbV9wcml2KHZvaWQgKnByaXYpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaC0xOTktXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg6MjAwOmludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKiwgc3RydWN0IHNrX2J1ZmYgKixcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaC0yMDEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NjozMy4zMTM5Njg4OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNDg2Njc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBPVlMgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IE9wZW4gdlN3aXRjaCBoYW5kbGVzIHBhY2tldCByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbi4gSXQgc2VlbXMgbGlrZSBgb3ZzX3Zwb3J0X3JlY2VpdmVgIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBuZXRkZXZfcG9ydF9yZWNlaXZlYCBhbmQgYGludGVybmFsX2Rldl94bWl0YC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHNvbWUgb2YgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBwYWNrZXQgdHJhbnNtaXNzaW9uIGVycm9ycyBhcmUgb2NjdXJyaW5nLCBzbyBgc2tiX3R4X2Vycm9yYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gdG8gaW5zcGVjdC4gSXQncyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBrZXJuZWwgbmV0d29ya2luZyBzdGFjaywgc28gSSBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aCBpdCwgYnV0IGNvbnRleHQgaXMgYWx3YXlzIGltcG9ydGFudC4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgaW50byB6ZXJvLWNvcHkgcGFja2V0IGhhbmRsaW5nLCBzbyBgc2tiX3plcm9jb3B5YCBpcyBhbm90aGVyIGNvcmUgZnVuY3Rpb24gdG8ga2VlcCBpbiBtaW5kLiBJIGtub3cgdGhlc2UgZnVuY3Rpb25zIHdlbGwsIGJ1dCBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlICpzcGVjaWZpY2FsbHkqIGJlaW5nIHVzZWQgaW4gdGhpcyBPVlMgY29udGV4dC5cblxuU28sIHRvIHN1bW1hcml6ZSwgdGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTpcblxuKiAgIGBza2JfdHhfZXJyb3JgIChmb3IgZXJyb3IgaGFuZGxpbmcpXG4qICAgYHNrYl96ZXJvY29weWAgKGZvciBlZmZpY2llbnQgcGFja2V0IHRyYW5zZmVyKVxuKiAgIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgICh0aGUgY2VudHJhbCBwcm9jZXNzaW5nIHBvaW50KVxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBPUEVOVlNXSVRDSGAgaXMgZW5hYmxlZCwgYXMgdGhpcyB3aWxsIGltcGFjdCBob3cgdGhpcyBzZWN0aW9uIG9mIGNvZGUgYmVoYXZlcy4gVGhpcyBzZWVtcyBsaWtlIGEgdmFsaWQgY29uZmlnLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjQ2OjM4LjA0ODgzNzg2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjAwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjQ2OjM4LjA5MjkwMDAxNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU1NDc4MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maXJtaW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBEaXZpbmcgRGVlcGVyKipcblxuUmlnaHQsIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbiwgZ290IGl0LiBUaGF0J3MgZGVmaW5pdGVseSB0aGUgcm91dGUgdG8gZ28uIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBjb250ZXh0cyB3aGVyZSB0aGF0IGBza2JfdHhfZXJyb3JgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGggdG8gZnVsbHkgZ3Jhc3AgaXRzIGltcGFjdCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZGF0YSBwYXRoLiBBcmUgdGhlcmUgb3RoZXIgcG9pbnRzIG9mIGZhaWx1cmUgdXBzdHJlYW0gdGhhdCBmZWVkIGludG8gaXQ/IEFyZSB0aGVyZSBhbnkgdW5leHBlY3RlZCBwYXRocz8gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgbm93IHRvIGNvbmZpcm0gdGhlIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTkyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6NDEuMTQ4MzgwNTQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExMDYyNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl90eF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9pby5jPTM1Nj1uZXRkZXZfdHhfdCBvdnBuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQzLVxcdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKG92cG4tXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjQ0NDpcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQ1LVxcdGtmcmVlX3NrYl9saXN0KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMDAzPXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwODMtXFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG5kcml2ZXJzL25ldC90dW4uYzoxMDg0OlxcdHNrYl90eF9lcnJvcihza2IpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTEwODUtXFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMzOD12b2lkIHNrYl9kdW1wKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZ1bGxfcGt0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzk6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzQwLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTQxMj1FWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTQtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MTQxNTogKlxcdHNrYl90eF9lcnJvciAtIHJlcG9ydCBhbiBza19idWZmIHhtaXQgZXJyb3JcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE2LSAqXFx0QHNrYjogYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIGFuIGVycm9yXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNDIzLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MjQ6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDI1LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzAtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MzE6RVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcwNT1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgwMy1cXHRpZiAoIXNrYikge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODA0OlxcdFxcdHNrYl90eF9lcnJvcihlbnRza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODA1LVxcdFxcdGdvdG8gbmxtc2dfZmFpbHVyZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODEyLVxcdGlmICghbmxoKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MTM6XFx0XFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MTQtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2My1ubGFfcHV0X2ZhaWx1cmU6XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NjQ6XFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjUtXFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODctXFx0XFx0ZGVmYXVsdDpcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyODg6XFx0XFx0XFx0c2tiX3R4X2Vycm9yKHNrYik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg5LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM9MTUyNT1pbnQgc2tiX21ldGFfaW52YWxpZF9jdHgodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYzoxNTM1OlNFQyhcXFwiZmVudHJ5L3NrYl90eF9lcnJvclxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNi1fX2ZhaWx1cmUgX19tc2coXFxcIm11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYz0xNTM3PWludCBCUEZfUFJPRyhza2JfaW52YWxpZF9jdHhfZmVudHJ5LCB2b2lkICpza2IpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jOjE1NDc6U0VDKFxcXCJmZXhpdC9za2JfdHhfZXJyb3JcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1NDgtX19mYWlsdXJlIF9fbXNnKFxcXCJtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjQ2OjQyLjc1OTQ0NzU1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDYzMjY4MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIFBhY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpbnZvbHZlcyBwYWNrZXQgdHJhbnNtaXNzaW9uLCBzcGVjaWZpY2FsbHkgaG93IGVycm9ycyBhcmUgaGFuZGxlZC4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgb3Zwbl9uZXRfeG1pdGAsIGB0dW5fbmV0X3htaXRgLCBgbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2VgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgdG91Y2hpbmcgdmFyaW91cyBwYWNrZXQgcGF0aHMuXG5cblRoZSBtYWluIHRoaW5nIHRoYXQganVtcGVkIG91dCBhdCBtZSBpcyB0aGUgcmVtb3ZhbCBhbmQgYWRkaXRpb24gb2YgYHNrYl90eF9lcnJvcmAuIEl0J3MgZ2V0dGluZyBzdHJpcHBlZCBmcm9tIGBza2JfemVyb2NvcHlgIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAsIHRoZW4gYWRkZWQgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBlcnJvciBoYW5kbGluZyByZXNwb25zaWJpbGl0eSwgd2hpY2ggbWVhbnMgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSBpcyBoYXBwZW5pbmcgYW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBjaGFuZ2UgYWxzbyB0b3VjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2tiX3R4X2Vycm9yYCBpdHNlbGYsIHNvIEknbGwgbmVlZCB0byByZXZpZXcgdGhhdCBjbG9zZWx5LlxuXG5TbywgbXkga2V5IGZvY3VzIGFyZWFzIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlOlxuLSAgIGBza2JfdHhfZXJyb3JgICh0aGUgb2J2aW91cyBvbmUpXG4tICAgYHNrYl96ZXJvY29weWAgKHdoZXJlIGl0J3MgYmVpbmcgcmVtb3ZlZClcbi0gICBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCAod2hlcmUgaXQncyBiZWluZyBhZGRlZClcblxuVGhlIGNvbmZpZyBmb3IgdGhpcyBpcyBgT1BFTlZTV0lUQ0hgLiBUaGF0J3Mgbm90IHRvbyBzdXJwcmlzaW5nIGdpdmVuIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGJlaW5nIGludm9sdmVkLiBCdXQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgZGVwZW5kZW5jaWVzIGhlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBhcmUgYWx3YXlzIGNvbXBpbGVkIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgbGVzcyBub2lzZS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYE9QRU5WU1dJVENIYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhdCBhIHZlcnkgbG93IGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo0OC4yMjI3MTgzNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2MTY3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6NDguNjM4ODkwNzU5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTg1Nzk1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCB3ZSdyZSB0YWxraW5nIGFib3V0IHdpdGggdGhpcyAnT3BlbiB2U3dpdGNoJyBjb25jZXB0LiBJdCdzIGNydWNpYWwgdG8gaGF2ZSB0aGF0IGZvdW5kYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBUaGUgdGVjaG5pY2FsIGFzcGVjdHMgYXJlIGZhbWlsaWFyLCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBoYXZlIHRoZSBleGFjdCwgY29tcHJlaGVuc2l2ZSBkZWZpbml0aW9uIGxvY2tlZCBkb3duIGluIG15IGhlYWQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byBjb25zdWx0IHRoZSBtb3N0IGF1dGhvcml0YXRpdmUgc291cmNlIHBvc3NpYmxlIGZvciB0aGF0IGRlZmluaXRpb24gYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSB3b3JraW5nIGZyb20gYSBwcmVjaXNlIGFuZCBjb21wbGV0ZSBwaWN0dXJlLiBObyBzaG9ydGN1dHMgaGVyZTsgYSBzb2xpZCBkZWZpbml0aW9uIGlzIHBhcmFtb3VudCwgYW5kIGl0J3MgdGltZSB0byByZWZyZXNoIGFuZCBlbnN1cmUgdGhhdCBJIGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo1Mi40OTc0NzI1MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6NDY6NTIuNDk3NTM2MjIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTI4MzMwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkRlcGVuZGVuY3kgTWFwcGluZyBhbmQgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBpbnRlZ3JhdGluZyBgT1BFTlZTV0lUQ0hgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgaXQgY2xlYXJseSByZWxpZXMgb24gYElORVRgLCBzbyBgT1BFTlZTV0lUQ0hgIGdldHMgaW5jbHVkZWQuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byBjb25maXJtIGEgY291cGxlIG9mIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgd2hlcmUgSSBleHBlY3QgdGhlbSB0byBiZSwgZXNwZWNpYWxseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcgYW5kIHplcm8tY29weSBvcGVyYXRpb25zLiBJJ20gdGhpbmtpbmcgb2YgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSByZXNpZGUgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gR29vZCwgdGhhdCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUuXG5cbldpdGggdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBsb2NhdGlvbnMgdmVyaWZpZWQsIEkgY2FuIG5vdyBjb25maWRlbnRseSBzZXQgdGhlIHJlc3VsdHMuIFJlYWR5IHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTksIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo1OC41OTAzNzIwMDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjA1NzQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfdHhfZXJyb3JcIixcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfdHhfZXJyb3JcIixcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgYXMgd2VsbCBhcyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBvcGVudnN3aXRjaCBlbnRyeSBwb2ludHMsIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjQ2OjU4LjY3MjQzNTk0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5OTE4NjM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo1OC42NzMwMTQ3MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5OTEyODAxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc2ticywgYXMgdGhlIHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGNsb25lcyBzaGFyZS4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsZXJzIG9mIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0MzlmMTE2MDU2OTFmN2NkMTczMjNlZmFkYjIzMmFmZTk1MDY3NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTo0NjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkwNywxMCArMzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcbiBcbi1cdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuLVx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4rXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1xuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oZnJvbSktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwMSw4ICs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0Njo1OC42NzMwMTU5NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5OTEyNTM5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWmVyb2NvcHkgU3RhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIGBza2JfdHhfZXJyb3JgIGFuZCBpdHMgdXNlcyBhY3Jvc3MgYSBmZXcga2V5IGFyZWFzIGluIHRoZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjay4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVmaW5pbmcgaG93IHdlIGhhbmRsZSB0aGUgemVyb2NvcHkgc3RhdGUsIHBhcnRpY3VsYXJseSBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaXMgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGBza2JfdHhfZXJyb3JgOiBpdCdzIG5vIGxvbmdlciBnb2luZyB0byBjbGVhciB0aGUgemVyb2NvcHkgc3RhdGUgaWYgdGhlIGBza2JgIGlzIGEgY2xvbmUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZSBzaGFyZWQgc3RhdGUgaW4gYHNrYl9zaGluZm8oKWAgd291bGQgZ2V0IG1lc3NlZCB1cCwgYW5kIHRoYXQgY291bGQgbGVhZCB0byBuYXN0eSBpc3N1ZXMuIEl0J3MgYW4gaW1wb3J0YW50IGZpeCB0byBwcmV2ZW50IGluY29ycmVjdCByZWZjb3VudGluZywgYSBkb3VibGUtZnJlZSwgb3IgdXNlLWFmdGVyLWZyZWUsIG9yIGEgbWVtb3J5IGxlYWsuXG5cbkRpZ2dpbmcgZGVlcGVyLCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZGlyZWN0IGNhbGwgdG8gYHNrYl90eF9lcnJvcihmcm9tKWAgd2l0aGluIGBza2JfemVyb2NvcHlgIHdoZW4gYHNrYl9vcnBoYW5fZnJhZ3NgIGZhaWxzLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGFuIGVycm9yIGFscmVhZHkgaGFwcGVuZWQuIEl0IGFsc28gc2hpZnRzIHRoZSBgc2tiX3R4X2Vycm9yKHNrYilgIGNhbGwgaW4gT3BlbiB2U3dpdGNoIGZyb20gdGhlIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBlcnJvciBwYXRocy4gVGhpcyBhcHBlYXJzIHRvIGJlIGNsZWFudXAsIGVuc3VyaW5nIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiB0aGUgYXBwcm9wcmlhdGUgY29udGV4dHMgd2hlbiBhbiBlcnJvciBvY2N1cnMuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIEkgYWx3YXlzIGFzayBteXNlbGY6IGlzIHRoaXMgZ29pbmcgdG8gaW50cm9kdWNlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlPyBBbmQgbXkgYXNzZXNzbWVudCBpcyBuby4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0ICpzdGF0ZSBtYW5hZ2VtZW50Kiwgc3BlY2lmaWNhbGx5IHplcm9jb3B5IHN0YXRlLCBhbmQgdGhlIHByb3BlciBoYW5kbGluZyBvZiBgc2tiYCBjbG9uZXMuIEl0J3MgYWJvdXQgZW5zdXJpbmcgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNsZWFyIHRoZSBzdGF0ZSBvZiBhIHNoYXJlZCBidWZmZXIgb3IgcG90ZW50aWFsbHkgbGVhayBtZW1vcnkuXG5cbldlIGFyZW4ndCBkZWFsaW5nIHdpdGggS01TQU4gdGVycml0b3J5IGhlcmU7IHdlJ3JlIGRlYWxpbmcgd2l0aCBLQVNBTiBjb25jZXJucywgc3VjaCBhcyBhIFVBRi4gYHNrYl96Y29weV9jbGVhcmAgZG9lcyBub3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIEl0IGlzIG1vcmUgbGlrZWx5IHRvIGNhdXNlIG1lbW9yeSBsZWFrcyBpZiBub3QgY2FsbGVkLCBvciBhIFVBRiBpZiBjYWxsZWQgaW5jb3JyZWN0bHkuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGZvY3VzIG9uIHplcm9jb3B5IHN0YXRlIHJlZmNvdW50aW5nIGFuZCBhdm9pZGFuY2Ugb2YgaW5jb3JyZWN0IGNsZWFyaW5nLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGZhbHNlLiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzIHByZXZlbnRpbmcgZG91YmxlIGZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgYW5kIGVuc3VyaW5nIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0NiwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTo0NzowOS42NjQyNzMyNTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc2ticywgYXMgdGhlIHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGNsb25lcyBzaGFyZS4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsZXJzIG9mIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc2ticywgYXMgdGhlIHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGNsb25lcyBzaGFyZS4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsZXJzIG9mIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgLyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB6ZXJvY29weSBzdGF0ZSBtYW5hZ2VtZW50LCByZWZjb3VudGluZywgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHN0YXRlIGNsZWFyaW5nIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow666lt[1] Phase: Succeeded StartedAt: 2026-08-18 09:47:21 +0000 UTC FinishedAt: 2026-08-18 09:47:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 09:47:21 +0000 UTC FinishedAt: 2026-08-18 09:47:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2] Phase: Succeeded StartedAt: 2026-08-18 09:47:21 +0000 UTC FinishedAt: 2026-08-18 13:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 09:47:21 +0000 UTC FinishedAt: 2026-08-18 13:25:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 09:47:21 +0000 UTC FinishedAt: 2026-08-18 09:47:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 09:47:21 +0000 UTC FinishedAt: 2026-08-18 09:47:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow666lt/series-workflow666lt-convert-artifact-3902706853/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 09:47:31 +0000 UTC FinishedAt: 2026-08-18 10:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 09:47:31 +0000 UTC FinishedAt: 2026-08-18 10:03:52 +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:*574cb92d-3e22-4a54-9af8-1bd7efa96477,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-workflow666lt/series-workflow666lt-convert-artifact-3902706853/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": "1bf04bfa-fa5e-4b5a-9de6-75bf7c598286", "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-workflow666lt/series-workflow666lt-build-action-3635572939/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 09:47:31 +0000 UTC FinishedAt: 2026-08-18 10:03:42 +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:*574cb92d-3e22-4a54-9af8-1bd7efa96477,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-workflow666lt/series-workflow666lt-convert-artifact-3902706853/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": "1bf04bfa-fa5e-4b5a-9de6-75bf7c598286", "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-workflow666lt/series-workflow666lt-build-action-3635572939/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 10:03:52 +0000 UTC FinishedAt: 2026-08-18 10:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 10:03:52 +0000 UTC FinishedAt: 2026-08-18 10:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 10:03:52 +0000 UTC FinishedAt: 2026-08-18 10:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 10:03:52 +0000 UTC FinishedAt: 2026-08-18 10:03:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow666lt/series-workflow666lt-convert-artifact-2639987328/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 10:04:02 +0000 UTC FinishedAt: 2026-08-18 10:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 10:04:02 +0000 UTC FinishedAt: 2026-08-18 10:05:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1bf04bfa-fa5e-4b5a-9de6-75bf7c598286,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-workflow666lt/series-workflow666lt-build-action-3635572939/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-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 10:06:04 +0000 UTC FinishedAt: 2026-08-18 10:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 10:06:04 +0000 UTC FinishedAt: 2026-08-18 10:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 10:06:04 +0000 UTC FinishedAt: 2026-08-18 10:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 10:06:04 +0000 UTC FinishedAt: 2026-08-18 10:22:26 +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:*574cb92d-3e22-4a54-9af8-1bd7efa96477,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-workflow666lt/series-workflow666lt-convert-artifact-2639987328/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": "7dfd5894-ae93-40e7-9e27-2677e5be2f3f", "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-workflow666lt/series-workflow666lt-build-action-390656060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 10:06:04 +0000 UTC FinishedAt: 2026-08-18 10:22:16 +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:*574cb92d-3e22-4a54-9af8-1bd7efa96477,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-workflow666lt/series-workflow666lt-convert-artifact-2639987328/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": "7dfd5894-ae93-40e7-9e27-2677e5be2f3f", "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-workflow666lt/series-workflow666lt-build-action-390656060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 10:22:26 +0000 UTC FinishedAt: 2026-08-18 10:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 10:22:26 +0000 UTC FinishedAt: 2026-08-18 10:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 10:22:26 +0000 UTC FinishedAt: 2026-08-18 10:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 10:22:26 +0000 UTC FinishedAt: 2026-08-18 10:24:19 +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:*7dfd5894-ae93-40e7-9e27-2677e5be2f3f,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-workflow666lt/series-workflow666lt-build-action-390656060/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-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 10:24:21 +0000 UTC FinishedAt: 2026-08-18 13:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 10:24:21 +0000 UTC FinishedAt: 2026-08-18 13:25:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1bf04bfa-fa5e-4b5a-9de6-75bf7c598286,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7dfd5894-ae93-40e7-9e27-2677e5be2f3f,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-workflow666lt/series-workflow666lt-build-action-3635572939/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-workflow666lt/series-workflow666lt-build-action-390656060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 10:24:21 +0000 UTC FinishedAt: 2026-08-18 10:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 10:24:21 +0000 UTC FinishedAt: 2026-08-18 10:24:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow666lt/series-workflow666lt-convert-artifact-692912345/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 10:24:21 +0000 UTC FinishedAt: 2026-08-18 10:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 10:24:21 +0000 UTC FinishedAt: 2026-08-18 10:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 10:24:21 +0000 UTC FinishedAt: 2026-08-18 10:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 10:24:31 +0000 UTC FinishedAt: 2026-08-18 13:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow666lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21040c7f931502070dcc66bb0f1aeed07dec032b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0af0a153-3d93-47a0-9936-a68f8f81fe3c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 10:24:31 +0000 UTC FinishedAt: 2026-08-18 13:25:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1bf04bfa-fa5e-4b5a-9de6-75bf7c598286,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7dfd5894-ae93-40e7-9e27-2677e5be2f3f,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-workflow666lt/series-workflow666lt-build-action-3635572939/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-workflow666lt/series-workflow666lt-build-action-390656060/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-workflow666lt/series-workflow666lt-convert-artifact-692912345/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,}