Name: series-workflowz6wqj Phase: Succeeded StartedAt: 2026-09-11 08:47:35 +0000 UTC FinishedAt: 2026-09-11 12:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[0] Phase: Succeeded StartedAt: 2026-09-11 08:47:35 +0000 UTC FinishedAt: 2026-09-11 08:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 08:47:35 +0000 UTC FinishedAt: 2026-09-11 08:50:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "c335e08b-0c41-4676-bc5c-59ae2edecd7d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "invalidate_iter_owned_btf_ptrs", "check_reference_children", "release_reference", "check_kfunc_call", "check_kfunc_args", "check_ptr_to_btf_access", "unmark_stack_slots_iter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2ludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyYjMzQ7LAogICAgJiMzNDtjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7cmVsZWFzZV9yZWZlcmVuY2UmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX3B0cl90b19idGZfYWNjZXNzJiMzNDssCiAgICAmIzM0O3VubWFya19zdGFja19zbG90c19pdGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5oYW5jZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsaWZldGltZSB0cmFja2luZyBmb3IgdHJ1c3RlZCBwb2ludGVycyByZXR1cm5lZCBieSBzdHJ1Y3QgaXRlcmF0b3JzIChlLmcuLCBicGZfaXRlcl90YXNrX3ZtYSkgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgcGFyZW50X2lkIGFuZCBpbnZhbGlkYXRpbmcgdGhlbSB1cG9uIHN1YnNlcXVlbnQgaXRlcmF0b3Igc3RlcHMgb3IgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gQlBGIHByb2dyYW1zLlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlIHB1cmVseSBpbnRlcm5hbCBCUEYgdmVyaWZpZXIgbG9naWMsIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLCBhbmQgc2VsZnRlc3RzLiBObyBrZXJuZWwtdG8tdXNlciBjb3B5IG1lY2hhbmlzbXMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBydW50aW1lIHNhZmV0eSB2aW9sYXRpb25zIHJlc3VsdGluZyBmcm9tIGl0ZXJhdG9yIGJ1Z3MgKHN1Y2ggYXMgVUFGKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBmb3IgdHJhY2tpbmcgcmVmZXJlbmNlIGxpZmV0aW1lcywgcGFyZW50YWdlLCBhbmQgaW52YWxpZGF0aW9uIG9mIGl0ZXJhdG9yLW93bmVkIFBUUl9UT19CVEZfSUQgcG9pbnRlcnMgYW5kIGR5bnB0cnMgYWNyb3NzIGl0ZXJhdG9yIGFkdmFuY2UgYW5kIGRlc3Ryb3kgb3BlcmF0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHZlcmlmaWNhdGlvbiBvZiBlQlBGIHByb2dyYW1zIHZpYSBicGYoQlBGX1BST0dfTE9BRCkgYW5kIGludHJvZHVjZXMgbmV3IHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSBsZWFrIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRhOGM2Mzc0YzJlZDhkOWI4NzRhZjMyYTA4NTZiN2M1ZDcxOTQ4NDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0OToyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uYWUzMGRmNjI5ZDViMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xNTE4LDkgJiM0MzsxNTE4LDkgQEAgc3RydWN0IGJwZl9keW5wdHJfZGVzYyB7XG4gXG4gLypcbiAgKiBUaGUgbGFzdCBzZWVuIHJlcmVmZXJlbmNlZCBvYmplY3Q7IFVwZGF0ZWQgYnkgdXBkYXRlX3JlZl9vYmooKSB3aGVuIGEgcmVnaXN0ZXIgcmVmZXJzIHRvIGFcbi0gKiByZWZlcmVuY2VkIG9iamVjdC4gVXNlZCB3aGVuIHRoZSBoZWxwZXIgb3Iga2Z1bmMgaXMgY2FzdGluZyBhIHJlZmVyZW5jZWQgb2JqZWN0LCByZXR1cm5pbmdcbi0gKiBhbGxvY2F0ZWQgbWVtb3J5IGRlcml2ZWQgZnJvbSByZWZlcmVuY2VkIG9iamVjdCBvciBjcmVhdGluZyBhIGR5bnB0ciB3aXRoIGEgcmVmZXJlbmNlZFxuLSAqIG9iamVjdCBhcyBwYXJlbnQuXG4mIzQzOyAqIHJlZmVyZW5jZWQgb2JqZWN0IG9yIGFub3RoZXIgdmVyaWZpZXItdHJhY2tlZCBsaWZldGltZSBhbmNob3IuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jXG4mIzQzOyAqIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIGEgcmVmZXJlbmNlZCBvYmplY3RcbiYjNDM7ICogb3IgY3JlYXRpbmcgYSBkeW5wdHIgd2hvc2UgYmFja2luZyBvYmplY3QgaGFzIGEgdHJhY2tlZCBsaWZldGltZS5cbiAgKi9cbiBzdHJ1Y3QgcmVmX29ial9kZXNjIHtcbiBcdHUzMiBpZDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmViMDEzOTU0MTgyZjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTIzOCwxMyAmIzQzOzIzOCwxOCBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX2tleV9zdG9yZShzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCwgdTY0IHN0YXRlKVxuIFx0XHRcdCAgICAgKHBvaXNvbmVkID8gQlBGX01BUF9LRVlfUE9JU09OIDogMFVMTCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzQzO3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqX2lkKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHUzMiBpZCwgdTMyIHBhcmVudF9pZClcbiB7XG4tXHRyZWZfb2JqLVx1MDAzZWlkID0gcmVnLVx1MDAzZWlkO1xuLVx0cmVmX29iai1cdTAwM2VwYXJlbnRfaWQgPSByZWctXHUwMDNlcGFyZW50X2lkO1xuJiM0MztcdHJlZl9vYmotXHUwMDNlaWQgPSBpZDtcbiYjNDM7XHRyZWZfb2JqLVx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcbiBcdHJlZl9vYmotXHUwMDNlY250JiM0MzsmIzQzOztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzQzO3tcbiYjNDM7XHR1cGRhdGVfcmVmX29ial9pZChyZWZfb2JqLCByZWctXHUwMDNlaWQsIHJlZy1cdTAwM2VwYXJlbnRfaWQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmFsaWRhdGVfcmVmX29iaihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqKVxuIHtcbiBcdGlmIChyZWZfb2JqLVx1MDAzZWNudCBcdTAwM2UgMSkge1xuQEAgLTk3Nyw3ICYjNDM7OTgyLDcgQEAgc3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxuIHtcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7XG4tXHRpbnQgc3BpLCBpLCBqO1xuJiM0MztcdGludCBzcGksIGksIGosIGVycjtcbiBcbiBcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xuIFx0aWYgKHNwaSBcdTAwM2MgMClcbkBAIC05ODcsOCAmIzQzOzk5MiwxMSBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSBpXTtcbiBcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbiBcbi1cdFx0aWYgKGkgPT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UocmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC1cdTAwM2VpZCkpO1xuJiM0MztcdFx0aWYgKGkgPT0gMCkge1xuJiM0MztcdFx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZShlbnYsIHN0LVx1MDAzZWlkKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBzdCk7XG4gXG5AQCAtNjE0MCw5ICYjNDM7NjE0OCwxNiBAQCBzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gXG4gXHRpZiAoYXR5cGUgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmV0LCByZWctXHUwMDNlYnRmLCBidGZfaWQsIGZsYWcpO1xuJiM0MztcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnX3R5cGUgPSByZXQ7XG4mIzQzO1x0XHR1MzIgcGFyZW50X2lkID0gcmVnLVx1MDAzZXBhcmVudF9pZDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmVnX3R5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgcmVnLVx1MDAzZWJ0ZiwgYnRmX2lkLCBmbGFnKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKChyZWdzW3ZhbHVlX3JlZ25vXS50eXBlIFx1MDAyNiBQVFJfVFJVU1RFRCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIShyZWdzW3ZhbHVlX3JlZ25vXS50eXBlIFx1MDAyNiAoTUVNX1JDVSB8IE1FTV9QRVJDUFUgfCBNRU1fVVNFUikpKVxuJiM0MztcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC05NDU2LDYgJiM0Mzs5NDcxLDI0IEBAIHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRyZXR1cm4gaWRtYXAtXHUwMDNlbWFwWy0taWRtYXAtXHUwMDNlY250XS5vbGQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcGFyZW50X2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnN0YXRlLVx1MDAzZWFjcXVpcmVkX3JlZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHZzdGF0ZS1cdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBwYXJlbnRfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2c3RhdGUtXHUwMDNlcmVmc1tpXS5pZCwgdnN0YXRlLVx1MDAzZXJlZnNbaV0uaW5zbl9pZHgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBSZWxlYXNlIGlkIGFuZCBvYmplY3RzIGRlcml2ZWQgZnJvbSBpdCBpdGVyYXRpdmVseSBpbiBhIERGUyBtYW5uZXIgKi9cbiBzdGF0aWMgaW50IHJlbGVhc2VfcmVmZXJlbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZClcbiB7XG5AQCAtOTQ2NSwzMSAmIzQzOzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4gXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuLVx0aW50IGksIGVycjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWRzdGFjay1cdTAwM2VjbnQgPSAwO1xuIFx0ZXJyID0gaWRzdGFja19wdXNoKGlkc3RhY2ssIGlkKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoZmluZF9yZWZlcmVuY2Vfc3RhdGUodnN0YXRlLCBpZCkpIHtcbi1cdFx0ZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpO1xuLVx0XHRXQVJOX09OX09OQ0UoZXJyKTtcbi1cdH1cbi1cbiBcdHdoaWxlICgoaWQgPSBpZHN0YWNrX3BvcChpZHN0YWNrKSkpIHtcbiBcdFx0LypcbiBcdFx0ICogQ2hpbGQgcmVmZXJlbmNlcyBhcmUgaW5hY2Nlc3NpYmxlIGFmdGVyIHBhcmVudCBpcyByZWxlYXNlZCxcbiBcdFx0ICogYW55IGNoaWxkIHJlZmVyZW5jZXMgdGhhdCBleGlzdCBhdCB0aGlzIHBvaW50IGFyZSBhIGxlYWsuXG4gXHRcdCAqL1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2c3RhdGUtXHUwMDNlYWNxdWlyZWRfcmVmczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0ucGFyZW50X2lkICE9IGlkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxuXCYjMzQ7LFxuLVx0XHRcdFx0dnN0YXRlLVx1MDAzZXJlZnNbaV0uaWQsIHZzdGF0ZS1cdTAwM2VyZWZzW2ldLmluc25faWR4KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIGlkKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZpbmRfcmVmZXJlbmNlX3N0YXRlKHZzdGF0ZSwgaWQpKSB7XG4mIzQzO1x0XHRcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhlbnYsIGlkKTtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKGVycik7XG4gXHRcdH1cbiBcbiBcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoe1xuQEAgLTk1NDEsNiAmIzQzOzk1NjgsMzMgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdH0pKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXBhcmVudF9pZCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKGVudiwgcGFyZW50X2lkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdHJ1Y3QgaXRlcmF0b3JzIGNhbiByZWxlYXNlIHRoZSBwcmV2aW91cyBlbGVtZW50IG9uIGVhY2ggbmV4dCBjYWxsLlxuJiM0MztcdCAqIFBUUl9UT19NRU0gaXRlcmF0b3IgcmVzdWx0cyB1c2Ugc3RvcmFnZSB0aGF0IHJlbWFpbnMgdmFsaWQgdW50aWwgZGVzdHJveS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCB1bnVzZWQsIHJlZywgKHtcbiYjNDM7XHRcdGlmIChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgfHwgcmVnLVx1MDAzZXBhcmVudF9pZCAhPSBwYXJlbnRfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpO1xuJiM0MztcdFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XG4mIzQzO1x0fSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuQEAgLTEzMTAwLDYgJiM0MzsxMzE1NCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdFx0cmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7XG4gXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0XHRcdGlmIChtZXRhLVx1MDAzZWJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fZmlsZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgIGkgPT0gMCBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXBhcmVudF9pZClcbiYjNDM7XHRcdFx0XHRcdHVwZGF0ZV9yZWZfb2JqX2lkKFx1MDAyNm1ldGEtXHUwMDNlcmVmX29iaiwgcmVnLVx1MDAzZXBhcmVudF9pZCwgMCk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG5AQCAtMTM5OTUsNiAmIzQzOzE0MDUzLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIFx1MDAyNm1ldGEpLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpKSB7XG4mIzQzO1x0XHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0YnBmX2RpYWdfcmVjb3JkX2NhbGxlcl9zYXZlZChlbnYsIHJlZ3MpO1xuIFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG5AQCAtMTQxMDUsNiAmIzQzOzE0MTcwLDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNiAhKHR5cGUgXHUwMDI2IE1FTV9SQ1UpKVxuJiM0MztcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFx1MDAyNm1ldGEpKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcbmluZGV4IDc2MDEyZGJiZGI0MTMuLmE1NWU1Y2YyOTQ3NGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5AQCAtMjgsNiAmIzQzOzI4LDI5OCBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoIXZtYV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiB2bWFfcHRyLVx1MDAzZXZtX3N0YXJ0O1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4mIzQzO1x0dTY0IHZtX3N0YXJ0O1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoIW5leHRfdm1hX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR2bV9zdGFydCA9IHZtYV9wdHItXHUwMDNldm1fc3RhcnQ7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiB2bV9zdGFydDtcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5O1wmIzM0OylcbiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX25leHRfbnVsbChjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4mIzQzO1x0dTY0IHZtX3N0YXJ0O1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAobmV4dF92bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHZtX3N0YXJ0ID0gdm1hX3B0ci1cdTAwM2V2bV9zdGFydDtcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIHZtX3N0YXJ0O1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfZmllbGRfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoZmlsZV9wdHIpXG4mIzQzO1x0XHRyZXR1cm4gZmlsZV9wdHItXHUwMDNlZl9tb2RlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfZmllbGRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuJiM0MztcdHUzMiBtb2RlO1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuJiM0MztcdGlmICghZmlsZV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICghbmV4dF92bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG1vZGUgPSBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiBtb2RlO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPVwmIzM0OylcbiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuJiM0MztcdGlmICghZmlsZV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0YnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsIFx1MDAyNmR5bnB0cik7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFx1MDAyNmR5bnB0cik7XG4mIzQzO291dDpcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIGR5bnB0cjtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoIXZtYV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX2ZpbGU7XG4mIzQzO1x0aWYgKCFmaWxlX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0YnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoXHUwMDI2ZHlucHRyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2Rpc2NhcmRfYmVmb3JlX2FkdmFuY2UoY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIGR5bnB0cjtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoIXZtYV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX2ZpbGU7XG4mIzQzO1x0aWYgKCFmaWxlX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbiYjNDM7XHRicGZfZHlucHRyX2ZpbGVfZGlzY2FyZChcdTAwMjZkeW5wdHIpO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfY3VycmVudF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuJiM0MztcbiYjNDM7XHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICghdm1hX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICh2bWFfcHRyKVxuJiM0MztcdFx0YnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7XG4mIzQzO291dDpcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX3JjdV9maWVsZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuJiM0MztcbiYjNDM7XHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICh2bWFfcHRyKSB7XG4mIzQzO1x0XHRtbV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX21tO1xuJiM0MztcdFx0LyogZXhlX2ZpbGUgaGFzIFJDVSBwcm90ZWN0aW9uIGluZGVwZW5kZW50IG9mIHRoZSBpdGVyYXRvci4gKi9cbiYjNDM7XHRcdGlmIChtbV9wdHIpXG4mIzQzO1x0XHRcdGZpbGVfcHRyID0gbW1fcHRyLVx1MDAzZWV4ZV9maWxlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmIChmaWxlX3B0cilcbiYjNDM7XHRcdHJldHVybiBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX3JjdV9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDtcbiYjNDM7XHR1MzIgbW9kZSA9IDA7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAodm1hX3B0cikge1xuJiM0MztcdFx0bW1fcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9tbTtcbiYjNDM7XHRcdGlmIChtbV9wdHIpXG4mIzQzO1x0XHRcdGZpbGVfcHRyID0gbW1fcHRyLVx1MDAzZWV4ZV9maWxlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmIChmaWxlX3B0cilcbiYjNDM7XHRcdG1vZGUgPSBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiBtb2RlO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcJiMzNDspXG4gaW50IGl0ZXJfbmV4dF90cnVzdGVkX29yX251bGwoY29uc3Qgdm9pZCAqY3R4KVxuQEAgLTY2LDYgJiM0MzszNTgsNDYgQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3B0cjtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuJiM0MztcbiYjNDM7XHR0YXNrX3B0ciA9IGJwZl9pdGVyX3Rhc2tfbmV4dChcdTAwMjZ0YXNrX2l0KTtcbiYjNDM7XHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2dGFza19pdCk7XG4mIzQzO1x0aWYgKCF0YXNrX3B0cilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfcmN1X3Rhc2tfdGVzdCh0YXNrX3B0cik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGl0ZXJfbmV4dF9yY3VfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2sgdGFza19pdDtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX25ldyhcdTAwMjZ0YXNrX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHRhc2tfcHRyID0gYnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNnRhc2tfaXQpO1xuJiM0MztcdGlmICghdGFza19wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNnRhc2tfaXQpO1xuJiM0MztcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCYjMzQ7KVxuIGludCBpdGVyX25leHRfcmN1X29yX251bGwoY29uc3Qgdm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2ludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyYjMzQ7LAogICAgJiMzNDtjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7cmVsZWFzZV9yZWZlcmVuY2UmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX3B0cl90b19idGZfYWNjZXNzJiMzNDssCiAgICAmIzM0O3VubWFya19zdGFja19zbG90c19pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMgZm9yIHRyYWNraW5nIHJlZmVyZW5jZSBsaWZldGltZXMsIHBhcmVudGFnZSwgYW5kIGludmFsaWRhdGlvbiBvZiBpdGVyYXRvci1vd25lZCBQVFJfVE9fQlRGX0lEIHBvaW50ZXJzIGFuZCBkeW5wdHJzIGFjcm9zcyBpdGVyYXRvciBhZHZhbmNlIGFuZCBkZXN0cm95IG9wZXJhdGlvbnMuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyB2ZXJpZmljYXRpb24gb2YgZUJQRiBwcm9ncmFtcyB2aWEgYnBmKEJQRl9QUk9HX0xPQUQpIGFuZCBpbnRyb2R1Y2VzIG5ldyB2YWxpZGF0aW9uIGFuZCByZWZlcmVuY2UgbGVhayBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YThjNjM3NGMyZWQ4ZDliODc0YWYzMmEwODU2YjdjNWQ3MTk0ODQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDk6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi5hZTMwZGY2MjlkNWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE1MTgsOSAmIzQzOzE1MTgsOSBAQCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjIHsKIAogLyoKICAqIFRoZSBsYXN0IHNlZW4gcmVyZWZlcmVuY2VkIG9iamVjdDsgVXBkYXRlZCBieSB1cGRhdGVfcmVmX29iaigpIHdoZW4gYSByZWdpc3RlciByZWZlcnMgdG8gYQotICogcmVmZXJlbmNlZCBvYmplY3QuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nCi0gKiBhbGxvY2F0ZWQgbWVtb3J5IGRlcml2ZWQgZnJvbSByZWZlcmVuY2VkIG9iamVjdCBvciBjcmVhdGluZyBhIGR5bnB0ciB3aXRoIGEgcmVmZXJlbmNlZAotICogb2JqZWN0IGFzIHBhcmVudC4KJiM0MzsgKiByZWZlcmVuY2VkIG9iamVjdCBvciBhbm90aGVyIHZlcmlmaWVyLXRyYWNrZWQgbGlmZXRpbWUgYW5jaG9yLiBVc2VkIHdoZW4gdGhlIGhlbHBlciBvciBrZnVuYwomIzQzOyAqIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIGEgcmVmZXJlbmNlZCBvYmplY3QKJiM0MzsgKiBvciBjcmVhdGluZyBhIGR5bnB0ciB3aG9zZSBiYWNraW5nIG9iamVjdCBoYXMgYSB0cmFja2VkIGxpZmV0aW1lLgogICovCiBzdHJ1Y3QgcmVmX29ial9kZXNjIHsKIAl1MzIgaWQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWIwMTM5NTQxODJmMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMjM4LDEzICYjNDM7MjM4LDE4IEBAIHN0YXRpYyB2b2lkIGJwZl9tYXBfa2V5X3N0b3JlKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4LCB1NjQgc3RhdGUpCiAJCQkgICAgIChwb2lzb25lZCA/IEJQRl9NQVBfS0VZX1BPSVNPTiA6IDBVTEwpOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQomIzQzO3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqX2lkKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHUzMiBpZCwgdTMyIHBhcmVudF9pZCkKIHsKLQlyZWZfb2JqLSZndDtpZCA9IHJlZy0mZ3Q7aWQ7Ci0JcmVmX29iai0mZ3Q7cGFyZW50X2lkID0gcmVnLSZndDtwYXJlbnRfaWQ7CiYjNDM7CXJlZl9vYmotJmd0O2lkID0gaWQ7CiYjNDM7CXJlZl9vYmotJmd0O3BhcmVudF9pZCA9IHBhcmVudF9pZDsKIAlyZWZfb2JqLSZndDtjbnQmIzQzOyYjNDM7OwogfQogCiYjNDM7c3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmooc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0Mzt7CiYjNDM7CXVwZGF0ZV9yZWZfb2JqX2lkKHJlZl9vYmosIHJlZy0mZ3Q7aWQsIHJlZy0mZ3Q7cGFyZW50X2lkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHZhbGlkYXRlX3JlZl9vYmooc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaikKIHsKIAlpZiAocmVmX29iai0mZ3Q7Y250ICZndDsgMSkgewpAQCAtOTc3LDcgJiM0Mzs5ODIsNyBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKQogewogCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7Ci0JaW50IHNwaSwgaSwgajsKJiM0MzsJaW50IHNwaSwgaSwgaiwgZXJyOwogCiAJc3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7CiAJaWYgKHNwaSAmbHQ7IDApCkBAIC05ODcsOCAmIzQzOzk5MiwxMSBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSAmYW1wO3N0YXRlLSZndDtzdGFja1tzcGkgLSBpXTsKIAkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gJmFtcDtzbG90LSZndDtzcGlsbGVkX3B0cjsKIAotCQlpZiAoaSA9PSAwKQotCQkJV0FSTl9PTl9PTkNFKHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3QtJmd0O2lkKSk7CiYjNDM7CQlpZiAoaSA9PSAwKSB7CiYjNDM7CQkJZXJyID0gcmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC0mZ3Q7aWQpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpOwogCkBAIC02MTQwLDkgJiM0Mzs2MTQ4LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAl9CiAKIAlpZiAoYXR5cGUgPT0gQlBGX1JFQUQgJmFtcDsmYW1wOyB2YWx1ZV9yZWdubyAmZ3Q7PSAwKSB7Ci0JCXJldCA9IG1hcmtfYnRmX2xkX3JlZyhlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLCByZXQsIHJlZy0mZ3Q7YnRmLCBidGZfaWQsIGZsYWcpOwomIzQzOwkJZW51bSBicGZfcmVnX3R5cGUgcmVnX3R5cGUgPSByZXQ7CiYjNDM7CQl1MzIgcGFyZW50X2lkID0gcmVnLSZndDtwYXJlbnRfaWQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmVnX3R5cGUsCiYjNDM7CQkJCSAgICAgIHJlZy0mZ3Q7YnRmLCBidGZfaWQsIGZsYWcpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgJmFtcDsgUFRSX1RSVVNURUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgJmFtcDsgKE1FTV9SQ1UgfCBNRU1fUEVSQ1BVIHwgTUVNX1VTRVIpKSkKJiM0MzsJCQlyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05NDU2LDYgJiM0Mzs5NDcxLDI0IEBAIHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGlkbWFwLSZndDttYXBbLS1pZG1hcC0mZ3Q7Y250XS5vbGQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcGFyZW50X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LSZndDtjdXJfc3RhdGU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdnN0YXRlLSZndDthY3F1aXJlZF9yZWZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHZzdGF0ZS0mZ3Q7cmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICh2c3RhdGUtJmd0O3JlZnNbaV0ucGFyZW50X2lkICE9IHBhcmVudF9pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXZlcmJvc2UoZW52LCAmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXG4mIzM0OywKJiM0MzsJCQl2c3RhdGUtJmd0O3JlZnNbaV0uaWQsIHZzdGF0ZS0mZ3Q7cmVmc1tpXS5pbnNuX2lkeCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBSZWxlYXNlIGlkIGFuZCBvYmplY3RzIGRlcml2ZWQgZnJvbSBpdCBpdGVyYXRpdmVseSBpbiBhIERGUyBtYW5uZXIgKi8KIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKQogewpAQCAtOTQ2NSwzMSAmIzQzOzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpCiAJc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7CiAJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwotCWludCBpLCBlcnI7CiYjNDM7CWludCBlcnI7CiAKIAlpZHN0YWNrLSZndDtjbnQgPSAwOwogCWVyciA9IGlkc3RhY2tfcHVzaChpZHN0YWNrLCBpZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkgewotCQllcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7Ci0JCVdBUk5fT05fT05DRShlcnIpOwotCX0KLQogCXdoaWxlICgoaWQgPSBpZHN0YWNrX3BvcChpZHN0YWNrKSkpIHsKIAkJLyoKIAkJICogQ2hpbGQgcmVmZXJlbmNlcyBhcmUgaW5hY2Nlc3NpYmxlIGFmdGVyIHBhcmVudCBpcyByZWxlYXNlZCwKIAkJICogYW55IGNoaWxkIHJlZmVyZW5jZXMgdGhhdCBleGlzdCBhdCB0aGlzIHBvaW50IGFyZSBhIGxlYWsuCiAJCSAqLwotCQlmb3IgKGkgPSAwOyBpICZsdDsgdnN0YXRlLSZndDthY3F1aXJlZF9yZWZzOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzdGF0ZS0mZ3Q7cmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUikKLQkJCQljb250aW51ZTsKLQkJCWlmICh2c3RhdGUtJmd0O3JlZnNbaV0ucGFyZW50X2lkICE9IGlkKQotCQkJCWNvbnRpbnVlOwotCQkJdmVyYm9zZShlbnYsICYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JWQgYWxsb2NfaW5zbj0lZC4gUmVsZWFzZSBpdCBmaXJzdC5cbiYjMzQ7LAotCQkJCXZzdGF0ZS0mZ3Q7cmVmc1tpXS5pZCwgdnN0YXRlLSZndDtyZWZzW2ldLmluc25faWR4KTsKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZXJyID0gY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKGVudiwgaWQpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkJaWYgKGZpbmRfcmVmZXJlbmNlX3N0YXRlKHZzdGF0ZSwgaWQpKSB7CiYjNDM7CQkJZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpOwomIzQzOwkJCVdBUk5fT05fT05DRShlcnIpOwogCQl9CiAKIAkJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoewpAQCAtOTU0MSw2ICYjNDM7OTU2OCwzMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCX0pKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDsKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcGFyZW50X2lkKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwllcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBwYXJlbnRfaWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3RydWN0IGl0ZXJhdG9ycyBjYW4gcmVsZWFzZSB0aGUgcHJldmlvdXMgZWxlbWVudCBvbiBlYWNoIG5leHQgY2FsbC4KJiM0MzsJICogUFRSX1RPX01FTSBpdGVyYXRvciByZXN1bHRzIHVzZSBzdG9yYWdlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBkZXN0cm95LgomIzQzOwkgKi8KJiM0MzsJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LSZndDtjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoewomIzQzOwkJaWYgKGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgfHwgcmVnLSZndDtwYXJlbnRfaWQgIT0gcGFyZW50X2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJYnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpOwomIzQzOwkJbWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7CiYjNDM7CX0pKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjazsKQEAgLTEzMTAwLDYgJiM0MzsxMzE1NCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCXJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pOwogCQkJCWlmIChyZXQgJmx0OyAwKQogCQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCQlpZiAobWV0YS0mZ3Q7YnRmID09IGJ0Zl92bWxpbnV4ICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICBpID09IDAgJmFtcDsmYW1wOyAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpICZhbXA7JmFtcDsgcmVnLSZndDtwYXJlbnRfaWQpCiYjNDM7CQkJCQl1cGRhdGVfcmVmX29ial9pZCgmYW1wO21ldGEtJmd0O3JlZl9vYmosIHJlZy0mZ3Q7cGFyZW50X2lkLCAwKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMTM5OTUsNiAmIzQzOzE0MDUzLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCX0KIAl9CiAKJiM0MzsJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LSZndDtjdXJfc3RhdGUsICZhbXA7bWV0YSktJmd0O3R5cGUgJmFtcDsgTUVNX1JDVSkpIHsKJiM0MzsJCWVyciA9IGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyhlbnYsIG1ldGEucmVmX29iai5pZCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7CiAJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykgewpAQCAtMTQxMDUsNiAmIzQzOzE0MTcwLDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCXJlZ3NbQlBGX1JFR18wXS5idGYgPSBkZXNjX2J0ZjsKIAkJCXJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTsKIAkJCXJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDsKJiM0MzsKJiM0MzsJCQlpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpICZhbXA7JmFtcDsgISh0eXBlICZhbXA7IE1FTV9SQ1UpKQomIzQzOwkJCQlyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkOwogCQl9CiAKIAkJaWYgKGlzX2tmdW5jX3JldF9udWxsKCZhbXA7bWV0YSkpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jCmluZGV4IDc2MDEyZGJiZGI0MTMuLmE1NWU1Y2YyOTQ3NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYwpAQCAtMjgsNiAmIzQzOzI4LDI5OCBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIHZtYV9wdHItJmd0O3ZtX3N0YXJ0OwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjsKJiM0MzsJdTY0IHZtX3N0YXJ0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghbmV4dF92bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXZtX3N0YXJ0ID0gdm1hX3B0ci0mZ3Q7dm1fc3RhcnQ7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gdm1fc3RhcnQ7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9uZXh0X251bGwoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7CiYjNDM7CXU2NCB2bV9zdGFydDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAobmV4dF92bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXZtX3N0YXJ0ID0gdm1hX3B0ci0mZ3Q7dm1fc3RhcnQ7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gdm1fc3RhcnQ7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmaWxlX3B0ciA9IHZtYV9wdHItJmd0O3ZtX2ZpbGU7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoZmlsZV9wdHIpCiYjNDM7CQlyZXR1cm4gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyLCAqbmV4dF92bWFfcHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CXUzMiBtb2RlOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZmlsZV9wdHIgPSB2bWFfcHRyLSZndDt2bV9maWxlOwomIzQzOwlpZiAoIWZpbGVfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIW5leHRfdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltb2RlID0gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiBtb2RlOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZpbGVfcHRyID0gdm1hX3B0ci0mZ3Q7dm1fZmlsZTsKJiM0MzsJaWYgKCFmaWxlX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZpbGVfcHRyID0gdm1hX3B0ci0mZ3Q7dm1fZmlsZTsKJiM0MzsJaWYgKCFmaWxlX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfZmlsZV9keW5wdHJfZGlzY2FyZF9iZWZvcmVfYWR2YW5jZShjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjsKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgZHlucHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmaWxlX3B0ciA9IHZtYV9wdHItJmd0O3ZtX2ZpbGU7CiYjNDM7CWlmICghZmlsZV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsICZhbXA7ZHlucHRyKTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9jdXJyZW50X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICh2bWFfcHRyKQomIzQzOwkJYnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKHZtYV9wdHIpIHsKJiM0MzsJCW1tX3B0ciA9IHZtYV9wdHItJmd0O3ZtX21tOwomIzQzOwkJLyogZXhlX2ZpbGUgaGFzIFJDVSBwcm90ZWN0aW9uIGluZGVwZW5kZW50IG9mIHRoZSBpdGVyYXRvci4gKi8KJiM0MzsJCWlmIChtbV9wdHIpCiYjNDM7CQkJZmlsZV9wdHIgPSBtbV9wdHItJmd0O2V4ZV9maWxlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoZmlsZV9wdHIpCiYjNDM7CQlyZXR1cm4gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDsKJiM0MzsJdTMyIG1vZGUgPSAwOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAodm1hX3B0cikgewomIzQzOwkJbW1fcHRyID0gdm1hX3B0ci0mZ3Q7dm1fbW07CiYjNDM7CQlpZiAobW1fcHRyKQomIzQzOwkJCWZpbGVfcHRyID0gbW1fcHRyLSZndDtleGVfZmlsZTsKJiM0MzsJfQomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKGZpbGVfcHRyKQomIzQzOwkJbW9kZSA9IGZpbGVfcHRyLSZndDtmX21vZGU7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gbW9kZTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eCkKQEAgLTY2LDYgJiM0MzszNTgsNDYgQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25ldygmYW1wO3Rhc2tfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CWlmICghdGFza19wdHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25ldygmYW1wO3Rhc2tfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJaWYgKCF0YXNrX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJYnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQogaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGluIHRoZSBrZXJuZWwgcmVwby4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MsIGJ1dCBsZXQmIzM5O3MgdGFrZSBhIG1ldGhvZGljYWwgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgKndoYXQqIGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgY2hhbmdlLiBSZWFkaW5nIHRoZSBkaWZmIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBwcm92aWRlZCBpcyBjcnVjaWFsLiBJdCYjMzk7cyBzZWNvbmQgbmF0dXJlIGZvciBtZSB0byBzdGFydCBieSBjaGVja2luZyB0aGUgbW9kaWZpZWQgZmlsZXMsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUga2VybmVsLgoKQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jYC4gVGhlIGZhY3QgdGhhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaXRzIGhlYWRlciBhcmUgbW9kaWZpZWQgdGVsbHMgbWUgdGhpcyBpcyBjb3JlIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGltcG9ydGFudCwgYXMgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgZ2F0ZWtlZXBlciBmb3IgYW55IEJQRiBwcm9ncmFtIGxvYWRlZCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgaGFuZGxlcyBvcGVyYXRpb25zIGxpa2UgYEJQRl9QUk9HX0xPQURgLiBBbnkgZXJyb3IgaGVyZSBpcyBhbXBsaWZpZWQgYXMgdGhlIGVudGlyZSBrZXJuZWwgc2VjdXJpdHkgaXMgYWZmZWN0ZWQuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gcmVhZCB0aGUgcGF0Y2ggaW4gZGV0YWlsIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB0aGUgcGF0Y2ggYWZmZWN0cyB0aGVzZSBmdW5jdGlvbnM6CgoxLiAgYHVwZGF0ZV9yZWZfb2JqX2lkKClgIGFuZCBgdXBkYXRlX3JlZl9vYmooKWAKMi4gIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcigpYAozLiAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzKClgCjQuICBgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKClgIChhIG5ldyBmdW5jdGlvbiAtIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8pCjUuICBgcmVsZWFzZV9yZWZlcmVuY2UoKWAKNi4gIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoKWAgKGFub3RoZXIgbmV3IGZ1bmN0aW9uKQo3LiAgYGNoZWNrX2tmdW5jX2FyZ3MoKWAKOC4gIGBjaGVja19rZnVuY19jYWxsKClgCgpTaW5jZSBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgQlBGIHZlcmlmaWVyLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgdGhlc2UgZnVuY3Rpb24gY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyYjMzk7IGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY29tYmluYXRpb24gdG8gZW5zdXJlIEkgaGF2ZSBmdWxsIGNvbnRleHQgYXJvdW5kIHRoZXNlIGNoYW5nZXMgdG8gZWZmZWN0aXZlbHkgYXNzZXNzIHRoZWlyIGltcGFjdCBhbmQgY29ycmVjdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTk1NTg9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU3MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTcxOnN0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU3Mi17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzODEzPXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDU3LVx0ICAgICEoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCBcdTAwMjZtZXRhKS1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDU4Olx0XHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDU5LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTQ1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBuZWVkcyB0byBiZSBsb29rZWQgYXQsIHRoaW5raW5nIGFzIGlmIEkgYW0gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkJQRiBWZXJpZmllciAmYW1wOyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIHZlcmlmaWVyJiMzOTtzIGludGVybmFscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlICpjYWxsZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYEJQRl9TWVNDQUxMYCB3aGljaCBpcyBjcml0aWNhbCBmb3Igc3lzdGVtIGNhbGwgaW50ZWdyYXRpb24sIGBCUEZfSklUYCB3aGljaCBpcyB2aXRhbCBmb3IgcGVyZm9ybWFuY2UsIG9yIGBCVEZgIHdoaWNoIGNoYW5nZXMgaG93IGRhdGEgaXMgdmFsaWRhdGVkLiBUaGVzZSBjb25maWcgb3B0aW9ucyBkcmFzdGljYWxseSBhZmZlY3Qgd2hhdCYjMzk7cyBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSB2ZXJpZmllciYjMzk7cyB1c2FnZSBhbmQgbWFwIG91dCB0aGVzZSBkZXBlbmRlbmNpZXMuCgpCZXlvbmQgdGhlIGNvZGUgaXRzZWxmLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIGJ1aWx0LiBUaGF0IG1lYW5zIGEgcXVpY2sgY2hlY2sgb2YgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIHZlcmlmaWVyIGNvZGUgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gQW5kLCBvZiBjb3Vyc2UsIGEgbG9vayBhdCBga2VybmVsL2JwZi9LY29uZmlnYC4gSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRpcmVjdGx5IGFmZmVjdCB0aGUgdmVyaWZpZXImIzM5O3MgYmVoYXZpb3IgYW5kIHRoZSBmZWF0dXJlcyBpdCBzdXBwb3J0cy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0byBlbmFibGUgb3IgZGlzYWJsZSBmZWF0dXJlcyBiYXNlZCBvbiByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTUtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNy1cdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTU5NjQ9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi9idGYuYy01OTgwLVxua2VybmVsL2JwZi9idGYuYzo1OTgxOlx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxua2VybmVsL2JwZi9idGYuYy01OTgyLVx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI3LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dyb3VwX2Rldl9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDEtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0My1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHN5c2N0bF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY0LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY2LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dfc29ja29wdF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NzQ2PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OC1cdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0OTpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXHUwMDNlb3BzO1xua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzUtLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cbmtlcm5lbC9icGYvaGVscGVycy5jLTM3LSAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjQ3OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zeXNjYWxsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDgtXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEwLVx0Lypcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTItXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3LS8qIGR1bW15IF9vcHMuIFRoZSB2ZXJpZmllciB3aWxsIG9wZXJhdGUgb24gdGFyZ2V0IHByb2dyYW0mIzM5O3Mgb3BzLiAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2V4dGVuc2lvbl92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEtI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpIFxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI6XHRbX2lkXSA9IFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzLSNkZWZpbmUgQlBGX01BUF9UWVBFKF9pZCwgX29wcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI4NT1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI5Ni0gKiBGb3IgdHJhZGl0aW9uYWwgUFRSX1RPX01BUF9WQUxVRSBvciBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DLCB0aGUgdmVyaWZpZXJcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3Mjk3OiAqIGNsZWFycyByZWctXHUwMDNlaWQgYWZ0ZXIgdmFsdWVfb3JfbnVsbC1cdTAwM2V2YWx1ZSB0cmFuc2l0aW9uLCBzaW5jZSB0aGUgdmVyaWZpZXIgb25seVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyOTgtICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24mIzM5O3QgY2FyZVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDYwOD1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3ODItXHRcdFx0XHRlbnYsIFwmIzM0O1RoaXMgb3BlcmF0aW9uIHN1YnRyYWN0cyBwb2ludGVyIHJlZ2lzdGVyIFIlZCBmcm9tIHNjYWxhciByZWdpc3RlciBSJWQuIFwmIzM0O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NzgzOlx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3ODQtXHRcdFx0XHRwdHJfcmVnbm8sIGRzdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzMwPWJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc5NS0gKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Nzk2OiAqIC0gaWYgc28sIGFuZCBpZiB2ZXJpZmllciBvciBjdXJyZW50IEpJVCBpbmxpbmVzIHRoZSBjYWxsIHRvIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Nzk3LSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc3Nz1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODk0LVx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODk1Olx0ZW52LVx1MDAzZW9wcyA9IHN0X29wcy1cdTAwM2V2ZXJpZmllcl9vcHM7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4OTYtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNTI4PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDU2Ny1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1Njg6XHRcdGVudi1cdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW3RndF9wcm9nLVx1MDAzZXR5cGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTY5LVx0XHRwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMjAwPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIxMC1cdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTIxMTpcdGlmIChBUlJBWV9TSVpFKGJwZl92ZXJpZmllcl9vcHMpID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMTItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIyMi1cdGVudi1cdTAwM2Vwcm9nID0gKnByb2c7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyMjM6XHRlbnYtXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXHUwMDNlcHJvZy1cdTAwM2V0eXBlXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIyNC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMzEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyMzI6XHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMzMtXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicGZfY2hlY2tgLCBhcyB0aGF0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGFjY29yZGluZyB0byBgdmVyaWZpZXIuY2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgYXQgYGJwZl9jaGVja2AgaXRzZWxmIG9yIHRoZSBmdW5jdGlvbnMgdGhhdCBpdCBjYWxscyBhbmQgd2hpY2ggYXJlIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gVGhlIGRpZmYgaW5kaWNhdGVzIHRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5OiBgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzYCwgYGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbmAsIGByZWxlYXNlX3JlZmVyZW5jZWAsIGBjaGVja19rZnVuY19jYWxsYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgLCBhbmQgYHVwZGF0ZV9yZWZfb2JqX2lkYCAvIGB1cGRhdGVfcmVmX29iamAuIFRoYXQmIzM5O3MgYSBkZWNlbnQtc2l6ZWQgY2h1bmsgb2YgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBpdCBzZWVtcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGNoYW5nZSwgSSYjMzk7bGwgbmVlZCB0byBwb3JlIG92ZXIgdGhvc2UgZnVuY3Rpb25zLCBhcyB0aGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggQlBGIHZlcmlmaWVycy4gVG8gZ2V0IHN0YXJ0ZWQsIEkgd2lsbCBmb2N1cyBvbiBsaW5lcyAxNDA0NSB0byAxNDE4MCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgdGhlIGFjdHVhbCBjb2RlIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDA0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDA0NTpcdFxuMTQwNDY6XHRcdFx0LyogSW4gdGhlIGNhc2Ugb2YgdGhlIGRlZmF1bHQgY2FsbGJhY2ssIHRoZSBjb29raWUgdmFsdWUgcGFzc2VkXG4xNDA0NzpcdFx0XHQgKiB0byBicGZfdGhyb3cgYmVjb21lcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcm9ncmFtLlxuMTQwNDg6XHRcdFx0ICovXG4xNDA0OTpcdFx0XHRpZiAoIWVudi1cdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZykge1xuMTQwNTA6XHRcdFx0XHRlcnIgPSBjaGVja19yZXR1cm5fY29kZShlbnYsIEJQRl9SRUdfMSwgXCYjMzQ7UjFcJiMzNDspO1xuMTQwNTE6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTQwNTI6XHRcdFx0XHRcdHJldHVybiBlcnI7XG4xNDA1MzpcdFx0XHR9XG4xNDA1NDpcdFx0fVxuMTQwNTU6XHRcbjE0MDU2Olx0XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjZcbjE0MDU3Olx0XHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIFx1MDAyNm1ldGEpLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpKSB7XG4xNDA1ODpcdFx0XHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xuMTQwNTk6XHRcdFx0aWYgKGVycilcbjE0MDYwOlx0XHRcdFx0cmV0dXJuIGVycjtcbjE0MDYxOlx0XHR9XG4xNDA2MjpcdFxuMTQwNjM6XHRcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbjE0MDY0Olx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4xNDA2NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG4xNDA2NjpcdFx0XHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XG4xNDA2NzpcdFxuMTQwNjg6XHRcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tyZWdub10pO1xuMTQwNjk6XHRcdH1cbjE0MDcwOlx0XHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbjE0MDcxOlx0XG4xNDA3MjpcdFx0LyogQ2hlY2sgcmV0dXJuIHR5cGUgKi9cbjE0MDczOlx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIG1ldGEuZnVuY19wcm90by1cdTAwM2V0eXBlLCBOVUxMKTtcbjE0MDc0Olx0XG4xNDA3NTpcdFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zdHJ1Y3RfcHRyKG1ldGEuYnRmLCB0KSkge1xuMTQwNzY6XHRcdFx0aWYgKG1ldGEuYnRmICE9IGJ0Zl92bWxpbnV4IHx8XG4xNDA3NzpcdFx0XHQgICAgKCFpc19icGZfb2JqX25ld19rZnVuYyhtZXRhLmZ1bmNfaWQpIFx1MDAyNlx1MDAyNlxuMTQwNzg6XHRcdFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXHUwMDI2XHUwMDI2XG4xNDA3OTpcdFx0XHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xuMTQwODA6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7YWNxdWlyZSBrZXJuZWwgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIFBUUl9UT19CVEZfSURcXG5cJiMzNDspO1xuMTQwODE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MDgyOlx0XHRcdH1cbjE0MDgzOlx0XHR9XG4xNDA4NDpcdFxuMTQwODU6XHRcdGlmIChidGZfdHlwZV9pc19zY2FsYXIodCkpIHtcbjE0MDg2Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xuMTQwODc6XHRcdFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFx1MDAyNlx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbjE0MDg4Olx0XHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbjE0MDg5Olx0XHRcdFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcbjE0MDkwOlx0XHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuMTQwOTE6XHRcdFx0cHRyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZwdHJfdHlwZV9pZCk7XG4xNDA5MjpcdFx0XHRlcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XG4xNDA5MzpcdFx0XHRpZiAoZXJyKSB7XG4xNDA5NDpcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBsb2dpYyBwcm9iYWJseSBoYXNuJiMzOTt0IGJlZW4gZHJhc3RpY2FsbHkgYWx0ZXJlZCwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2Ugb2YgYW55IHR3ZWFrcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHJlYWQgYXJvdW5kIGxpbmUgOTU2MC4gSSB3YW50IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGF0IHNwZWNpZmljIHJlZ2lvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNoYW5nZXMsIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgYW5kIHdoeSB0aGV5IHdlcmUgbWFkZS4gVGhpcyB0YXJnZXRlZCBhcHByb2FjaCBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjb2RlIHVwZGF0ZXMgaW4gdGhpcyBmaWxlLCBzbyBJJiMzOTttIGhvcGluZyBJIGNhbiBnZXQgYSBxdWljayBncmFzcCBvZiB0aGUgbW9kaWZpY2F0aW9uIHRoYXQgdG9vayBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk1NTU6XHRcdHJldHVybiAwO1xuOTU1NjpcdH1cbjk1NTc6XHRcbjk1NTg6XHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuOTU1OTpcdHtcbjk1NjA6XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqdW51c2VkO1xuOTU2MTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjk1NjI6XHRcbjk1NjM6XHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoe1xuOTU2NDpcdFx0XHRpZiAodHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpIHtcbjk1NjU6XHRcdFx0XHRicGZfZGlhZ19yZWNvcmRfc2NydWIoZW52LCByZWcsIEJQRl9ESUFHX01PRF9OT05fT1dOX1JFRik7XG45NTY2Olx0XHRcdFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XG45NTY3Olx0XHRcdH1cbjk1Njg6XHRcdH0pKTtcbjk1Njk6XHR9XG45NTcwOlx0XG45NTcxOlx0c3RhdGljIGludCBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIHBhcmVudF9pZClcbjk1NzI6XHR7XG45NTczOlx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDtcbjk1NzQ6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG45NTc1Olx0XHRpbnQgZXJyO1xuOTU3NjpcdFxuOTU3NzpcdFx0aWYgKFdBUk5fT05fT05DRSghcGFyZW50X2lkKSlcbjk1Nzg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG45NTc5Olx0XG45NTgwOlx0XHRlcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBwYXJlbnRfaWQpO1xuOTU4MTpcdFx0aWYgKGVycilcbjk1ODI6XHRcdFx0cmV0dXJuIGVycjtcbjk1ODM6XHRcbjk1ODQ6XHRcdC8qXG45NTg1Olx0XHQgKiBTdHJ1Y3QgaXRlcmF0b3JzIGNhbiByZWxlYXNlIHRoZSBwcmV2aW91cyBlbGVtZW50IG9uIGVhY2ggbmV4dCBjYWxsLlxuOTU4NjpcdFx0ICogUFRSX1RPX01FTSBpdGVyYXRvciByZXN1bHRzIHVzZSBzdG9yYWdlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBkZXN0cm95LlxuOTU4NzpcdFx0ICovXG45NTg4Olx0XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCB1bnVzZWQsIHJlZywgKHtcbjk1ODk6XHRcdFx0aWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCB8fCByZWctXHUwMDNlcGFyZW50X2lkICE9IHBhcmVudF9pZClcbjk1OTA6XHRcdFx0XHRjb250aW51ZTtcbjk1OTE6XHRcdFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpO1xuOTU5MjpcdFx0XHRtYXJrX3JlZ19pbnZhbGlkKGVudiwgcmVnKTtcbjk1OTM6XHRcdH0pKTtcbjk1OTQ6XHRcbjk1OTU6XHRcdHJldHVybiAwO1xuOTU5NjpcdH1cbjk1OTc6XHRcbjk1OTg6XHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuOTU5OTpcdHtcbjk2MDA6XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuOTYwMTpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbjk2MDI6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG45NjAzOlx0XHR1MzIgY2xlYXJfbWFzayA9ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfSVRFUik7XG45NjA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTE1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBFeGNlbGxlbnQsIHRoYXQmIzM5O3MgYSBrZXkgc3Vic3lzdGVtLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgdG90YWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBzZXR1cHMgdGhyb3VnaCB0aGUgYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCBzeXNjYWxsLiBUaGF0JiMzOTtzIGEgaHVnZSBwb3NpdGl2ZS4KCk5vdywgZG9lcyBpdCBhY3R1YWxseSAqbW9kaWZ5KiBjb3JlIGxvZ2ljIG9yIGludHJvZHVjZSBuZXcgcnVudGltZSBhc3NlcnRpb25zPyBBYnNvbHV0ZWx5LiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgdG8gaG93IGl0ZXJhdG9yLW93bmVkIGBQVFJfVE9fQlRGX0lEYCBvYmplY3RzIOKAkyB0cnVzdGVkIEJURiBwb2ludGVycyBmcm9tIGl0ZXJhdG9ycyBsaWtlIGBicGZfaXRlcl90YXNrX3ZtYV9uZXh0YCDigJMgYXJlIGhhbmRsZWQuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggbWVtb3J5IGxpZmV0aW1lIGFuZCBwb2ludGVyIHZhbGlkYXRpb24gd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIGV4cGxvaXRhYmxlIGJ1Z3MuIFNwZWNpZmljYWxseSwgdGhlIGFkZGVkIGBXQVJOX09OX09OQ0UoIXBhcmVudF9pZClgIGNhbGwgaW4gYGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc2AgaXMgYSBodWdlIHJlZCBmbGFnIHRoYXQgaXQgaXMgY2hlY2tpbmcgZm9yIHByZXZpb3VzbHkgdW5jYXVnaHQgY29uZGl0aW9ucy4gQmV5b25kIHRoaXMsIHdlIGFyZSBsb29raW5nIGF0IGFkZGVkIHJlZmVyZW5jZSBsZWFrIGNoZWNraW5nIChgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYCksIGludmFsaWRhdGlvbiBvbiBpdGVyYXRvciBhZHZhbmNlIGluIGBjaGVja19rZnVuY19jYWxsYCwgcHJvcGFnYXRpb24gb2YgYHBhcmVudF9pZGAgZm9yIHRydXN0ZWQgcG9pbnRlcnMgaW4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgdXBkYXRlcyB0byBkeW5wdHIgaGFuZGxpbmcgd2l0aCBgYnBmX2R5bnB0cl9mcm9tX2ZpbGVgLCBhbmQgZXJyb3IgcHJvcGFnYXRpb24gZml4ZXMuIFRoZXNlIGFsbCBwb2ludCB0byBhIGRlZXBlciBkaXZlIGludG8gcG90ZW50aWFsIGlzc3VlcyBhbmQgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIHNjcmVhbXMgJiMzNDt2dWxuZXJhYmlsaXR5IGh1bnRpbmcgZ3JvdW5kJiMzNDsuCgpDb25zaWRlcmluZyB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYSwgaXQmIzM5O3MgYSBuby1icmFpbmVyLiBUaGlzIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSAoQlBGKSwgYW5kIGludHJvZHVjZXMgbmV3IGNoZWNrcyBhbmQgbG9naWMgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb2ludGVyIGhhbmRsaW5nLiBCYXNlZCBvbiB0aGUgY3JpdGVyaW9uLCB0aGlzIHBhdGNoIGlzICpkZWZpbml0ZWx5KiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOZXh0IHN0ZXAgaXMgZmlndXJpbmcgb3V0IHRoZSByZXF1aXJlZCBgRW5hYmxlQ29uZmlnc2AuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgS2NvbmZpZyBmbGFncyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgQlBGIHZlcmlmaWVyLCBpdGVyYXRvcnMsIGFuZCBrZnVuY3MuIFdlJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIGFuZCBgaW5pdC9LY29uZmlnYCB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQlBGX1NZU0NBTExgIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyB3aWxsIG1ha2UgY2VydGFpbiB0aGF0IG91ciBmdXp6aW5nIGVudmlyb25tZW50IGlzIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCB0byB0cmlnZ2VyIHRoZSBjb2RlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlcnk6CgoqKkxvY2F0aW5nIHRoZSBCUEZfU1lTQ0FMTCBNYWNybyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgQlBGX1NZU0NBTExgLiBTaW5jZSB0aGlzIGlzIG9idmlvdXNseSBhIG1hY3JvIHJlbGF0ZWQgdG8gQmVya2VsZXkgUGFja2V0IEZpbHRlciwgSSYjMzk7bSBnb2luZyB0byBhc3N1bWUgaXQmIzM5O3MgaW52b2x2ZWQgd2l0aCBzeXN0ZW0gY2FsbHMgYW5kIGtlcm5lbC1sZXZlbCBpbnRlcmFjdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUga2VybmVsIGhlYWRlcnMsIHByb2JhYmx5IHNvbWV0aGluZyByZWxhdGVkIHRvIEJQRiBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgdGhvc2UgaGVhZGVyIGZpbGVzIGFyZSB1c3VhbGx5IGxvY2F0ZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHR5cGljYWxseSB1bmRlciBgL3Vzci9zcmMvbGludXgvaW5jbHVkZS9gLCBvciBzaW1pbGFyLCBkZXBlbmRpbmcgb24gdGhlIGRpc3RyaWJ1dGlvbiBhbmQga2VybmVsIHZlcnNpb24uIEdpdmVuIHRoZSB0ZXJtLCBJJiMzOTtsbCBiZSBsb29raW5nIGluIHRoZSBoZWFkZXIgZmlsZXMgZm9yIEJQRiBkZWZpbml0aW9ucywgd2hpY2ggY291bGQgYmUgaW4gdGhlIGdlbmVyaWMgQlBGIGhlYWRlcnMsIG9yIGV2ZW4gcmVsYXRlZCB0byBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgL3Vzci9zcmMvbGludXgvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCBvciBwb3RlbnRpYWxseSBgL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9icGYuaGAuIEkmIzM5O2xsIGFsc28gd2FudCB0byBrZWVwIGluIG1pbmQgdGhhdCBrZXJuZWwgdmVyc2lvbnMgY2FuIHZhcnksIHNvIHRoZSBleGFjdCBwYXRoIG9yIGNvbnRlbnQgbWlnaHQgYmUgc2xpZ2h0bHkgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGhlYWRlciBmaWxlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgS2VybmVsIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEkgc3BlY2lmaWNhbGx5IHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSAyNS4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQlBGIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgc3dpdGNoZXMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoZSBCUEYgc3Vic3lzdGVtLCBhbmQgcG90ZW50aWFsbHkgc29tZSBnZW5lcmFsIGZlYXR1cmUgZmxhZ3MuIExpbmUgMjUgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBpcyBleHBvc2VkIHRvIGtlcm5lbCBjb25maWcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxuICAyMTpcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG4gIDIyOlx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbiAgMjM6XHRcdGJvb2xcbiAgMjQ6XHRcbiAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDU6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDQ2Olx0XHRzZWxlY3QgRVhFQ01FTVxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDQ5Olx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1MDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDUxOlx0XHQgIHByb2dyYW1zLlxuICA1MjpcdFxuICA1MzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTQ6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU1Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNTY6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA1OTpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY0OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQlRGIGFuZCBJdHMgRGVwZW5kZW5jaWVzKioKCk9rYXksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBCVEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgVHlwZSBGb3JtYXQpLCBrZnVuY3MsIGFuZCBpdGVyYXRvcnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGBERUJVR19JTkZPX0JURmAgb3B0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IG1pZ2h0IGlsbHVtaW5hdGUgd2hldGhlciBCVEYgaXMgYWN0dWFsbHkgYSBwcmVyZXF1aXNpdGUgZm9yIG9yIGludGVydHdpbmVkIHdpdGggdGhlIGZ1bmN0aW9uYWxpdHkgb2Yga2Z1bmNzIGFuZCBpdGVyYXRvcnMuIFRoZSBLY29uZmlnIHNob3VsZCBwcm92aWRlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb21tZW50cy4gVGhlIGdvYWwgaXMgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYXNwZWN0cyBvZiBCVEYgYXJlIHJlcXVpcmVkIG9yIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgdXNlIG9mIHRoZXNlIG90aGVyIGZlYXR1cmVzLCB1bHRpbWF0ZWx5IGVuc3VyaW5nIGNvcnJlY3QgZmVhdHVyZSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4tLVxubGliL0tjb25maWcuZGVidWctNDI3LVxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAyMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgQlBGIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBjb25maWd1cmF0aW9ucyDigJMgdGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIEkmIzM5O20gZGVhbGluZyB3aXRoIEJQRi1yZWxhdGVkIGtlcm5lbCBmZWF0dXJlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgc2V0IHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZS4KCkJleW9uZCB0aG9zZSwgSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQuIEFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcga2Z1bmNzIG9yIGl0ZXJhdG9ycz8gSSBrbm93IGhvdyB0aGVzZSBzeXN0ZW1zIHRlbmQgdG8gaW50ZXJhY3QsIHNvIEkmIzM5O2xsIHdhbnQgdG8gZmluZCB0aG9zZSBkZXBlbmRlbmNpZXMgZWFybHkuCgpUbyBkaWcgZGVlcGVyLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCBwYXRoIG5vdyBpcyB0byBwZXJmb3JtIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBzcGVjaWFsX2tmdW5jX2xpc3RgIG9yIGBicGZfaXRlcl9gIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoYXQgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB3aGljaCBjb25maWdzICp0aGV5KiBkZXBlbmQgb24sIGFuZCBpbiB0dXJuLCBnaXZlIG1lIGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLiBUaGlzIHNob3VsZCByYXBpZGx5IHJldmVhbCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBtYXkgaGF2ZSBtaXNzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BlY2lhbF9rZnVuY19saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTExNzMyPWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4MDEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MDI6QlRGX0lEX0xJU1Qoc3BlY2lhbF9rZnVuY19saXN0KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAzLUJURl9JRChmdW5jLCBicGZfb2JqX25ld19pbXBsKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg5NT1zdGF0aWMgYm9vbCBpc19icGZfb2JqX25ld19rZnVuYyh1MzIgZnVuY19pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTg5Ni17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4OTc6XHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX29ial9uZXddIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4OTg6XHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX29ial9uZXdfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4OTktfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwMT1zdGF0aWMgYm9vbCBpc19icGZfcGVyY3B1X29ial9uZXdfa2Z1bmModTMyIGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MDIte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTAzOlx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9wZXJjcHVfb2JqX25ld10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkwNDpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcGVyY3B1X29ial9uZXdfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MDUtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwNz1zdGF0aWMgYm9vbCBpc19icGZfb2JqX2Ryb3Bfa2Z1bmModTMyIGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MDgte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTA5Olx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9vYmpfZHJvcF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxMDpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfb2JqX2Ryb3BfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTEtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkxMz1zdGF0aWMgYm9vbCBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTE0LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxNTpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcGVyY3B1X29ial9kcm9wXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTE2Olx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkxOT1zdGF0aWMgYm9vbCBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyh1MzIgZnVuY19pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyMC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MjE6XHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MjI6XHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MjMtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkyNT1zdGF0aWMgYm9vbCBpc19icGZfbGlzdF9wdXNoX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTI2LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkyNzpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wdXNoX2Zyb250XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTI4Olx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X3B1c2hfZnJvbnRfaW1wbF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkyOTpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wdXNoX2JhY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MzA6XHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfcHVzaF9iYWNrX2ltcGxdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MzE6XHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYWRkXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzMi19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTM0PXN0YXRpYyBib29sIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTM1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkzNjpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX2FkZF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkzNzpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX2FkZF9pbXBsXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzOC19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTQwPXN0YXRpYyBib29sIGlzX3Rhc2tfd29ya19hZGRfa2Z1bmModTMyIGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NDEte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTQyOlx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTQzOlx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk0NC19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTU0PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9yY3VfcmVhZF9sb2NrKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk1NS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NTY6XHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmN1X3JlYWRfbG9ja107XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NTctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk1OT1zdGF0aWMgYm9vbCBpc19rZnVuY19icGZfcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2MC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NjE6XHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmN1X3JlYWRfdW5sb2NrXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2Mi19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTY0PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9wcmVlbXB0X2Rpc2FibGUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTY1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk2NjpcdHJldHVybiBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9wcmVlbXB0X2Rpc2FibGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTY3LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5Njk9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYnBmX3ByZWVtcHRfZW5hYmxlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3MC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NzE6XHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcHJlZW1wdF9lbmFibGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTcyLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NzQ9Ym9vbCBicGZfaXNfa2Z1bmNfcGt0X2NoYW5naW5nKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3NS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NzY6XHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NzctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk4MD1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjAxNi1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDE3Olx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIwMTg6XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIwMTk6XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDIwLVx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjIyND1zdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIyMjktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIyMzA6XHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbG9jYWxfaXJxX3NhdmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIyMzE6XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjMyLVx0XHRpcnFfc2F2ZSA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIyMzM6XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjM0LVx0XHRcdGtmdW5jX2NsYXNzID0gSVJRX0xPQ0tfS0ZVTkM7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIyMzU6XHR9IGVsc2UgaWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xvY2FsX2lycV9yZXN0b3JlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM2Olx0XHQgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZV0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjIzNy1cdFx0aXJxX3NhdmUgPSBmYWxzZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzODpcdFx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjIzOS1cdFx0XHRrZnVuY19jbGFzcyA9IElSUV9MT0NLX0tGVU5DO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjQwOD1zdGF0aWMgYm9vbCBpc19icGZfbGlzdF9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0MTAtXHRyZXR1cm4gaXNfYnBmX2xpc3RfcHVzaF9rZnVuYyhidGZfaWQpIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTE6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wb3BfZnJvbnRdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTI6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wb3BfYmFja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxMzpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2RlbF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxNDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2Zyb250XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDE1Olx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYmFja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxNjpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2lzX2ZpcnN0XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDE3Olx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfaXNfbGFzdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxODpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2VtcHR5XTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQxOS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDIxPXN0YXRpYyBib29sIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDIzLVx0cmV0dXJuIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKGJ0Zl9pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyNDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcmVtb3ZlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDI1Olx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JidHJlZV9maXJzdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyNjpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcm9vdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyNzpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfbGVmdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyODpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcmlnaHRdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDI5LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI0MzE9c3RhdGljIGJvb2wgaXNfYnBmX3Jlc19zcGluX2xvY2tfa2Z1bmModTMyIGJ0Zl9pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQzMi17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MzM6XHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQzNDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MzU6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDM2Olx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQzNy19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDYyPWJvb2wgYnBmX2lzX3Rocm93X2tmdW5jKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0NjQtXHRyZXR1cm4gYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAwIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDY1Olx0ICAgICAgIGluc24tXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGhyb3ddO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDY2LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI0Njg9c3RhdGljIGJvb2wgaXNfYnBmX3dxX3NldF9jYWxsYmFja19rZnVuYyh1MzIgYnRmX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDY5LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQ3MDpcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl93cV9zZXRfY2FsbGJhY2tdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDcxLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI1MDk9c3RhdGljIGJvb2wgY2hlY2tfa2Z1bmNfaXNfZ3JhcGhfbm9kZV9hcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MTctXHRcdHJldCA9IGlzX2JwZl9saXN0X3B1c2hfa2Z1bmMoa2Z1bmNfYnRmX2lkKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTE4Olx0XHQgICAgICBrZnVuY19idGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2RlbF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUxOTpcdFx0ICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9pc19maXJzdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUyMDpcdFx0ICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9pc19sYXN0XTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUyMS1cdFx0YnJlYWs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTIzLVx0XHRyZXQgPSAoaXNfYnBmX3JidHJlZV9hZGRfa2Z1bmMoa2Z1bmNfYnRmX2lkKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTI0Olx0XHQgICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX3JlbW92ZV0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUyNTpcdFx0ICAgICAgIGtmdW5jX2J0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JidHJlZV9sZWZ0XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTI2Olx0XHQgICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX3JpZ2h0XSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MjctXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjcxMz1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjkzMDpcdFx0XHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkzMS1cdFx0XHRcdHJldCA9IGdldF9rZXJuX2N0eF9idGZfaWQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5ODYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5ODc6XHRcdFx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX3NrYl0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk4OC1cdFx0XHRcdGR5bnB0cl9hcmdfdHlwZSB8PSBEWU5QVFJfVFlQRV9TS0I7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5ODk6XHRcdFx0fSBlbHNlIGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV94ZHBdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5OTAtXHRcdFx0XHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfWERQO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTkxOlx0XHRcdH0gZWxzZSBpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fc2tiX21ldGFdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5OTItXHRcdFx0XHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfU0tCX01FVEE7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTM6XHRcdFx0fSBlbHNlIGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk0LVx0XHRcdFx0ZHlucHRyX2FyZ190eXBlIHw9IERZTlBUUl9UWVBFX0ZJTEU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTU6XHRcdFx0fSBlbHNlIGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZmlsZV9kaXNjYXJkXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk2LVx0XHRcdFx0ZHlucHRyX2FyZ190eXBlIHw9IERZTlBUUl9UWVBFX0ZJTEUgfCBPQkpfUkVMRUFTRTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk5NzpcdFx0XHR9IGVsc2UgaWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9jbG9uZV0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5OTgtXHRcdFx0XHQgICAoZHlucHRyX2FyZ190eXBlIFx1MDAyNiBNRU1fVU5JTklUKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzAxNS1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lURVI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMwMTY6XHRcdFx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfY3NzX3Rhc2tfbmV3XSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDE3LVx0XHRcdFx0aWYgKCFjaGVja19jc3NfdGFza19pdGVyX2FsbG93bGlzdChlbnYpKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU3LVx0XHRcdFx0aWYgKG1ldGEtXHUwMDNlYnRmID09IGJ0Zl92bWxpbnV4IFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTU4Olx0XHRcdFx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX2ZpbGVdIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU5LVx0XHRcdFx0ICAgIGkgPT0gMCBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXBhcmVudF9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0MDAtXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzQwMTpcdFx0XHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzQwMjpcdFx0XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQwMy1cdFx0XHRcdGZsYWdzIHw9IFBST0NFU1NfU1BJTl9MT0NLO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDA0Olx0XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0MDU6XHRcdFx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQwNi1cdFx0XHRcdGZsYWdzIHw9IFBST0NFU1NfTE9DS19JUlE7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNjQyPXN0YXRpYyBpbnQgY2hlY2tfc3BlY2lhbF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzQ3LVx0XHRtYXJrX3JlZ19ncmFwaF9ub2RlKHJlZ3MsIEJQRl9SRUdfMCwgXHUwMDI2ZmllbGQtXHUwMDNlZ3JhcGhfcm9vdCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3NDg6XHR9IGVsc2UgaWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NDktXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc1Mi1cdFx0cmVnc1tCUEZfUkVHXzBdLmJ0Zl9pZCA9IG1ldGEtXHUwMDNlcmV0X2J0Zl9pZDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc1MzpcdH0gZWxzZSBpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmRvbmx5X2Nhc3RdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NTQtXHRcdHJldF90ID0gYnRmX3R5cGVfYnlfaWQoZGVzY19idGYsIG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LnZhbHVlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NzItXHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc3MzpcdH0gZWxzZSBpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX3NsaWNlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzc0Olx0XHQgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfc2xpY2VfcmR3cl0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc3NS1cdFx0ZW51bSBicGZfdHlwZV9mbGFnIHR5cGVfZmxhZyA9IGdldF9keW5wdHJfdHlwZV9mbGFnKG1ldGEtXHUwMDNlZHlucHRyLnR5cGUpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc4OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc4OTpcdFx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9zbGljZV0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5MC1cdFx0XHRyZWdzW0JQRl9SRUdfMF0udHlwZSB8PSBNRU1fUkRPTkxZO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzgxMz1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1Ny1cdGlmICghaW5zbi1cdTAwM2VvZmYgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM4NTg6XHQgICAgKGluc24tXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg1OTpcdCAgICAgaW5zbi1cdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzODYwLVx0XHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpicmFuY2g7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzODgwLVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM4ODE6XHR9IGVsc2UgaWYgKCFpbnNuLVx1MDAzZW9mZiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX19fYnBmX3RyYXBdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4ODItXHRcdHZlcmJvc2UoZW52LCBcJiMzNDt1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDAzNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDAzODpcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl90aHJvd10pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDAzOS1cdFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnMoKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4Ni1cdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwODc6XHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwODg6XHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4OS1cdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcdFx0XHRcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxMTAtXHRcdFx0XHRcdG1ldGEucjBfcmRvbmx5ID0gZmFsc2U7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTQyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTQzOlx0XHRcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9nZXRfa21lbV9jYWNoZV0pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNDQtXHRcdFx0XHR0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MjMwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MjMxOlx0aWYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDIzMi1cdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlY2FsbF9zZXNzaW9uX2Nvb2tpZSA9IHRydWU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODA1PXN0YXRpYyBpbnQgc3BlY2lhbGl6ZV9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2MsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MjItXHRcdC8qIGZhbGxiYWNrIHRvIGRlZmF1bHQga2Z1bmMgd2hlbiBub3Qgc3VwcG9ydGVkIGJ5IG5ldGRldiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODIzOlx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fc2tiXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODI0LVx0XHRzZWVuX2RpcmVjdF93cml0ZSA9IGVudi1cdTAwM2VzZWVuX2RpcmVjdF93cml0ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MzMtXHRcdGVudi1cdTAwM2VzZWVuX2RpcmVjdF93cml0ZSA9IHNlZW5fZGlyZWN0X3dyaXRlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODM0Olx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2V0X2RlbnRyeV94YXR0cl0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgzNS1cdFx0aWYgKGJwZl9sc21faGFzX2RfaW5vZGVfbG9ja2VkKHByb2cpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODM2LVx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfc2V0X2RlbnRyeV94YXR0cl9sb2NrZWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4Mzc6XHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZW1vdmVfZGVudHJ5X3hhdHRyXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODM4LVx0XHRpZiAoYnBmX2xzbV9oYXNfZF9pbm9kZV9sb2NrZWQocHJvZykpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MzktXHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyX2xvY2tlZDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg0MDpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX2ZpbGVdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDEtXHRcdGlmICghZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zbGVlcGFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDItXHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9keW5wdHJfZnJvbV9maWxlX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg0MzpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODQ0LVx0XHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zbGVlcGFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDUtXHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODQ2Olx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg0Ny1cdFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg3MT1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk0OC1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NDk6XHRcdGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2FkZF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk1MC1cdFx0ICAgIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKGRlc2MtXHUwMDNlZnVuY19pZCkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjItXHRcdFx0XHRcdFx0bm9kZV9vZmZzZXRfcmVnLCBpbnNuLCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2MzpcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2NDpcdFx0ICAgZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmRvbmx5X2Nhc3RdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjUtXHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjYtXHRcdCpjbnQgPSAxO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTY3Olx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjgtXHRcdCAgIChlbnYtXHUwMDNlcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT04gfHxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5ODEtXHRcdCpjbnQgPSAzO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTgyOlx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5ODMtXHRcdCAgIChlbnYtXHUwMDNlcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT04gfHxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTktXHRcdCpjbnQgPSA2O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDAwOlx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMDEtXHRcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCBzdGFydCwgZW5kKTsgUjE9XHUwMDI2aXQsIFIyPXN0YXJ0LCBSMz1lbmQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMjMtXHRcdCpjbnQgPSBpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDI0Olx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXh0XSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDI1LVx0XHQvKiBpbmxpbmUgYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpOyBSMT1cdTAwMjZpdCwgcmV0dXJucyBcdTAwMjZzLVx1MDAzZWN1ciBvciBOVUxMICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDQwLVx0XHQqY250ID0gaTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTA0MTpcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA0Mi1cdFx0LyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBpcyBhIG5vLW9wOyBlbWl0IGEgbm9wIHRvIGRyb3AgdGhlIGNhbGwgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5MDEKCQkJCQkJCW91dHB1dDogMTk4CgkJCQkJCQl0aG91Z2h0czogNTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBWZXJpZmllciBGb2N1cyBTeW1ib2wgUmV2aWV3IGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0IGZvciB0aGUgQlBGIHZlcmlmaWVyIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3ZSYjMzk7cmUgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMg4oCTIHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSB0YXJnZXRpbmcgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQuIEJhc2VkIG9uIHRoZSBndWlkZWxpbmVzLCB3ZSAqZG9uJiMzOTt0KiB3YW50IHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucywgYWxsb2NhdG9ycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gV2UgKmRvKiB3YW50IHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIEFQSSBlbnRyeSBwb2ludHMuIEluIHRoaXMgY2FzZSwgdGhhdCBib2lscyBkb3duIHRvOgoKKiAgIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnNgCiogICBgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYAoqICAgYHJlbGVhc2VfcmVmZXJlbmNlYAoqICAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYAoqICAgYGNoZWNrX2tmdW5jX2NhbGxgCiogICBgY2hlY2tfa2Z1bmNfYXJnc2AKKiAgIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAKKiAgIGBicGZfY2hlY2tgCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgbW9kaWZpZWQgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gbWFrZSBzdXJlOgoKMS4gIGB1cGRhdGVfcmVmX29ial9pZGAgKHN0YXRpYykKMi4gIGB1cGRhdGVfcmVmX29iamAgKHN0YXRpYykKMy4gIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAgKHN0YXRpYykKNC4gIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgKHN0YXRpYykKNS4gIGBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW5gIChzdGF0aWMpCjYuICBgcmVsZWFzZV9yZWZlcmVuY2VgIChzdGF0aWMpCjcuICBgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzYCAoc3RhdGljKQo4LiAgYGNoZWNrX2tmdW5jX2FyZ3NgIChzdGF0aWMpCjkuICBgY2hlY2tfa2Z1bmNfY2FsbGAgKHN0YXRpYykKCkFuZCwgb2YgY291cnNlLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBpcyBgYnBmX2NoZWNrYC4KCkFscmlnaHQsIHRpbWUgZm9yIGEgZmluYWwgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggdGhlIHJlcXVpcmVtZW50czoKCiogICBgV29ydGhGdXp6aW5nYDogIFllcCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCiogICBgUmVhc29uaW5nYDogIEEgY29uY2lzZSBleHBsYW5hdGlvbiBpcyB0aGF0IHRoaXMgbW9kaWZpZXMgbGlmZXRpbWUgdHJhY2tpbmcsIGludmFsaWRhdGlvbiwgYW5kIGxlYWsgY2hlY2tpbmcgZm9yIGl0ZXJhdG9yLXJldHVybmVkIGBQVFJfVE9fQlRGX0lEYCByZWZlcmVuY2VzIGFuZCBkeW5hbWljIHBvaW50ZXJzIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLgoqICAgYEZvY3VzU3ltYm9sc2A6ICBUaGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBhYm92ZSBpbXBsZW1lbnRpbmcgdGhlIGNvcmUgbG9naWMsIHBsdXMgdGhlIGVudHJ5cG9pbnQuIENoZWNrIQoqICAgYEVuYWJsZUNvbmZpZ3NgOiAgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxsIGdvb2QuCgpFdmVyeXRoaW5nIGxvb2tzIGNvcnJlY3QgYW5kIHRob3JvdWdobHkgdmVyaWZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7aW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzJiMzNDssCiAgICAmIzM0O2NoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtyZWxlYXNlX3JlZmVyZW5jZSYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7dW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBmb3IgdHJhY2tpbmcgcmVmZXJlbmNlIGxpZmV0aW1lcywgcGFyZW50YWdlLCBhbmQgaW52YWxpZGF0aW9uIG9mIGl0ZXJhdG9yLW93bmVkIFBUUl9UT19CVEZfSUQgcG9pbnRlcnMgYW5kIGR5bnB0cnMgYWNyb3NzIGl0ZXJhdG9yIGFkdmFuY2UgYW5kIGRlc3Ryb3kgb3BlcmF0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHZlcmlmaWNhdGlvbiBvZiBlQlBGIHByb2dyYW1zIHZpYSBicGYoQlBGX1BST0dfTE9BRCkgYW5kIGludHJvZHVjZXMgbmV3IHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSBsZWFrIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7aW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzJiMzNDssCiAgICAmIzM0O2NoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtyZWxlYXNlX3JlZmVyZW5jZSYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7dW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBmb3IgdHJhY2tpbmcgcmVmZXJlbmNlIGxpZmV0aW1lcywgcGFyZW50YWdlLCBhbmQgaW52YWxpZGF0aW9uIG9mIGl0ZXJhdG9yLW93bmVkIFBUUl9UT19CVEZfSUQgcG9pbnRlcnMgYW5kIGR5bnB0cnMgYWNyb3NzIGl0ZXJhdG9yIGFkdmFuY2UgYW5kIGRlc3Ryb3kgb3BlcmF0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHZlcmlmaWNhdGlvbiBvZiBlQlBGIHByb2dyYW1zIHZpYSBicGYoQlBGX1BST0dfTE9BRCkgYW5kIGludHJvZHVjZXMgbmV3IHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSBsZWFrIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGlmZXRpbWUgdHJhY2tpbmcgZm9yIHRydXN0ZWQgcG9pbnRlcnMgcmV0dXJuZWQgYnkgc3RydWN0IGl0ZXJhdG9ycyAoZS5nLiwgYnBmX2l0ZXJfdGFza192bWEpIGJ5IGFzc29jaWF0aW5nIHRoZW0gd2l0aCBhIHBhcmVudF9pZCBhbmQgaW52YWxpZGF0aW5nIHRoZW0gdXBvbiBzdWJzZXF1ZW50IGl0ZXJhdG9yIHN0ZXBzIG9yIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgYW5kIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzIGluIEJQRiBwcm9ncmFtcy5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBwdXJlbHkgaW50ZXJuYWwgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWdpc3RlciBzdGF0ZSB0cmFja2luZywgYW5kIHNlbGZ0ZXN0cy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBtZWNoYW5pc21zLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcnVudGltZSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpdGVyYXRvciBidWdzIChzdWNoIGFzIFVBRikgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YThjNjM3NGMyZWQ4ZDliODc0YWYzMmEwODU2YjdjNWQ3MTk0ODQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDk6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi5hZTMwZGY2MjlkNWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE1MTgsOSAmIzQzOzE1MTgsOSBAQCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjIHsKIAogLyoKICAqIFRoZSBsYXN0IHNlZW4gcmVyZWZlcmVuY2VkIG9iamVjdDsgVXBkYXRlZCBieSB1cGRhdGVfcmVmX29iaigpIHdoZW4gYSByZWdpc3RlciByZWZlcnMgdG8gYQotICogcmVmZXJlbmNlZCBvYmplY3QuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nCi0gKiBhbGxvY2F0ZWQgbWVtb3J5IGRlcml2ZWQgZnJvbSByZWZlcmVuY2VkIG9iamVjdCBvciBjcmVhdGluZyBhIGR5bnB0ciB3aXRoIGEgcmVmZXJlbmNlZAotICogb2JqZWN0IGFzIHBhcmVudC4KJiM0MzsgKiByZWZlcmVuY2VkIG9iamVjdCBvciBhbm90aGVyIHZlcmlmaWVyLXRyYWNrZWQgbGlmZXRpbWUgYW5jaG9yLiBVc2VkIHdoZW4gdGhlIGhlbHBlciBvciBrZnVuYwomIzQzOyAqIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIGEgcmVmZXJlbmNlZCBvYmplY3QKJiM0MzsgKiBvciBjcmVhdGluZyBhIGR5bnB0ciB3aG9zZSBiYWNraW5nIG9iamVjdCBoYXMgYSB0cmFja2VkIGxpZmV0aW1lLgogICovCiBzdHJ1Y3QgcmVmX29ial9kZXNjIHsKIAl1MzIgaWQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWIwMTM5NTQxODJmMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMjM4LDEzICYjNDM7MjM4LDE4IEBAIHN0YXRpYyB2b2lkIGJwZl9tYXBfa2V5X3N0b3JlKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4LCB1NjQgc3RhdGUpCiAJCQkgICAgIChwb2lzb25lZCA/IEJQRl9NQVBfS0VZX1BPSVNPTiA6IDBVTEwpOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQomIzQzO3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqX2lkKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHUzMiBpZCwgdTMyIHBhcmVudF9pZCkKIHsKLQlyZWZfb2JqLSZndDtpZCA9IHJlZy0mZ3Q7aWQ7Ci0JcmVmX29iai0mZ3Q7cGFyZW50X2lkID0gcmVnLSZndDtwYXJlbnRfaWQ7CiYjNDM7CXJlZl9vYmotJmd0O2lkID0gaWQ7CiYjNDM7CXJlZl9vYmotJmd0O3BhcmVudF9pZCA9IHBhcmVudF9pZDsKIAlyZWZfb2JqLSZndDtjbnQmIzQzOyYjNDM7OwogfQogCiYjNDM7c3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmooc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0Mzt7CiYjNDM7CXVwZGF0ZV9yZWZfb2JqX2lkKHJlZl9vYmosIHJlZy0mZ3Q7aWQsIHJlZy0mZ3Q7cGFyZW50X2lkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHZhbGlkYXRlX3JlZl9vYmooc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaikKIHsKIAlpZiAocmVmX29iai0mZ3Q7Y250ICZndDsgMSkgewpAQCAtOTc3LDcgJiM0Mzs5ODIsNyBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKQogewogCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7Ci0JaW50IHNwaSwgaSwgajsKJiM0MzsJaW50IHNwaSwgaSwgaiwgZXJyOwogCiAJc3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7CiAJaWYgKHNwaSAmbHQ7IDApCkBAIC05ODcsOCAmIzQzOzk5MiwxMSBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSAmYW1wO3N0YXRlLSZndDtzdGFja1tzcGkgLSBpXTsKIAkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gJmFtcDtzbG90LSZndDtzcGlsbGVkX3B0cjsKIAotCQlpZiAoaSA9PSAwKQotCQkJV0FSTl9PTl9PTkNFKHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3QtJmd0O2lkKSk7CiYjNDM7CQlpZiAoaSA9PSAwKSB7CiYjNDM7CQkJZXJyID0gcmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC0mZ3Q7aWQpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpOwogCkBAIC02MTQwLDkgJiM0Mzs2MTQ4LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAl9CiAKIAlpZiAoYXR5cGUgPT0gQlBGX1JFQUQgJmFtcDsmYW1wOyB2YWx1ZV9yZWdubyAmZ3Q7PSAwKSB7Ci0JCXJldCA9IG1hcmtfYnRmX2xkX3JlZyhlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLCByZXQsIHJlZy0mZ3Q7YnRmLCBidGZfaWQsIGZsYWcpOwomIzQzOwkJZW51bSBicGZfcmVnX3R5cGUgcmVnX3R5cGUgPSByZXQ7CiYjNDM7CQl1MzIgcGFyZW50X2lkID0gcmVnLSZndDtwYXJlbnRfaWQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmVnX3R5cGUsCiYjNDM7CQkJCSAgICAgIHJlZy0mZ3Q7YnRmLCBidGZfaWQsIGZsYWcpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgJmFtcDsgUFRSX1RSVVNURUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgJmFtcDsgKE1FTV9SQ1UgfCBNRU1fUEVSQ1BVIHwgTUVNX1VTRVIpKSkKJiM0MzsJCQlyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05NDU2LDYgJiM0Mzs5NDcxLDI0IEBAIHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGlkbWFwLSZndDttYXBbLS1pZG1hcC0mZ3Q7Y250XS5vbGQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcGFyZW50X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LSZndDtjdXJfc3RhdGU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdnN0YXRlLSZndDthY3F1aXJlZF9yZWZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHZzdGF0ZS0mZ3Q7cmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICh2c3RhdGUtJmd0O3JlZnNbaV0ucGFyZW50X2lkICE9IHBhcmVudF9pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXZlcmJvc2UoZW52LCAmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXG4mIzM0OywKJiM0MzsJCQl2c3RhdGUtJmd0O3JlZnNbaV0uaWQsIHZzdGF0ZS0mZ3Q7cmVmc1tpXS5pbnNuX2lkeCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBSZWxlYXNlIGlkIGFuZCBvYmplY3RzIGRlcml2ZWQgZnJvbSBpdCBpdGVyYXRpdmVseSBpbiBhIERGUyBtYW5uZXIgKi8KIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKQogewpAQCAtOTQ2NSwzMSAmIzQzOzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpCiAJc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7CiAJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwotCWludCBpLCBlcnI7CiYjNDM7CWludCBlcnI7CiAKIAlpZHN0YWNrLSZndDtjbnQgPSAwOwogCWVyciA9IGlkc3RhY2tfcHVzaChpZHN0YWNrLCBpZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkgewotCQllcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7Ci0JCVdBUk5fT05fT05DRShlcnIpOwotCX0KLQogCXdoaWxlICgoaWQgPSBpZHN0YWNrX3BvcChpZHN0YWNrKSkpIHsKIAkJLyoKIAkJICogQ2hpbGQgcmVmZXJlbmNlcyBhcmUgaW5hY2Nlc3NpYmxlIGFmdGVyIHBhcmVudCBpcyByZWxlYXNlZCwKIAkJICogYW55IGNoaWxkIHJlZmVyZW5jZXMgdGhhdCBleGlzdCBhdCB0aGlzIHBvaW50IGFyZSBhIGxlYWsuCiAJCSAqLwotCQlmb3IgKGkgPSAwOyBpICZsdDsgdnN0YXRlLSZndDthY3F1aXJlZF9yZWZzOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzdGF0ZS0mZ3Q7cmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUikKLQkJCQljb250aW51ZTsKLQkJCWlmICh2c3RhdGUtJmd0O3JlZnNbaV0ucGFyZW50X2lkICE9IGlkKQotCQkJCWNvbnRpbnVlOwotCQkJdmVyYm9zZShlbnYsICYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JWQgYWxsb2NfaW5zbj0lZC4gUmVsZWFzZSBpdCBmaXJzdC5cbiYjMzQ7LAotCQkJCXZzdGF0ZS0mZ3Q7cmVmc1tpXS5pZCwgdnN0YXRlLSZndDtyZWZzW2ldLmluc25faWR4KTsKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZXJyID0gY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKGVudiwgaWQpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkJaWYgKGZpbmRfcmVmZXJlbmNlX3N0YXRlKHZzdGF0ZSwgaWQpKSB7CiYjNDM7CQkJZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpOwomIzQzOwkJCVdBUk5fT05fT05DRShlcnIpOwogCQl9CiAKIAkJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoewpAQCAtOTU0MSw2ICYjNDM7OTU2OCwzMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCX0pKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDsKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcGFyZW50X2lkKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwllcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBwYXJlbnRfaWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3RydWN0IGl0ZXJhdG9ycyBjYW4gcmVsZWFzZSB0aGUgcHJldmlvdXMgZWxlbWVudCBvbiBlYWNoIG5leHQgY2FsbC4KJiM0MzsJICogUFRSX1RPX01FTSBpdGVyYXRvciByZXN1bHRzIHVzZSBzdG9yYWdlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBkZXN0cm95LgomIzQzOwkgKi8KJiM0MzsJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LSZndDtjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoewomIzQzOwkJaWYgKGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgfHwgcmVnLSZndDtwYXJlbnRfaWQgIT0gcGFyZW50X2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJYnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpOwomIzQzOwkJbWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7CiYjNDM7CX0pKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjazsKQEAgLTEzMTAwLDYgJiM0MzsxMzE1NCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCXJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pOwogCQkJCWlmIChyZXQgJmx0OyAwKQogCQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCQlpZiAobWV0YS0mZ3Q7YnRmID09IGJ0Zl92bWxpbnV4ICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICBpID09IDAgJmFtcDsmYW1wOyAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpICZhbXA7JmFtcDsgcmVnLSZndDtwYXJlbnRfaWQpCiYjNDM7CQkJCQl1cGRhdGVfcmVmX29ial9pZCgmYW1wO21ldGEtJmd0O3JlZl9vYmosIHJlZy0mZ3Q7cGFyZW50X2lkLCAwKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMTM5OTUsNiAmIzQzOzE0MDUzLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCX0KIAl9CiAKJiM0MzsJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LSZndDtjdXJfc3RhdGUsICZhbXA7bWV0YSktJmd0O3R5cGUgJmFtcDsgTUVNX1JDVSkpIHsKJiM0MzsJCWVyciA9IGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyhlbnYsIG1ldGEucmVmX29iai5pZCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7CiAJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykgewpAQCAtMTQxMDUsNiAmIzQzOzE0MTcwLDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCXJlZ3NbQlBGX1JFR18wXS5idGYgPSBkZXNjX2J0ZjsKIAkJCXJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTsKIAkJCXJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDsKJiM0MzsKJiM0MzsJCQlpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpICZhbXA7JmFtcDsgISh0eXBlICZhbXA7IE1FTV9SQ1UpKQomIzQzOwkJCQlyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkOwogCQl9CiAKIAkJaWYgKGlzX2tmdW5jX3JldF9udWxsKCZhbXA7bWV0YSkpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jCmluZGV4IDc2MDEyZGJiZGI0MTMuLmE1NWU1Y2YyOTQ3NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYwpAQCAtMjgsNiAmIzQzOzI4LDI5OCBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIHZtYV9wdHItJmd0O3ZtX3N0YXJ0OwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjsKJiM0MzsJdTY0IHZtX3N0YXJ0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghbmV4dF92bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXZtX3N0YXJ0ID0gdm1hX3B0ci0mZ3Q7dm1fc3RhcnQ7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gdm1fc3RhcnQ7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9uZXh0X251bGwoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7CiYjNDM7CXU2NCB2bV9zdGFydDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAobmV4dF92bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXZtX3N0YXJ0ID0gdm1hX3B0ci0mZ3Q7dm1fc3RhcnQ7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gdm1fc3RhcnQ7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmaWxlX3B0ciA9IHZtYV9wdHItJmd0O3ZtX2ZpbGU7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoZmlsZV9wdHIpCiYjNDM7CQlyZXR1cm4gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyLCAqbmV4dF92bWFfcHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CXUzMiBtb2RlOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZmlsZV9wdHIgPSB2bWFfcHRyLSZndDt2bV9maWxlOwomIzQzOwlpZiAoIWZpbGVfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIW5leHRfdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltb2RlID0gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiBtb2RlOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZpbGVfcHRyID0gdm1hX3B0ci0mZ3Q7dm1fZmlsZTsKJiM0MzsJaWYgKCFmaWxlX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZpbGVfcHRyID0gdm1hX3B0ci0mZ3Q7dm1fZmlsZTsKJiM0MzsJaWYgKCFmaWxlX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfZmlsZV9keW5wdHJfZGlzY2FyZF9iZWZvcmVfYWR2YW5jZShjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjsKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgZHlucHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmaWxlX3B0ciA9IHZtYV9wdHItJmd0O3ZtX2ZpbGU7CiYjNDM7CWlmICghZmlsZV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsICZhbXA7ZHlucHRyKTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9jdXJyZW50X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICh2bWFfcHRyKQomIzQzOwkJYnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKHZtYV9wdHIpIHsKJiM0MzsJCW1tX3B0ciA9IHZtYV9wdHItJmd0O3ZtX21tOwomIzQzOwkJLyogZXhlX2ZpbGUgaGFzIFJDVSBwcm90ZWN0aW9uIGluZGVwZW5kZW50IG9mIHRoZSBpdGVyYXRvci4gKi8KJiM0MzsJCWlmIChtbV9wdHIpCiYjNDM7CQkJZmlsZV9wdHIgPSBtbV9wdHItJmd0O2V4ZV9maWxlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoZmlsZV9wdHIpCiYjNDM7CQlyZXR1cm4gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDsKJiM0MzsJdTMyIG1vZGUgPSAwOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAodm1hX3B0cikgewomIzQzOwkJbW1fcHRyID0gdm1hX3B0ci0mZ3Q7dm1fbW07CiYjNDM7CQlpZiAobW1fcHRyKQomIzQzOwkJCWZpbGVfcHRyID0gbW1fcHRyLSZndDtleGVfZmlsZTsKJiM0MzsJfQomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKGZpbGVfcHRyKQomIzQzOwkJbW9kZSA9IGZpbGVfcHRyLSZndDtmX21vZGU7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gbW9kZTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eCkKQEAgLTY2LDYgJiM0MzszNTgsNDYgQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25ldygmYW1wO3Rhc2tfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CWlmICghdGFza19wdHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25ldygmYW1wO3Rhc2tfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJaWYgKCF0YXNrX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJYnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQogaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDI1CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDEyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiBvZiBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSBhZGRyZXNzaW5nIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYE5lZWRzS01TQU4gPSBmYWxzZWAsIGJ1dCB3ZSBuZWVkIHRvIGJlIHJpZ29yb3VzLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIHJlbGF0ZWQgdG8gQlBGIHZlcmlmaWNhdGlvbjogYGJwZl92ZXJpZmllci5oYCwgYHZlcmlmaWVyLmNgLCBhbmQgYSBzZWxmdGVzdCBmaWxlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBpbXByb3ZlZCBsaWZldGltZSB0cmFja2luZyBmb3IgcG9pbnRlcnMgb2J0YWluZWQgdGhyb3VnaCBCUEYgc3RydWN0IGl0ZXJhdG9ycy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBwcmV2ZW50aW5nIFVBRiBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGB1cGRhdGVfcmVmX29ial9pZCgpYCwgYHVubWFya19zdGFja19zbG90c19pdGVyKClgLCBlbmhhbmNlbWVudHMgdG8gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbigpYCwgYW5kIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoKWAgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGFkanVzdG1lbnRzIHRvIGBjaGVja19rZnVuY19hcmdzYCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlkZWEgaXMgdG8gYW5jaG9yIHRoZSBsaWZldGltZSBvZiB0aGVzZSBpdGVyYXRvci1yZXR1cm5lZCBwb2ludGVycyAoYHBhcmVudF9pZGApIGFuZCBpbnZhbGlkYXRlIHRoZW0gd2hlbiB0aGUgaXRlcmF0b3IgYWR2YW5jZXMuCgpUaGUgZnVuZGFtZW50YWwgcHJvYmxlbSBpcyB0aGF0LCBwcmV2aW91c2x5LCBCUEYgcHJvZ3JhbXMgY291bGQgdXNlIHBvaW50ZXJzIHJldHVybmVkIGJ5IGl0ZXJhdG9ycyBhZnRlciB0aGUgaXRlcmF0b3IgaGFkIG1vdmVkIG9uLCByZXN1bHRpbmcgaW4gYSBwb3RlbnRpYWxseSBVQUYgc2l0dWF0aW9uLiBUaGlzIHBhdGNoIG1pdGlnYXRlcyB0aGF0IGJ5IGludmFsaWRhdGluZyB0aGUgcG9pbnRlcnMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIGFwcGx5IG91ciBLTVNBTiBsZW5zLiBGcm9tIGEgcHJlbGltaW5hcnkgcmVhZCwgdGhlIGFuc3dlciBpcyAmIzM0O25vJiMzNDsuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBkZXRhaWxzOgoKMS4gICoqTm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlKio6IFRoZSBtb2RpZmllZCBzdHJ1Y3RzIGFyZSBpbnRlcm5hbCB0byB0aGUgdmVyaWZpZXIsIG5vIHJpc2sgb2YgZGF0YSBsZWFrYWdlLgoyLiAgKipObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBicmFuY2hpbmcqKjogSW5pdGlhbGl6YXRpb25zIHNlZW0gc291bmQuIGBlcnJgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgaW4gYHVubWFya19zdGFja19zbG90c19pdGVyYC4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCB1c2VzIGFscmVhZHkgaW5pdGlhbGl6ZWQgcmVncy4gIExvb3AgaXRlcmF0b3JzIGluIGBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW5gIGl0ZXJhdGUgb3ZlciBleGlzdGluZyBpbml0aWFsaXplZCBmaWVsZHMuIFNpbWlsYXJseSwgYGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc2AgcmVsaWVzIG9uIGluaXRpYWxpemVkIHZhcmlhYmxlcyBhbmQgc3RhdGVzLgozLiAgKipObyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMqKjogVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb24gc2NoZW1lcy4KNC4gICoqTm8gYm91bmRhcnkgb3IgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIHJlYWRzKio6IE5vdGhpbmcgaW4gdGhlIHBhdGNoIHN1Z2dlc3RzIHRoYXQgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIGJlY29tZSBhY2Nlc3NpYmxlLgoKVGhlIHBhdGNoIGFpbXMgdG8gZml4IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgZm9yIGRldGVjdGluZyB0aGlzIGtpbmQgb2YgYnVnLiBUaGVyZWZvcmUsIGFjY29yZGluZyB0byB0aGUgS01TQU4gcnVsZXMsIHdlICpkb24mIzM5O3QqIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIGNoYW5nZXMgYXJlIGFib3V0IHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gdGhhdCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi4gSXQmIzM5O3MgYSB2ZXJpZmllciBzdGF0aWMgYW5hbHlzaXMgaW1wcm92ZW1lbnQuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGNhbiBwcmVwYXJlIHRoZSB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGlmZXRpbWUgdHJhY2tpbmcgZm9yIHRydXN0ZWQgcG9pbnRlcnMgcmV0dXJuZWQgYnkgc3RydWN0IGl0ZXJhdG9ycyAoZS5nLiwgYnBmX2l0ZXJfdGFza192bWEpIGJ5IGFzc29jaWF0aW5nIHRoZW0gd2l0aCBhIHBhcmVudF9pZCBhbmQgaW52YWxpZGF0aW5nIHRoZW0gdXBvbiBzdWJzZXF1ZW50IGl0ZXJhdG9yIHN0ZXBzIG9yIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgYW5kIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzIGluIEJQRiBwcm9ncmFtcy5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBwdXJlbHkgaW50ZXJuYWwgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWdpc3RlciBzdGF0ZSB0cmFja2luZywgYW5kIHNlbGZ0ZXN0cy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBtZWNoYW5pc21zLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcnVudGltZSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpdGVyYXRvciBidWdzIChzdWNoIGFzIFVBRikgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxpZmV0aW1lIHRyYWNraW5nIGZvciB0cnVzdGVkIHBvaW50ZXJzIHJldHVybmVkIGJ5IHN0cnVjdCBpdGVyYXRvcnMgKGUuZy4sIGJwZl9pdGVyX3Rhc2tfdm1hKSBieSBhc3NvY2lhdGluZyB0aGVtIHdpdGggYSBwYXJlbnRfaWQgYW5kIGludmFsaWRhdGluZyB0aGVtIHVwb24gc3Vic2VxdWVudCBpdGVyYXRvciBzdGVwcyBvciBkZXN0cnVjdGlvbi4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIGFuZCBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiBCUEYgcHJvZ3JhbXMuXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgcHVyZWx5IGludGVybmFsIEJQRiB2ZXJpZmllciBsb2dpYywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzZWxmdGVzdHMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgbWVjaGFuaXNtcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHJ1bnRpbWUgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaXRlcmF0b3IgYnVncyAoc3VjaCBhcyBVQUYpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OToyNC45OTc1Njg4NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUwNDQzNDk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc1wiLFxuICAgIFwiY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuXCIsXG4gICAgXCJyZWxlYXNlX3JlZmVyZW5jZVwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInVubWFya19zdGFja19zbG90c19pdGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmhhbmNlcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbGlmZXRpbWUgdHJhY2tpbmcgZm9yIHRydXN0ZWQgcG9pbnRlcnMgcmV0dXJuZWQgYnkgc3RydWN0IGl0ZXJhdG9ycyAoZS5nLiwgYnBmX2l0ZXJfdGFza192bWEpIGJ5IGFzc29jaWF0aW5nIHRoZW0gd2l0aCBhIHBhcmVudF9pZCBhbmQgaW52YWxpZGF0aW5nIHRoZW0gdXBvbiBzdWJzZXF1ZW50IGl0ZXJhdG9yIHN0ZXBzIG9yIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgYW5kIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzIGluIEJQRiBwcm9ncmFtcy5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlIHB1cmVseSBpbnRlcm5hbCBCUEYgdmVyaWZpZXIgbG9naWMsIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLCBhbmQgc2VsZnRlc3RzLiBObyBrZXJuZWwtdG8tdXNlciBjb3B5IG1lY2hhbmlzbXMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBydW50aW1lIHNhZmV0eSB2aW9sYXRpb25zIHJlc3VsdGluZyBmcm9tIGl0ZXJhdG9yIGJ1Z3MgKHN1Y2ggYXMgVUFGKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciB0cmFja2luZyByZWZlcmVuY2UgbGlmZXRpbWVzLCBwYXJlbnRhZ2UsIGFuZCBpbnZhbGlkYXRpb24gb2YgaXRlcmF0b3Itb3duZWQgUFRSX1RPX0JURl9JRCBwb2ludGVycyBhbmQgZHlucHRycyBhY3Jvc3MgaXRlcmF0b3IgYWR2YW5jZSBhbmQgZGVzdHJveSBvcGVyYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdmVyaWZpY2F0aW9uIG9mIGVCUEYgcHJvZ3JhbXMgdmlhIGJwZihCUEZfUFJPR19MT0FEKSBhbmQgaW50cm9kdWNlcyBuZXcgdmFsaWRhdGlvbiBhbmQgcmVmZXJlbmNlIGxlYWsgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OToyNC45OTc1NzQ2NTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzk2MjMyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YThjNjM3NGMyZWQ4ZDliODc0YWYzMmEwODU2YjdjNWQ3MTk0ODQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjQ5OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uYWUzMGRmNjI5ZDViMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC0xNTE4LDkgKzE1MTgsOSBAQCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjIHtcXG4gXFxuIC8qXFxuICAqIFRoZSBsYXN0IHNlZW4gcmVyZWZlcmVuY2VkIG9iamVjdDsgVXBkYXRlZCBieSB1cGRhdGVfcmVmX29iaigpIHdoZW4gYSByZWdpc3RlciByZWZlcnMgdG8gYVxcbi0gKiByZWZlcmVuY2VkIG9iamVjdC4gVXNlZCB3aGVuIHRoZSBoZWxwZXIgb3Iga2Z1bmMgaXMgY2FzdGluZyBhIHJlZmVyZW5jZWQgb2JqZWN0LCByZXR1cm5pbmdcXG4tICogYWxsb2NhdGVkIG1lbW9yeSBkZXJpdmVkIGZyb20gcmVmZXJlbmNlZCBvYmplY3Qgb3IgY3JlYXRpbmcgYSBkeW5wdHIgd2l0aCBhIHJlZmVyZW5jZWRcXG4tICogb2JqZWN0IGFzIHBhcmVudC5cXG4rICogcmVmZXJlbmNlZCBvYmplY3Qgb3IgYW5vdGhlciB2ZXJpZmllci10cmFja2VkIGxpZmV0aW1lIGFuY2hvci4gVXNlZCB3aGVuIHRoZSBoZWxwZXIgb3Iga2Z1bmNcXG4rICogaXMgY2FzdGluZyBhIHJlZmVyZW5jZWQgb2JqZWN0LCByZXR1cm5pbmcgYWxsb2NhdGVkIG1lbW9yeSBkZXJpdmVkIGZyb20gYSByZWZlcmVuY2VkIG9iamVjdFxcbisgKiBvciBjcmVhdGluZyBhIGR5bnB0ciB3aG9zZSBiYWNraW5nIG9iamVjdCBoYXMgYSB0cmFja2VkIGxpZmV0aW1lLlxcbiAgKi9cXG4gc3RydWN0IHJlZl9vYmpfZGVzYyB7XFxuIFxcdHUzMiBpZDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWIwMTM5NTQxODJmMiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMjM4LDEzICsyMzgsMTggQEAgc3RhdGljIHZvaWQgYnBmX21hcF9rZXlfc3RvcmUoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXgsIHU2NCBzdGF0ZSlcXG4gXFx0XFx0XFx0ICAgICAocG9pc29uZWQgPyBCUEZfTUFQX0tFWV9QT0lTT04gOiAwVUxMKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmooc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4rc3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmpfaWQoc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgdTMyIGlkLCB1MzIgcGFyZW50X2lkKVxcbiB7XFxuLVxcdHJlZl9vYmotXFx1MDAzZWlkID0gcmVnLVxcdTAwM2VpZDtcXG4tXFx0cmVmX29iai1cXHUwMDNlcGFyZW50X2lkID0gcmVnLVxcdTAwM2VwYXJlbnRfaWQ7XFxuK1xcdHJlZl9vYmotXFx1MDAzZWlkID0gaWQ7XFxuK1xcdHJlZl9vYmotXFx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcXG4gXFx0cmVmX29iai1cXHUwMDNlY250Kys7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuK3tcXG4rXFx0dXBkYXRlX3JlZl9vYmpfaWQocmVmX29iaiwgcmVnLVxcdTAwM2VpZCwgcmVnLVxcdTAwM2VwYXJlbnRfaWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHZhbGlkYXRlX3JlZl9vYmooc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iailcXG4ge1xcbiBcXHRpZiAocmVmX29iai1cXHUwMDNlY250IFxcdTAwM2UgMSkge1xcbkBAIC05NzcsNyArOTgyLDcgQEAgc3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcXG4tXFx0aW50IHNwaSwgaSwgajtcXG4rXFx0aW50IHNwaSwgaSwgaiwgZXJyO1xcbiBcXG4gXFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxuIFxcdGlmIChzcGkgXFx1MDAzYyAwKVxcbkBAIC05ODcsOCArOTkyLDExIEBAIHN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpIC0gaV07XFxuIFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdCA9IFxcdTAwMjZzbG90LVxcdTAwM2VzcGlsbGVkX3B0cjtcXG4gXFxuLVxcdFxcdGlmIChpID09IDApXFxuLVxcdFxcdFxcdFdBUk5fT05fT05DRShyZWxlYXNlX3JlZmVyZW5jZShlbnYsIHN0LVxcdTAwM2VpZCkpO1xcbitcXHRcXHRpZiAoaSA9PSAwKSB7XFxuK1xcdFxcdFxcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3QtXFx1MDAzZWlkKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpO1xcbiBcXG5AQCAtNjE0MCw5ICs2MTQ4LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGF0eXBlID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0cmV0ID0gbWFya19idGZfbGRfcmVnKGVudiwgcmVncywgdmFsdWVfcmVnbm8sIHJldCwgcmVnLVxcdTAwM2VidGYsIGJ0Zl9pZCwgZmxhZyk7XFxuK1xcdFxcdGVudW0gYnBmX3JlZ190eXBlIHJlZ190eXBlID0gcmV0O1xcbitcXHRcXHR1MzIgcGFyZW50X2lkID0gcmVnLVxcdTAwM2VwYXJlbnRfaWQ7XFxuK1xcbitcXHRcXHRyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmVnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHJlZy1cXHUwMDNlYnRmLCBidGZfaWQsIGZsYWcpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKChyZWdzW3ZhbHVlX3JlZ25vXS50eXBlIFxcdTAwMjYgUFRSX1RSVVNURUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgXFx1MDAyNiAoTUVNX1JDVSB8IE1FTV9QRVJDUFUgfCBNRU1fVVNFUikpKVxcbitcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC05NDU2LDYgKzk0NzEsMjQgQEAgc3RhdGljIGludCBpZHN0YWNrX3BvcChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gXFx0cmV0dXJuIGlkbWFwLVxcdTAwM2VtYXBbLS1pZG1hcC1cXHUwMDNlY250XS5vbGQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBwYXJlbnRfaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZzdGF0ZS1cXHUwMDNlYWNxdWlyZWRfcmVmczsgaSsrKSB7XFxuK1xcdFxcdGlmICh2c3RhdGUtXFx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAodnN0YXRlLVxcdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBwYXJlbnRfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkxlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2c3RhdGUtXFx1MDAzZXJlZnNbaV0uaWQsIHZzdGF0ZS1cXHUwMDNlcmVmc1tpXS5pbnNuX2lkeCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogUmVsZWFzZSBpZCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb20gaXQgaXRlcmF0aXZlbHkgaW4gYSBERlMgbWFubmVyICovXFxuIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxcbiB7XFxuQEAgLTk0NjUsMzEgKzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXFxuIFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xcbiBcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xcbi1cXHRpbnQgaSwgZXJyO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWRzdGFjay1cXHUwMDNlY250ID0gMDtcXG4gXFx0ZXJyID0gaWRzdGFja19wdXNoKGlkc3RhY2ssIGlkKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkge1xcbi1cXHRcXHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7XFxuLVxcdFxcdFdBUk5fT05fT05DRShlcnIpO1xcbi1cXHR9XFxuLVxcbiBcXHR3aGlsZSAoKGlkID0gaWRzdGFja19wb3AoaWRzdGFjaykpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIENoaWxkIHJlZmVyZW5jZXMgYXJlIGluYWNjZXNzaWJsZSBhZnRlciBwYXJlbnQgaXMgcmVsZWFzZWQsXFxuIFxcdFxcdCAqIGFueSBjaGlsZCByZWZlcmVuY2VzIHRoYXQgZXhpc3QgYXQgdGhpcyBwb2ludCBhcmUgYSBsZWFrLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZzdGF0ZS1cXHUwMDNlYWNxdWlyZWRfcmVmczsgaSsrKSB7XFxuLVxcdFxcdFxcdGlmICh2c3RhdGUtXFx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRpZiAodnN0YXRlLVxcdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBpZClcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiTGVha2luZyByZWZlcmVuY2UgaWQ9JWQgYWxsb2NfaW5zbj0lZC4gUmVsZWFzZSBpdCBmaXJzdC5cXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHZzdGF0ZS1cXHUwMDNlcmVmc1tpXS5pZCwgdnN0YXRlLVxcdTAwM2VyZWZzW2ldLmluc25faWR4KTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIGlkKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdFxcdGlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkge1xcbitcXHRcXHRcXHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRShlcnIpO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKHZzdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIG1hc2ssICh7XFxuQEAgLTk1NDEsNiArOTU2OCwzMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHR9KSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICp1bnVzZWQ7XFxuK1xcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnRfaWQpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIHBhcmVudF9pZCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTdHJ1Y3QgaXRlcmF0b3JzIGNhbiByZWxlYXNlIHRoZSBwcmV2aW91cyBlbGVtZW50IG9uIGVhY2ggbmV4dCBjYWxsLlxcbitcXHQgKiBQVFJfVE9fTUVNIGl0ZXJhdG9yIHJlc3VsdHMgdXNlIHN0b3JhZ2UgdGhhdCByZW1haW5zIHZhbGlkIHVudGlsIGRlc3Ryb3kuXFxuK1xcdCAqL1xcbitcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgdW51c2VkLCByZWcsICh7XFxuK1xcdFxcdGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIHx8IHJlZy1cXHUwMDNlcGFyZW50X2lkICE9IHBhcmVudF9pZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsIHJlZywgQlBGX0RJQUdfTU9EX1JFRl9SRUxFQVNFKTtcXG4rXFx0XFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XFxuK1xcdH0pKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xcbkBAIC0xMzEwMCw2ICsxMzE1NCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKGVudiwgcmVnLCByZWZfdCwgcmVmX3RuYW1lLCByZWZfaWQsIG1ldGEsIGksIGFyZ25vKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VidGYgPT0gYnRmX3ZtbGludXggXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgaSA9PSAwIFxcdTAwMjZcXHUwMDI2ICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2VwYXJlbnRfaWQpXFxuK1xcdFxcdFxcdFxcdFxcdHVwZGF0ZV9yZWZfb2JqX2lkKFxcdTAwMjZtZXRhLVxcdTAwM2VyZWZfb2JqLCByZWctXFx1MDAzZXBhcmVudF9pZCwgMCk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0xMzk5NSw2ICsxNDA1MywxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBcXHUwMDI2bWV0YSktXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSkge1xcbitcXHRcXHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7XFxuIFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuQEAgLTE0MTA1LDYgKzE0MTcwLDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xcbiBcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7XFxuIFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcXG4rXFxuK1xcdFxcdFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNiAhKHR5cGUgXFx1MDAyNiBNRU1fUkNVKSlcXG4rXFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFxcdTAwMjZtZXRhKSkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xcbmluZGV4IDc2MDEyZGJiZGI0MTMuLmE1NWU1Y2YyOTQ3NGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcXG5AQCAtMjgsNiArMjgsMjk4IEBAIGludCBpdGVyX25leHRfdHJ1c3RlZChjb25zdCB2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1xcXCIpXFxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiB2bWFfcHRyLVxcdTAwM2V2bV9zdGFydDtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xcbitcXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XFxuK1xcdHU2NCB2bV9zdGFydDtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICghbmV4dF92bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHZtX3N0YXJ0ID0gdm1hX3B0ci1cXHUwMDNldm1fc3RhcnQ7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiB2bV9zdGFydDtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dF9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcXG4rXFx0dTY0IHZtX3N0YXJ0O1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfbmV3KFxcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcXG4rXFxuK1xcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAoIXZtYV9wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKG5leHRfdm1hX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR2bV9zdGFydCA9IHZtYV9wdHItXFx1MDAzZXZtX3N0YXJ0O1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gdm1fc3RhcnQ7XFxuK291dDpcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXFxcIilcXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICghdm1hX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmaWxlX3B0ciA9IHZtYV9wdHItXFx1MDAzZXZtX2ZpbGU7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmIChmaWxlX3B0cilcXG4rXFx0XFx0cmV0dXJuIGZpbGVfcHRyLVxcdTAwM2VmX21vZGU7XFxuK1xcdHJldHVybiAwO1xcbitvdXQ6XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1xcXCIpXFxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcXG4rXFx0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xcbitcXHR1MzIgbW9kZTtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGZpbGVfcHRyID0gdm1hX3B0ci1cXHUwMDNldm1fZmlsZTtcXG4rXFx0aWYgKCFmaWxlX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRuZXh0X3ZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAoIW5leHRfdm1hX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRtb2RlID0gZmlsZV9wdHItXFx1MDAzZWZfbW9kZTtcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIG1vZGU7XFxuK291dDpcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiTGVha2luZyByZWZlcmVuY2UgaWQ9XFxcIilcXG4raW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgZHlucHRyO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICghdm1hX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmaWxlX3B0ciA9IHZtYV9wdHItXFx1MDAzZXZtX2ZpbGU7XFxuK1xcdGlmICghZmlsZV9wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0YnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsIFxcdTAwMjZkeW5wdHIpO1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRicGZfZHlucHRyX2ZpbGVfZGlzY2FyZChcXHUwMDI2ZHlucHRyKTtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJMZWFraW5nIHJlZmVyZW5jZSBpZD1cXFwiKVxcbitpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XFxuK1xcdHN0cnVjdCBmaWxlICpmaWxlX3B0cjtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGZpbGVfcHRyID0gdm1hX3B0ci1cXHUwMDNldm1fZmlsZTtcXG4rXFx0aWYgKCFmaWxlX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXFx1MDAyNmR5bnB0cik7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFxcdTAwMjZkeW5wdHIpO1xcbitcXHRyZXR1cm4gMDtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBpdGVyX25leHRfZmlsZV9keW5wdHJfZGlzY2FyZF9iZWZvcmVfYWR2YW5jZShjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xcbitcXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XFxuK1xcdHN0cnVjdCBicGZfZHlucHRyIGR5bnB0cjtcXG4rXFx0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfbmV3KFxcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcXG4rXFxuK1xcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAoIXZtYV9wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZmlsZV9wdHIgPSB2bWFfcHRyLVxcdTAwM2V2bV9maWxlO1xcbitcXHRpZiAoIWZpbGVfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGJwZl9keW5wdHJfZnJvbV9maWxlKGZpbGVfcHRyLCAwLCBcXHUwMDI2ZHlucHRyKTtcXG4rXFx0YnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoXFx1MDAyNmR5bnB0cik7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK291dDpcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfY3VycmVudF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAodm1hX3B0cilcXG4rXFx0XFx0YnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7XFxuK291dDpcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XFxuK1xcdHN0cnVjdCBmaWxlICpmaWxlX3B0ciA9IE5VTEw7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICh2bWFfcHRyKSB7XFxuK1xcdFxcdG1tX3B0ciA9IHZtYV9wdHItXFx1MDAzZXZtX21tO1xcbitcXHRcXHQvKiBleGVfZmlsZSBoYXMgUkNVIHByb3RlY3Rpb24gaW5kZXBlbmRlbnQgb2YgdGhlIGl0ZXJhdG9yLiAqL1xcbitcXHRcXHRpZiAobW1fcHRyKVxcbitcXHRcXHRcXHRmaWxlX3B0ciA9IG1tX3B0ci1cXHUwMDNlZXhlX2ZpbGU7XFxuK1xcdH1cXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmIChmaWxlX3B0cilcXG4rXFx0XFx0cmV0dXJuIGZpbGVfcHRyLVxcdTAwM2VmX21vZGU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX3JjdV9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW1fcHRyO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHIgPSBOVUxMO1xcbitcXHR1MzIgbW9kZSA9IDA7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICh2bWFfcHRyKSB7XFxuK1xcdFxcdG1tX3B0ciA9IHZtYV9wdHItXFx1MDAzZXZtX21tO1xcbitcXHRcXHRpZiAobW1fcHRyKVxcbitcXHRcXHRcXHRmaWxlX3B0ciA9IG1tX3B0ci1cXHUwMDNlZXhlX2ZpbGU7XFxuK1xcdH1cXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmIChmaWxlX3B0cilcXG4rXFx0XFx0bW9kZSA9IGZpbGVfcHRyLVxcdTAwM2VmX21vZGU7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiBtb2RlO1xcbit9XFxuK1xcbiBTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVxcXCIpXFxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG5AQCAtNjYsNiArMzU4LDQ2IEBAIGludCBpdGVyX25leHRfcmN1KGNvbnN0IHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX25ldyhcXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRpZiAoIXRhc2tfcHRyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX25ldyhcXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRpZiAoIXRhc2tfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfbmV4dChcXHUwMDI2dGFza19pdCk7XFxuK1xcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcXFwiKVxcbiBpbnQgaXRlcl9uZXh0X3JjdV9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MjYuNzc3NzQ2MjE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTM4ODAzOTE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc1wiLFxuICAgIFwiY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuXCIsXG4gICAgXCJyZWxlYXNlX3JlZmVyZW5jZVwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInVubWFya19zdGFja19zbG90c19pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBmb3IgdHJhY2tpbmcgcmVmZXJlbmNlIGxpZmV0aW1lcywgcGFyZW50YWdlLCBhbmQgaW52YWxpZGF0aW9uIG9mIGl0ZXJhdG9yLW93bmVkIFBUUl9UT19CVEZfSUQgcG9pbnRlcnMgYW5kIGR5bnB0cnMgYWNyb3NzIGl0ZXJhdG9yIGFkdmFuY2UgYW5kIGRlc3Ryb3kgb3BlcmF0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHZlcmlmaWNhdGlvbiBvZiBlQlBGIHByb2dyYW1zIHZpYSBicGYoQlBGX1BST0dfTE9BRCkgYW5kIGludHJvZHVjZXMgbmV3IHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSBsZWFrIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YThjNjM3NGMyZWQ4ZDliODc0YWYzMmEwODU2YjdjNWQ3MTk0ODQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDk6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uYWUzMGRmNjI5ZDViMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xNTE4LDkgKzE1MTgsOSBAQCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjIHtcbiBcbiAvKlxuICAqIFRoZSBsYXN0IHNlZW4gcmVyZWZlcmVuY2VkIG9iamVjdDsgVXBkYXRlZCBieSB1cGRhdGVfcmVmX29iaigpIHdoZW4gYSByZWdpc3RlciByZWZlcnMgdG8gYVxuLSAqIHJlZmVyZW5jZWQgb2JqZWN0LiBVc2VkIHdoZW4gdGhlIGhlbHBlciBvciBrZnVuYyBpcyBjYXN0aW5nIGEgcmVmZXJlbmNlZCBvYmplY3QsIHJldHVybmluZ1xuLSAqIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIHJlZmVyZW5jZWQgb2JqZWN0IG9yIGNyZWF0aW5nIGEgZHlucHRyIHdpdGggYSByZWZlcmVuY2VkXG4tICogb2JqZWN0IGFzIHBhcmVudC5cbisgKiByZWZlcmVuY2VkIG9iamVjdCBvciBhbm90aGVyIHZlcmlmaWVyLXRyYWNrZWQgbGlmZXRpbWUgYW5jaG9yLiBVc2VkIHdoZW4gdGhlIGhlbHBlciBvciBrZnVuY1xuKyAqIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIGEgcmVmZXJlbmNlZCBvYmplY3RcbisgKiBvciBjcmVhdGluZyBhIGR5bnB0ciB3aG9zZSBiYWNraW5nIG9iamVjdCBoYXMgYSB0cmFja2VkIGxpZmV0aW1lLlxuICAqL1xuIHN0cnVjdCByZWZfb2JqX2Rlc2Mge1xuIFx0dTMyIGlkO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWIwMTM5NTQxODJmMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjM4LDEzICsyMzgsMTggQEAgc3RhdGljIHZvaWQgYnBmX21hcF9rZXlfc3RvcmUoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXgsIHU2NCBzdGF0ZSlcbiBcdFx0XHQgICAgIChwb2lzb25lZCA/IEJQRl9NQVBfS0VZX1BPSVNPTiA6IDBVTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqX2lkKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHUzMiBpZCwgdTMyIHBhcmVudF9pZClcbiB7XG4tXHRyZWZfb2JqLVx1MDAzZWlkID0gcmVnLVx1MDAzZWlkO1xuLVx0cmVmX29iai1cdTAwM2VwYXJlbnRfaWQgPSByZWctXHUwMDNlcGFyZW50X2lkO1xuK1x0cmVmX29iai1cdTAwM2VpZCA9IGlkO1xuK1x0cmVmX29iai1cdTAwM2VwYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XG4gXHRyZWZfb2JqLVx1MDAzZWNudCsrO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3tcbitcdHVwZGF0ZV9yZWZfb2JqX2lkKHJlZl9vYmosIHJlZy1cdTAwM2VpZCwgcmVnLVx1MDAzZXBhcmVudF9pZCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdmFsaWRhdGVfcmVmX29iaihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqKVxuIHtcbiBcdGlmIChyZWZfb2JqLVx1MDAzZWNudCBcdTAwM2UgMSkge1xuQEAgLTk3Nyw3ICs5ODIsNyBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXG4ge1xuIFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcbi1cdGludCBzcGksIGksIGo7XG4rXHRpbnQgc3BpLCBpLCBqLCBlcnI7XG4gXG4gXHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbiBcdGlmIChzcGkgXHUwMDNjIDApXG5AQCAtOTg3LDggKzk5MiwxMSBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSBpXTtcbiBcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbiBcbi1cdFx0aWYgKGkgPT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UocmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC1cdTAwM2VpZCkpO1xuK1x0XHRpZiAoaSA9PSAwKSB7XG4rXHRcdFx0ZXJyID0gcmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC1cdTAwM2VpZCk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbiBcbiBcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpO1xuIFxuQEAgLTYxNDAsOSArNjE0OCwxNiBAQCBzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gXG4gXHRpZiAoYXR5cGUgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmV0LCByZWctXHUwMDNlYnRmLCBidGZfaWQsIGZsYWcpO1xuK1x0XHRlbnVtIGJwZl9yZWdfdHlwZSByZWdfdHlwZSA9IHJldDtcbitcdFx0dTMyIHBhcmVudF9pZCA9IHJlZy1cdTAwM2VwYXJlbnRfaWQ7XG4rXG4rXHRcdHJldCA9IG1hcmtfYnRmX2xkX3JlZyhlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLCByZWdfdHlwZSxcbitcdFx0XHRcdCAgICAgIHJlZy1cdTAwM2VidGYsIGJ0Zl9pZCwgZmxhZyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKChyZWdzW3ZhbHVlX3JlZ25vXS50eXBlIFx1MDAyNiBQVFJfVFJVU1RFRCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgXHUwMDI2IChNRU1fUkNVIHwgTUVNX1BFUkNQVSB8IE1FTV9VU0VSKSkpXG4rXHRcdFx0cmVnc1t2YWx1ZV9yZWdub10ucGFyZW50X2lkID0gcGFyZW50X2lkO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtOTQ1Niw2ICs5NDcxLDI0IEBAIHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRyZXR1cm4gaWRtYXAtXHUwMDNlbWFwWy0taWRtYXAtXHUwMDNlY250XS5vbGQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBwYXJlbnRfaWQpXG4re1xuK1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnN0YXRlLVx1MDAzZWFjcXVpcmVkX3JlZnM7IGkrKykge1xuK1x0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICh2c3RhdGUtXHUwMDNlcmVmc1tpXS5wYXJlbnRfaWQgIT0gcGFyZW50X2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR2ZXJib3NlKGVudiwgXCJMZWFraW5nIHJlZmVyZW5jZSBpZD0lZCBhbGxvY19pbnNuPSVkLiBSZWxlYXNlIGl0IGZpcnN0LlxcblwiLFxuK1x0XHRcdHZzdGF0ZS1cdTAwM2VyZWZzW2ldLmlkLCB2c3RhdGUtXHUwMDNlcmVmc1tpXS5pbnNuX2lkeCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIFJlbGVhc2UgaWQgYW5kIG9iamVjdHMgZGVyaXZlZCBmcm9tIGl0IGl0ZXJhdGl2ZWx5IGluIGEgREZTIG1hbm5lciAqL1xuIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuIHtcbkBAIC05NDY1LDMxICs5NDk4LDI1IEBAIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuIFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbi1cdGludCBpLCBlcnI7XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWRzdGFjay1cdTAwM2VjbnQgPSAwO1xuIFx0ZXJyID0gaWRzdGFja19wdXNoKGlkc3RhY2ssIGlkKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoZmluZF9yZWZlcmVuY2Vfc3RhdGUodnN0YXRlLCBpZCkpIHtcbi1cdFx0ZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpO1xuLVx0XHRXQVJOX09OX09OQ0UoZXJyKTtcbi1cdH1cbi1cbiBcdHdoaWxlICgoaWQgPSBpZHN0YWNrX3BvcChpZHN0YWNrKSkpIHtcbiBcdFx0LypcbiBcdFx0ICogQ2hpbGQgcmVmZXJlbmNlcyBhcmUgaW5hY2Nlc3NpYmxlIGFmdGVyIHBhcmVudCBpcyByZWxlYXNlZCxcbiBcdFx0ICogYW55IGNoaWxkIHJlZmVyZW5jZXMgdGhhdCBleGlzdCBhdCB0aGlzIHBvaW50IGFyZSBhIGxlYWsuXG4gXHRcdCAqL1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2c3RhdGUtXHUwMDNlYWNxdWlyZWRfcmVmczsgaSsrKSB7XG4tXHRcdFx0aWYgKHZzdGF0ZS1cdTAwM2VyZWZzW2ldLnR5cGUgIT0gUkVGX1RZUEVfUFRSKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKHZzdGF0ZS1cdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBpZClcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcIkxlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxuXCIsXG4tXHRcdFx0XHR2c3RhdGUtXHUwMDNlcmVmc1tpXS5pZCwgdnN0YXRlLVx1MDAzZXJlZnNbaV0uaW5zbl9pZHgpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRlcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBpZCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcbitcdFx0aWYgKGZpbmRfcmVmZXJlbmNlX3N0YXRlKHZzdGF0ZSwgaWQpKSB7XG4rXHRcdFx0ZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpO1xuK1x0XHRcdFdBUk5fT05fT05DRShlcnIpO1xuIFx0XHR9XG4gXG4gXHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2sodnN0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgbWFzaywgKHtcbkBAIC05NTQxLDYgKzk1NjgsMzMgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdH0pKTtcbiB9XG4gXG4rc3RhdGljIGludCBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIHBhcmVudF9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDtcbitcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghcGFyZW50X2lkKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRlcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBwYXJlbnRfaWQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qXG4rXHQgKiBTdHJ1Y3QgaXRlcmF0b3JzIGNhbiByZWxlYXNlIHRoZSBwcmV2aW91cyBlbGVtZW50IG9uIGVhY2ggbmV4dCBjYWxsLlxuK1x0ICogUFRSX1RPX01FTSBpdGVyYXRvciByZXN1bHRzIHVzZSBzdG9yYWdlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBkZXN0cm95LlxuK1x0ICovXG4rXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCB1bnVzZWQsIHJlZywgKHtcbitcdFx0aWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCB8fCByZWctXHUwMDNlcGFyZW50X2lkICE9IHBhcmVudF9pZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpO1xuK1x0XHRtYXJrX3JlZ19pbnZhbGlkKGVudiwgcmVnKTtcbitcdH0pKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuQEAgLTEzMTAwLDYgKzEzMTU0LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRyZXQgPSBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKGVudiwgcmVnLCByZWZfdCwgcmVmX3RuYW1lLCByZWZfaWQsIG1ldGEsIGksIGFyZ25vKTtcbiBcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0XHRpZiAobWV0YS1cdTAwM2VidGYgPT0gYnRmX3ZtbGludXggXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fZmlsZV0gXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgaSA9PSAwIFx1MDAyNlx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpIFx1MDAyNlx1MDAyNiByZWctXHUwMDNlcGFyZW50X2lkKVxuK1x0XHRcdFx0XHR1cGRhdGVfcmVmX29ial9pZChcdTAwMjZtZXRhLVx1MDAzZXJlZl9vYmosIHJlZy1cdTAwM2VwYXJlbnRfaWQsIDApO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuQEAgLTEzOTk1LDYgKzE0MDUzLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCBcdTAwMjZtZXRhKS1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSkge1xuK1x0XHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7XG4gXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XG5AQCAtMTQxMDUsNiArMTQxNzAsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5idGYgPSBkZXNjX2J0ZjtcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7XG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0Zl9pZCA9IHB0cl90eXBlX2lkO1xuK1xuK1x0XHRcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNiAhKHR5cGUgXHUwMDI2IE1FTV9SQ1UpKVxuK1x0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcbiBcdFx0fVxuIFxuIFx0XHRpZiAoaXNfa2Z1bmNfcmV0X251bGwoXHUwMDI2bWV0YSkpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuaW5kZXggNzYwMTJkYmJkYjQxMy4uYTU1ZTVjZjI5NDc0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcbkBAIC0yOCw2ICsyOCwyOTggQEAgaW50IGl0ZXJfbmV4dF90cnVzdGVkKGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiB2bWFfcHRyLVx1MDAzZXZtX3N0YXJ0O1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4rXHR1NjQgdm1fc3RhcnQ7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghbmV4dF92bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHZtX3N0YXJ0ID0gdm1hX3B0ci1cdTAwM2V2bV9zdGFydDtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiB2bV9zdGFydDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9uZXh0X251bGwoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4rXHR1NjQgdm1fc3RhcnQ7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmIChuZXh0X3ZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dm1fc3RhcnQgPSB2bWFfcHRyLVx1MDAzZXZtX3N0YXJ0O1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIHZtX3N0YXJ0O1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKGZpbGVfcHRyKVxuK1x0XHRyZXR1cm4gZmlsZV9wdHItXHUwMDNlZl9tb2RlO1xuK1x0cmV0dXJuIDA7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfZmllbGRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcbitcdHN0cnVjdCBmaWxlICpmaWxlX3B0cjtcbitcdHUzMiBtb2RlO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmaWxlX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fZmlsZTtcbitcdGlmICghZmlsZV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCFuZXh0X3ZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bW9kZSA9IGZpbGVfcHRyLVx1MDAzZWZfbW9kZTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiBtb2RlO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiTGVha2luZyByZWZlcmVuY2UgaWQ9XCIpXG4raW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1x0c3RydWN0IGJwZl9keW5wdHIgZHlucHRyO1xuK1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmaWxlX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fZmlsZTtcbitcdGlmICghZmlsZV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsIFx1MDAyNmR5bnB0cik7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRicGZfZHlucHRyX2ZpbGVfZGlzY2FyZChcdTAwMjZkeW5wdHIpO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiTGVha2luZyByZWZlcmVuY2UgaWQ9XCIpXG4raW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1x0c3RydWN0IGJwZl9keW5wdHIgZHlucHRyO1xuK1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmaWxlX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fZmlsZTtcbitcdGlmICghZmlsZV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsIFx1MDAyNmR5bnB0cik7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRicGZfZHlucHRyX2ZpbGVfZGlzY2FyZChcdTAwMjZkeW5wdHIpO1xuK1x0cmV0dXJuIDA7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2Rpc2NhcmRfYmVmb3JlX2FkdmFuY2UoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0aWYgKCFmaWxlX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbitcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFx1MDAyNmR5bnB0cik7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfY3VycmVudF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKHZtYV9wdHIpXG4rXHRcdGJwZl9rZnVuY190cnVzdGVkX3ZtYV90ZXN0KHZtYV9wdHIpO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19zdWNjZXNzXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX3JjdV9maWVsZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW1fcHRyO1xuK1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAodm1hX3B0cikge1xuK1x0XHRtbV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX21tO1xuK1x0XHQvKiBleGVfZmlsZSBoYXMgUkNVIHByb3RlY3Rpb24gaW5kZXBlbmRlbnQgb2YgdGhlIGl0ZXJhdG9yLiAqL1xuK1x0XHRpZiAobW1fcHRyKVxuK1x0XHRcdGZpbGVfcHRyID0gbW1fcHRyLVx1MDAzZWV4ZV9maWxlO1xuK1x0fVxuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKGZpbGVfcHRyKVxuK1x0XHRyZXR1cm4gZmlsZV9wdHItXHUwMDNlZl9tb2RlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHIgPSBOVUxMO1xuK1x0dTMyIG1vZGUgPSAwO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICh2bWFfcHRyKSB7XG4rXHRcdG1tX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fbW07XG4rXHRcdGlmIChtbV9wdHIpXG4rXHRcdFx0ZmlsZV9wdHIgPSBtbV9wdHItXHUwMDNlZXhlX2ZpbGU7XG4rXHR9XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoZmlsZV9wdHIpXG4rXHRcdG1vZGUgPSBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gbW9kZTtcbit9XG4rXG4gU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcbkBAIC02Niw2ICszNTgsNDYgQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0O1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3B0cjtcbitcbitcdGJwZl9pdGVyX3Rhc2tfbmV3KFx1MDAyNnRhc2tfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHRhc2tfcHRyID0gYnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNnRhc2tfaXQpO1xuK1x0YnBmX2l0ZXJfdGFza19kZXN0cm95KFx1MDAyNnRhc2tfaXQpO1xuK1x0aWYgKCF0YXNrX3B0cilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfcmN1X3Rhc2tfdGVzdCh0YXNrX3B0cik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4rXHRpZiAoIXRhc2tfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfbmV4dChcdTAwMjZ0YXNrX2l0KTtcbitcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2dGFza19pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuIGludCBpdGVyX25leHRfcmN1X29yX251bGwoY29uc3Qgdm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MjYuNzc3NzQ3NTE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0NTkxMzQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIHNlcmllcyBpbiB0aGUga2VybmVsIHJlcG8uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCBidXQgbGV0J3MgdGFrZSBhIG1ldGhvZGljYWwgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgKndoYXQqIGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgY2hhbmdlLiBSZWFkaW5nIHRoZSBkaWZmIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBwcm92aWRlZCBpcyBjcnVjaWFsLiBJdCdzIHNlY29uZCBuYXR1cmUgZm9yIG1lIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBtb2RpZmllZCBmaWxlcywgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGtlcm5lbC5cblxuQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jYC4gVGhlIGZhY3QgdGhhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaXRzIGhlYWRlciBhcmUgbW9kaWZpZWQgdGVsbHMgbWUgdGhpcyBpcyBjb3JlIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGltcG9ydGFudCwgYXMgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgZ2F0ZWtlZXBlciBmb3IgYW55IEJQRiBwcm9ncmFtIGxvYWRlZCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgaGFuZGxlcyBvcGVyYXRpb25zIGxpa2UgYEJQRl9QUk9HX0xPQURgLiBBbnkgZXJyb3IgaGVyZSBpcyBhbXBsaWZpZWQgYXMgdGhlIGVudGlyZSBrZXJuZWwgc2VjdXJpdHkgaXMgYWZmZWN0ZWQuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHJlYWQgdGhlIHBhdGNoIGluIGRldGFpbCB0byBmdWxseSBncmFzcCB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBMZXQncyBzZWUuLi4gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB0aGUgcGF0Y2ggYWZmZWN0cyB0aGVzZSBmdW5jdGlvbnM6XG5cbjEuICBgdXBkYXRlX3JlZl9vYmpfaWQoKWAgYW5kIGB1cGRhdGVfcmVmX29iaigpYFxuMi4gIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcigpYFxuMy4gIGBjaGVja19wdHJfdG9fYnRmX2FjY2VzcygpYFxuNC4gIGBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oKWAgKGEgbmV3IGZ1bmN0aW9uIC0gZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0bylcbjUuICBgcmVsZWFzZV9yZWZlcmVuY2UoKWBcbjYuICBgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKClgIChhbm90aGVyIG5ldyBmdW5jdGlvbilcbjcuICBgY2hlY2tfa2Z1bmNfYXJncygpYFxuOC4gIGBjaGVja19rZnVuY19jYWxsKClgXG5cblNpbmNlIEknbSBkZWFsaW5nIHdpdGggdGhlIEJQRiB2ZXJpZmllciwgSSdtIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgdGhlc2UgZnVuY3Rpb24gY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcycgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scywgbGlrZWx5IGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGNvbWJpbmF0aW9uIHRvIGVuc3VyZSBJIGhhdmUgZnVsbCBjb250ZXh0IGFyb3VuZCB0aGVzZSBjaGFuZ2VzIHRvIGVmZmVjdGl2ZWx5IGFzc2VzcyB0aGVpciBpbXBhY3QgYW5kIGNvcnJlY3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MzAuNzIzNjY0MDMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzkyNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTU1OD1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk1NzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk1NzE6c3RhdGljIGludCBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIHBhcmVudF9pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU3Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM4MTM9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA1Ny1cXHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBcXHUwMDI2bWV0YSktXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA1ODpcXHRcXHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA1OS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTozMC43OTkwNjI1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NDMzMTk4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IG5lZWRzIHRvIGJlIGxvb2tlZCBhdCwgdGhpbmtpbmcgYXMgaWYgSSBhbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipCUEYgVmVyaWZpZXIgXHUwMDI2IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIHZlcmlmaWVyJ3MgaW50ZXJuYWxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzcGVjaWZpY2FsbHkgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgKmNhbGxlZCogd2l0aGluIHRoZSBrZXJuZWwuIEknbSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYEJQRl9TWVNDQUxMYCB3aGljaCBpcyBjcml0aWNhbCBmb3Igc3lzdGVtIGNhbGwgaW50ZWdyYXRpb24sIGBCUEZfSklUYCB3aGljaCBpcyB2aXRhbCBmb3IgcGVyZm9ybWFuY2UsIG9yIGBCVEZgIHdoaWNoIGNoYW5nZXMgaG93IGRhdGEgaXMgdmFsaWRhdGVkLiBUaGVzZSBjb25maWcgb3B0aW9ucyBkcmFzdGljYWxseSBhZmZlY3Qgd2hhdCdzIGVuYWJsZWQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgdmVyaWZpZXIncyB1c2FnZSBhbmQgbWFwIG91dCB0aGVzZSBkZXBlbmRlbmNpZXMuXG5cbkJleW9uZCB0aGUgY29kZSBpdHNlbGYsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBidWlsdC4gVGhhdCBtZWFucyBhIHF1aWNrIGNoZWNrIG9mIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBzZWUgaG93IHRoZSB2ZXJpZmllciBjb2RlIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEFuZCwgb2YgY291cnNlLCBhIGxvb2sgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRpcmVjdGx5IGFmZmVjdCB0aGUgdmVyaWZpZXIncyBiZWhhdmlvciBhbmQgdGhlIGZlYXR1cmVzIGl0IHN1cHBvcnRzLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBhbGwgb3B0aW9ucyBhcmUgY29uZmlndXJlZCBjb3JyZWN0bHkgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGVuYWJsZSBvciBkaXNhYmxlIGZlYXR1cmVzIGJhc2VkIG9uIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTozNS4yNDIzODU5MTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NDEwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyaWZpZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTctXFx0LmdldF9mdW5jX3Byb3RvID0gYnBmX2xzbV9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY0PXN0YXRpYyBERUZJTkVfTVVURVgodXBkYXRlX211dGV4KTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6Njk6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX3N0cnVjdF9vcHNfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MC19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz01OTY0PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2UoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy01OTgwLVxcbmtlcm5lbC9icGYvYnRmLmM6NTk4MTpcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XFxua2VybmVsL2JwZi9idGYuYy01OTgyLVxcdCAqIGFuZCBzdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHZlcmlmaWNhdGlvbiB0cmFjZVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI1LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNy1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGNncm91cF9kZXZfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDMtXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBzeXNjdGxfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjQtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2Ni1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGNnX3NvY2tvcHRfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NzQ2PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQ4LVxcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQ5OlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXFx1MDAzZW9wcztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc1MC1cXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNS0vKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cXHUwMDNlZ2V0X2Z1bmNfcHJvdG8oKSBjYWxsYmFjayBpdCBzaG91bGQgcmV0dXJuXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzctICogYnBmX21hcF9sb29rdXBfZWxlbV9wcm90bywgc28gdGhhdCB2ZXJpZmllciBjYW4gcHJvcGVybHkgY2hlY2sgdGhlIGFyZ3VtZW50c1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjYzMD1zeXNjYWxsX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjY0Nzpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3lzY2FsbF92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0OC1cXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTk5Mj1fX2JwZl9rZnVuYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmJwZl9pdGVyX3Rhc2tfdm1hX25leHQoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hICppdClcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMC1cXHQvKlxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcXHQgKiBUaGUgdmVyaWZpZXIgb25seSB0cnVzdHMgdm1fbW0gYW5kIHZtX2ZpbGUgKHNlZVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMi1cXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTctLyogZHVtbXkgX29wcy4gVGhlIHZlcmlmaWVyIHdpbGwgb3BlcmF0ZSBvbiB0YXJnZXQgcHJvZ3JhbSdzIG9wcy4gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfZXh0ZW5zaW9uX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxLSNkZWZpbmUgQlBGX1BST0dfVFlQRShfaWQsIF9uYW1lLCBwcm9nX2N0eF90eXBlLCBrZXJuX2N0eF90eXBlKSBcXFxcXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyOlxcdFtfaWRdID0gXFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00My0jZGVmaW5lIEJQRl9NQVBfVFlQRShfaWQsIF9vcHMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI4NT1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03Mjk2LSAqIEZvciB0cmFkaXRpb25hbCBQVFJfVE9fTUFQX1ZBTFVFIG9yIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MsIHRoZSB2ZXJpZmllclxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3Mjk3OiAqIGNsZWFycyByZWctXFx1MDAzZWlkIGFmdGVyIHZhbHVlX29yX251bGwtXFx1MDAzZXZhbHVlIHRyYW5zaXRpb24sIHNpbmNlIHRoZSB2ZXJpZmllciBvbmx5XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyOTgtICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24ndCBjYXJlXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ2MDg9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3ODItXFx0XFx0XFx0XFx0ZW52LCBcXFwiVGhpcyBvcGVyYXRpb24gc3VidHJhY3RzIHBvaW50ZXIgcmVnaXN0ZXIgUiVkIGZyb20gc2NhbGFyIHJlZ2lzdGVyIFIlZC4gXFxcIlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDc4MzpcXHRcXHRcXHRcXHRcXFwiVGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDc4NC1cXHRcXHRcXHRcXHRwdHJfcmVnbm8sIGRzdCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc3MzA9Ym9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3OTUtICpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3OTY6ICogLSBpZiBzbywgYW5kIGlmIHZlcmlmaWVyIG9yIGN1cnJlbnQgSklUIGlubGluZXMgdGhlIGNhbGwgdG8gdGhlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Nzk3LSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Nzc3PXN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg5NC1cXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4OTU6XFx0ZW52LVxcdTAwM2VvcHMgPSBzdF9vcHMtXFx1MDAzZXZlcmlmaWVyX29wcztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4OTYtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA1Mjg9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA1NjctXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNTY4OlxcdFxcdGVudi1cXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1t0Z3RfcHJvZy1cXHUwMDNldHlwZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTY5LVxcdFxcdHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMjAwPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMjEwLVxcdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyMTE6XFx0aWYgKEFSUkFZX1NJWkUoYnBmX3ZlcmlmaWVyX29wcykgPT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMTItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMjItXFx0ZW52LVxcdTAwM2Vwcm9nID0gKnByb2c7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMjIzOlxcdGVudi1cXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXFx1MDAzZXByb2ctXFx1MDAzZXR5cGVdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIyNC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIzMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyMzI6XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIzMy1cXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MzUuMzQxMjM1NDU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAyMzIwNDgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYnBmX2NoZWNrYCwgYXMgdGhhdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGFjY29yZGluZyB0byBgdmVyaWZpZXIuY2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcsIHNvIEknbSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhdCBgYnBmX2NoZWNrYCBpdHNlbGYgb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGl0IGNhbGxzIGFuZCB3aGljaCBhcmUgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLiBUaGUgZGlmZiBpbmRpY2F0ZXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXk6IGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnNgLCBgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYCwgYHJlbGVhc2VfcmVmZXJlbmNlYCwgYGNoZWNrX2tmdW5jX2NhbGxgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAsIGFuZCBgdXBkYXRlX3JlZl9vYmpfaWRgIC8gYHVwZGF0ZV9yZWZfb2JqYC4gVGhhdCdzIGEgZGVjZW50LXNpemVkIGNodW5rIG9mIHRoZSB2ZXJpZmljYXRpb24gcHJvY2VzcywgaXQgc2VlbXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBjaGFuZ2UsIEknbGwgbmVlZCB0byBwb3JlIG92ZXIgdGhvc2UgZnVuY3Rpb25zLCBhcyB0aGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggQlBGIHZlcmlmaWVycy4gVG8gZ2V0IHN0YXJ0ZWQsIEkgd2lsbCBmb2N1cyBvbiBsaW5lcyAxNDA0NSB0byAxNDE4MCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgdGhlIGFjdHVhbCBjb2RlIHRoYXQncyBiZWVuIG1vZGlmaWVkLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MzkuMzY0NDQyODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDA0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwNDU6XFx0XFxuMTQwNDY6XFx0XFx0XFx0LyogSW4gdGhlIGNhc2Ugb2YgdGhlIGRlZmF1bHQgY2FsbGJhY2ssIHRoZSBjb29raWUgdmFsdWUgcGFzc2VkXFxuMTQwNDc6XFx0XFx0XFx0ICogdG8gYnBmX3Rocm93IGJlY29tZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJvZ3JhbS5cXG4xNDA0ODpcXHRcXHRcXHQgKi9cXG4xNDA0OTpcXHRcXHRcXHRpZiAoIWVudi1cXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHtcXG4xNDA1MDpcXHRcXHRcXHRcXHRlcnIgPSBjaGVja19yZXR1cm5fY29kZShlbnYsIEJQRl9SRUdfMSwgXFxcIlIxXFxcIik7XFxuMTQwNTE6XFx0XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTQwNTI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDA1MzpcXHRcXHRcXHR9XFxuMTQwNTQ6XFx0XFx0fVxcbjE0MDU1OlxcdFxcbjE0MDU2OlxcdFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNlxcbjE0MDU3OlxcdFxcdCAgICAhKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LVxcdTAwM2VjdXJfc3RhdGUsIFxcdTAwMjZtZXRhKS1cXHUwMDNldHlwZSBcXHUwMDI2IE1FTV9SQ1UpKSB7XFxuMTQwNTg6XFx0XFx0XFx0ZXJyID0gaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKGVudiwgbWV0YS5yZWZfb2JqLmlkKTtcXG4xNDA1OTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE0MDYwOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTQwNjE6XFx0XFx0fVxcbjE0MDYyOlxcdFxcbjE0MDYzOlxcdFxcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcXG4xNDA2NDpcXHRcXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcXHUwMDI2cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbjE0MDY1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuMTQwNjY6XFx0XFx0XFx0dTMyIHJlZ25vID0gY2FsbGVyX3NhdmVkW2ldO1xcbjE0MDY3OlxcdFxcbjE0MDY4OlxcdFxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW3JlZ25vXSk7XFxuMTQwNjk6XFx0XFx0fVxcbjE0MDcwOlxcdFxcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpO1xcbjE0MDcxOlxcdFxcbjE0MDcyOlxcdFxcdC8qIENoZWNrIHJldHVybiB0eXBlICovXFxuMTQwNzM6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBtZXRhLmZ1bmNfcHJvdG8tXFx1MDAzZXR5cGUsIE5VTEwpO1xcbjE0MDc0OlxcdFxcbjE0MDc1OlxcdFxcdGlmIChpc19rZnVuY19hY3F1aXJlKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNiAhYnRmX3R5cGVfaXNfc3RydWN0X3B0cihtZXRhLmJ0ZiwgdCkpIHtcXG4xNDA3NjpcXHRcXHRcXHRpZiAobWV0YS5idGYgIT0gYnRmX3ZtbGludXggfHxcXG4xNDA3NzpcXHRcXHRcXHQgICAgKCFpc19icGZfb2JqX25ld19rZnVuYyhtZXRhLmZ1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTQwNzg6XFx0XFx0XFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG4xNDA3OTpcXHRcXHRcXHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xcbjE0MDgwOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiYWNxdWlyZSBrZXJuZWwgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIFBUUl9UT19CVEZfSURcXFxcblxcXCIpO1xcbjE0MDgxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MDgyOlxcdFxcdFxcdH1cXG4xNDA4MzpcXHRcXHR9XFxuMTQwODQ6XFx0XFxuMTQwODU6XFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xcbjE0MDg2OlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbjE0MDg3OlxcdFxcdFxcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcXHUwMDI2XFx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcXG4xNDA4ODpcXHRcXHRcXHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXFxuMTQwODk6XFx0XFx0XFx0XFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XFxuMTQwOTA6XFx0XFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcXG4xNDA5MTpcXHRcXHRcXHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2cHRyX3R5cGVfaWQpO1xcbjE0MDkyOlxcdFxcdFxcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XFxuMTQwOTM6XFx0XFx0XFx0aWYgKGVycikge1xcbjE0MDk0OlxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTozOS4zNjU2NzI3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MDg3NDYwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBiZWVuIG1vZGlmaWVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBsb2dpYyBwcm9iYWJseSBoYXNuJ3QgYmVlbiBkcmFzdGljYWxseSBhbHRlcmVkLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlIG9mIGFueSB0d2Vha3MuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHJlYWQgYXJvdW5kIGxpbmUgOTU2MC4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoYXQgc3BlY2lmaWMgcmVnaW9uIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcywgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhbmQgd2h5IHRoZXkgd2VyZSBtYWRlLiBUaGlzIHRhcmdldGVkIGFwcHJvYWNoIGlzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNvZGUgdXBkYXRlcyBpbiB0aGlzIGZpbGUsIHNvIEknbSBob3BpbmcgSSBjYW4gZ2V0IGEgcXVpY2sgZ3Jhc3Agb2YgdGhlIG1vZGlmaWNhdGlvbiB0aGF0IHRvb2sgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTo0My4wNzQ0MjA2ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTU1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTU1NTpcXHRcXHRyZXR1cm4gMDtcXG45NTU2OlxcdH1cXG45NTU3OlxcdFxcbjk1NTg6XFx0c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG45NTU5OlxcdHtcXG45NTYwOlxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqdW51c2VkO1xcbjk1NjE6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG45NTYyOlxcdFxcbjk1NjM6XFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LVxcdTAwM2VjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoe1xcbjk1NjQ6XFx0XFx0XFx0aWYgKHR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSkge1xcbjk1NjU6XFx0XFx0XFx0XFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfTk9OX09XTl9SRUYpO1xcbjk1NjY6XFx0XFx0XFx0XFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XFxuOTU2NzpcXHRcXHRcXHR9XFxuOTU2ODpcXHRcXHR9KSk7XFxuOTU2OTpcXHR9XFxuOTU3MDpcXHRcXG45NTcxOlxcdHN0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpXFxuOTU3MjpcXHR7XFxuOTU3MzpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDtcXG45NTc0OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuOTU3NTpcXHRcXHRpbnQgZXJyO1xcbjk1NzY6XFx0XFxuOTU3NzpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnRfaWQpKVxcbjk1Nzg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuOTU3OTpcXHRcXG45NTgwOlxcdFxcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIHBhcmVudF9pZCk7XFxuOTU4MTpcXHRcXHRpZiAoZXJyKVxcbjk1ODI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45NTgzOlxcdFxcbjk1ODQ6XFx0XFx0LypcXG45NTg1OlxcdFxcdCAqIFN0cnVjdCBpdGVyYXRvcnMgY2FuIHJlbGVhc2UgdGhlIHByZXZpb3VzIGVsZW1lbnQgb24gZWFjaCBuZXh0IGNhbGwuXFxuOTU4NjpcXHRcXHQgKiBQVFJfVE9fTUVNIGl0ZXJhdG9yIHJlc3VsdHMgdXNlIHN0b3JhZ2UgdGhhdCByZW1haW5zIHZhbGlkIHVudGlsIGRlc3Ryb3kuXFxuOTU4NzpcXHRcXHQgKi9cXG45NTg4OlxcdFxcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKGVudi1cXHUwMDNlY3VyX3N0YXRlLCB1bnVzZWQsIHJlZywgKHtcXG45NTg5OlxcdFxcdFxcdGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIHx8IHJlZy1cXHUwMDNlcGFyZW50X2lkICE9IHBhcmVudF9pZClcXG45NTkwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjk1OTE6XFx0XFx0XFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpO1xcbjk1OTI6XFx0XFx0XFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XFxuOTU5MzpcXHRcXHR9KSk7XFxuOTU5NDpcXHRcXG45NTk1OlxcdFxcdHJldHVybiAwO1xcbjk1OTY6XFx0fVxcbjk1OTc6XFx0XFxuOTU5ODpcXHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjk1OTk6XFx0e1xcbjk2MDA6XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XFxuOTYwMTpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbjk2MDI6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG45NjAzOlxcdFxcdHUzMiBjbGVhcl9tYXNrID0gKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfSVRFUik7XFxuOTYwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6NDMuMDc1NDg4NzYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMjQ3MTAxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEV4Y2VsbGVudCwgdGhhdCdzIGEga2V5IHN1YnN5c3RlbSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHRvdGFsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgc2V0dXBzIHRocm91Z2ggdGhlIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbC4gVGhhdCdzIGEgaHVnZSBwb3NpdGl2ZS5cblxuTm93LCBkb2VzIGl0IGFjdHVhbGx5ICptb2RpZnkqIGNvcmUgbG9naWMgb3IgaW50cm9kdWNlIG5ldyBydW50aW1lIGFzc2VydGlvbnM/IEFic29sdXRlbHkuIFdlJ3JlIHNlZWluZyBjaGFuZ2VzIHRvIGhvdyBpdGVyYXRvci1vd25lZCBgUFRSX1RPX0JURl9JRGAgb2JqZWN0cyDigJMgdHJ1c3RlZCBCVEYgcG9pbnRlcnMgZnJvbSBpdGVyYXRvcnMgbGlrZSBgYnBmX2l0ZXJfdGFza192bWFfbmV4dGAg4oCTIGFyZSBoYW5kbGVkLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBkZWFsaW5nIHdpdGggbWVtb3J5IGxpZmV0aW1lIGFuZCBwb2ludGVyIHZhbGlkYXRpb24gd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIGV4cGxvaXRhYmxlIGJ1Z3MuIFNwZWNpZmljYWxseSwgdGhlIGFkZGVkIGBXQVJOX09OX09OQ0UoIXBhcmVudF9pZClgIGNhbGwgaW4gYGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc2AgaXMgYSBodWdlIHJlZCBmbGFnIHRoYXQgaXQgaXMgY2hlY2tpbmcgZm9yIHByZXZpb3VzbHkgdW5jYXVnaHQgY29uZGl0aW9ucy4gQmV5b25kIHRoaXMsIHdlIGFyZSBsb29raW5nIGF0IGFkZGVkIHJlZmVyZW5jZSBsZWFrIGNoZWNraW5nIChgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYCksIGludmFsaWRhdGlvbiBvbiBpdGVyYXRvciBhZHZhbmNlIGluIGBjaGVja19rZnVuY19jYWxsYCwgcHJvcGFnYXRpb24gb2YgYHBhcmVudF9pZGAgZm9yIHRydXN0ZWQgcG9pbnRlcnMgaW4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgdXBkYXRlcyB0byBkeW5wdHIgaGFuZGxpbmcgd2l0aCBgYnBmX2R5bnB0cl9mcm9tX2ZpbGVgLCBhbmQgZXJyb3IgcHJvcGFnYXRpb24gZml4ZXMuIFRoZXNlIGFsbCBwb2ludCB0byBhIGRlZXBlciBkaXZlIGludG8gcG90ZW50aWFsIGlzc3VlcyBhbmQgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIHNjcmVhbXMgXCJ2dWxuZXJhYmlsaXR5IGh1bnRpbmcgZ3JvdW5kXCIuXG5cbkNvbnNpZGVyaW5nIHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLCBpdCdzIGEgbm8tYnJhaW5lci4gVGhpcyBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gKEJQRiksIGFuZCBpbnRyb2R1Y2VzIG5ldyBjaGVja3MgYW5kIGxvZ2ljIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG9pbnRlciBoYW5kbGluZy4gQmFzZWQgb24gdGhlIGNyaXRlcmlvbiwgdGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5OZXh0IHN0ZXAgaXMgZmlndXJpbmcgb3V0IHRoZSByZXF1aXJlZCBgRW5hYmxlQ29uZmlnc2AuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgS2NvbmZpZyBmbGFncyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgQlBGIHZlcmlmaWVyLCBpdGVyYXRvcnMsIGFuZCBrZnVuY3MuIFdlJ2xsIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AgYW5kIGBpbml0L0tjb25maWdgIHRvIGlkZW50aWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfU1lTQ0FMTGAgYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGlzIHdpbGwgbWFrZSBjZXJ0YWluIHRoYXQgb3VyIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIHRvIHRyaWdnZXIgdGhlIGNvZGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTo0OC4xMDAyMDEwMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTAxMjIxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTo0OC4zNzkyMjc5MzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI5MDQ3NTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlcnk6XG5cbioqTG9jYXRpbmcgdGhlIEJQRl9TWVNDQUxMIE1hY3JvKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYEJQRl9TWVNDQUxMYC4gU2luY2UgdGhpcyBpcyBvYnZpb3VzbHkgYSBtYWNybyByZWxhdGVkIHRvIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIsIEknbSBnb2luZyB0byBhc3N1bWUgaXQncyBpbnZvbHZlZCB3aXRoIHN5c3RlbSBjYWxscyBhbmQga2VybmVsLWxldmVsIGludGVyYWN0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwgaGVhZGVycywgcHJvYmFibHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gQlBGIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIHRob3NlIGhlYWRlciBmaWxlcyBhcmUgdXN1YWxseSBsb2NhdGVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCB0eXBpY2FsbHkgdW5kZXIgYC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYCwgb3Igc2ltaWxhciwgZGVwZW5kaW5nIG9uIHRoZSBkaXN0cmlidXRpb24gYW5kIGtlcm5lbCB2ZXJzaW9uLiBHaXZlbiB0aGUgdGVybSwgSSdsbCBiZSBsb29raW5nIGluIHRoZSBoZWFkZXIgZmlsZXMgZm9yIEJQRiBkZWZpbml0aW9ucywgd2hpY2ggY291bGQgYmUgaW4gdGhlIGdlbmVyaWMgQlBGIGhlYWRlcnMsIG9yIGV2ZW4gcmVsYXRlZCB0byBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gSSdsbCBzdGFydCB3aXRoIGAvdXNyL3NyYy9saW51eC9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgIG9yIHBvdGVudGlhbGx5IGAvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2JwZi5oYC4gSSdsbCBhbHNvIHdhbnQgdG8ga2VlcCBpbiBtaW5kIHRoYXQga2VybmVsIHZlcnNpb25zIGNhbiB2YXJ5LCBzbyB0aGUgZXhhY3QgcGF0aCBvciBjb250ZW50IG1pZ2h0IGJlIHNsaWdodGx5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBoZWFkZXIgZmlsZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDkyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6NTIuNjY5NzA2ODc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMwODk0Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ5OjU1LjAwMDYwNTI4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTIxMTk5MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBLZXJuZWwgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSBzcGVjaWZpY2FsbHkgd2FudCB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDI1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdG9wLWxldmVsIHN3aXRjaGVzIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGUgQlBGIHN1YnN5c3RlbSwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZ2VuZXJhbCBmZWF0dXJlIGZsYWdzLiBMaW5lIDI1IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBCUEYgaXMgZXhwb3NlZCB0byBrZXJuZWwgY29uZmlnLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ5OjU2LjkyMTgwNzU5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdCMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcXG4gIDIxOlxcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXFxuICAyMjpcXHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbiAgMjM6XFx0XFx0Ym9vbFxcbiAgMjQ6XFx0XFxuICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6NTYuOTIxOTA5ODIyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzQ3Nzg1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgQlRGIGFuZCBJdHMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEJURiAoQmVya2VsZXkgUGFja2V0IEZpbHRlciBUeXBlIEZvcm1hdCksIGtmdW5jcywgYW5kIGl0ZXJhdG9ycy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBleGFtaW5lIHRoZSBgREVCVUdfSU5GT19CVEZgIG9wdGlvbi4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IG1pZ2h0IGlsbHVtaW5hdGUgd2hldGhlciBCVEYgaXMgYWN0dWFsbHkgYSBwcmVyZXF1aXNpdGUgZm9yIG9yIGludGVydHdpbmVkIHdpdGggdGhlIGZ1bmN0aW9uYWxpdHkgb2Yga2Z1bmNzIGFuZCBpdGVyYXRvcnMuIFRoZSBLY29uZmlnIHNob3VsZCBwcm92aWRlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb21tZW50cy4gVGhlIGdvYWwgaXMgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYXNwZWN0cyBvZiBCVEYgYXJlIHJlcXVpcmVkIG9yIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgdXNlIG9mIHRoZXNlIG90aGVyIGZlYXR1cmVzLCB1bHRpbWF0ZWx5IGVuc3VyaW5nIGNvcnJlY3QgZmVhdHVyZSBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ5OjU4Ljk1NjY5MjQ4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4ODE5NjIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfSU5GT19CVEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9Mzc4PWNvbmZpZyBERUJVR19JTkZPX1NQTElUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXFxubGliL0tjb25maWcuZGVidWc6Mzk4OmNvbmZpZyBERUJVR19JTkZPX0JURlxcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTQxOT1jb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cXG5saWIvS2NvbmZpZy5kZWJ1Zzo0Mjg6Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDowMS4xNDQ4OTcxNjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0NDA2MzYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIEJQRiBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgIGNvbmZpZ3VyYXRpb25zIOKAkyB0aG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBCUEYtcmVsYXRlZCBrZXJuZWwgZmVhdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IHNldCB0byB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUuXG5cbkJleW9uZCB0aG9zZSwgSSdsbCBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBrZnVuY3Mgb3IgaXRlcmF0b3JzPyBJIGtub3cgaG93IHRoZXNlIHN5c3RlbXMgdGVuZCB0byBpbnRlcmFjdCwgc28gSSdsbCB3YW50IHRvIGZpbmQgdGhvc2UgZGVwZW5kZW5jaWVzIGVhcmx5LlxuXG5UbyBkaWcgZGVlcGVyLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCBwYXRoIG5vdyBpcyB0byBwZXJmb3JtIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJ2xsIHNlYXJjaCBmb3IgYHNwZWNpYWxfa2Z1bmNfbGlzdGAgb3IgYGJwZl9pdGVyX2Agd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGF0IHNob3VsZCBxdWlja2x5IGlsbHVtaW5hdGUgd2hpY2ggY29uZmlncyAqdGhleSogZGVwZW5kIG9uLCBhbmQgaW4gdHVybiwgZ2l2ZSBtZSBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gVGhpcyBzaG91bGQgcmFwaWRseSByZXZlYWwgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbWF5IGhhdmUgbWlzc2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDIzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MDMuNjg4OTYzMTkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTcwOTYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGVjaWFsX2tmdW5jX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTExNzMyPWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgwMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MDI6QlRGX0lEX0xJU1Qoc3BlY2lhbF9rZnVuY19saXN0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgwMy1CVEZfSUQoZnVuYywgYnBmX29ial9uZXdfaW1wbClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg5NT1zdGF0aWMgYm9vbCBpc19icGZfb2JqX25ld19rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4OTYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTg5NzpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX29ial9uZXddIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExODk4OlxcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfb2JqX25ld19pbXBsXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4OTktfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTAxPXN0YXRpYyBib29sIGlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MDIte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkwMzpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3BlcmNwdV9vYmpfbmV3XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkwNDpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3BlcmNwdV9vYmpfbmV3X2ltcGxdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwNS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDc9c3RhdGljIGJvb2wgaXNfYnBmX29ial9kcm9wX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwOC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTA5OlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfb2JqX2Ryb3BdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTEwOlxcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfb2JqX2Ryb3BfaW1wbF07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTExLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkxMz1zdGF0aWMgYm9vbCBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkxNC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTE1OlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcGVyY3B1X29ial9kcm9wXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxNjpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTctfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTE5PXN0YXRpYyBib29sIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyMC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTIxOlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MjI6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGxdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyMy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MjU9c3RhdGljIGJvb2wgaXNfYnBmX2xpc3RfcHVzaF9rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MjYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkyNzpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfcHVzaF9mcm9udF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5Mjg6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X3B1c2hfZnJvbnRfaW1wbF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5Mjk6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X3B1c2hfYmFja10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MzA6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X3B1c2hfYmFja19pbXBsXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkzMTpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYWRkXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MzItfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTM0PXN0YXRpYyBib29sIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzNS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTM2OlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX2FkZF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5Mzc6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfYWRkX2ltcGxdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzOC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NDA9c3RhdGljIGJvb2wgaXNfdGFza193b3JrX2FkZF9rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NDEte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk0MjpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWxdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTQzOlxcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTQ0LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk1ND1zdGF0aWMgYm9vbCBpc19rZnVuY19icGZfcmN1X3JlYWRfbG9jayhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTU1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NTY6XFx0cmV0dXJuIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yY3VfcmVhZF9sb2NrXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NTctfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTU5PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9yY3VfcmVhZF91bmxvY2soc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2MC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTYxOlxcdHJldHVybiBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmN1X3JlYWRfdW5sb2NrXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NjItfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTY0PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9wcmVlbXB0X2Rpc2FibGUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2NS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTY2OlxcdHJldHVybiBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcHJlZW1wdF9kaXNhYmxlXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NjctfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTY5PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9wcmVlbXB0X2VuYWJsZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTcwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NzE6XFx0cmV0dXJuIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9wcmVlbXB0X2VuYWJsZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTcyLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk3ND1ib29sIGJwZl9pc19rZnVuY19wa3RfY2hhbmdpbmcoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3NS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTc2OlxcdHJldHVybiBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTc3LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk4MD1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDE2LVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjAxNzpcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDE4OlxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDE5OlxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjAyMC1cXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMjI0PXN0YXRpYyBpbnQgcHJvY2Vzc19pcnFfZmxhZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzMDpcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xvY2FsX2lycV9zYXZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzMTpcXHQgICAgbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIyMzItXFx0XFx0aXJxX3NhdmUgPSB0cnVlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzMzpcXHRcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjM0LVxcdFxcdFxcdGtmdW5jX2NsYXNzID0gSVJRX0xPQ0tfS0ZVTkM7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM1OlxcdH0gZWxzZSBpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xvY2FsX2lycV9yZXN0b3JlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzNjpcXHRcXHQgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmVdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjM3LVxcdFxcdGlycV9zYXZlID0gZmFsc2U7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM4OlxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjIzOS1cXHRcXHRcXHRrZnVuY19jbGFzcyA9IElSUV9MT0NLX0tGVU5DO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDA4PXN0YXRpYyBib29sIGlzX2JwZl9saXN0X2FwaV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDEwLVxcdHJldHVybiBpc19icGZfbGlzdF9wdXNoX2tmdW5jKGJ0Zl9pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTE6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfcG9wX2Zyb250XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxMjpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wb3BfYmFja10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTM6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfZGVsXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxNDpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9mcm9udF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTU6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYmFja10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTY6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfaXNfZmlyc3RdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDE3OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2lzX2xhc3RdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDE4OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2VtcHR5XTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0MTktfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDIxPXN0YXRpYyBib29sIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKHUzMiBidGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0MjMtXFx0cmV0dXJuIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKGJ0Zl9pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MjQ6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JidHJlZV9yZW1vdmVdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDI1OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfZmlyc3RdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDI2OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcm9vdF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0Mjc6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JidHJlZV9sZWZ0XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyODpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX3JpZ2h0XTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0MjktfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDMxPXN0YXRpYyBib29sIGlzX2JwZl9yZXNfc3Bpbl9sb2NrX2tmdW5jKHUzMiBidGZfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDMyLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MzM6XFx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDM0OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDM1OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDM2OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDM3LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjQ2Mj1ib29sIGJwZl9pc190aHJvd19rZnVuYyhzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0NjQtXFx0cmV0dXJuIGJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQ2NTpcXHQgICAgICAgaW5zbi1cXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGhyb3ddO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ2Ni19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI0Njg9c3RhdGljIGJvb2wgaXNfYnBmX3dxX3NldF9jYWxsYmFja19rZnVuYyh1MzIgYnRmX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ2OS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDcwOlxcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl93cV9zZXRfY2FsbGJhY2tdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ3MS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI1MDk9c3RhdGljIGJvb2wgY2hlY2tfa2Z1bmNfaXNfZ3JhcGhfbm9kZV9hcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUxNy1cXHRcXHRyZXQgPSBpc19icGZfbGlzdF9wdXNoX2tmdW5jKGtmdW5jX2J0Zl9pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MTg6XFx0XFx0ICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9kZWxdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTE5OlxcdFxcdCAgICAgIGtmdW5jX2J0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfaXNfZmlyc3RdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTIwOlxcdFxcdCAgICAgIGtmdW5jX2J0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfaXNfbGFzdF07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTIxLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTIzLVxcdFxcdHJldCA9IChpc19icGZfcmJ0cmVlX2FkZF9rZnVuYyhrZnVuY19idGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTI0OlxcdFxcdCAgICAgICBrZnVuY19idGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcmVtb3ZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUyNTpcXHRcXHQgICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX2xlZnRdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTI2OlxcdFxcdCAgICAgICBrZnVuY19idGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcmlnaHRdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MjctXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3MTM9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkyOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5MzA6XFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkzMS1cXHRcXHRcXHRcXHRyZXQgPSBnZXRfa2Vybl9jdHhfYnRmX2lkKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVxcdTAwM2Vwcm9nKSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5ODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTg3OlxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fc2tiXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk4OC1cXHRcXHRcXHRcXHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfU0tCO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk4OTpcXHRcXHRcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV94ZHBdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTkwLVxcdFxcdFxcdFxcdGR5bnB0cl9hcmdfdHlwZSB8PSBEWU5QVFJfVFlQRV9YRFA7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTkxOlxcdFxcdFxcdH0gZWxzZSBpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX3NrYl9tZXRhXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Mi1cXHRcXHRcXHRcXHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfU0tCX01FVEE7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTkzOlxcdFxcdFxcdH0gZWxzZSBpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX2ZpbGVdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk0LVxcdFxcdFxcdFxcdGR5bnB0cl9hcmdfdHlwZSB8PSBEWU5QVFJfVFlQRV9GSUxFO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk5NTpcXHRcXHRcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZmlsZV9kaXNjYXJkXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Ni1cXHRcXHRcXHRcXHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfRklMRSB8IE9CSl9SRUxFQVNFO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk5NzpcXHRcXHRcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfY2xvbmVdIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk4LVxcdFxcdFxcdFxcdCAgIChkeW5wdHJfYXJnX3R5cGUgXFx1MDAyNiBNRU1fVU5JTklUKSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDE1LVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzAxNjpcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfY3NzX3Rhc2tfbmV3XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzAxNy1cXHRcXHRcXHRcXHRpZiAoIWNoZWNrX2Nzc190YXNrX2l0ZXJfYWxsb3dsaXN0KGVudikpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE1Ny1cXHRcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTU4OlxcdFxcdFxcdFxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fZmlsZV0gXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNTktXFx0XFx0XFx0XFx0ICAgIGkgPT0gMCBcXHUwMDI2XFx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpIFxcdTAwMjZcXHUwMDI2IHJlZy1cXHUwMDNlcGFyZW50X2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDAwLVxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzQwMTpcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDAyOlxcdFxcdFxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0MDMtXFx0XFx0XFx0XFx0ZmxhZ3MgfD0gUFJPQ0VTU19TUElOX0xPQ0s7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDA0OlxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzQwNTpcXHRcXHRcXHQgICAgbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0MDYtXFx0XFx0XFx0XFx0ZmxhZ3MgfD0gUFJPQ0VTU19MT0NLX0lSUTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY0Mj1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzQ3LVxcdFxcdG1hcmtfcmVnX2dyYXBoX25vZGUocmVncywgQlBGX1JFR18wLCBcXHUwMDI2ZmllbGQtXFx1MDAzZWdyYXBoX3Jvb3QpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc0ODpcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc0OS1cXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc1Mi1cXHRcXHRyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gbWV0YS1cXHUwMDNlcmV0X2J0Zl9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3NTM6XFx0fSBlbHNlIGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmRvbmx5X2Nhc3RdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzU0LVxcdFxcdHJldF90ID0gYnRmX3R5cGVfYnlfaWQoZGVzY19idGYsIG1ldGEtXFx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NzItXFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc3MzpcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfc2xpY2VdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzc0OlxcdFxcdCAgIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfc2xpY2VfcmR3cl0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NzUtXFx0XFx0ZW51bSBicGZfdHlwZV9mbGFnIHR5cGVfZmxhZyA9IGdldF9keW5wdHJfdHlwZV9mbGFnKG1ldGEtXFx1MDAzZWR5bnB0ci50eXBlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc4OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3ODk6XFx0XFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfc2xpY2VdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzkwLVxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IE1FTV9SRE9OTFk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM4MTM9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1Ny1cXHRpZiAoIWluc24tXFx1MDAzZW9mZiBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg1ODpcXHQgICAgKGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzODU5OlxcdCAgICAgaW5zbi1cXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4NjAtXFx0XFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqYnJhbmNoO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzODgwLVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM4ODE6XFx0fSBlbHNlIGlmICghaW5zbi1cXHUwMDNlb2ZmIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfX19icGZfdHJhcF0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4ODItXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDM3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDAzODpcXHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGhyb3ddKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDM5LVxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19leGNlcHRpb25zKCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4Ni1cXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwODc6XFx0XFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA4ODpcXHRcXHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDg5LVxcdFxcdFxcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTA4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcXHRcXHRcXHRcXHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDExMC1cXHRcXHRcXHRcXHRcXHRtZXRhLnIwX3Jkb25seSA9IGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTQyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDE0MzpcXHRcXHRcXHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZ2V0X2ttZW1fY2FjaGVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE0NC1cXHRcXHRcXHRcXHR0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQyMzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MjMxOlxcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MjMyLVxcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlY2FsbF9zZXNzaW9uX2Nvb2tpZSA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4MDU9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODIyLVxcdFxcdC8qIGZhbGxiYWNrIHRvIGRlZmF1bHQga2Z1bmMgd2hlbiBub3Qgc3VwcG9ydGVkIGJ5IG5ldGRldiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDgyMzpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9za2JdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODI0LVxcdFxcdHNlZW5fZGlyZWN0X3dyaXRlID0gZW52LVxcdTAwM2VzZWVuX2RpcmVjdF93cml0ZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgzMy1cXHRcXHRlbnYtXFx1MDAzZXNlZW5fZGlyZWN0X3dyaXRlID0gc2Vlbl9kaXJlY3Rfd3JpdGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODM0OlxcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3NldF9kZW50cnlfeGF0dHJdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODM1LVxcdFxcdGlmIChicGZfbHNtX2hhc19kX2lub2RlX2xvY2tlZChwcm9nKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MzYtXFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9zZXRfZGVudHJ5X3hhdHRyX2xvY2tlZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4Mzc6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVtb3ZlX2RlbnRyeV94YXR0cl0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MzgtXFx0XFx0aWYgKGJwZl9sc21faGFzX2RfaW5vZGVfbG9ja2VkKHByb2cpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgzOS1cXHRcXHRcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX3JlbW92ZV9kZW50cnlfeGF0dHJfbG9ja2VkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg0MDpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg0MS1cXHRcXHRpZiAoIWVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDItXFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9keW5wdHJfZnJvbV9maWxlX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4NDM6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODQ0LVxcdFxcdGlmIChlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zbGVlcGFibGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODQ1LVxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4NDY6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDctXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg3MT1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTQ4LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk0OTpcXHRcXHRpZiAoZGVzYy1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYWRkXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk1MC1cXHRcXHQgICAgaXNfYnBmX3JidHJlZV9hZGRfa2Z1bmMoZGVzYy1cXHUwMDNlZnVuY19pZCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk2Mi1cXHRcXHRcXHRcXHRcXHRcXHRub2RlX29mZnNldF9yZWcsIGluc24sIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2MzpcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2NDpcXHRcXHQgICBkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmRvbmx5X2Nhc3RdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTY1LVxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTY2LVxcdFxcdCpjbnQgPSAxO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2NzpcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjgtXFx0XFx0ICAgKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0ZTRVNTSU9OIHx8XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5ODEtXFx0XFx0KmNudCA9IDM7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTgyOlxcdH0gZWxzZSBpZiAoZGVzYy1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk4My1cXHRcXHQgICAoZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT04gfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5OS1cXHRcXHQqY250ID0gNjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMDA6XFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAwMS1cXHRcXHQvKiBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldyhcXHUwMDI2aXQsIHN0YXJ0LCBlbmQpOyBSMT1cXHUwMDI2aXQsIFIyPXN0YXJ0LCBSMz1lbmQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyMy1cXHRcXHQqY250ID0gaTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMjQ6XFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMjUtXFx0XFx0LyogaW5saW5lIGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCk7IFIxPVxcdTAwMjZpdCwgcmV0dXJucyBcXHUwMDI2cy1cXHUwMDNlY3VyIG9yIE5VTEwgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA0MC1cXHRcXHQqY250ID0gaTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwNDE6XFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwNDItXFx0XFx0LyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBpcyBhIG5vLW9wOyBlbWl0IGEgbm9wIHRvIGRyb3AgdGhlIGNhbGwgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MDMuNzc0Njc2OTc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjQ4MzAwMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBGb2N1cyBTeW1ib2wgUmV2aWV3IGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGlzIHJpZ2h0IGZvciB0aGUgQlBGIHZlcmlmaWVyIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3ZSdyZSBlbmFibGluZyBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMg4oCTIHRoZSBrZXkgZnVuY3Rpb25zIHdlJ3JlIHRhcmdldGluZyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4gQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIHdlICpkb24ndCogd2FudCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBmdW5jdGlvbnMsIGFsbG9jYXRvcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIFdlICpkbyogd2FudCB0byB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBBUEkgZW50cnkgcG9pbnRzLiBJbiB0aGlzIGNhc2UsIHRoYXQgYm9pbHMgZG93biB0bzpcblxuKiAgIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnNgXG4qICAgYGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbmBcbiogICBgcmVsZWFzZV9yZWZlcmVuY2VgXG4qICAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYFxuKiAgIGBjaGVja19rZnVuY19jYWxsYFxuKiAgIGBjaGVja19rZnVuY19hcmdzYFxuKiAgIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmBcbiogICBgYnBmX2NoZWNrYFxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBtb2RpZmllZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBtYWtlIHN1cmU6XG5cbjEuICBgdXBkYXRlX3JlZl9vYmpfaWRgIChzdGF0aWMpXG4yLiAgYHVwZGF0ZV9yZWZfb2JqYCAoc3RhdGljKVxuMy4gIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAgKHN0YXRpYylcbjQuICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIChzdGF0aWMpXG41LiAgYGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbmAgKHN0YXRpYylcbjYuICBgcmVsZWFzZV9yZWZlcmVuY2VgIChzdGF0aWMpXG43LiAgYGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc2AgKHN0YXRpYylcbjguICBgY2hlY2tfa2Z1bmNfYXJnc2AgKHN0YXRpYylcbjkuICBgY2hlY2tfa2Z1bmNfY2FsbGAgKHN0YXRpYylcblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGlzIGBicGZfY2hlY2tgLlxuXG5BbHJpZ2h0LCB0aW1lIGZvciBhIGZpbmFsIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogIFllcCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG4qICAgYFJlYXNvbmluZ2A6ICBBIGNvbmNpc2UgZXhwbGFuYXRpb24gaXMgdGhhdCB0aGlzIG1vZGlmaWVzIGxpZmV0aW1lIHRyYWNraW5nLCBpbnZhbGlkYXRpb24sIGFuZCBsZWFrIGNoZWNraW5nIGZvciBpdGVyYXRvci1yZXR1cm5lZCBgUFRSX1RPX0JURl9JRGAgcmVmZXJlbmNlcyBhbmQgZHluYW1pYyBwb2ludGVycyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci5cbiogICBgRm9jdXNTeW1ib2xzYDogIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGFib3ZlIGltcGxlbWVudGluZyB0aGUgY29yZSBsb2dpYywgcGx1cyB0aGUgZW50cnlwb2ludC4gQ2hlY2shXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiAgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxsIGdvb2QuXG5cbkV2ZXJ5dGhpbmcgbG9va3MgY29ycmVjdCBhbmQgdGhvcm91Z2hseSB2ZXJpZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTAxLCJPdXRwdXRUb2tlbnMiOjE5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDoxNi4wMjI5ODAzNTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI4MDAxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzXCIsXG4gICAgXCJjaGVja19yZWZlcmVuY2VfY2hpbGRyZW5cIixcbiAgICBcInJlbGVhc2VfcmVmZXJlbmNlXCIsXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwidW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciB0cmFja2luZyByZWZlcmVuY2UgbGlmZXRpbWVzLCBwYXJlbnRhZ2UsIGFuZCBpbnZhbGlkYXRpb24gb2YgaXRlcmF0b3Itb3duZWQgUFRSX1RPX0JURl9JRCBwb2ludGVycyBhbmQgZHlucHRycyBhY3Jvc3MgaXRlcmF0b3IgYWR2YW5jZSBhbmQgZGVzdHJveSBvcGVyYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdmVyaWZpY2F0aW9uIG9mIGVCUEYgcHJvZ3JhbXMgdmlhIGJwZihCUEZfUFJPR19MT0FEKSBhbmQgaW50cm9kdWNlcyBuZXcgdmFsaWRhdGlvbiBhbmQgcmVmZXJlbmNlIGxlYWsgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzXCIsXG4gICAgXCJjaGVja19yZWZlcmVuY2VfY2hpbGRyZW5cIixcbiAgICBcInJlbGVhc2VfcmVmZXJlbmNlXCIsXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwidW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciB0cmFja2luZyByZWZlcmVuY2UgbGlmZXRpbWVzLCBwYXJlbnRhZ2UsIGFuZCBpbnZhbGlkYXRpb24gb2YgaXRlcmF0b3Itb3duZWQgUFRSX1RPX0JURl9JRCBwb2ludGVycyBhbmQgZHlucHRycyBhY3Jvc3MgaXRlcmF0b3IgYWR2YW5jZSBhbmQgZGVzdHJveSBvcGVyYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdmVyaWZpY2F0aW9uIG9mIGVCUEYgcHJvZ3JhbXMgdmlhIGJwZihCUEZfUFJPR19MT0FEKSBhbmQgaW50cm9kdWNlcyBuZXcgdmFsaWRhdGlvbiBhbmQgcmVmZXJlbmNlIGxlYWsgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDoxNi4xNjU3OTA4NTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzM2MjA0Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MTYuMTY2NjY5OTIyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTAzMzUzMjExNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXIncyBsaWZldGltZSB0cmFja2luZyBmb3IgdHJ1c3RlZCBwb2ludGVycyByZXR1cm5lZCBieSBzdHJ1Y3QgaXRlcmF0b3JzIChlLmcuLCBicGZfaXRlcl90YXNrX3ZtYSkgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgcGFyZW50X2lkIGFuZCBpbnZhbGlkYXRpbmcgdGhlbSB1cG9uIHN1YnNlcXVlbnQgaXRlcmF0b3Igc3RlcHMgb3IgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gQlBGIHByb2dyYW1zLlxcblxcblRoZSBjaGFuZ2VzIGludm9sdmUgcHVyZWx5IGludGVybmFsIEJQRiB2ZXJpZmllciBsb2dpYywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzZWxmdGVzdHMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgbWVjaGFuaXNtcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHJ1bnRpbWUgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaXRlcmF0b3IgYnVncyAoc3VjaCBhcyBVQUYpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhOGM2Mzc0YzJlZDhkOWI4NzRhZjMyYTA4NTZiN2M1ZDcxOTQ4NDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0OToyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzNmI2NTc5Nzg3N2QwLi5hZTMwZGY2MjlkNWIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE1MTgsOSArMTUxOCw5IEBAIHN0cnVjdCBicGZfZHlucHRyX2Rlc2Mge1xuIFxuIC8qXG4gICogVGhlIGxhc3Qgc2VlbiByZXJlZmVyZW5jZWQgb2JqZWN0OyBVcGRhdGVkIGJ5IHVwZGF0ZV9yZWZfb2JqKCkgd2hlbiBhIHJlZ2lzdGVyIHJlZmVycyB0byBhXG4tICogcmVmZXJlbmNlZCBvYmplY3QuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nXG4tICogYWxsb2NhdGVkIG1lbW9yeSBkZXJpdmVkIGZyb20gcmVmZXJlbmNlZCBvYmplY3Qgb3IgY3JlYXRpbmcgYSBkeW5wdHIgd2l0aCBhIHJlZmVyZW5jZWRcbi0gKiBvYmplY3QgYXMgcGFyZW50LlxuKyAqIHJlZmVyZW5jZWQgb2JqZWN0IG9yIGFub3RoZXIgdmVyaWZpZXItdHJhY2tlZCBsaWZldGltZSBhbmNob3IuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jXG4rICogaXMgY2FzdGluZyBhIHJlZmVyZW5jZWQgb2JqZWN0LCByZXR1cm5pbmcgYWxsb2NhdGVkIG1lbW9yeSBkZXJpdmVkIGZyb20gYSByZWZlcmVuY2VkIG9iamVjdFxuKyAqIG9yIGNyZWF0aW5nIGEgZHlucHRyIHdob3NlIGJhY2tpbmcgb2JqZWN0IGhhcyBhIHRyYWNrZWQgbGlmZXRpbWUuXG4gICovXG4gc3RydWN0IHJlZl9vYmpfZGVzYyB7XG4gXHR1MzIgaWQ7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5lYjAxMzk1NDE4MmYyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMzgsMTMgKzIzOCwxOCBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX2tleV9zdG9yZShzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCwgdTY0IHN0YXRlKVxuIFx0XHRcdCAgICAgKHBvaXNvbmVkID8gQlBGX01BUF9LRVlfUE9JU09OIDogMFVMTCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4rc3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmpfaWQoc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgdTMyIGlkLCB1MzIgcGFyZW50X2lkKVxuIHtcbi1cdHJlZl9vYmotXHUwMDNlaWQgPSByZWctXHUwMDNlaWQ7XG4tXHRyZWZfb2JqLVx1MDAzZXBhcmVudF9pZCA9IHJlZy1cdTAwM2VwYXJlbnRfaWQ7XG4rXHRyZWZfb2JqLVx1MDAzZWlkID0gaWQ7XG4rXHRyZWZfb2JqLVx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcbiBcdHJlZl9vYmotXHUwMDNlY250Kys7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4re1xuK1x0dXBkYXRlX3JlZl9vYmpfaWQocmVmX29iaiwgcmVnLVx1MDAzZWlkLCByZWctXHUwMDNlcGFyZW50X2lkKTtcbit9XG4rXG4gc3RhdGljIGludCB2YWxpZGF0ZV9yZWZfb2JqKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmopXG4ge1xuIFx0aWYgKHJlZl9vYmotXHUwMDNlY250IFx1MDAzZSAxKSB7XG5AQCAtOTc3LDcgKzk4Miw3IEBAIHN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcbiB7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xuLVx0aW50IHNwaSwgaSwgajtcbitcdGludCBzcGksIGksIGosIGVycjtcbiBcbiBcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xuIFx0aWYgKHNwaSBcdTAwM2MgMClcbkBAIC05ODcsOCArOTkyLDExIEBAIHN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaSAtIGldO1xuIFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3QgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuIFxuLVx0XHRpZiAoaSA9PSAwKVxuLVx0XHRcdFdBUk5fT05fT05DRShyZWxlYXNlX3JlZmVyZW5jZShlbnYsIHN0LVx1MDAzZWlkKSk7XG4rXHRcdGlmIChpID09IDApIHtcbitcdFx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZShlbnYsIHN0LVx1MDAzZWlkKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuIFxuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBzdCk7XG4gXG5AQCAtNjE0MCw5ICs2MTQ4LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdH1cbiBcbiBcdGlmIChhdHlwZSA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IG1hcmtfYnRmX2xkX3JlZyhlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLCByZXQsIHJlZy1cdTAwM2VidGYsIGJ0Zl9pZCwgZmxhZyk7XG4rXHRcdGVudW0gYnBmX3JlZ190eXBlIHJlZ190eXBlID0gcmV0O1xuK1x0XHR1MzIgcGFyZW50X2lkID0gcmVnLVx1MDAzZXBhcmVudF9pZDtcbitcbitcdFx0cmV0ID0gbWFya19idGZfbGRfcmVnKGVudiwgcmVncywgdmFsdWVfcmVnbm8sIHJlZ190eXBlLFxuK1x0XHRcdFx0ICAgICAgcmVnLVx1MDAzZWJ0ZiwgYnRmX2lkLCBmbGFnKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgXHUwMDI2IFBUUl9UUlVTVEVEKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEocmVnc1t2YWx1ZV9yZWdub10udHlwZSBcdTAwMjYgKE1FTV9SQ1UgfCBNRU1fUEVSQ1BVIHwgTUVNX1VTRVIpKSlcbitcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC05NDU2LDYgKzk0NzEsMjQgQEAgc3RhdGljIGludCBpZHN0YWNrX3BvcChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdHJldHVybiBpZG1hcC1cdTAwM2VtYXBbLS1pZG1hcC1cdTAwM2VjbnRdLm9sZDtcbiB9XG4gXG4rc3RhdGljIGludCBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHBhcmVudF9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2c3RhdGUtXHUwMDNlYWNxdWlyZWRfcmVmczsgaSsrKSB7XG4rXHRcdGlmICh2c3RhdGUtXHUwMDNlcmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUilcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKHZzdGF0ZS1cdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBwYXJlbnRfaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHZlcmJvc2UoZW52LCBcIkxlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxuXCIsXG4rXHRcdFx0dnN0YXRlLVx1MDAzZXJlZnNbaV0uaWQsIHZzdGF0ZS1cdTAwM2VyZWZzW2ldLmluc25faWR4KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogUmVsZWFzZSBpZCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb20gaXQgaXRlcmF0aXZlbHkgaW4gYSBERlMgbWFubmVyICovXG4gc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4ge1xuQEAgLTk0NjUsMzEgKzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4gXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuLVx0aW50IGksIGVycjtcbitcdGludCBlcnI7XG4gXG4gXHRpZHN0YWNrLVx1MDAzZWNudCA9IDA7XG4gXHRlcnIgPSBpZHN0YWNrX3B1c2goaWRzdGFjaywgaWQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkge1xuLVx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7XG4tXHRcdFdBUk5fT05fT05DRShlcnIpO1xuLVx0fVxuLVxuIFx0d2hpbGUgKChpZCA9IGlkc3RhY2tfcG9wKGlkc3RhY2spKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBDaGlsZCByZWZlcmVuY2VzIGFyZSBpbmFjY2Vzc2libGUgYWZ0ZXIgcGFyZW50IGlzIHJlbGVhc2VkLFxuIFx0XHQgKiBhbnkgY2hpbGQgcmVmZXJlbmNlcyB0aGF0IGV4aXN0IGF0IHRoaXMgcG9pbnQgYXJlIGEgbGVhay5cbiBcdFx0ICovXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZzdGF0ZS1cdTAwM2VhY3F1aXJlZF9yZWZzOyBpKyspIHtcbi1cdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0ucGFyZW50X2lkICE9IGlkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0dmVyYm9zZShlbnYsIFwiTGVha2luZyByZWZlcmVuY2UgaWQ9JWQgYWxsb2NfaW5zbj0lZC4gUmVsZWFzZSBpdCBmaXJzdC5cXG5cIixcbi1cdFx0XHRcdHZzdGF0ZS1cdTAwM2VyZWZzW2ldLmlkLCB2c3RhdGUtXHUwMDNlcmVmc1tpXS5pbnNuX2lkeCk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIGlkKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHRpZiAoZmluZF9yZWZlcmVuY2Vfc3RhdGUodnN0YXRlLCBpZCkpIHtcbitcdFx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7XG4rXHRcdFx0V0FSTl9PTl9PTkNFKGVycik7XG4gXHRcdH1cbiBcbiBcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoe1xuQEAgLTk1NDEsNiArOTU2OCwzMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0fSkpO1xuIH1cbiBcbitzdGF0aWMgaW50IGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgcGFyZW50X2lkKVxuK3tcbitcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqdW51c2VkO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnRfaWQpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIHBhcmVudF9pZCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0LypcbitcdCAqIFN0cnVjdCBpdGVyYXRvcnMgY2FuIHJlbGVhc2UgdGhlIHByZXZpb3VzIGVsZW1lbnQgb24gZWFjaCBuZXh0IGNhbGwuXG4rXHQgKiBQVFJfVE9fTUVNIGl0ZXJhdG9yIHJlc3VsdHMgdXNlIHN0b3JhZ2UgdGhhdCByZW1haW5zIHZhbGlkIHVudGlsIGRlc3Ryb3kuXG4rXHQgKi9cbitcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoe1xuK1x0XHRpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gcGFyZW50X2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRicGZfZGlhZ19yZWNvcmRfc2NydWIoZW52LCByZWcsIEJQRl9ESUFHX01PRF9SRUZfUkVMRUFTRSk7XG4rXHRcdG1hcmtfcmVnX2ludmFsaWQoZW52LCByZWcpO1xuK1x0fSkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG5AQCAtMTMxMDAsNiArMTMxNTQsMTAgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdHJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pO1xuIFx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRcdGlmIChtZXRhLVx1MDAzZWJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICBpID09IDAgXHUwMDI2XHUwMDI2ICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2VwYXJlbnRfaWQpXG4rXHRcdFx0XHRcdHVwZGF0ZV9yZWZfb2JqX2lkKFx1MDAyNm1ldGEtXHUwMDNlcmVmX29iaiwgcmVnLVx1MDAzZXBhcmVudF9pZCwgMCk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG5AQCAtMTM5OTUsNiArMTQwNTMsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIFx1MDAyNm1ldGEpLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpKSB7XG4rXHRcdGVyciA9IGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyhlbnYsIG1ldGEucmVmX29iai5pZCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbiBcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcbkBAIC0xNDEwNSw2ICsxNDE3MCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTtcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gcHRyX3R5cGVfaWQ7XG4rXG4rXHRcdFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICEodHlwZSBcdTAwMjYgTUVNX1JDVSkpXG4rXHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkO1xuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19rZnVuY19yZXRfbnVsbChcdTAwMjZtZXRhKSkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5pbmRleCA3NjAxMmRiYmRiNDEzLi5hNTVlNWNmMjk0NzRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuQEAgLTI4LDYgKzI4LDI5OCBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIHZtYV9wdHItXHUwMDNldm1fc3RhcnQ7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcbitcdHU2NCB2bV9zdGFydDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCFuZXh0X3ZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dm1fc3RhcnQgPSB2bWFfcHRyLVx1MDAzZXZtX3N0YXJ0O1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIHZtX3N0YXJ0O1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX25leHRfbnVsbChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcbitcdHU2NCB2bV9zdGFydDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKG5leHRfdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR2bV9zdGFydCA9IHZtYV9wdHItXHUwMDNldm1fc3RhcnQ7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gdm1fc3RhcnQ7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfZmllbGRfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbitcdHN0cnVjdCBmaWxlICpmaWxlX3B0cjtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZmlsZV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX2ZpbGU7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoZmlsZV9wdHIpXG4rXHRcdHJldHVybiBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4rXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyLCAqbmV4dF92bWFfcHRyO1xuK1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuK1x0dTMyIG1vZGU7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0aWYgKCFmaWxlX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRuZXh0X3ZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIW5leHRfdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtb2RlID0gZmlsZV9wdHItXHUwMDNlZl9tb2RlO1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIG1vZGU7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJMZWFraW5nIHJlZmVyZW5jZSBpZD1cIilcbitpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0aWYgKCFmaWxlX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFx1MDAyNmR5bnB0cik7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJMZWFraW5nIHJlZmVyZW5jZSBpZD1cIilcbitpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0aWYgKCFmaWxlX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFx1MDAyNmR5bnB0cik7XG4rXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfZmlsZV9keW5wdHJfZGlzY2FyZF9iZWZvcmVfYWR2YW5jZShjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbitcdHN0cnVjdCBicGZfZHlucHRyIGR5bnB0cjtcbitcdHN0cnVjdCBmaWxlICpmaWxlX3B0cjtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZmlsZV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX2ZpbGU7XG4rXHRpZiAoIWZpbGVfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9keW5wdHJfZnJvbV9maWxlKGZpbGVfcHRyLCAwLCBcdTAwMjZkeW5wdHIpO1xuK1x0YnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoXHUwMDI2ZHlucHRyKTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9jdXJyZW50X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAodm1hX3B0cilcbitcdFx0YnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHIgPSBOVUxMO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICh2bWFfcHRyKSB7XG4rXHRcdG1tX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fbW07XG4rXHRcdC8qIGV4ZV9maWxlIGhhcyBSQ1UgcHJvdGVjdGlvbiBpbmRlcGVuZGVudCBvZiB0aGUgaXRlcmF0b3IuICovXG4rXHRcdGlmIChtbV9wdHIpXG4rXHRcdFx0ZmlsZV9wdHIgPSBtbV9wdHItXHUwMDNlZXhlX2ZpbGU7XG4rXHR9XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoZmlsZV9wdHIpXG4rXHRcdHJldHVybiBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9yY3VfZmllbGRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjtcbitcdHN0cnVjdCBmaWxlICpmaWxlX3B0ciA9IE5VTEw7XG4rXHR1MzIgbW9kZSA9IDA7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKHZtYV9wdHIpIHtcbitcdFx0bW1fcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9tbTtcbitcdFx0aWYgKG1tX3B0cilcbitcdFx0XHRmaWxlX3B0ciA9IG1tX3B0ci1cdTAwM2VleGVfZmlsZTtcbitcdH1cbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmIChmaWxlX3B0cilcbitcdFx0bW9kZSA9IGZpbGVfcHRyLVx1MDAzZWZfbW9kZTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiBtb2RlO1xuK31cbitcbiBTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4gaW50IGl0ZXJfbmV4dF90cnVzdGVkX29yX251bGwoY29uc3Qgdm9pZCAqY3R4KVxuQEAgLTY2LDYgKzM1OCw0NiBAQCBpbnQgaXRlcl9uZXh0X3JjdShjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4rXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2dGFza19pdCk7XG4rXHRpZiAoIXRhc2tfcHRyKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19zdWNjZXNzXG4raW50IGl0ZXJfbmV4dF9yY3VfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2sgdGFza19pdDtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX25ldyhcdTAwMjZ0YXNrX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR0YXNrX3B0ciA9IGJwZl9pdGVyX3Rhc2tfbmV4dChcdTAwMjZ0YXNrX2l0KTtcbitcdGlmICghdGFza19wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNnRhc2tfaXQpO1xuK1x0YnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4gaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDoxNi4xNjY2NzE4ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzMzUyODcwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBvZiBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBhZGRyZXNzaW5nIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYE5lZWRzS01TQU4gPSBmYWxzZWAsIGJ1dCB3ZSBuZWVkIHRvIGJlIHJpZ29yb3VzLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgZmlsZXMgcmVsYXRlZCB0byBCUEYgdmVyaWZpY2F0aW9uOiBgYnBmX3ZlcmlmaWVyLmhgLCBgdmVyaWZpZXIuY2AsIGFuZCBhIHNlbGZ0ZXN0IGZpbGUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGltcHJvdmVkIGxpZmV0aW1lIHRyYWNraW5nIGZvciBwb2ludGVycyBvYnRhaW5lZCB0aHJvdWdoIEJQRiBzdHJ1Y3QgaXRlcmF0b3JzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgcHJldmVudGluZyBVQUYgYW5kIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgdXBkYXRlX3JlZl9vYmpfaWQoKWAsIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcigpYCwgZW5oYW5jZW1lbnRzIHRvIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oKWAsIGFuZCBgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKClgIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCBhZGp1c3RtZW50cyB0byBgY2hlY2tfa2Z1bmNfYXJnc2AgYW5kIGBjaGVja19rZnVuY19jYWxsYC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpZGVhIGlzIHRvIGFuY2hvciB0aGUgbGlmZXRpbWUgb2YgdGhlc2UgaXRlcmF0b3ItcmV0dXJuZWQgcG9pbnRlcnMgKGBwYXJlbnRfaWRgKSBhbmQgaW52YWxpZGF0ZSB0aGVtIHdoZW4gdGhlIGl0ZXJhdG9yIGFkdmFuY2VzLlxuXG5UaGUgZnVuZGFtZW50YWwgcHJvYmxlbSBpcyB0aGF0LCBwcmV2aW91c2x5LCBCUEYgcHJvZ3JhbXMgY291bGQgdXNlIHBvaW50ZXJzIHJldHVybmVkIGJ5IGl0ZXJhdG9ycyBhZnRlciB0aGUgaXRlcmF0b3IgaGFkIG1vdmVkIG9uLCByZXN1bHRpbmcgaW4gYSBwb3RlbnRpYWxseSBVQUYgc2l0dWF0aW9uLiBUaGlzIHBhdGNoIG1pdGlnYXRlcyB0aGF0IGJ5IGludmFsaWRhdGluZyB0aGUgcG9pbnRlcnMuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYXBwbHkgb3VyIEtNU0FOIGxlbnMuIEZyb20gYSBwcmVsaW1pbmFyeSByZWFkLCB0aGUgYW5zd2VyIGlzIFwibm9cIi5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2ggZGV0YWlsczpcblxuMS4gICoqTm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlKio6IFRoZSBtb2RpZmllZCBzdHJ1Y3RzIGFyZSBpbnRlcm5hbCB0byB0aGUgdmVyaWZpZXIsIG5vIHJpc2sgb2YgZGF0YSBsZWFrYWdlLlxuMi4gICoqTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgYnJhbmNoaW5nKio6IEluaXRpYWxpemF0aW9ucyBzZWVtIHNvdW5kLiBgZXJyYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAuIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgdXNlcyBhbHJlYWR5IGluaXRpYWxpemVkIHJlZ3MuICBMb29wIGl0ZXJhdG9ycyBpbiBgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYCBpdGVyYXRlIG92ZXIgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgZmllbGRzLiBTaW1pbGFybHksIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnNgIHJlbGllcyBvbiBpbml0aWFsaXplZCB2YXJpYWJsZXMgYW5kIHN0YXRlcy5cbjMuICAqKk5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBhbGxvY2F0aW9ucyoqOiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9uIHNjaGVtZXMuXG40LiAgKipObyBib3VuZGFyeSBvciBsZW5ndGggbWFuaXB1bGF0aW9ucyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMqKjogTm90aGluZyBpbiB0aGUgcGF0Y2ggc3VnZ2VzdHMgdGhhdCB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMgYmVjb21lIGFjY2Vzc2libGUuXG5cblRoZSBwYXRjaCBhaW1zIHRvIGZpeCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUuIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIGZvciBkZXRlY3RpbmcgdGhpcyBraW5kIG9mIGJ1Zy4gVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIEtNU0FOIHJ1bGVzLCB3ZSAqZG9uJ3QqIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIGNoYW5nZXMgYXJlIGFib3V0IHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gdGhhdCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi4gSXQncyBhIHZlcmlmaWVyIHN0YXRpYyBhbmFseXNpcyBpbXByb3ZlbWVudC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gcHJlcGFyZSB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDI1LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDoyNi41MDE5NjIyNzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXIncyBsaWZldGltZSB0cmFja2luZyBmb3IgdHJ1c3RlZCBwb2ludGVycyByZXR1cm5lZCBieSBzdHJ1Y3QgaXRlcmF0b3JzIChlLmcuLCBicGZfaXRlcl90YXNrX3ZtYSkgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgcGFyZW50X2lkIGFuZCBpbnZhbGlkYXRpbmcgdGhlbSB1cG9uIHN1YnNlcXVlbnQgaXRlcmF0b3Igc3RlcHMgb3IgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gQlBGIHByb2dyYW1zLlxcblxcblRoZSBjaGFuZ2VzIGludm9sdmUgcHVyZWx5IGludGVybmFsIEJQRiB2ZXJpZmllciBsb2dpYywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzZWxmdGVzdHMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgbWVjaGFuaXNtcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHJ1bnRpbWUgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaXRlcmF0b3IgYnVncyAoc3VjaCBhcyBVQUYpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXIncyBsaWZldGltZSB0cmFja2luZyBmb3IgdHJ1c3RlZCBwb2ludGVycyByZXR1cm5lZCBieSBzdHJ1Y3QgaXRlcmF0b3JzIChlLmcuLCBicGZfaXRlcl90YXNrX3ZtYSkgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgcGFyZW50X2lkIGFuZCBpbnZhbGlkYXRpbmcgdGhlbSB1cG9uIHN1YnNlcXVlbnQgaXRlcmF0b3Igc3RlcHMgb3IgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gQlBGIHByb2dyYW1zLlxcblxcblRoZSBjaGFuZ2VzIGludm9sdmUgcHVyZWx5IGludGVybmFsIEJQRiB2ZXJpZmllciBsb2dpYywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzZWxmdGVzdHMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgbWVjaGFuaXNtcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHJ1bnRpbWUgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaXRlcmF0b3IgYnVncyAoc3VjaCBhcyBVQUYpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowz6wqj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 08:47:35 +0000 UTC FinishedAt: 2026-09-11 08:50:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "c335e08b-0c41-4676-bc5c-59ae2edecd7d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "invalidate_iter_owned_btf_ptrs", "check_reference_children", "release_reference", "check_kfunc_call", "check_kfunc_args", "check_ptr_to_btf_access", "unmark_stack_slots_iter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2ludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyYjMzQ7LAogICAgJiMzNDtjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7cmVsZWFzZV9yZWZlcmVuY2UmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX3B0cl90b19idGZfYWNjZXNzJiMzNDssCiAgICAmIzM0O3VubWFya19zdGFja19zbG90c19pdGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5oYW5jZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsaWZldGltZSB0cmFja2luZyBmb3IgdHJ1c3RlZCBwb2ludGVycyByZXR1cm5lZCBieSBzdHJ1Y3QgaXRlcmF0b3JzIChlLmcuLCBicGZfaXRlcl90YXNrX3ZtYSkgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgcGFyZW50X2lkIGFuZCBpbnZhbGlkYXRpbmcgdGhlbSB1cG9uIHN1YnNlcXVlbnQgaXRlcmF0b3Igc3RlcHMgb3IgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gQlBGIHByb2dyYW1zLlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlIHB1cmVseSBpbnRlcm5hbCBCUEYgdmVyaWZpZXIgbG9naWMsIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLCBhbmQgc2VsZnRlc3RzLiBObyBrZXJuZWwtdG8tdXNlciBjb3B5IG1lY2hhbmlzbXMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBydW50aW1lIHNhZmV0eSB2aW9sYXRpb25zIHJlc3VsdGluZyBmcm9tIGl0ZXJhdG9yIGJ1Z3MgKHN1Y2ggYXMgVUFGKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBmb3IgdHJhY2tpbmcgcmVmZXJlbmNlIGxpZmV0aW1lcywgcGFyZW50YWdlLCBhbmQgaW52YWxpZGF0aW9uIG9mIGl0ZXJhdG9yLW93bmVkIFBUUl9UT19CVEZfSUQgcG9pbnRlcnMgYW5kIGR5bnB0cnMgYWNyb3NzIGl0ZXJhdG9yIGFkdmFuY2UgYW5kIGRlc3Ryb3kgb3BlcmF0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHZlcmlmaWNhdGlvbiBvZiBlQlBGIHByb2dyYW1zIHZpYSBicGYoQlBGX1BST0dfTE9BRCkgYW5kIGludHJvZHVjZXMgbmV3IHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSBsZWFrIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRhOGM2Mzc0YzJlZDhkOWI4NzRhZjMyYTA4NTZiN2M1ZDcxOTQ4NDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0OToyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uYWUzMGRmNjI5ZDViMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xNTE4LDkgJiM0MzsxNTE4LDkgQEAgc3RydWN0IGJwZl9keW5wdHJfZGVzYyB7XG4gXG4gLypcbiAgKiBUaGUgbGFzdCBzZWVuIHJlcmVmZXJlbmNlZCBvYmplY3Q7IFVwZGF0ZWQgYnkgdXBkYXRlX3JlZl9vYmooKSB3aGVuIGEgcmVnaXN0ZXIgcmVmZXJzIHRvIGFcbi0gKiByZWZlcmVuY2VkIG9iamVjdC4gVXNlZCB3aGVuIHRoZSBoZWxwZXIgb3Iga2Z1bmMgaXMgY2FzdGluZyBhIHJlZmVyZW5jZWQgb2JqZWN0LCByZXR1cm5pbmdcbi0gKiBhbGxvY2F0ZWQgbWVtb3J5IGRlcml2ZWQgZnJvbSByZWZlcmVuY2VkIG9iamVjdCBvciBjcmVhdGluZyBhIGR5bnB0ciB3aXRoIGEgcmVmZXJlbmNlZFxuLSAqIG9iamVjdCBhcyBwYXJlbnQuXG4mIzQzOyAqIHJlZmVyZW5jZWQgb2JqZWN0IG9yIGFub3RoZXIgdmVyaWZpZXItdHJhY2tlZCBsaWZldGltZSBhbmNob3IuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jXG4mIzQzOyAqIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIGEgcmVmZXJlbmNlZCBvYmplY3RcbiYjNDM7ICogb3IgY3JlYXRpbmcgYSBkeW5wdHIgd2hvc2UgYmFja2luZyBvYmplY3QgaGFzIGEgdHJhY2tlZCBsaWZldGltZS5cbiAgKi9cbiBzdHJ1Y3QgcmVmX29ial9kZXNjIHtcbiBcdHUzMiBpZDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmViMDEzOTU0MTgyZjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTIzOCwxMyAmIzQzOzIzOCwxOCBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX2tleV9zdG9yZShzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCwgdTY0IHN0YXRlKVxuIFx0XHRcdCAgICAgKHBvaXNvbmVkID8gQlBGX01BUF9LRVlfUE9JU09OIDogMFVMTCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzQzO3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqX2lkKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHUzMiBpZCwgdTMyIHBhcmVudF9pZClcbiB7XG4tXHRyZWZfb2JqLVx1MDAzZWlkID0gcmVnLVx1MDAzZWlkO1xuLVx0cmVmX29iai1cdTAwM2VwYXJlbnRfaWQgPSByZWctXHUwMDNlcGFyZW50X2lkO1xuJiM0MztcdHJlZl9vYmotXHUwMDNlaWQgPSBpZDtcbiYjNDM7XHRyZWZfb2JqLVx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcbiBcdHJlZl9vYmotXHUwMDNlY250JiM0MzsmIzQzOztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4mIzQzO3tcbiYjNDM7XHR1cGRhdGVfcmVmX29ial9pZChyZWZfb2JqLCByZWctXHUwMDNlaWQsIHJlZy1cdTAwM2VwYXJlbnRfaWQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmFsaWRhdGVfcmVmX29iaihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqKVxuIHtcbiBcdGlmIChyZWZfb2JqLVx1MDAzZWNudCBcdTAwM2UgMSkge1xuQEAgLTk3Nyw3ICYjNDM7OTgyLDcgQEAgc3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxuIHtcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7XG4tXHRpbnQgc3BpLCBpLCBqO1xuJiM0MztcdGludCBzcGksIGksIGosIGVycjtcbiBcbiBcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xuIFx0aWYgKHNwaSBcdTAwM2MgMClcbkBAIC05ODcsOCAmIzQzOzk5MiwxMSBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSBpXTtcbiBcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbiBcbi1cdFx0aWYgKGkgPT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UocmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC1cdTAwM2VpZCkpO1xuJiM0MztcdFx0aWYgKGkgPT0gMCkge1xuJiM0MztcdFx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZShlbnYsIHN0LVx1MDAzZWlkKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBzdCk7XG4gXG5AQCAtNjE0MCw5ICYjNDM7NjE0OCwxNiBAQCBzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gXG4gXHRpZiAoYXR5cGUgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmV0LCByZWctXHUwMDNlYnRmLCBidGZfaWQsIGZsYWcpO1xuJiM0MztcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnX3R5cGUgPSByZXQ7XG4mIzQzO1x0XHR1MzIgcGFyZW50X2lkID0gcmVnLVx1MDAzZXBhcmVudF9pZDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmVnX3R5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgcmVnLVx1MDAzZWJ0ZiwgYnRmX2lkLCBmbGFnKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKChyZWdzW3ZhbHVlX3JlZ25vXS50eXBlIFx1MDAyNiBQVFJfVFJVU1RFRCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIShyZWdzW3ZhbHVlX3JlZ25vXS50eXBlIFx1MDAyNiAoTUVNX1JDVSB8IE1FTV9QRVJDUFUgfCBNRU1fVVNFUikpKVxuJiM0MztcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC05NDU2LDYgJiM0Mzs5NDcxLDI0IEBAIHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRyZXR1cm4gaWRtYXAtXHUwMDNlbWFwWy0taWRtYXAtXHUwMDNlY250XS5vbGQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcGFyZW50X2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnN0YXRlLVx1MDAzZWFjcXVpcmVkX3JlZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHZzdGF0ZS1cdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBwYXJlbnRfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR2c3RhdGUtXHUwMDNlcmVmc1tpXS5pZCwgdnN0YXRlLVx1MDAzZXJlZnNbaV0uaW5zbl9pZHgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBSZWxlYXNlIGlkIGFuZCBvYmplY3RzIGRlcml2ZWQgZnJvbSBpdCBpdGVyYXRpdmVseSBpbiBhIERGUyBtYW5uZXIgKi9cbiBzdGF0aWMgaW50IHJlbGVhc2VfcmVmZXJlbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZClcbiB7XG5AQCAtOTQ2NSwzMSAmIzQzOzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4gXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuLVx0aW50IGksIGVycjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWRzdGFjay1cdTAwM2VjbnQgPSAwO1xuIFx0ZXJyID0gaWRzdGFja19wdXNoKGlkc3RhY2ssIGlkKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoZmluZF9yZWZlcmVuY2Vfc3RhdGUodnN0YXRlLCBpZCkpIHtcbi1cdFx0ZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpO1xuLVx0XHRXQVJOX09OX09OQ0UoZXJyKTtcbi1cdH1cbi1cbiBcdHdoaWxlICgoaWQgPSBpZHN0YWNrX3BvcChpZHN0YWNrKSkpIHtcbiBcdFx0LypcbiBcdFx0ICogQ2hpbGQgcmVmZXJlbmNlcyBhcmUgaW5hY2Nlc3NpYmxlIGFmdGVyIHBhcmVudCBpcyByZWxlYXNlZCxcbiBcdFx0ICogYW55IGNoaWxkIHJlZmVyZW5jZXMgdGhhdCBleGlzdCBhdCB0aGlzIHBvaW50IGFyZSBhIGxlYWsuXG4gXHRcdCAqL1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2c3RhdGUtXHUwMDNlYWNxdWlyZWRfcmVmczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0ucGFyZW50X2lkICE9IGlkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxuXCYjMzQ7LFxuLVx0XHRcdFx0dnN0YXRlLVx1MDAzZXJlZnNbaV0uaWQsIHZzdGF0ZS1cdTAwM2VyZWZzW2ldLmluc25faWR4KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIGlkKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZpbmRfcmVmZXJlbmNlX3N0YXRlKHZzdGF0ZSwgaWQpKSB7XG4mIzQzO1x0XHRcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhlbnYsIGlkKTtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKGVycik7XG4gXHRcdH1cbiBcbiBcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoe1xuQEAgLTk1NDEsNiAmIzQzOzk1NjgsMzMgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdH0pKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXBhcmVudF9pZCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKGVudiwgcGFyZW50X2lkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdHJ1Y3QgaXRlcmF0b3JzIGNhbiByZWxlYXNlIHRoZSBwcmV2aW91cyBlbGVtZW50IG9uIGVhY2ggbmV4dCBjYWxsLlxuJiM0MztcdCAqIFBUUl9UT19NRU0gaXRlcmF0b3IgcmVzdWx0cyB1c2Ugc3RvcmFnZSB0aGF0IHJlbWFpbnMgdmFsaWQgdW50aWwgZGVzdHJveS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCB1bnVzZWQsIHJlZywgKHtcbiYjNDM7XHRcdGlmIChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgfHwgcmVnLVx1MDAzZXBhcmVudF9pZCAhPSBwYXJlbnRfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpO1xuJiM0MztcdFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XG4mIzQzO1x0fSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuQEAgLTEzMTAwLDYgJiM0MzsxMzE1NCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdFx0cmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7XG4gXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0XHRcdGlmIChtZXRhLVx1MDAzZWJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fZmlsZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgIGkgPT0gMCBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXBhcmVudF9pZClcbiYjNDM7XHRcdFx0XHRcdHVwZGF0ZV9yZWZfb2JqX2lkKFx1MDAyNm1ldGEtXHUwMDNlcmVmX29iaiwgcmVnLVx1MDAzZXBhcmVudF9pZCwgMCk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG5AQCAtMTM5OTUsNiAmIzQzOzE0MDUzLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIFx1MDAyNm1ldGEpLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpKSB7XG4mIzQzO1x0XHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0YnBmX2RpYWdfcmVjb3JkX2NhbGxlcl9zYXZlZChlbnYsIHJlZ3MpO1xuIFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG5AQCAtMTQxMDUsNiAmIzQzOzE0MTcwLDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmID0gZGVzY19idGY7XG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLnR5cGUgPSB0eXBlO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNiAhKHR5cGUgXHUwMDI2IE1FTV9SQ1UpKVxuJiM0MztcdFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5wYXJlbnRfaWQgPSBtZXRhLnJlZl9vYmouaWQ7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFx1MDAyNm1ldGEpKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcbmluZGV4IDc2MDEyZGJiZGI0MTMuLmE1NWU1Y2YyOTQ3NGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5AQCAtMjgsNiAmIzQzOzI4LDI5OCBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoIXZtYV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiB2bWFfcHRyLVx1MDAzZXZtX3N0YXJ0O1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4mIzQzO1x0dTY0IHZtX3N0YXJ0O1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoIW5leHRfdm1hX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR2bV9zdGFydCA9IHZtYV9wdHItXHUwMDNldm1fc3RhcnQ7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiB2bV9zdGFydDtcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5O1wmIzM0OylcbiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX25leHRfbnVsbChjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4mIzQzO1x0dTY0IHZtX3N0YXJ0O1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAobmV4dF92bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHZtX3N0YXJ0ID0gdm1hX3B0ci1cdTAwM2V2bV9zdGFydDtcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIHZtX3N0YXJ0O1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfZmllbGRfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoZmlsZV9wdHIpXG4mIzQzO1x0XHRyZXR1cm4gZmlsZV9wdHItXHUwMDNlZl9tb2RlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfZmllbGRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuJiM0MztcdHUzMiBtb2RlO1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuJiM0MztcdGlmICghZmlsZV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICghbmV4dF92bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG1vZGUgPSBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiBtb2RlO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPVwmIzM0OylcbiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0aWYgKCF2bWFfcHRyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuJiM0MztcdGlmICghZmlsZV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0YnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsIFx1MDAyNmR5bnB0cik7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFx1MDAyNmR5bnB0cik7XG4mIzQzO291dDpcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9XCYjMzQ7KVxuJiM0MztpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIGR5bnB0cjtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoIXZtYV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX2ZpbGU7XG4mIzQzO1x0aWYgKCFmaWxlX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0YnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoXHUwMDI2ZHlucHRyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2Rpc2NhcmRfYmVmb3JlX2FkdmFuY2UoY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIGR5bnB0cjtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAoIXZtYV9wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX2ZpbGU7XG4mIzQzO1x0aWYgKCFmaWxlX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbiYjNDM7XHRicGZfZHlucHRyX2ZpbGVfZGlzY2FyZChcdTAwMjZkeW5wdHIpO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfY3VycmVudF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuJiM0MztcbiYjNDM7XHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICghdm1hX3B0cilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICh2bWFfcHRyKVxuJiM0MztcdFx0YnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7XG4mIzQzO291dDpcbiYjNDM7XHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX3JjdV9maWVsZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuJiM0MztcbiYjNDM7XHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmICh2bWFfcHRyKSB7XG4mIzQzO1x0XHRtbV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX21tO1xuJiM0MztcdFx0LyogZXhlX2ZpbGUgaGFzIFJDVSBwcm90ZWN0aW9uIGluZGVwZW5kZW50IG9mIHRoZSBpdGVyYXRvci4gKi9cbiYjNDM7XHRcdGlmIChtbV9wdHIpXG4mIzQzO1x0XHRcdGZpbGVfcHRyID0gbW1fcHRyLVx1MDAzZWV4ZV9maWxlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmIChmaWxlX3B0cilcbiYjNDM7XHRcdHJldHVybiBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX3JjdV9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDtcbiYjNDM7XHR1MzIgbW9kZSA9IDA7XG4mIzQzO1xuJiM0MztcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbiYjNDM7XHRpZiAodm1hX3B0cikge1xuJiM0MztcdFx0bW1fcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9tbTtcbiYjNDM7XHRcdGlmIChtbV9wdHIpXG4mIzQzO1x0XHRcdGZpbGVfcHRyID0gbW1fcHRyLVx1MDAzZWV4ZV9maWxlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdGlmIChmaWxlX3B0cilcbiYjNDM7XHRcdG1vZGUgPSBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuJiM0MztcdHJldHVybiBtb2RlO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcJiMzNDspXG4gaW50IGl0ZXJfbmV4dF90cnVzdGVkX29yX251bGwoY29uc3Qgdm9pZCAqY3R4KVxuQEAgLTY2LDYgJiM0MzszNTgsNDYgQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3B0cjtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuJiM0MztcbiYjNDM7XHR0YXNrX3B0ciA9IGJwZl9pdGVyX3Rhc2tfbmV4dChcdTAwMjZ0YXNrX2l0KTtcbiYjNDM7XHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2dGFza19pdCk7XG4mIzQzO1x0aWYgKCF0YXNrX3B0cilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfcmN1X3Rhc2tfdGVzdCh0YXNrX3B0cik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGl0ZXJfbmV4dF9yY3VfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX3Rhc2sgdGFza19pdDtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90YXNrX25ldyhcdTAwMjZ0YXNrX2l0LCBjdXJfdGFzaywgMCk7XG4mIzQzO1xuJiM0MztcdHRhc2tfcHRyID0gYnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNnRhc2tfaXQpO1xuJiM0MztcdGlmICghdGFza19wdHIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNnRhc2tfaXQpO1xuJiM0MztcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCYjMzQ7KVxuIGludCBpdGVyX25leHRfcmN1X29yX251bGwoY29uc3Qgdm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2ludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyYjMzQ7LAogICAgJiMzNDtjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7cmVsZWFzZV9yZWZlcmVuY2UmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX3B0cl90b19idGZfYWNjZXNzJiMzNDssCiAgICAmIzM0O3VubWFya19zdGFja19zbG90c19pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMgZm9yIHRyYWNraW5nIHJlZmVyZW5jZSBsaWZldGltZXMsIHBhcmVudGFnZSwgYW5kIGludmFsaWRhdGlvbiBvZiBpdGVyYXRvci1vd25lZCBQVFJfVE9fQlRGX0lEIHBvaW50ZXJzIGFuZCBkeW5wdHJzIGFjcm9zcyBpdGVyYXRvciBhZHZhbmNlIGFuZCBkZXN0cm95IG9wZXJhdGlvbnMuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyB2ZXJpZmljYXRpb24gb2YgZUJQRiBwcm9ncmFtcyB2aWEgYnBmKEJQRl9QUk9HX0xPQUQpIGFuZCBpbnRyb2R1Y2VzIG5ldyB2YWxpZGF0aW9uIGFuZCByZWZlcmVuY2UgbGVhayBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YThjNjM3NGMyZWQ4ZDliODc0YWYzMmEwODU2YjdjNWQ3MTk0ODQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDk6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi5hZTMwZGY2MjlkNWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE1MTgsOSAmIzQzOzE1MTgsOSBAQCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjIHsKIAogLyoKICAqIFRoZSBsYXN0IHNlZW4gcmVyZWZlcmVuY2VkIG9iamVjdDsgVXBkYXRlZCBieSB1cGRhdGVfcmVmX29iaigpIHdoZW4gYSByZWdpc3RlciByZWZlcnMgdG8gYQotICogcmVmZXJlbmNlZCBvYmplY3QuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nCi0gKiBhbGxvY2F0ZWQgbWVtb3J5IGRlcml2ZWQgZnJvbSByZWZlcmVuY2VkIG9iamVjdCBvciBjcmVhdGluZyBhIGR5bnB0ciB3aXRoIGEgcmVmZXJlbmNlZAotICogb2JqZWN0IGFzIHBhcmVudC4KJiM0MzsgKiByZWZlcmVuY2VkIG9iamVjdCBvciBhbm90aGVyIHZlcmlmaWVyLXRyYWNrZWQgbGlmZXRpbWUgYW5jaG9yLiBVc2VkIHdoZW4gdGhlIGhlbHBlciBvciBrZnVuYwomIzQzOyAqIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIGEgcmVmZXJlbmNlZCBvYmplY3QKJiM0MzsgKiBvciBjcmVhdGluZyBhIGR5bnB0ciB3aG9zZSBiYWNraW5nIG9iamVjdCBoYXMgYSB0cmFja2VkIGxpZmV0aW1lLgogICovCiBzdHJ1Y3QgcmVmX29ial9kZXNjIHsKIAl1MzIgaWQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWIwMTM5NTQxODJmMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMjM4LDEzICYjNDM7MjM4LDE4IEBAIHN0YXRpYyB2b2lkIGJwZl9tYXBfa2V5X3N0b3JlKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4LCB1NjQgc3RhdGUpCiAJCQkgICAgIChwb2lzb25lZCA/IEJQRl9NQVBfS0VZX1BPSVNPTiA6IDBVTEwpOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQomIzQzO3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqX2lkKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHUzMiBpZCwgdTMyIHBhcmVudF9pZCkKIHsKLQlyZWZfb2JqLSZndDtpZCA9IHJlZy0mZ3Q7aWQ7Ci0JcmVmX29iai0mZ3Q7cGFyZW50X2lkID0gcmVnLSZndDtwYXJlbnRfaWQ7CiYjNDM7CXJlZl9vYmotJmd0O2lkID0gaWQ7CiYjNDM7CXJlZl9vYmotJmd0O3BhcmVudF9pZCA9IHBhcmVudF9pZDsKIAlyZWZfb2JqLSZndDtjbnQmIzQzOyYjNDM7OwogfQogCiYjNDM7c3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmooc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0Mzt7CiYjNDM7CXVwZGF0ZV9yZWZfb2JqX2lkKHJlZl9vYmosIHJlZy0mZ3Q7aWQsIHJlZy0mZ3Q7cGFyZW50X2lkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHZhbGlkYXRlX3JlZl9vYmooc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaikKIHsKIAlpZiAocmVmX29iai0mZ3Q7Y250ICZndDsgMSkgewpAQCAtOTc3LDcgJiM0Mzs5ODIsNyBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKQogewogCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7Ci0JaW50IHNwaSwgaSwgajsKJiM0MzsJaW50IHNwaSwgaSwgaiwgZXJyOwogCiAJc3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7CiAJaWYgKHNwaSAmbHQ7IDApCkBAIC05ODcsOCAmIzQzOzk5MiwxMSBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSAmYW1wO3N0YXRlLSZndDtzdGFja1tzcGkgLSBpXTsKIAkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gJmFtcDtzbG90LSZndDtzcGlsbGVkX3B0cjsKIAotCQlpZiAoaSA9PSAwKQotCQkJV0FSTl9PTl9PTkNFKHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3QtJmd0O2lkKSk7CiYjNDM7CQlpZiAoaSA9PSAwKSB7CiYjNDM7CQkJZXJyID0gcmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC0mZ3Q7aWQpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpOwogCkBAIC02MTQwLDkgJiM0Mzs2MTQ4LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAl9CiAKIAlpZiAoYXR5cGUgPT0gQlBGX1JFQUQgJmFtcDsmYW1wOyB2YWx1ZV9yZWdubyAmZ3Q7PSAwKSB7Ci0JCXJldCA9IG1hcmtfYnRmX2xkX3JlZyhlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLCByZXQsIHJlZy0mZ3Q7YnRmLCBidGZfaWQsIGZsYWcpOwomIzQzOwkJZW51bSBicGZfcmVnX3R5cGUgcmVnX3R5cGUgPSByZXQ7CiYjNDM7CQl1MzIgcGFyZW50X2lkID0gcmVnLSZndDtwYXJlbnRfaWQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmVnX3R5cGUsCiYjNDM7CQkJCSAgICAgIHJlZy0mZ3Q7YnRmLCBidGZfaWQsIGZsYWcpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgJmFtcDsgUFRSX1RSVVNURUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgJmFtcDsgKE1FTV9SQ1UgfCBNRU1fUEVSQ1BVIHwgTUVNX1VTRVIpKSkKJiM0MzsJCQlyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05NDU2LDYgJiM0Mzs5NDcxLDI0IEBAIHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGlkbWFwLSZndDttYXBbLS1pZG1hcC0mZ3Q7Y250XS5vbGQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcGFyZW50X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LSZndDtjdXJfc3RhdGU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdnN0YXRlLSZndDthY3F1aXJlZF9yZWZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHZzdGF0ZS0mZ3Q7cmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICh2c3RhdGUtJmd0O3JlZnNbaV0ucGFyZW50X2lkICE9IHBhcmVudF9pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXZlcmJvc2UoZW52LCAmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXG4mIzM0OywKJiM0MzsJCQl2c3RhdGUtJmd0O3JlZnNbaV0uaWQsIHZzdGF0ZS0mZ3Q7cmVmc1tpXS5pbnNuX2lkeCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBSZWxlYXNlIGlkIGFuZCBvYmplY3RzIGRlcml2ZWQgZnJvbSBpdCBpdGVyYXRpdmVseSBpbiBhIERGUyBtYW5uZXIgKi8KIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKQogewpAQCAtOTQ2NSwzMSAmIzQzOzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpCiAJc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7CiAJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwotCWludCBpLCBlcnI7CiYjNDM7CWludCBlcnI7CiAKIAlpZHN0YWNrLSZndDtjbnQgPSAwOwogCWVyciA9IGlkc3RhY2tfcHVzaChpZHN0YWNrLCBpZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkgewotCQllcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7Ci0JCVdBUk5fT05fT05DRShlcnIpOwotCX0KLQogCXdoaWxlICgoaWQgPSBpZHN0YWNrX3BvcChpZHN0YWNrKSkpIHsKIAkJLyoKIAkJICogQ2hpbGQgcmVmZXJlbmNlcyBhcmUgaW5hY2Nlc3NpYmxlIGFmdGVyIHBhcmVudCBpcyByZWxlYXNlZCwKIAkJICogYW55IGNoaWxkIHJlZmVyZW5jZXMgdGhhdCBleGlzdCBhdCB0aGlzIHBvaW50IGFyZSBhIGxlYWsuCiAJCSAqLwotCQlmb3IgKGkgPSAwOyBpICZsdDsgdnN0YXRlLSZndDthY3F1aXJlZF9yZWZzOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzdGF0ZS0mZ3Q7cmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUikKLQkJCQljb250aW51ZTsKLQkJCWlmICh2c3RhdGUtJmd0O3JlZnNbaV0ucGFyZW50X2lkICE9IGlkKQotCQkJCWNvbnRpbnVlOwotCQkJdmVyYm9zZShlbnYsICYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JWQgYWxsb2NfaW5zbj0lZC4gUmVsZWFzZSBpdCBmaXJzdC5cbiYjMzQ7LAotCQkJCXZzdGF0ZS0mZ3Q7cmVmc1tpXS5pZCwgdnN0YXRlLSZndDtyZWZzW2ldLmluc25faWR4KTsKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZXJyID0gY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKGVudiwgaWQpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkJaWYgKGZpbmRfcmVmZXJlbmNlX3N0YXRlKHZzdGF0ZSwgaWQpKSB7CiYjNDM7CQkJZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpOwomIzQzOwkJCVdBUk5fT05fT05DRShlcnIpOwogCQl9CiAKIAkJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoewpAQCAtOTU0MSw2ICYjNDM7OTU2OCwzMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCX0pKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDsKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcGFyZW50X2lkKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwllcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBwYXJlbnRfaWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3RydWN0IGl0ZXJhdG9ycyBjYW4gcmVsZWFzZSB0aGUgcHJldmlvdXMgZWxlbWVudCBvbiBlYWNoIG5leHQgY2FsbC4KJiM0MzsJICogUFRSX1RPX01FTSBpdGVyYXRvciByZXN1bHRzIHVzZSBzdG9yYWdlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBkZXN0cm95LgomIzQzOwkgKi8KJiM0MzsJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LSZndDtjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoewomIzQzOwkJaWYgKGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgfHwgcmVnLSZndDtwYXJlbnRfaWQgIT0gcGFyZW50X2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJYnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpOwomIzQzOwkJbWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7CiYjNDM7CX0pKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjazsKQEAgLTEzMTAwLDYgJiM0MzsxMzE1NCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCXJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pOwogCQkJCWlmIChyZXQgJmx0OyAwKQogCQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCQlpZiAobWV0YS0mZ3Q7YnRmID09IGJ0Zl92bWxpbnV4ICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICBpID09IDAgJmFtcDsmYW1wOyAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpICZhbXA7JmFtcDsgcmVnLSZndDtwYXJlbnRfaWQpCiYjNDM7CQkJCQl1cGRhdGVfcmVmX29ial9pZCgmYW1wO21ldGEtJmd0O3JlZl9vYmosIHJlZy0mZ3Q7cGFyZW50X2lkLCAwKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMTM5OTUsNiAmIzQzOzE0MDUzLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCX0KIAl9CiAKJiM0MzsJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LSZndDtjdXJfc3RhdGUsICZhbXA7bWV0YSktJmd0O3R5cGUgJmFtcDsgTUVNX1JDVSkpIHsKJiM0MzsJCWVyciA9IGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyhlbnYsIG1ldGEucmVmX29iai5pZCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7CiAJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykgewpAQCAtMTQxMDUsNiAmIzQzOzE0MTcwLDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCXJlZ3NbQlBGX1JFR18wXS5idGYgPSBkZXNjX2J0ZjsKIAkJCXJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTsKIAkJCXJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDsKJiM0MzsKJiM0MzsJCQlpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpICZhbXA7JmFtcDsgISh0eXBlICZhbXA7IE1FTV9SQ1UpKQomIzQzOwkJCQlyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkOwogCQl9CiAKIAkJaWYgKGlzX2tmdW5jX3JldF9udWxsKCZhbXA7bWV0YSkpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jCmluZGV4IDc2MDEyZGJiZGI0MTMuLmE1NWU1Y2YyOTQ3NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYwpAQCAtMjgsNiAmIzQzOzI4LDI5OCBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIHZtYV9wdHItJmd0O3ZtX3N0YXJ0OwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjsKJiM0MzsJdTY0IHZtX3N0YXJ0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghbmV4dF92bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXZtX3N0YXJ0ID0gdm1hX3B0ci0mZ3Q7dm1fc3RhcnQ7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gdm1fc3RhcnQ7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9uZXh0X251bGwoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7CiYjNDM7CXU2NCB2bV9zdGFydDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAobmV4dF92bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXZtX3N0YXJ0ID0gdm1hX3B0ci0mZ3Q7dm1fc3RhcnQ7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gdm1fc3RhcnQ7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmaWxlX3B0ciA9IHZtYV9wdHItJmd0O3ZtX2ZpbGU7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoZmlsZV9wdHIpCiYjNDM7CQlyZXR1cm4gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyLCAqbmV4dF92bWFfcHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CXUzMiBtb2RlOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZmlsZV9wdHIgPSB2bWFfcHRyLSZndDt2bV9maWxlOwomIzQzOwlpZiAoIWZpbGVfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIW5leHRfdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltb2RlID0gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiBtb2RlOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZpbGVfcHRyID0gdm1hX3B0ci0mZ3Q7dm1fZmlsZTsKJiM0MzsJaWYgKCFmaWxlX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZpbGVfcHRyID0gdm1hX3B0ci0mZ3Q7dm1fZmlsZTsKJiM0MzsJaWYgKCFmaWxlX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfZmlsZV9keW5wdHJfZGlzY2FyZF9iZWZvcmVfYWR2YW5jZShjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjsKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgZHlucHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmaWxlX3B0ciA9IHZtYV9wdHItJmd0O3ZtX2ZpbGU7CiYjNDM7CWlmICghZmlsZV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsICZhbXA7ZHlucHRyKTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9jdXJyZW50X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICh2bWFfcHRyKQomIzQzOwkJYnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKHZtYV9wdHIpIHsKJiM0MzsJCW1tX3B0ciA9IHZtYV9wdHItJmd0O3ZtX21tOwomIzQzOwkJLyogZXhlX2ZpbGUgaGFzIFJDVSBwcm90ZWN0aW9uIGluZGVwZW5kZW50IG9mIHRoZSBpdGVyYXRvci4gKi8KJiM0MzsJCWlmIChtbV9wdHIpCiYjNDM7CQkJZmlsZV9wdHIgPSBtbV9wdHItJmd0O2V4ZV9maWxlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoZmlsZV9wdHIpCiYjNDM7CQlyZXR1cm4gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDsKJiM0MzsJdTMyIG1vZGUgPSAwOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAodm1hX3B0cikgewomIzQzOwkJbW1fcHRyID0gdm1hX3B0ci0mZ3Q7dm1fbW07CiYjNDM7CQlpZiAobW1fcHRyKQomIzQzOwkJCWZpbGVfcHRyID0gbW1fcHRyLSZndDtleGVfZmlsZTsKJiM0MzsJfQomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKGZpbGVfcHRyKQomIzQzOwkJbW9kZSA9IGZpbGVfcHRyLSZndDtmX21vZGU7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gbW9kZTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eCkKQEAgLTY2LDYgJiM0MzszNTgsNDYgQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25ldygmYW1wO3Rhc2tfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CWlmICghdGFza19wdHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25ldygmYW1wO3Rhc2tfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJaWYgKCF0YXNrX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJYnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQogaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGluIHRoZSBrZXJuZWwgcmVwby4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MsIGJ1dCBsZXQmIzM5O3MgdGFrZSBhIG1ldGhvZGljYWwgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgKndoYXQqIGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgY2hhbmdlLiBSZWFkaW5nIHRoZSBkaWZmIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBwcm92aWRlZCBpcyBjcnVjaWFsLiBJdCYjMzk7cyBzZWNvbmQgbmF0dXJlIGZvciBtZSB0byBzdGFydCBieSBjaGVja2luZyB0aGUgbW9kaWZpZWQgZmlsZXMsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUga2VybmVsLgoKQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jYC4gVGhlIGZhY3QgdGhhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaXRzIGhlYWRlciBhcmUgbW9kaWZpZWQgdGVsbHMgbWUgdGhpcyBpcyBjb3JlIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGltcG9ydGFudCwgYXMgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgZ2F0ZWtlZXBlciBmb3IgYW55IEJQRiBwcm9ncmFtIGxvYWRlZCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgaGFuZGxlcyBvcGVyYXRpb25zIGxpa2UgYEJQRl9QUk9HX0xPQURgLiBBbnkgZXJyb3IgaGVyZSBpcyBhbXBsaWZpZWQgYXMgdGhlIGVudGlyZSBrZXJuZWwgc2VjdXJpdHkgaXMgYWZmZWN0ZWQuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gcmVhZCB0aGUgcGF0Y2ggaW4gZGV0YWlsIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB0aGUgcGF0Y2ggYWZmZWN0cyB0aGVzZSBmdW5jdGlvbnM6CgoxLiAgYHVwZGF0ZV9yZWZfb2JqX2lkKClgIGFuZCBgdXBkYXRlX3JlZl9vYmooKWAKMi4gIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcigpYAozLiAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzKClgCjQuICBgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKClgIChhIG5ldyBmdW5jdGlvbiAtIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8pCjUuICBgcmVsZWFzZV9yZWZlcmVuY2UoKWAKNi4gIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoKWAgKGFub3RoZXIgbmV3IGZ1bmN0aW9uKQo3LiAgYGNoZWNrX2tmdW5jX2FyZ3MoKWAKOC4gIGBjaGVja19rZnVuY19jYWxsKClgCgpTaW5jZSBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgQlBGIHZlcmlmaWVyLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgdGhlc2UgZnVuY3Rpb24gY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyYjMzk7IGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY29tYmluYXRpb24gdG8gZW5zdXJlIEkgaGF2ZSBmdWxsIGNvbnRleHQgYXJvdW5kIHRoZXNlIGNoYW5nZXMgdG8gZWZmZWN0aXZlbHkgYXNzZXNzIHRoZWlyIGltcGFjdCBhbmQgY29ycmVjdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTk1NTg9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU3MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTcxOnN0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU3Mi17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzODEzPXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDU3LVx0ICAgICEoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCBcdTAwMjZtZXRhKS1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDU4Olx0XHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDU5LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTQ1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBuZWVkcyB0byBiZSBsb29rZWQgYXQsIHRoaW5raW5nIGFzIGlmIEkgYW0gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkJQRiBWZXJpZmllciAmYW1wOyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIHZlcmlmaWVyJiMzOTtzIGludGVybmFscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlICpjYWxsZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYEJQRl9TWVNDQUxMYCB3aGljaCBpcyBjcml0aWNhbCBmb3Igc3lzdGVtIGNhbGwgaW50ZWdyYXRpb24sIGBCUEZfSklUYCB3aGljaCBpcyB2aXRhbCBmb3IgcGVyZm9ybWFuY2UsIG9yIGBCVEZgIHdoaWNoIGNoYW5nZXMgaG93IGRhdGEgaXMgdmFsaWRhdGVkLiBUaGVzZSBjb25maWcgb3B0aW9ucyBkcmFzdGljYWxseSBhZmZlY3Qgd2hhdCYjMzk7cyBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSB2ZXJpZmllciYjMzk7cyB1c2FnZSBhbmQgbWFwIG91dCB0aGVzZSBkZXBlbmRlbmNpZXMuCgpCZXlvbmQgdGhlIGNvZGUgaXRzZWxmLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIGJ1aWx0LiBUaGF0IG1lYW5zIGEgcXVpY2sgY2hlY2sgb2YgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIHZlcmlmaWVyIGNvZGUgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gQW5kLCBvZiBjb3Vyc2UsIGEgbG9vayBhdCBga2VybmVsL2JwZi9LY29uZmlnYC4gSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRpcmVjdGx5IGFmZmVjdCB0aGUgdmVyaWZpZXImIzM5O3MgYmVoYXZpb3IgYW5kIHRoZSBmZWF0dXJlcyBpdCBzdXBwb3J0cy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0byBlbmFibGUgb3IgZGlzYWJsZSBmZWF0dXJlcyBiYXNlZCBvbiByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTUtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNy1cdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTU5NjQ9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi9idGYuYy01OTgwLVxua2VybmVsL2JwZi9idGYuYzo1OTgxOlx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxua2VybmVsL2JwZi9idGYuYy01OTgyLVx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI3LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dyb3VwX2Rldl9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDEtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0My1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHN5c2N0bF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY0LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY2LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dfc29ja29wdF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NzQ2PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OC1cdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0OTpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXHUwMDNlb3BzO1xua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzUtLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cbmtlcm5lbC9icGYvaGVscGVycy5jLTM3LSAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjQ3OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zeXNjYWxsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDgtXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEwLVx0Lypcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTItXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3LS8qIGR1bW15IF9vcHMuIFRoZSB2ZXJpZmllciB3aWxsIG9wZXJhdGUgb24gdGFyZ2V0IHByb2dyYW0mIzM5O3Mgb3BzLiAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2V4dGVuc2lvbl92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEtI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpIFxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI6XHRbX2lkXSA9IFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzLSNkZWZpbmUgQlBGX01BUF9UWVBFKF9pZCwgX29wcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI4NT1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI5Ni0gKiBGb3IgdHJhZGl0aW9uYWwgUFRSX1RPX01BUF9WQUxVRSBvciBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DLCB0aGUgdmVyaWZpZXJcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3Mjk3OiAqIGNsZWFycyByZWctXHUwMDNlaWQgYWZ0ZXIgdmFsdWVfb3JfbnVsbC1cdTAwM2V2YWx1ZSB0cmFuc2l0aW9uLCBzaW5jZSB0aGUgdmVyaWZpZXIgb25seVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyOTgtICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24mIzM5O3QgY2FyZVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDYwOD1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3ODItXHRcdFx0XHRlbnYsIFwmIzM0O1RoaXMgb3BlcmF0aW9uIHN1YnRyYWN0cyBwb2ludGVyIHJlZ2lzdGVyIFIlZCBmcm9tIHNjYWxhciByZWdpc3RlciBSJWQuIFwmIzM0O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NzgzOlx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3ODQtXHRcdFx0XHRwdHJfcmVnbm8sIGRzdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzMwPWJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc5NS0gKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Nzk2OiAqIC0gaWYgc28sIGFuZCBpZiB2ZXJpZmllciBvciBjdXJyZW50IEpJVCBpbmxpbmVzIHRoZSBjYWxsIHRvIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Nzk3LSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc3Nz1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODk0LVx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODk1Olx0ZW52LVx1MDAzZW9wcyA9IHN0X29wcy1cdTAwM2V2ZXJpZmllcl9vcHM7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4OTYtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNTI4PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDU2Ny1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1Njg6XHRcdGVudi1cdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW3RndF9wcm9nLVx1MDAzZXR5cGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTY5LVx0XHRwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMjAwPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIxMC1cdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTIxMTpcdGlmIChBUlJBWV9TSVpFKGJwZl92ZXJpZmllcl9vcHMpID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMTItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIyMi1cdGVudi1cdTAwM2Vwcm9nID0gKnByb2c7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyMjM6XHRlbnYtXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXHUwMDNlcHJvZy1cdTAwM2V0eXBlXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIyNC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMzEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyMzI6XHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMzMtXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicGZfY2hlY2tgLCBhcyB0aGF0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGFjY29yZGluZyB0byBgdmVyaWZpZXIuY2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgYXQgYGJwZl9jaGVja2AgaXRzZWxmIG9yIHRoZSBmdW5jdGlvbnMgdGhhdCBpdCBjYWxscyBhbmQgd2hpY2ggYXJlIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gVGhlIGRpZmYgaW5kaWNhdGVzIHRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5OiBgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzYCwgYGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbmAsIGByZWxlYXNlX3JlZmVyZW5jZWAsIGBjaGVja19rZnVuY19jYWxsYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXJgLCBhbmQgYHVwZGF0ZV9yZWZfb2JqX2lkYCAvIGB1cGRhdGVfcmVmX29iamAuIFRoYXQmIzM5O3MgYSBkZWNlbnQtc2l6ZWQgY2h1bmsgb2YgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBpdCBzZWVtcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGNoYW5nZSwgSSYjMzk7bGwgbmVlZCB0byBwb3JlIG92ZXIgdGhvc2UgZnVuY3Rpb25zLCBhcyB0aGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggQlBGIHZlcmlmaWVycy4gVG8gZ2V0IHN0YXJ0ZWQsIEkgd2lsbCBmb2N1cyBvbiBsaW5lcyAxNDA0NSB0byAxNDE4MCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgdGhlIGFjdHVhbCBjb2RlIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDA0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDA0NTpcdFxuMTQwNDY6XHRcdFx0LyogSW4gdGhlIGNhc2Ugb2YgdGhlIGRlZmF1bHQgY2FsbGJhY2ssIHRoZSBjb29raWUgdmFsdWUgcGFzc2VkXG4xNDA0NzpcdFx0XHQgKiB0byBicGZfdGhyb3cgYmVjb21lcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcm9ncmFtLlxuMTQwNDg6XHRcdFx0ICovXG4xNDA0OTpcdFx0XHRpZiAoIWVudi1cdTAwM2VleGNlcHRpb25fY2FsbGJhY2tfc3VicHJvZykge1xuMTQwNTA6XHRcdFx0XHRlcnIgPSBjaGVja19yZXR1cm5fY29kZShlbnYsIEJQRl9SRUdfMSwgXCYjMzQ7UjFcJiMzNDspO1xuMTQwNTE6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTQwNTI6XHRcdFx0XHRcdHJldHVybiBlcnI7XG4xNDA1MzpcdFx0XHR9XG4xNDA1NDpcdFx0fVxuMTQwNTU6XHRcbjE0MDU2Olx0XHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSBcdTAwMjZcdTAwMjZcbjE0MDU3Olx0XHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIFx1MDAyNm1ldGEpLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpKSB7XG4xNDA1ODpcdFx0XHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xuMTQwNTk6XHRcdFx0aWYgKGVycilcbjE0MDYwOlx0XHRcdFx0cmV0dXJuIGVycjtcbjE0MDYxOlx0XHR9XG4xNDA2MjpcdFxuMTQwNjM6XHRcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbjE0MDY0Olx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4xNDA2NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG4xNDA2NjpcdFx0XHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XG4xNDA2NzpcdFxuMTQwNjg6XHRcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tyZWdub10pO1xuMTQwNjk6XHRcdH1cbjE0MDcwOlx0XHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjdXJfZnVuYyhlbnYpKTtcbjE0MDcxOlx0XG4xNDA3MjpcdFx0LyogQ2hlY2sgcmV0dXJuIHR5cGUgKi9cbjE0MDczOlx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIG1ldGEuZnVuY19wcm90by1cdTAwM2V0eXBlLCBOVUxMKTtcbjE0MDc0Olx0XG4xNDA3NTpcdFx0aWYgKGlzX2tmdW5jX2FjcXVpcmUoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zdHJ1Y3RfcHRyKG1ldGEuYnRmLCB0KSkge1xuMTQwNzY6XHRcdFx0aWYgKG1ldGEuYnRmICE9IGJ0Zl92bWxpbnV4IHx8XG4xNDA3NzpcdFx0XHQgICAgKCFpc19icGZfb2JqX25ld19rZnVuYyhtZXRhLmZ1bmNfaWQpIFx1MDAyNlx1MDAyNlxuMTQwNzg6XHRcdFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXHUwMDI2XHUwMDI2XG4xNDA3OTpcdFx0XHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xuMTQwODA6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7YWNxdWlyZSBrZXJuZWwgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIFBUUl9UT19CVEZfSURcXG5cJiMzNDspO1xuMTQwODE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MDgyOlx0XHRcdH1cbjE0MDgzOlx0XHR9XG4xNDA4NDpcdFxuMTQwODU6XHRcdGlmIChidGZfdHlwZV9pc19zY2FsYXIodCkpIHtcbjE0MDg2Olx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xuMTQwODc6XHRcdFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFx1MDAyNlx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbjE0MDg4Olx0XHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbjE0MDg5Olx0XHRcdFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcbjE0MDkwOlx0XHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuMTQwOTE6XHRcdFx0cHRyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZwdHJfdHlwZV9pZCk7XG4xNDA5MjpcdFx0XHRlcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XG4xNDA5MzpcdFx0XHRpZiAoZXJyKSB7XG4xNDA5NDpcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBsb2dpYyBwcm9iYWJseSBoYXNuJiMzOTt0IGJlZW4gZHJhc3RpY2FsbHkgYWx0ZXJlZCwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2Ugb2YgYW55IHR3ZWFrcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHJlYWQgYXJvdW5kIGxpbmUgOTU2MC4gSSB3YW50IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGF0IHNwZWNpZmljIHJlZ2lvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNoYW5nZXMsIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgYW5kIHdoeSB0aGV5IHdlcmUgbWFkZS4gVGhpcyB0YXJnZXRlZCBhcHByb2FjaCBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjb2RlIHVwZGF0ZXMgaW4gdGhpcyBmaWxlLCBzbyBJJiMzOTttIGhvcGluZyBJIGNhbiBnZXQgYSBxdWljayBncmFzcCBvZiB0aGUgbW9kaWZpY2F0aW9uIHRoYXQgdG9vayBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk1NTU6XHRcdHJldHVybiAwO1xuOTU1NjpcdH1cbjk1NTc6XHRcbjk1NTg6XHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuOTU1OTpcdHtcbjk1NjA6XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqdW51c2VkO1xuOTU2MTpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjk1NjI6XHRcbjk1NjM6XHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoe1xuOTU2NDpcdFx0XHRpZiAodHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpIHtcbjk1NjU6XHRcdFx0XHRicGZfZGlhZ19yZWNvcmRfc2NydWIoZW52LCByZWcsIEJQRl9ESUFHX01PRF9OT05fT1dOX1JFRik7XG45NTY2Olx0XHRcdFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XG45NTY3Olx0XHRcdH1cbjk1Njg6XHRcdH0pKTtcbjk1Njk6XHR9XG45NTcwOlx0XG45NTcxOlx0c3RhdGljIGludCBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIHBhcmVudF9pZClcbjk1NzI6XHR7XG45NTczOlx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDtcbjk1NzQ6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG45NTc1Olx0XHRpbnQgZXJyO1xuOTU3NjpcdFxuOTU3NzpcdFx0aWYgKFdBUk5fT05fT05DRSghcGFyZW50X2lkKSlcbjk1Nzg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG45NTc5Olx0XG45NTgwOlx0XHRlcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBwYXJlbnRfaWQpO1xuOTU4MTpcdFx0aWYgKGVycilcbjk1ODI6XHRcdFx0cmV0dXJuIGVycjtcbjk1ODM6XHRcbjk1ODQ6XHRcdC8qXG45NTg1Olx0XHQgKiBTdHJ1Y3QgaXRlcmF0b3JzIGNhbiByZWxlYXNlIHRoZSBwcmV2aW91cyBlbGVtZW50IG9uIGVhY2ggbmV4dCBjYWxsLlxuOTU4NjpcdFx0ICogUFRSX1RPX01FTSBpdGVyYXRvciByZXN1bHRzIHVzZSBzdG9yYWdlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBkZXN0cm95LlxuOTU4NzpcdFx0ICovXG45NTg4Olx0XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCB1bnVzZWQsIHJlZywgKHtcbjk1ODk6XHRcdFx0aWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCB8fCByZWctXHUwMDNlcGFyZW50X2lkICE9IHBhcmVudF9pZClcbjk1OTA6XHRcdFx0XHRjb250aW51ZTtcbjk1OTE6XHRcdFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpO1xuOTU5MjpcdFx0XHRtYXJrX3JlZ19pbnZhbGlkKGVudiwgcmVnKTtcbjk1OTM6XHRcdH0pKTtcbjk1OTQ6XHRcbjk1OTU6XHRcdHJldHVybiAwO1xuOTU5NjpcdH1cbjk1OTc6XHRcbjk1OTg6XHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuOTU5OTpcdHtcbjk2MDA6XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuOTYwMTpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbjk2MDI6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG45NjAzOlx0XHR1MzIgY2xlYXJfbWFzayA9ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfSVRFUik7XG45NjA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTE1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBFeGNlbGxlbnQsIHRoYXQmIzM5O3MgYSBrZXkgc3Vic3lzdGVtLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgdG90YWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBzZXR1cHMgdGhyb3VnaCB0aGUgYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYCBzeXNjYWxsLiBUaGF0JiMzOTtzIGEgaHVnZSBwb3NpdGl2ZS4KCk5vdywgZG9lcyBpdCBhY3R1YWxseSAqbW9kaWZ5KiBjb3JlIGxvZ2ljIG9yIGludHJvZHVjZSBuZXcgcnVudGltZSBhc3NlcnRpb25zPyBBYnNvbHV0ZWx5LiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgdG8gaG93IGl0ZXJhdG9yLW93bmVkIGBQVFJfVE9fQlRGX0lEYCBvYmplY3RzIOKAkyB0cnVzdGVkIEJURiBwb2ludGVycyBmcm9tIGl0ZXJhdG9ycyBsaWtlIGBicGZfaXRlcl90YXNrX3ZtYV9uZXh0YCDigJMgYXJlIGhhbmRsZWQuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggbWVtb3J5IGxpZmV0aW1lIGFuZCBwb2ludGVyIHZhbGlkYXRpb24gd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIGV4cGxvaXRhYmxlIGJ1Z3MuIFNwZWNpZmljYWxseSwgdGhlIGFkZGVkIGBXQVJOX09OX09OQ0UoIXBhcmVudF9pZClgIGNhbGwgaW4gYGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc2AgaXMgYSBodWdlIHJlZCBmbGFnIHRoYXQgaXQgaXMgY2hlY2tpbmcgZm9yIHByZXZpb3VzbHkgdW5jYXVnaHQgY29uZGl0aW9ucy4gQmV5b25kIHRoaXMsIHdlIGFyZSBsb29raW5nIGF0IGFkZGVkIHJlZmVyZW5jZSBsZWFrIGNoZWNraW5nIChgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYCksIGludmFsaWRhdGlvbiBvbiBpdGVyYXRvciBhZHZhbmNlIGluIGBjaGVja19rZnVuY19jYWxsYCwgcHJvcGFnYXRpb24gb2YgYHBhcmVudF9pZGAgZm9yIHRydXN0ZWQgcG9pbnRlcnMgaW4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgdXBkYXRlcyB0byBkeW5wdHIgaGFuZGxpbmcgd2l0aCBgYnBmX2R5bnB0cl9mcm9tX2ZpbGVgLCBhbmQgZXJyb3IgcHJvcGFnYXRpb24gZml4ZXMuIFRoZXNlIGFsbCBwb2ludCB0byBhIGRlZXBlciBkaXZlIGludG8gcG90ZW50aWFsIGlzc3VlcyBhbmQgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIHNjcmVhbXMgJiMzNDt2dWxuZXJhYmlsaXR5IGh1bnRpbmcgZ3JvdW5kJiMzNDsuCgpDb25zaWRlcmluZyB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYSwgaXQmIzM5O3MgYSBuby1icmFpbmVyLiBUaGlzIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSAoQlBGKSwgYW5kIGludHJvZHVjZXMgbmV3IGNoZWNrcyBhbmQgbG9naWMgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb2ludGVyIGhhbmRsaW5nLiBCYXNlZCBvbiB0aGUgY3JpdGVyaW9uLCB0aGlzIHBhdGNoIGlzICpkZWZpbml0ZWx5KiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOZXh0IHN0ZXAgaXMgZmlndXJpbmcgb3V0IHRoZSByZXF1aXJlZCBgRW5hYmxlQ29uZmlnc2AuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgS2NvbmZpZyBmbGFncyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgQlBGIHZlcmlmaWVyLCBpdGVyYXRvcnMsIGFuZCBrZnVuY3MuIFdlJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIGFuZCBgaW5pdC9LY29uZmlnYCB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQlBGX1NZU0NBTExgIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyB3aWxsIG1ha2UgY2VydGFpbiB0aGF0IG91ciBmdXp6aW5nIGVudmlyb25tZW50IGlzIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCB0byB0cmlnZ2VyIHRoZSBjb2RlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlcnk6CgoqKkxvY2F0aW5nIHRoZSBCUEZfU1lTQ0FMTCBNYWNybyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgQlBGX1NZU0NBTExgLiBTaW5jZSB0aGlzIGlzIG9idmlvdXNseSBhIG1hY3JvIHJlbGF0ZWQgdG8gQmVya2VsZXkgUGFja2V0IEZpbHRlciwgSSYjMzk7bSBnb2luZyB0byBhc3N1bWUgaXQmIzM5O3MgaW52b2x2ZWQgd2l0aCBzeXN0ZW0gY2FsbHMgYW5kIGtlcm5lbC1sZXZlbCBpbnRlcmFjdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUga2VybmVsIGhlYWRlcnMsIHByb2JhYmx5IHNvbWV0aGluZyByZWxhdGVkIHRvIEJQRiBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgdGhvc2UgaGVhZGVyIGZpbGVzIGFyZSB1c3VhbGx5IGxvY2F0ZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHR5cGljYWxseSB1bmRlciBgL3Vzci9zcmMvbGludXgvaW5jbHVkZS9gLCBvciBzaW1pbGFyLCBkZXBlbmRpbmcgb24gdGhlIGRpc3RyaWJ1dGlvbiBhbmQga2VybmVsIHZlcnNpb24uIEdpdmVuIHRoZSB0ZXJtLCBJJiMzOTtsbCBiZSBsb29raW5nIGluIHRoZSBoZWFkZXIgZmlsZXMgZm9yIEJQRiBkZWZpbml0aW9ucywgd2hpY2ggY291bGQgYmUgaW4gdGhlIGdlbmVyaWMgQlBGIGhlYWRlcnMsIG9yIGV2ZW4gcmVsYXRlZCB0byBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgL3Vzci9zcmMvbGludXgvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCBvciBwb3RlbnRpYWxseSBgL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51eC9icGYuaGAuIEkmIzM5O2xsIGFsc28gd2FudCB0byBrZWVwIGluIG1pbmQgdGhhdCBrZXJuZWwgdmVyc2lvbnMgY2FuIHZhcnksIHNvIHRoZSBleGFjdCBwYXRoIG9yIGNvbnRlbnQgbWlnaHQgYmUgc2xpZ2h0bHkgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGhlYWRlciBmaWxlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgS2VybmVsIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEkgc3BlY2lmaWNhbGx5IHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSAyNS4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQlBGIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgc3dpdGNoZXMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoZSBCUEYgc3Vic3lzdGVtLCBhbmQgcG90ZW50aWFsbHkgc29tZSBnZW5lcmFsIGZlYXR1cmUgZmxhZ3MuIExpbmUgMjUgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBpcyBleHBvc2VkIHRvIGtlcm5lbCBjb25maWcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxuICAyMTpcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG4gIDIyOlx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbiAgMjM6XHRcdGJvb2xcbiAgMjQ6XHRcbiAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDU6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDQ2Olx0XHRzZWxlY3QgRVhFQ01FTVxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDQ5Olx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1MDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDUxOlx0XHQgIHByb2dyYW1zLlxuICA1MjpcdFxuICA1MzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTQ6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU1Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNTY6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA1OTpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY0OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQlRGIGFuZCBJdHMgRGVwZW5kZW5jaWVzKioKCk9rYXksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBCVEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgVHlwZSBGb3JtYXQpLCBrZnVuY3MsIGFuZCBpdGVyYXRvcnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGBERUJVR19JTkZPX0JURmAgb3B0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IG1pZ2h0IGlsbHVtaW5hdGUgd2hldGhlciBCVEYgaXMgYWN0dWFsbHkgYSBwcmVyZXF1aXNpdGUgZm9yIG9yIGludGVydHdpbmVkIHdpdGggdGhlIGZ1bmN0aW9uYWxpdHkgb2Yga2Z1bmNzIGFuZCBpdGVyYXRvcnMuIFRoZSBLY29uZmlnIHNob3VsZCBwcm92aWRlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb21tZW50cy4gVGhlIGdvYWwgaXMgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYXNwZWN0cyBvZiBCVEYgYXJlIHJlcXVpcmVkIG9yIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgdXNlIG9mIHRoZXNlIG90aGVyIGZlYXR1cmVzLCB1bHRpbWF0ZWx5IGVuc3VyaW5nIGNvcnJlY3QgZmVhdHVyZSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4tLVxubGliL0tjb25maWcuZGVidWctNDI3LVxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAyMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgQlBGIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBjb25maWd1cmF0aW9ucyDigJMgdGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIEkmIzM5O20gZGVhbGluZyB3aXRoIEJQRi1yZWxhdGVkIGtlcm5lbCBmZWF0dXJlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgc2V0IHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZS4KCkJleW9uZCB0aG9zZSwgSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQuIEFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcga2Z1bmNzIG9yIGl0ZXJhdG9ycz8gSSBrbm93IGhvdyB0aGVzZSBzeXN0ZW1zIHRlbmQgdG8gaW50ZXJhY3QsIHNvIEkmIzM5O2xsIHdhbnQgdG8gZmluZCB0aG9zZSBkZXBlbmRlbmNpZXMgZWFybHkuCgpUbyBkaWcgZGVlcGVyLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCBwYXRoIG5vdyBpcyB0byBwZXJmb3JtIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBzcGVjaWFsX2tmdW5jX2xpc3RgIG9yIGBicGZfaXRlcl9gIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoYXQgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB3aGljaCBjb25maWdzICp0aGV5KiBkZXBlbmQgb24sIGFuZCBpbiB0dXJuLCBnaXZlIG1lIGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLiBUaGlzIHNob3VsZCByYXBpZGx5IHJldmVhbCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBtYXkgaGF2ZSBtaXNzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BlY2lhbF9rZnVuY19saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTExNzMyPWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4MDEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MDI6QlRGX0lEX0xJU1Qoc3BlY2lhbF9rZnVuY19saXN0KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAzLUJURl9JRChmdW5jLCBicGZfb2JqX25ld19pbXBsKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg5NT1zdGF0aWMgYm9vbCBpc19icGZfb2JqX25ld19rZnVuYyh1MzIgZnVuY19pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTg5Ni17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4OTc6XHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX29ial9uZXddIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4OTg6XHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX29ial9uZXdfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4OTktfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwMT1zdGF0aWMgYm9vbCBpc19icGZfcGVyY3B1X29ial9uZXdfa2Z1bmModTMyIGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MDIte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTAzOlx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9wZXJjcHVfb2JqX25ld10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkwNDpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcGVyY3B1X29ial9uZXdfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MDUtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwNz1zdGF0aWMgYm9vbCBpc19icGZfb2JqX2Ryb3Bfa2Z1bmModTMyIGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MDgte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTA5Olx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9vYmpfZHJvcF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxMDpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfb2JqX2Ryb3BfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTEtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkxMz1zdGF0aWMgYm9vbCBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTE0LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxNTpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcGVyY3B1X29ial9kcm9wXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTE2Olx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkxOT1zdGF0aWMgYm9vbCBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyh1MzIgZnVuY19pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyMC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MjE6XHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MjI6XHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbF07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MjMtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkyNT1zdGF0aWMgYm9vbCBpc19icGZfbGlzdF9wdXNoX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTI2LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkyNzpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wdXNoX2Zyb250XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTI4Olx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X3B1c2hfZnJvbnRfaW1wbF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkyOTpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wdXNoX2JhY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MzA6XHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfcHVzaF9iYWNrX2ltcGxdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MzE6XHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYWRkXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzMi19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTM0PXN0YXRpYyBib29sIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTM1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkzNjpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX2FkZF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkzNzpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX2FkZF9pbXBsXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzOC19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTQwPXN0YXRpYyBib29sIGlzX3Rhc2tfd29ya19hZGRfa2Z1bmModTMyIGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NDEte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTQyOlx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTQzOlx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk0NC19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTU0PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9yY3VfcmVhZF9sb2NrKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk1NS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NTY6XHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmN1X3JlYWRfbG9ja107XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NTctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk1OT1zdGF0aWMgYm9vbCBpc19rZnVuY19icGZfcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2MC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NjE6XHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmN1X3JlYWRfdW5sb2NrXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2Mi19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTY0PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9wcmVlbXB0X2Rpc2FibGUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTY1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk2NjpcdHJldHVybiBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9wcmVlbXB0X2Rpc2FibGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTY3LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5Njk9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYnBmX3ByZWVtcHRfZW5hYmxlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3MC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NzE6XHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcHJlZW1wdF9lbmFibGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTcyLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NzQ9Ym9vbCBicGZfaXNfa2Z1bmNfcGt0X2NoYW5naW5nKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3NS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NzY6XHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NzctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk4MD1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjAxNi1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDE3Olx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIwMTg6XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIwMTk6XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDIwLVx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjIyND1zdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIyMjktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIyMzA6XHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbG9jYWxfaXJxX3NhdmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIyMzE6XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjMyLVx0XHRpcnFfc2F2ZSA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIyMzM6XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjM0LVx0XHRcdGtmdW5jX2NsYXNzID0gSVJRX0xPQ0tfS0ZVTkM7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIyMzU6XHR9IGVsc2UgaWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xvY2FsX2lycV9yZXN0b3JlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM2Olx0XHQgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZV0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjIzNy1cdFx0aXJxX3NhdmUgPSBmYWxzZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzODpcdFx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjIzOS1cdFx0XHRrZnVuY19jbGFzcyA9IElSUV9MT0NLX0tGVU5DO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjQwOD1zdGF0aWMgYm9vbCBpc19icGZfbGlzdF9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0MTAtXHRyZXR1cm4gaXNfYnBmX2xpc3RfcHVzaF9rZnVuYyhidGZfaWQpIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTE6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wb3BfZnJvbnRdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTI6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wb3BfYmFja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxMzpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2RlbF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxNDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2Zyb250XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDE1Olx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYmFja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxNjpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2lzX2ZpcnN0XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDE3Olx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfaXNfbGFzdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxODpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2VtcHR5XTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQxOS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDIxPXN0YXRpYyBib29sIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDIzLVx0cmV0dXJuIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKGJ0Zl9pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyNDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcmVtb3ZlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDI1Olx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JidHJlZV9maXJzdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyNjpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcm9vdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyNzpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfbGVmdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyODpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcmlnaHRdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDI5LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI0MzE9c3RhdGljIGJvb2wgaXNfYnBmX3Jlc19zcGluX2xvY2tfa2Z1bmModTMyIGJ0Zl9pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQzMi17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MzM6XHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQzNDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MzU6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDM2Olx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQzNy19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDYyPWJvb2wgYnBmX2lzX3Rocm93X2tmdW5jKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0NjQtXHRyZXR1cm4gYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAwIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDY1Olx0ICAgICAgIGluc24tXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGhyb3ddO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDY2LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI0Njg9c3RhdGljIGJvb2wgaXNfYnBmX3dxX3NldF9jYWxsYmFja19rZnVuYyh1MzIgYnRmX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDY5LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQ3MDpcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl93cV9zZXRfY2FsbGJhY2tdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDcxLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI1MDk9c3RhdGljIGJvb2wgY2hlY2tfa2Z1bmNfaXNfZ3JhcGhfbm9kZV9hcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MTctXHRcdHJldCA9IGlzX2JwZl9saXN0X3B1c2hfa2Z1bmMoa2Z1bmNfYnRmX2lkKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTE4Olx0XHQgICAgICBrZnVuY19idGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2RlbF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUxOTpcdFx0ICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9pc19maXJzdF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUyMDpcdFx0ICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9pc19sYXN0XTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUyMS1cdFx0YnJlYWs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTIzLVx0XHRyZXQgPSAoaXNfYnBmX3JidHJlZV9hZGRfa2Z1bmMoa2Z1bmNfYnRmX2lkKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTI0Olx0XHQgICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX3JlbW92ZV0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUyNTpcdFx0ICAgICAgIGtmdW5jX2J0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JidHJlZV9sZWZ0XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTI2Olx0XHQgICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX3JpZ2h0XSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MjctXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjcxMz1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjkzMDpcdFx0XHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkzMS1cdFx0XHRcdHJldCA9IGdldF9rZXJuX2N0eF9idGZfaWQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5ODYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5ODc6XHRcdFx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX3NrYl0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk4OC1cdFx0XHRcdGR5bnB0cl9hcmdfdHlwZSB8PSBEWU5QVFJfVFlQRV9TS0I7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5ODk6XHRcdFx0fSBlbHNlIGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV94ZHBdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5OTAtXHRcdFx0XHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfWERQO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTkxOlx0XHRcdH0gZWxzZSBpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fc2tiX21ldGFdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5OTItXHRcdFx0XHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfU0tCX01FVEE7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTM6XHRcdFx0fSBlbHNlIGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk0LVx0XHRcdFx0ZHlucHRyX2FyZ190eXBlIHw9IERZTlBUUl9UWVBFX0ZJTEU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTU6XHRcdFx0fSBlbHNlIGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZmlsZV9kaXNjYXJkXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk2LVx0XHRcdFx0ZHlucHRyX2FyZ190eXBlIHw9IERZTlBUUl9UWVBFX0ZJTEUgfCBPQkpfUkVMRUFTRTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk5NzpcdFx0XHR9IGVsc2UgaWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9jbG9uZV0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5OTgtXHRcdFx0XHQgICAoZHlucHRyX2FyZ190eXBlIFx1MDAyNiBNRU1fVU5JTklUKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzAxNS1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lURVI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMwMTY6XHRcdFx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfY3NzX3Rhc2tfbmV3XSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDE3LVx0XHRcdFx0aWYgKCFjaGVja19jc3NfdGFza19pdGVyX2FsbG93bGlzdChlbnYpKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU3LVx0XHRcdFx0aWYgKG1ldGEtXHUwMDNlYnRmID09IGJ0Zl92bWxpbnV4IFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTU4Olx0XHRcdFx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX2ZpbGVdIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU5LVx0XHRcdFx0ICAgIGkgPT0gMCBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXBhcmVudF9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0MDAtXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzQwMTpcdFx0XHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzQwMjpcdFx0XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQwMy1cdFx0XHRcdGZsYWdzIHw9IFBST0NFU1NfU1BJTl9MT0NLO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDA0Olx0XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0MDU6XHRcdFx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQwNi1cdFx0XHRcdGZsYWdzIHw9IFBST0NFU1NfTE9DS19JUlE7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNjQyPXN0YXRpYyBpbnQgY2hlY2tfc3BlY2lhbF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzQ3LVx0XHRtYXJrX3JlZ19ncmFwaF9ub2RlKHJlZ3MsIEJQRl9SRUdfMCwgXHUwMDI2ZmllbGQtXHUwMDNlZ3JhcGhfcm9vdCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3NDg6XHR9IGVsc2UgaWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NDktXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc1Mi1cdFx0cmVnc1tCUEZfUkVHXzBdLmJ0Zl9pZCA9IG1ldGEtXHUwMDNlcmV0X2J0Zl9pZDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc1MzpcdH0gZWxzZSBpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmRvbmx5X2Nhc3RdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NTQtXHRcdHJldF90ID0gYnRmX3R5cGVfYnlfaWQoZGVzY19idGYsIG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LnZhbHVlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NzItXHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc3MzpcdH0gZWxzZSBpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX3NsaWNlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzc0Olx0XHQgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfc2xpY2VfcmR3cl0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc3NS1cdFx0ZW51bSBicGZfdHlwZV9mbGFnIHR5cGVfZmxhZyA9IGdldF9keW5wdHJfdHlwZV9mbGFnKG1ldGEtXHUwMDNlZHlucHRyLnR5cGUpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc4OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc4OTpcdFx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9zbGljZV0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc5MC1cdFx0XHRyZWdzW0JQRl9SRUdfMF0udHlwZSB8PSBNRU1fUkRPTkxZO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzgxMz1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1Ny1cdGlmICghaW5zbi1cdTAwM2VvZmYgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM4NTg6XHQgICAgKGluc24tXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg1OTpcdCAgICAgaW5zbi1cdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzODYwLVx0XHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpicmFuY2g7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzODgwLVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM4ODE6XHR9IGVsc2UgaWYgKCFpbnNuLVx1MDAzZW9mZiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX19fYnBmX3RyYXBdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4ODItXHRcdHZlcmJvc2UoZW52LCBcJiMzNDt1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDAzNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDAzODpcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl90aHJvd10pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDAzOS1cdFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnMoKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4Ni1cdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwODc6XHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwODg6XHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4OS1cdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDEwOC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcdFx0XHRcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxMTAtXHRcdFx0XHRcdG1ldGEucjBfcmRvbmx5ID0gZmFsc2U7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTQyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MTQzOlx0XHRcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9nZXRfa21lbV9jYWNoZV0pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQxNDQtXHRcdFx0XHR0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MjMwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MjMxOlx0aWYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDIzMi1cdFx0ZW52LVx1MDAzZXByb2ctXHUwMDNlY2FsbF9zZXNzaW9uX2Nvb2tpZSA9IHRydWU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODA1PXN0YXRpYyBpbnQgc3BlY2lhbGl6ZV9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2MsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MjItXHRcdC8qIGZhbGxiYWNrIHRvIGRlZmF1bHQga2Z1bmMgd2hlbiBub3Qgc3VwcG9ydGVkIGJ5IG5ldGRldiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODIzOlx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fc2tiXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODI0LVx0XHRzZWVuX2RpcmVjdF93cml0ZSA9IGVudi1cdTAwM2VzZWVuX2RpcmVjdF93cml0ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MzMtXHRcdGVudi1cdTAwM2VzZWVuX2RpcmVjdF93cml0ZSA9IHNlZW5fZGlyZWN0X3dyaXRlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODM0Olx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2V0X2RlbnRyeV94YXR0cl0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgzNS1cdFx0aWYgKGJwZl9sc21faGFzX2RfaW5vZGVfbG9ja2VkKHByb2cpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODM2LVx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfc2V0X2RlbnRyeV94YXR0cl9sb2NrZWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4Mzc6XHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZW1vdmVfZGVudHJ5X3hhdHRyXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODM4LVx0XHRpZiAoYnBmX2xzbV9oYXNfZF9pbm9kZV9sb2NrZWQocHJvZykpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MzktXHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyX2xvY2tlZDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg0MDpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX2ZpbGVdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDEtXHRcdGlmICghZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zbGVlcGFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDItXHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9keW5wdHJfZnJvbV9maWxlX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg0MzpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODQ0LVx0XHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zbGVlcGFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDUtXHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODQ2Olx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg0Ny1cdFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg3MT1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk0OC1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NDk6XHRcdGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2FkZF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk1MC1cdFx0ICAgIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKGRlc2MtXHUwMDNlZnVuY19pZCkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjItXHRcdFx0XHRcdFx0bm9kZV9vZmZzZXRfcmVnLCBpbnNuLCBpbnNuX2J1ZiwgY250KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2MzpcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2NDpcdFx0ICAgZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmRvbmx5X2Nhc3RdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjUtXHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjYtXHRcdCpjbnQgPSAxO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTY3Olx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjgtXHRcdCAgIChlbnYtXHUwMDNlcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT04gfHxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5ODEtXHRcdCpjbnQgPSAzO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTgyOlx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5ODMtXHRcdCAgIChlbnYtXHUwMDNlcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT04gfHxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTktXHRcdCpjbnQgPSA2O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDAwOlx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMDEtXHRcdC8qIGlubGluZSBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCBzdGFydCwgZW5kKTsgUjE9XHUwMDI2aXQsIFIyPXN0YXJ0LCBSMz1lbmQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMjMtXHRcdCpjbnQgPSBpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDI0Olx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXh0XSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDI1LVx0XHQvKiBpbmxpbmUgYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpOyBSMT1cdTAwMjZpdCwgcmV0dXJucyBcdTAwMjZzLVx1MDAzZWN1ciBvciBOVUxMICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDQwLVx0XHQqY250ID0gaTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTA0MTpcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA0Mi1cdFx0LyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBpcyBhIG5vLW9wOyBlbWl0IGEgbm9wIHRvIGRyb3AgdGhlIGNhbGwgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5MDEKCQkJCQkJCW91dHB1dDogMTk4CgkJCQkJCQl0aG91Z2h0czogNTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBWZXJpZmllciBGb2N1cyBTeW1ib2wgUmV2aWV3IGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0IGZvciB0aGUgQlBGIHZlcmlmaWVyIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3ZSYjMzk7cmUgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMg4oCTIHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSB0YXJnZXRpbmcgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQuIEJhc2VkIG9uIHRoZSBndWlkZWxpbmVzLCB3ZSAqZG9uJiMzOTt0KiB3YW50IHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucywgYWxsb2NhdG9ycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gV2UgKmRvKiB3YW50IHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIEFQSSBlbnRyeSBwb2ludHMuIEluIHRoaXMgY2FzZSwgdGhhdCBib2lscyBkb3duIHRvOgoKKiAgIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnNgCiogICBgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYAoqICAgYHJlbGVhc2VfcmVmZXJlbmNlYAoqICAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYAoqICAgYGNoZWNrX2tmdW5jX2NhbGxgCiogICBgY2hlY2tfa2Z1bmNfYXJnc2AKKiAgIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAKKiAgIGBicGZfY2hlY2tgCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgbW9kaWZpZWQgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gbWFrZSBzdXJlOgoKMS4gIGB1cGRhdGVfcmVmX29ial9pZGAgKHN0YXRpYykKMi4gIGB1cGRhdGVfcmVmX29iamAgKHN0YXRpYykKMy4gIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAgKHN0YXRpYykKNC4gIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgKHN0YXRpYykKNS4gIGBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW5gIChzdGF0aWMpCjYuICBgcmVsZWFzZV9yZWZlcmVuY2VgIChzdGF0aWMpCjcuICBgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzYCAoc3RhdGljKQo4LiAgYGNoZWNrX2tmdW5jX2FyZ3NgIChzdGF0aWMpCjkuICBgY2hlY2tfa2Z1bmNfY2FsbGAgKHN0YXRpYykKCkFuZCwgb2YgY291cnNlLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBpcyBgYnBmX2NoZWNrYC4KCkFscmlnaHQsIHRpbWUgZm9yIGEgZmluYWwgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggdGhlIHJlcXVpcmVtZW50czoKCiogICBgV29ydGhGdXp6aW5nYDogIFllcCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCiogICBgUmVhc29uaW5nYDogIEEgY29uY2lzZSBleHBsYW5hdGlvbiBpcyB0aGF0IHRoaXMgbW9kaWZpZXMgbGlmZXRpbWUgdHJhY2tpbmcsIGludmFsaWRhdGlvbiwgYW5kIGxlYWsgY2hlY2tpbmcgZm9yIGl0ZXJhdG9yLXJldHVybmVkIGBQVFJfVE9fQlRGX0lEYCByZWZlcmVuY2VzIGFuZCBkeW5hbWljIHBvaW50ZXJzIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLgoqICAgYEZvY3VzU3ltYm9sc2A6ICBUaGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBhYm92ZSBpbXBsZW1lbnRpbmcgdGhlIGNvcmUgbG9naWMsIHBsdXMgdGhlIGVudHJ5cG9pbnQuIENoZWNrIQoqICAgYEVuYWJsZUNvbmZpZ3NgOiAgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxsIGdvb2QuCgpFdmVyeXRoaW5nIGxvb2tzIGNvcnJlY3QgYW5kIHRob3JvdWdobHkgdmVyaWZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7aW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzJiMzNDssCiAgICAmIzM0O2NoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtyZWxlYXNlX3JlZmVyZW5jZSYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7dW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBmb3IgdHJhY2tpbmcgcmVmZXJlbmNlIGxpZmV0aW1lcywgcGFyZW50YWdlLCBhbmQgaW52YWxpZGF0aW9uIG9mIGl0ZXJhdG9yLW93bmVkIFBUUl9UT19CVEZfSUQgcG9pbnRlcnMgYW5kIGR5bnB0cnMgYWNyb3NzIGl0ZXJhdG9yIGFkdmFuY2UgYW5kIGRlc3Ryb3kgb3BlcmF0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHZlcmlmaWNhdGlvbiBvZiBlQlBGIHByb2dyYW1zIHZpYSBicGYoQlBGX1BST0dfTE9BRCkgYW5kIGludHJvZHVjZXMgbmV3IHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSBsZWFrIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7aW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzJiMzNDssCiAgICAmIzM0O2NoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtyZWxlYXNlX3JlZmVyZW5jZSYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7dW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBmb3IgdHJhY2tpbmcgcmVmZXJlbmNlIGxpZmV0aW1lcywgcGFyZW50YWdlLCBhbmQgaW52YWxpZGF0aW9uIG9mIGl0ZXJhdG9yLW93bmVkIFBUUl9UT19CVEZfSUQgcG9pbnRlcnMgYW5kIGR5bnB0cnMgYWNyb3NzIGl0ZXJhdG9yIGFkdmFuY2UgYW5kIGRlc3Ryb3kgb3BlcmF0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHZlcmlmaWNhdGlvbiBvZiBlQlBGIHByb2dyYW1zIHZpYSBicGYoQlBGX1BST0dfTE9BRCkgYW5kIGludHJvZHVjZXMgbmV3IHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSBsZWFrIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGlmZXRpbWUgdHJhY2tpbmcgZm9yIHRydXN0ZWQgcG9pbnRlcnMgcmV0dXJuZWQgYnkgc3RydWN0IGl0ZXJhdG9ycyAoZS5nLiwgYnBmX2l0ZXJfdGFza192bWEpIGJ5IGFzc29jaWF0aW5nIHRoZW0gd2l0aCBhIHBhcmVudF9pZCBhbmQgaW52YWxpZGF0aW5nIHRoZW0gdXBvbiBzdWJzZXF1ZW50IGl0ZXJhdG9yIHN0ZXBzIG9yIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgYW5kIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzIGluIEJQRiBwcm9ncmFtcy5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBwdXJlbHkgaW50ZXJuYWwgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWdpc3RlciBzdGF0ZSB0cmFja2luZywgYW5kIHNlbGZ0ZXN0cy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBtZWNoYW5pc21zLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcnVudGltZSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpdGVyYXRvciBidWdzIChzdWNoIGFzIFVBRikgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YThjNjM3NGMyZWQ4ZDliODc0YWYzMmEwODU2YjdjNWQ3MTk0ODQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDk6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzNmI2NTc5Nzg3N2QwLi5hZTMwZGY2MjlkNWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTE1MTgsOSAmIzQzOzE1MTgsOSBAQCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjIHsKIAogLyoKICAqIFRoZSBsYXN0IHNlZW4gcmVyZWZlcmVuY2VkIG9iamVjdDsgVXBkYXRlZCBieSB1cGRhdGVfcmVmX29iaigpIHdoZW4gYSByZWdpc3RlciByZWZlcnMgdG8gYQotICogcmVmZXJlbmNlZCBvYmplY3QuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nCi0gKiBhbGxvY2F0ZWQgbWVtb3J5IGRlcml2ZWQgZnJvbSByZWZlcmVuY2VkIG9iamVjdCBvciBjcmVhdGluZyBhIGR5bnB0ciB3aXRoIGEgcmVmZXJlbmNlZAotICogb2JqZWN0IGFzIHBhcmVudC4KJiM0MzsgKiByZWZlcmVuY2VkIG9iamVjdCBvciBhbm90aGVyIHZlcmlmaWVyLXRyYWNrZWQgbGlmZXRpbWUgYW5jaG9yLiBVc2VkIHdoZW4gdGhlIGhlbHBlciBvciBrZnVuYwomIzQzOyAqIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIGEgcmVmZXJlbmNlZCBvYmplY3QKJiM0MzsgKiBvciBjcmVhdGluZyBhIGR5bnB0ciB3aG9zZSBiYWNraW5nIG9iamVjdCBoYXMgYSB0cmFja2VkIGxpZmV0aW1lLgogICovCiBzdHJ1Y3QgcmVmX29ial9kZXNjIHsKIAl1MzIgaWQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWIwMTM5NTQxODJmMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMjM4LDEzICYjNDM7MjM4LDE4IEBAIHN0YXRpYyB2b2lkIGJwZl9tYXBfa2V5X3N0b3JlKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4LCB1NjQgc3RhdGUpCiAJCQkgICAgIChwb2lzb25lZCA/IEJQRl9NQVBfS0VZX1BPSVNPTiA6IDBVTEwpOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQomIzQzO3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqX2lkKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHUzMiBpZCwgdTMyIHBhcmVudF9pZCkKIHsKLQlyZWZfb2JqLSZndDtpZCA9IHJlZy0mZ3Q7aWQ7Ci0JcmVmX29iai0mZ3Q7cGFyZW50X2lkID0gcmVnLSZndDtwYXJlbnRfaWQ7CiYjNDM7CXJlZl9vYmotJmd0O2lkID0gaWQ7CiYjNDM7CXJlZl9vYmotJmd0O3BhcmVudF9pZCA9IHBhcmVudF9pZDsKIAlyZWZfb2JqLSZndDtjbnQmIzQzOyYjNDM7OwogfQogCiYjNDM7c3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmooc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0Mzt7CiYjNDM7CXVwZGF0ZV9yZWZfb2JqX2lkKHJlZl9vYmosIHJlZy0mZ3Q7aWQsIHJlZy0mZ3Q7cGFyZW50X2lkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHZhbGlkYXRlX3JlZl9vYmooc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaikKIHsKIAlpZiAocmVmX29iai0mZ3Q7Y250ICZndDsgMSkgewpAQCAtOTc3LDcgJiM0Mzs5ODIsNyBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKQogewogCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUgPSBicGZfZnVuYyhlbnYsIHJlZyk7Ci0JaW50IHNwaSwgaSwgajsKJiM0MzsJaW50IHNwaSwgaSwgaiwgZXJyOwogCiAJc3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7CiAJaWYgKHNwaSAmbHQ7IDApCkBAIC05ODcsOCAmIzQzOzk5MiwxMSBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSAmYW1wO3N0YXRlLSZndDtzdGFja1tzcGkgLSBpXTsKIAkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gJmFtcDtzbG90LSZndDtzcGlsbGVkX3B0cjsKIAotCQlpZiAoaSA9PSAwKQotCQkJV0FSTl9PTl9PTkNFKHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3QtJmd0O2lkKSk7CiYjNDM7CQlpZiAoaSA9PSAwKSB7CiYjNDM7CQkJZXJyID0gcmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC0mZ3Q7aWQpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAKIAkJYnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpOwogCkBAIC02MTQwLDkgJiM0Mzs2MTQ4LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAl9CiAKIAlpZiAoYXR5cGUgPT0gQlBGX1JFQUQgJmFtcDsmYW1wOyB2YWx1ZV9yZWdubyAmZ3Q7PSAwKSB7Ci0JCXJldCA9IG1hcmtfYnRmX2xkX3JlZyhlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLCByZXQsIHJlZy0mZ3Q7YnRmLCBidGZfaWQsIGZsYWcpOwomIzQzOwkJZW51bSBicGZfcmVnX3R5cGUgcmVnX3R5cGUgPSByZXQ7CiYjNDM7CQl1MzIgcGFyZW50X2lkID0gcmVnLSZndDtwYXJlbnRfaWQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmVnX3R5cGUsCiYjNDM7CQkJCSAgICAgIHJlZy0mZ3Q7YnRmLCBidGZfaWQsIGZsYWcpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgJmFtcDsgUFRSX1RSVVNURUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgJmFtcDsgKE1FTV9SQ1UgfCBNRU1fUEVSQ1BVIHwgTUVNX1VTRVIpKSkKJiM0MzsJCQlyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05NDU2LDYgJiM0Mzs5NDcxLDI0IEBAIHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApCiAJcmV0dXJuIGlkbWFwLSZndDttYXBbLS1pZG1hcC0mZ3Q7Y250XS5vbGQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcGFyZW50X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LSZndDtjdXJfc3RhdGU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdnN0YXRlLSZndDthY3F1aXJlZF9yZWZzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHZzdGF0ZS0mZ3Q7cmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICh2c3RhdGUtJmd0O3JlZnNbaV0ucGFyZW50X2lkICE9IHBhcmVudF9pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXZlcmJvc2UoZW52LCAmIzM0O0xlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXG4mIzM0OywKJiM0MzsJCQl2c3RhdGUtJmd0O3JlZnNbaV0uaWQsIHZzdGF0ZS0mZ3Q7cmVmc1tpXS5pbnNuX2lkeCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBSZWxlYXNlIGlkIGFuZCBvYmplY3RzIGRlcml2ZWQgZnJvbSBpdCBpdGVyYXRpdmVseSBpbiBhIERGUyBtYW5uZXIgKi8KIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKQogewpAQCAtOTQ2NSwzMSAmIzQzOzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpCiAJc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7CiAJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwotCWludCBpLCBlcnI7CiYjNDM7CWludCBlcnI7CiAKIAlpZHN0YWNrLSZndDtjbnQgPSAwOwogCWVyciA9IGlkc3RhY2tfcHVzaChpZHN0YWNrLCBpZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkgewotCQllcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7Ci0JCVdBUk5fT05fT05DRShlcnIpOwotCX0KLQogCXdoaWxlICgoaWQgPSBpZHN0YWNrX3BvcChpZHN0YWNrKSkpIHsKIAkJLyoKIAkJICogQ2hpbGQgcmVmZXJlbmNlcyBhcmUgaW5hY2Nlc3NpYmxlIGFmdGVyIHBhcmVudCBpcyByZWxlYXNlZCwKIAkJICogYW55IGNoaWxkIHJlZmVyZW5jZXMgdGhhdCBleGlzdCBhdCB0aGlzIHBvaW50IGFyZSBhIGxlYWsuCiAJCSAqLwotCQlmb3IgKGkgPSAwOyBpICZsdDsgdnN0YXRlLSZndDthY3F1aXJlZF9yZWZzOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzdGF0ZS0mZ3Q7cmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUikKLQkJCQljb250aW51ZTsKLQkJCWlmICh2c3RhdGUtJmd0O3JlZnNbaV0ucGFyZW50X2lkICE9IGlkKQotCQkJCWNvbnRpbnVlOwotCQkJdmVyYm9zZShlbnYsICYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JWQgYWxsb2NfaW5zbj0lZC4gUmVsZWFzZSBpdCBmaXJzdC5cbiYjMzQ7LAotCQkJCXZzdGF0ZS0mZ3Q7cmVmc1tpXS5pZCwgdnN0YXRlLSZndDtyZWZzW2ldLmluc25faWR4KTsKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZXJyID0gY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKGVudiwgaWQpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkJaWYgKGZpbmRfcmVmZXJlbmNlX3N0YXRlKHZzdGF0ZSwgaWQpKSB7CiYjNDM7CQkJZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpOwomIzQzOwkJCVdBUk5fT05fT05DRShlcnIpOwogCQl9CiAKIAkJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoewpAQCAtOTU0MSw2ICYjNDM7OTU2OCwzMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCX0pKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDsKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcGFyZW50X2lkKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwllcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBwYXJlbnRfaWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3RydWN0IGl0ZXJhdG9ycyBjYW4gcmVsZWFzZSB0aGUgcHJldmlvdXMgZWxlbWVudCBvbiBlYWNoIG5leHQgY2FsbC4KJiM0MzsJICogUFRSX1RPX01FTSBpdGVyYXRvciByZXN1bHRzIHVzZSBzdG9yYWdlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBkZXN0cm95LgomIzQzOwkgKi8KJiM0MzsJYnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LSZndDtjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoewomIzQzOwkJaWYgKGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgfHwgcmVnLSZndDtwYXJlbnRfaWQgIT0gcGFyZW50X2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJYnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpOwomIzQzOwkJbWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7CiYjNDM7CX0pKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjazsKQEAgLTEzMTAwLDYgJiM0MzsxMzE1NCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCXJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pOwogCQkJCWlmIChyZXQgJmx0OyAwKQogCQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCQlpZiAobWV0YS0mZ3Q7YnRmID09IGJ0Zl92bWxpbnV4ICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICBpID09IDAgJmFtcDsmYW1wOyAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpICZhbXA7JmFtcDsgcmVnLSZndDtwYXJlbnRfaWQpCiYjNDM7CQkJCQl1cGRhdGVfcmVmX29ial9pZCgmYW1wO21ldGEtJmd0O3JlZl9vYmosIHJlZy0mZ3Q7cGFyZW50X2lkLCAwKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMTM5OTUsNiAmIzQzOzE0MDUzLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCX0KIAl9CiAKJiM0MzsJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LSZndDtjdXJfc3RhdGUsICZhbXA7bWV0YSktJmd0O3R5cGUgJmFtcDsgTUVNX1JDVSkpIHsKJiM0MzsJCWVyciA9IGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyhlbnYsIG1ldGEucmVmX29iai5pZCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7CiAJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykgewpAQCAtMTQxMDUsNiAmIzQzOzE0MTcwLDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkJCXJlZ3NbQlBGX1JFR18wXS5idGYgPSBkZXNjX2J0ZjsKIAkJCXJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTsKIAkJCXJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDsKJiM0MzsKJiM0MzsJCQlpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpICZhbXA7JmFtcDsgISh0eXBlICZhbXA7IE1FTV9SQ1UpKQomIzQzOwkJCQlyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkOwogCQl9CiAKIAkJaWYgKGlzX2tmdW5jX3JldF9udWxsKCZhbXA7bWV0YSkpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jCmluZGV4IDc2MDEyZGJiZGI0MTMuLmE1NWU1Y2YyOTQ3NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuYwpAQCAtMjgsNiAmIzQzOzI4LDI5OCBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIHZtYV9wdHItJmd0O3ZtX3N0YXJ0OwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjsKJiM0MzsJdTY0IHZtX3N0YXJ0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghbmV4dF92bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXZtX3N0YXJ0ID0gdm1hX3B0ci0mZ3Q7dm1fc3RhcnQ7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gdm1fc3RhcnQ7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9uZXh0X251bGwoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7CiYjNDM7CXU2NCB2bV9zdGFydDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAobmV4dF92bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXZtX3N0YXJ0ID0gdm1hX3B0ci0mZ3Q7dm1fc3RhcnQ7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gdm1fc3RhcnQ7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmaWxlX3B0ciA9IHZtYV9wdHItJmd0O3ZtX2ZpbGU7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoZmlsZV9wdHIpCiYjNDM7CQlyZXR1cm4gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyLCAqbmV4dF92bWFfcHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CXUzMiBtb2RlOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIXZtYV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZmlsZV9wdHIgPSB2bWFfcHRyLSZndDt2bV9maWxlOwomIzQzOwlpZiAoIWZpbGVfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoIW5leHRfdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltb2RlID0gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiBtb2RlOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZpbGVfcHRyID0gdm1hX3B0ci0mZ3Q7dm1fZmlsZTsKJiM0MzsJaWYgKCFmaWxlX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfZGVzdHJveSgmYW1wO3ZtYV9pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7TGVha2luZyByZWZlcmVuY2UgaWQ9JiMzNDspCiYjNDM7aW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyOwomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlX3B0cjsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKCF2bWFfcHRyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZpbGVfcHRyID0gdm1hX3B0ci0mZ3Q7dm1fZmlsZTsKJiM0MzsJaWYgKCFmaWxlX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfZmlsZV9keW5wdHJfZGlzY2FyZF9iZWZvcmVfYWR2YW5jZShjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CXN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjsKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgZHlucHRyOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmaWxlX3B0ciA9IHZtYV9wdHItJmd0O3ZtX2ZpbGU7CiYjNDM7CWlmICghZmlsZV9wdHIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsICZhbXA7ZHlucHRyKTsKJiM0MzsJYnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoJmFtcDtkeW5wdHIpOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MztvdXQ6CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfdHJ1c3RlZF9jdXJyZW50X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX25ldygmYW1wO3ZtYV9pdCwgY3VyX3Rhc2ssIDApOwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICghdm1hX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dCgmYW1wO3ZtYV9pdCk7CiYjNDM7CWlmICh2bWFfcHRyKQomIzQzOwkJYnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7CiYjNDM7b3V0OgomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KCZhbXA7dm1hX2l0KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza192bWFfbmV3KCZhbXA7dm1hX2l0LCBjdXJfdGFzaywgMCk7CiYjNDM7CiYjNDM7CXZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKHZtYV9wdHIpIHsKJiM0MzsJCW1tX3B0ciA9IHZtYV9wdHItJmd0O3ZtX21tOwomIzQzOwkJLyogZXhlX2ZpbGUgaGFzIFJDVSBwcm90ZWN0aW9uIGluZGVwZW5kZW50IG9mIHRoZSBpdGVyYXRvci4gKi8KJiM0MzsJCWlmIChtbV9wdHIpCiYjNDM7CQkJZmlsZV9wdHIgPSBtbV9wdHItJmd0O2V4ZV9maWxlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAoZmlsZV9wdHIpCiYjNDM7CQlyZXR1cm4gZmlsZV9wdHItJmd0O2ZfbW9kZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDsKJiM0MzsJdTMyIG1vZGUgPSAwOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXcoJmFtcDt2bWFfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoJmFtcDt2bWFfaXQpOwomIzQzOwlpZiAodm1hX3B0cikgewomIzQzOwkJbW1fcHRyID0gdm1hX3B0ci0mZ3Q7dm1fbW07CiYjNDM7CQlpZiAobW1fcHRyKQomIzQzOwkJCWZpbGVfcHRyID0gbW1fcHRyLSZndDtleGVfZmlsZTsKJiM0MzsJfQomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX3ZtYV9uZXh0KCZhbXA7dm1hX2l0KTsKJiM0MzsJaWYgKGZpbGVfcHRyKQomIzQzOwkJbW9kZSA9IGZpbGVfcHRyLSZndDtmX21vZGU7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koJmFtcDt2bWFfaXQpOwomIzQzOwlyZXR1cm4gbW9kZTsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eCkKQEAgLTY2LDYgJiM0MzszNTgsNDYgQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25ldygmYW1wO3Rhc2tfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CWlmICghdGFza19wdHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3N5c19lbnRlciYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBpdGVyX25leHRfcmN1X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyOwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25ldygmYW1wO3Rhc2tfaXQsIGN1cl90YXNrLCAwKTsKJiM0MzsKJiM0MzsJdGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJaWYgKCF0YXNrX3B0cikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlicGZfaXRlcl90YXNrX25leHQoJmFtcDt0YXNrX2l0KTsKJiM0MzsJYnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpOwomIzQzO291dDoKJiM0MzsJYnBmX2l0ZXJfdGFza19kZXN0cm95KCZhbXA7dGFza19pdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQogaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDI1CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDEyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiBvZiBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSBhZGRyZXNzaW5nIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYE5lZWRzS01TQU4gPSBmYWxzZWAsIGJ1dCB3ZSBuZWVkIHRvIGJlIHJpZ29yb3VzLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIHJlbGF0ZWQgdG8gQlBGIHZlcmlmaWNhdGlvbjogYGJwZl92ZXJpZmllci5oYCwgYHZlcmlmaWVyLmNgLCBhbmQgYSBzZWxmdGVzdCBmaWxlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBpbXByb3ZlZCBsaWZldGltZSB0cmFja2luZyBmb3IgcG9pbnRlcnMgb2J0YWluZWQgdGhyb3VnaCBCUEYgc3RydWN0IGl0ZXJhdG9ycy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBwcmV2ZW50aW5nIFVBRiBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGB1cGRhdGVfcmVmX29ial9pZCgpYCwgYHVubWFya19zdGFja19zbG90c19pdGVyKClgLCBlbmhhbmNlbWVudHMgdG8gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbigpYCwgYW5kIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoKWAgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGFkanVzdG1lbnRzIHRvIGBjaGVja19rZnVuY19hcmdzYCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlkZWEgaXMgdG8gYW5jaG9yIHRoZSBsaWZldGltZSBvZiB0aGVzZSBpdGVyYXRvci1yZXR1cm5lZCBwb2ludGVycyAoYHBhcmVudF9pZGApIGFuZCBpbnZhbGlkYXRlIHRoZW0gd2hlbiB0aGUgaXRlcmF0b3IgYWR2YW5jZXMuCgpUaGUgZnVuZGFtZW50YWwgcHJvYmxlbSBpcyB0aGF0LCBwcmV2aW91c2x5LCBCUEYgcHJvZ3JhbXMgY291bGQgdXNlIHBvaW50ZXJzIHJldHVybmVkIGJ5IGl0ZXJhdG9ycyBhZnRlciB0aGUgaXRlcmF0b3IgaGFkIG1vdmVkIG9uLCByZXN1bHRpbmcgaW4gYSBwb3RlbnRpYWxseSBVQUYgc2l0dWF0aW9uLiBUaGlzIHBhdGNoIG1pdGlnYXRlcyB0aGF0IGJ5IGludmFsaWRhdGluZyB0aGUgcG9pbnRlcnMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIGFwcGx5IG91ciBLTVNBTiBsZW5zLiBGcm9tIGEgcHJlbGltaW5hcnkgcmVhZCwgdGhlIGFuc3dlciBpcyAmIzM0O25vJiMzNDsuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBkZXRhaWxzOgoKMS4gICoqTm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlKio6IFRoZSBtb2RpZmllZCBzdHJ1Y3RzIGFyZSBpbnRlcm5hbCB0byB0aGUgdmVyaWZpZXIsIG5vIHJpc2sgb2YgZGF0YSBsZWFrYWdlLgoyLiAgKipObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBicmFuY2hpbmcqKjogSW5pdGlhbGl6YXRpb25zIHNlZW0gc291bmQuIGBlcnJgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgaW4gYHVubWFya19zdGFja19zbG90c19pdGVyYC4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCB1c2VzIGFscmVhZHkgaW5pdGlhbGl6ZWQgcmVncy4gIExvb3AgaXRlcmF0b3JzIGluIGBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW5gIGl0ZXJhdGUgb3ZlciBleGlzdGluZyBpbml0aWFsaXplZCBmaWVsZHMuIFNpbWlsYXJseSwgYGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc2AgcmVsaWVzIG9uIGluaXRpYWxpemVkIHZhcmlhYmxlcyBhbmQgc3RhdGVzLgozLiAgKipObyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMqKjogVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb24gc2NoZW1lcy4KNC4gICoqTm8gYm91bmRhcnkgb3IgbGVuZ3RoIG1hbmlwdWxhdGlvbnMgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIHJlYWRzKio6IE5vdGhpbmcgaW4gdGhlIHBhdGNoIHN1Z2dlc3RzIHRoYXQgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIGJlY29tZSBhY2Nlc3NpYmxlLgoKVGhlIHBhdGNoIGFpbXMgdG8gZml4IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgZm9yIGRldGVjdGluZyB0aGlzIGtpbmQgb2YgYnVnLiBUaGVyZWZvcmUsIGFjY29yZGluZyB0byB0aGUgS01TQU4gcnVsZXMsIHdlICpkb24mIzM5O3QqIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIGNoYW5nZXMgYXJlIGFib3V0IHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gdGhhdCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi4gSXQmIzM5O3MgYSB2ZXJpZmllciBzdGF0aWMgYW5hbHlzaXMgaW1wcm92ZW1lbnQuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGNhbiBwcmVwYXJlIHRoZSB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbGlmZXRpbWUgdHJhY2tpbmcgZm9yIHRydXN0ZWQgcG9pbnRlcnMgcmV0dXJuZWQgYnkgc3RydWN0IGl0ZXJhdG9ycyAoZS5nLiwgYnBmX2l0ZXJfdGFza192bWEpIGJ5IGFzc29jaWF0aW5nIHRoZW0gd2l0aCBhIHBhcmVudF9pZCBhbmQgaW52YWxpZGF0aW5nIHRoZW0gdXBvbiBzdWJzZXF1ZW50IGl0ZXJhdG9yIHN0ZXBzIG9yIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgYW5kIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzIGluIEJQRiBwcm9ncmFtcy5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBwdXJlbHkgaW50ZXJuYWwgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWdpc3RlciBzdGF0ZSB0cmFja2luZywgYW5kIHNlbGZ0ZXN0cy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBtZWNoYW5pc21zLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcnVudGltZSBzYWZldHkgdmlvbGF0aW9ucyByZXN1bHRpbmcgZnJvbSBpdGVyYXRvciBidWdzIChzdWNoIGFzIFVBRikgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxpZmV0aW1lIHRyYWNraW5nIGZvciB0cnVzdGVkIHBvaW50ZXJzIHJldHVybmVkIGJ5IHN0cnVjdCBpdGVyYXRvcnMgKGUuZy4sIGJwZl9pdGVyX3Rhc2tfdm1hKSBieSBhc3NvY2lhdGluZyB0aGVtIHdpdGggYSBwYXJlbnRfaWQgYW5kIGludmFsaWRhdGluZyB0aGVtIHVwb24gc3Vic2VxdWVudCBpdGVyYXRvciBzdGVwcyBvciBkZXN0cnVjdGlvbi4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIGFuZCBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiBCUEYgcHJvZ3JhbXMuXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgcHVyZWx5IGludGVybmFsIEJQRiB2ZXJpZmllciBsb2dpYywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzZWxmdGVzdHMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgbWVjaGFuaXNtcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHJ1bnRpbWUgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaXRlcmF0b3IgYnVncyAoc3VjaCBhcyBVQUYpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OToyNC45OTc1Njg4NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUwNDQzNDk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc1wiLFxuICAgIFwiY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuXCIsXG4gICAgXCJyZWxlYXNlX3JlZmVyZW5jZVwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInVubWFya19zdGFja19zbG90c19pdGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmhhbmNlcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbGlmZXRpbWUgdHJhY2tpbmcgZm9yIHRydXN0ZWQgcG9pbnRlcnMgcmV0dXJuZWQgYnkgc3RydWN0IGl0ZXJhdG9ycyAoZS5nLiwgYnBmX2l0ZXJfdGFza192bWEpIGJ5IGFzc29jaWF0aW5nIHRoZW0gd2l0aCBhIHBhcmVudF9pZCBhbmQgaW52YWxpZGF0aW5nIHRoZW0gdXBvbiBzdWJzZXF1ZW50IGl0ZXJhdG9yIHN0ZXBzIG9yIGRlc3RydWN0aW9uLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgYW5kIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzIGluIEJQRiBwcm9ncmFtcy5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlIHB1cmVseSBpbnRlcm5hbCBCUEYgdmVyaWZpZXIgbG9naWMsIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLCBhbmQgc2VsZnRlc3RzLiBObyBrZXJuZWwtdG8tdXNlciBjb3B5IG1lY2hhbmlzbXMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBydW50aW1lIHNhZmV0eSB2aW9sYXRpb25zIHJlc3VsdGluZyBmcm9tIGl0ZXJhdG9yIGJ1Z3MgKHN1Y2ggYXMgVUFGKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciB0cmFja2luZyByZWZlcmVuY2UgbGlmZXRpbWVzLCBwYXJlbnRhZ2UsIGFuZCBpbnZhbGlkYXRpb24gb2YgaXRlcmF0b3Itb3duZWQgUFRSX1RPX0JURl9JRCBwb2ludGVycyBhbmQgZHlucHRycyBhY3Jvc3MgaXRlcmF0b3IgYWR2YW5jZSBhbmQgZGVzdHJveSBvcGVyYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdmVyaWZpY2F0aW9uIG9mIGVCUEYgcHJvZ3JhbXMgdmlhIGJwZihCUEZfUFJPR19MT0FEKSBhbmQgaW50cm9kdWNlcyBuZXcgdmFsaWRhdGlvbiBhbmQgcmVmZXJlbmNlIGxlYWsgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OToyNC45OTc1NzQ2NTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzk2MjMyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YThjNjM3NGMyZWQ4ZDliODc0YWYzMmEwODU2YjdjNWQ3MTk0ODQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjQ5OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uYWUzMGRmNjI5ZDViMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC0xNTE4LDkgKzE1MTgsOSBAQCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjIHtcXG4gXFxuIC8qXFxuICAqIFRoZSBsYXN0IHNlZW4gcmVyZWZlcmVuY2VkIG9iamVjdDsgVXBkYXRlZCBieSB1cGRhdGVfcmVmX29iaigpIHdoZW4gYSByZWdpc3RlciByZWZlcnMgdG8gYVxcbi0gKiByZWZlcmVuY2VkIG9iamVjdC4gVXNlZCB3aGVuIHRoZSBoZWxwZXIgb3Iga2Z1bmMgaXMgY2FzdGluZyBhIHJlZmVyZW5jZWQgb2JqZWN0LCByZXR1cm5pbmdcXG4tICogYWxsb2NhdGVkIG1lbW9yeSBkZXJpdmVkIGZyb20gcmVmZXJlbmNlZCBvYmplY3Qgb3IgY3JlYXRpbmcgYSBkeW5wdHIgd2l0aCBhIHJlZmVyZW5jZWRcXG4tICogb2JqZWN0IGFzIHBhcmVudC5cXG4rICogcmVmZXJlbmNlZCBvYmplY3Qgb3IgYW5vdGhlciB2ZXJpZmllci10cmFja2VkIGxpZmV0aW1lIGFuY2hvci4gVXNlZCB3aGVuIHRoZSBoZWxwZXIgb3Iga2Z1bmNcXG4rICogaXMgY2FzdGluZyBhIHJlZmVyZW5jZWQgb2JqZWN0LCByZXR1cm5pbmcgYWxsb2NhdGVkIG1lbW9yeSBkZXJpdmVkIGZyb20gYSByZWZlcmVuY2VkIG9iamVjdFxcbisgKiBvciBjcmVhdGluZyBhIGR5bnB0ciB3aG9zZSBiYWNraW5nIG9iamVjdCBoYXMgYSB0cmFja2VkIGxpZmV0aW1lLlxcbiAgKi9cXG4gc3RydWN0IHJlZl9vYmpfZGVzYyB7XFxuIFxcdHUzMiBpZDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWIwMTM5NTQxODJmMiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMjM4LDEzICsyMzgsMTggQEAgc3RhdGljIHZvaWQgYnBmX21hcF9rZXlfc3RvcmUoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXgsIHU2NCBzdGF0ZSlcXG4gXFx0XFx0XFx0ICAgICAocG9pc29uZWQgPyBCUEZfTUFQX0tFWV9QT0lTT04gOiAwVUxMKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmooc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4rc3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmpfaWQoc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgdTMyIGlkLCB1MzIgcGFyZW50X2lkKVxcbiB7XFxuLVxcdHJlZl9vYmotXFx1MDAzZWlkID0gcmVnLVxcdTAwM2VpZDtcXG4tXFx0cmVmX29iai1cXHUwMDNlcGFyZW50X2lkID0gcmVnLVxcdTAwM2VwYXJlbnRfaWQ7XFxuK1xcdHJlZl9vYmotXFx1MDAzZWlkID0gaWQ7XFxuK1xcdHJlZl9vYmotXFx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcXG4gXFx0cmVmX29iai1cXHUwMDNlY250Kys7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuK3tcXG4rXFx0dXBkYXRlX3JlZl9vYmpfaWQocmVmX29iaiwgcmVnLVxcdTAwM2VpZCwgcmVnLVxcdTAwM2VwYXJlbnRfaWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHZhbGlkYXRlX3JlZl9vYmooc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iailcXG4ge1xcbiBcXHRpZiAocmVmX29iai1cXHUwMDNlY250IFxcdTAwM2UgMSkge1xcbkBAIC05NzcsNyArOTgyLDcgQEAgc3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcXG4tXFx0aW50IHNwaSwgaSwgajtcXG4rXFx0aW50IHNwaSwgaSwgaiwgZXJyO1xcbiBcXG4gXFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxuIFxcdGlmIChzcGkgXFx1MDAzYyAwKVxcbkBAIC05ODcsOCArOTkyLDExIEBAIHN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpIC0gaV07XFxuIFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdCA9IFxcdTAwMjZzbG90LVxcdTAwM2VzcGlsbGVkX3B0cjtcXG4gXFxuLVxcdFxcdGlmIChpID09IDApXFxuLVxcdFxcdFxcdFdBUk5fT05fT05DRShyZWxlYXNlX3JlZmVyZW5jZShlbnYsIHN0LVxcdTAwM2VpZCkpO1xcbitcXHRcXHRpZiAoaSA9PSAwKSB7XFxuK1xcdFxcdFxcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3QtXFx1MDAzZWlkKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpO1xcbiBcXG5AQCAtNjE0MCw5ICs2MTQ4LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGF0eXBlID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0cmV0ID0gbWFya19idGZfbGRfcmVnKGVudiwgcmVncywgdmFsdWVfcmVnbm8sIHJldCwgcmVnLVxcdTAwM2VidGYsIGJ0Zl9pZCwgZmxhZyk7XFxuK1xcdFxcdGVudW0gYnBmX3JlZ190eXBlIHJlZ190eXBlID0gcmV0O1xcbitcXHRcXHR1MzIgcGFyZW50X2lkID0gcmVnLVxcdTAwM2VwYXJlbnRfaWQ7XFxuK1xcbitcXHRcXHRyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmVnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHJlZy1cXHUwMDNlYnRmLCBidGZfaWQsIGZsYWcpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKChyZWdzW3ZhbHVlX3JlZ25vXS50eXBlIFxcdTAwMjYgUFRSX1RSVVNURUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgXFx1MDAyNiAoTUVNX1JDVSB8IE1FTV9QRVJDUFUgfCBNRU1fVVNFUikpKVxcbitcXHRcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC05NDU2LDYgKzk0NzEsMjQgQEAgc3RhdGljIGludCBpZHN0YWNrX3BvcChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcXG4gXFx0cmV0dXJuIGlkbWFwLVxcdTAwM2VtYXBbLS1pZG1hcC1cXHUwMDNlY250XS5vbGQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBwYXJlbnRfaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZzdGF0ZS1cXHUwMDNlYWNxdWlyZWRfcmVmczsgaSsrKSB7XFxuK1xcdFxcdGlmICh2c3RhdGUtXFx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAodnN0YXRlLVxcdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBwYXJlbnRfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkxlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR2c3RhdGUtXFx1MDAzZXJlZnNbaV0uaWQsIHZzdGF0ZS1cXHUwMDNlcmVmc1tpXS5pbnNuX2lkeCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogUmVsZWFzZSBpZCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb20gaXQgaXRlcmF0aXZlbHkgaW4gYSBERlMgbWFubmVyICovXFxuIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxcbiB7XFxuQEAgLTk0NjUsMzEgKzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXFxuIFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xcbiBcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xcbi1cXHRpbnQgaSwgZXJyO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWRzdGFjay1cXHUwMDNlY250ID0gMDtcXG4gXFx0ZXJyID0gaWRzdGFja19wdXNoKGlkc3RhY2ssIGlkKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkge1xcbi1cXHRcXHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7XFxuLVxcdFxcdFdBUk5fT05fT05DRShlcnIpO1xcbi1cXHR9XFxuLVxcbiBcXHR3aGlsZSAoKGlkID0gaWRzdGFja19wb3AoaWRzdGFjaykpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIENoaWxkIHJlZmVyZW5jZXMgYXJlIGluYWNjZXNzaWJsZSBhZnRlciBwYXJlbnQgaXMgcmVsZWFzZWQsXFxuIFxcdFxcdCAqIGFueSBjaGlsZCByZWZlcmVuY2VzIHRoYXQgZXhpc3QgYXQgdGhpcyBwb2ludCBhcmUgYSBsZWFrLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZzdGF0ZS1cXHUwMDNlYWNxdWlyZWRfcmVmczsgaSsrKSB7XFxuLVxcdFxcdFxcdGlmICh2c3RhdGUtXFx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRpZiAodnN0YXRlLVxcdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBpZClcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiTGVha2luZyByZWZlcmVuY2UgaWQ9JWQgYWxsb2NfaW5zbj0lZC4gUmVsZWFzZSBpdCBmaXJzdC5cXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHZzdGF0ZS1cXHUwMDNlcmVmc1tpXS5pZCwgdnN0YXRlLVxcdTAwM2VyZWZzW2ldLmluc25faWR4KTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIGlkKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdFxcdGlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkge1xcbitcXHRcXHRcXHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRShlcnIpO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKHZzdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIG1hc2ssICh7XFxuQEAgLTk1NDEsNiArOTU2OCwzMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHR9KSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICp1bnVzZWQ7XFxuK1xcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnRfaWQpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIHBhcmVudF9pZCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTdHJ1Y3QgaXRlcmF0b3JzIGNhbiByZWxlYXNlIHRoZSBwcmV2aW91cyBlbGVtZW50IG9uIGVhY2ggbmV4dCBjYWxsLlxcbitcXHQgKiBQVFJfVE9fTUVNIGl0ZXJhdG9yIHJlc3VsdHMgdXNlIHN0b3JhZ2UgdGhhdCByZW1haW5zIHZhbGlkIHVudGlsIGRlc3Ryb3kuXFxuK1xcdCAqL1xcbitcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgdW51c2VkLCByZWcsICh7XFxuK1xcdFxcdGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIHx8IHJlZy1cXHUwMDNlcGFyZW50X2lkICE9IHBhcmVudF9pZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGJwZl9kaWFnX3JlY29yZF9zY3J1YihlbnYsIHJlZywgQlBGX0RJQUdfTU9EX1JFRl9SRUxFQVNFKTtcXG4rXFx0XFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XFxuK1xcdH0pKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xcbkBAIC0xMzEwMCw2ICsxMzE1NCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKGVudiwgcmVnLCByZWZfdCwgcmVmX3RuYW1lLCByZWZfaWQsIG1ldGEsIGksIGFyZ25vKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VidGYgPT0gYnRmX3ZtbGludXggXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgaSA9PSAwIFxcdTAwMjZcXHUwMDI2ICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2VwYXJlbnRfaWQpXFxuK1xcdFxcdFxcdFxcdFxcdHVwZGF0ZV9yZWZfb2JqX2lkKFxcdTAwMjZtZXRhLVxcdTAwM2VyZWZfb2JqLCByZWctXFx1MDAzZXBhcmVudF9pZCwgMCk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0xMzk5NSw2ICsxNDA1MywxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBcXHUwMDI2bWV0YSktXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSkge1xcbitcXHRcXHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7XFxuIFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuQEAgLTE0MTA1LDYgKzE0MTcwLDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xcbiBcXHRcXHRcXHRyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7XFxuIFxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS5idGZfaWQgPSBwdHJfdHlwZV9pZDtcXG4rXFxuK1xcdFxcdFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNiAhKHR5cGUgXFx1MDAyNiBNRU1fUkNVKSlcXG4rXFx0XFx0XFx0XFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGlzX2tmdW5jX3JldF9udWxsKFxcdTAwMjZtZXRhKSkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xcbmluZGV4IDc2MDEyZGJiZGI0MTMuLmE1NWU1Y2YyOTQ3NGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcXG5AQCAtMjgsNiArMjgsMjk4IEBAIGludCBpdGVyX25leHRfdHJ1c3RlZChjb25zdCB2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1xcXCIpXFxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiB2bWFfcHRyLVxcdTAwM2V2bV9zdGFydDtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xcbitcXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XFxuK1xcdHU2NCB2bV9zdGFydDtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICghbmV4dF92bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHZtX3N0YXJ0ID0gdm1hX3B0ci1cXHUwMDNldm1fc3RhcnQ7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiB2bV9zdGFydDtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dF9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcXG4rXFx0dTY0IHZtX3N0YXJ0O1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfbmV3KFxcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcXG4rXFxuK1xcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAoIXZtYV9wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKG5leHRfdm1hX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR2bV9zdGFydCA9IHZtYV9wdHItXFx1MDAzZXZtX3N0YXJ0O1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gdm1fc3RhcnQ7XFxuK291dDpcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXFxcIilcXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICghdm1hX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmaWxlX3B0ciA9IHZtYV9wdHItXFx1MDAzZXZtX2ZpbGU7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmIChmaWxlX3B0cilcXG4rXFx0XFx0cmV0dXJuIGZpbGVfcHRyLVxcdTAwM2VmX21vZGU7XFxuK1xcdHJldHVybiAwO1xcbitvdXQ6XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1xcXCIpXFxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcXG4rXFx0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xcbitcXHR1MzIgbW9kZTtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGZpbGVfcHRyID0gdm1hX3B0ci1cXHUwMDNldm1fZmlsZTtcXG4rXFx0aWYgKCFmaWxlX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRuZXh0X3ZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAoIW5leHRfdm1hX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRtb2RlID0gZmlsZV9wdHItXFx1MDAzZWZfbW9kZTtcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIG1vZGU7XFxuK291dDpcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiTGVha2luZyByZWZlcmVuY2UgaWQ9XFxcIilcXG4raW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgZHlucHRyO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICghdm1hX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmaWxlX3B0ciA9IHZtYV9wdHItXFx1MDAzZXZtX2ZpbGU7XFxuK1xcdGlmICghZmlsZV9wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0YnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsIFxcdTAwMjZkeW5wdHIpO1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRicGZfZHlucHRyX2ZpbGVfZGlzY2FyZChcXHUwMDI2ZHlucHRyKTtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJMZWFraW5nIHJlZmVyZW5jZSBpZD1cXFwiKVxcbitpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XFxuK1xcdHN0cnVjdCBmaWxlICpmaWxlX3B0cjtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGZpbGVfcHRyID0gdm1hX3B0ci1cXHUwMDNldm1fZmlsZTtcXG4rXFx0aWYgKCFmaWxlX3B0cilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXFx1MDAyNmR5bnB0cik7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFxcdTAwMjZkeW5wdHIpO1xcbitcXHRyZXR1cm4gMDtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBpdGVyX25leHRfZmlsZV9keW5wdHJfZGlzY2FyZF9iZWZvcmVfYWR2YW5jZShjb25zdCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xcbitcXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XFxuK1xcdHN0cnVjdCBicGZfZHlucHRyIGR5bnB0cjtcXG4rXFx0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xcbitcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfbmV3KFxcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcXG4rXFxuK1xcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAoIXZtYV9wdHIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZmlsZV9wdHIgPSB2bWFfcHRyLVxcdTAwM2V2bV9maWxlO1xcbitcXHRpZiAoIWZpbGVfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGJwZl9keW5wdHJfZnJvbV9maWxlKGZpbGVfcHRyLCAwLCBcXHUwMDI2ZHlucHRyKTtcXG4rXFx0YnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoXFx1MDAyNmR5bnB0cik7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK291dDpcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfY3VycmVudF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XFxuK1xcbitcXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcXHUwMDI2dm1hX2l0KTtcXG4rXFx0aWYgKCF2bWFfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFxcdTAwMjZ2bWFfaXQpO1xcbitcXHRpZiAodm1hX3B0cilcXG4rXFx0XFx0YnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7XFxuK291dDpcXG4rXFx0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcXHUwMDI2dm1hX2l0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XFxuK1xcdHN0cnVjdCBmaWxlICpmaWxlX3B0ciA9IE5VTEw7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICh2bWFfcHRyKSB7XFxuK1xcdFxcdG1tX3B0ciA9IHZtYV9wdHItXFx1MDAzZXZtX21tO1xcbitcXHRcXHQvKiBleGVfZmlsZSBoYXMgUkNVIHByb3RlY3Rpb24gaW5kZXBlbmRlbnQgb2YgdGhlIGl0ZXJhdG9yLiAqL1xcbitcXHRcXHRpZiAobW1fcHRyKVxcbitcXHRcXHRcXHRmaWxlX3B0ciA9IG1tX3B0ci1cXHUwMDNlZXhlX2ZpbGU7XFxuK1xcdH1cXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmIChmaWxlX3B0cilcXG4rXFx0XFx0cmV0dXJuIGZpbGVfcHRyLVxcdTAwM2VmX21vZGU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX3JjdV9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW1fcHRyO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHIgPSBOVUxMO1xcbitcXHR1MzIgbW9kZSA9IDA7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmICh2bWFfcHRyKSB7XFxuK1xcdFxcdG1tX3B0ciA9IHZtYV9wdHItXFx1MDAzZXZtX21tO1xcbitcXHRcXHRpZiAobW1fcHRyKVxcbitcXHRcXHRcXHRmaWxlX3B0ciA9IG1tX3B0ci1cXHUwMDNlZXhlX2ZpbGU7XFxuK1xcdH1cXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXFx1MDAyNnZtYV9pdCk7XFxuK1xcdGlmIChmaWxlX3B0cilcXG4rXFx0XFx0bW9kZSA9IGZpbGVfcHRyLVxcdTAwM2VmX21vZGU7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXFx1MDAyNnZtYV9pdCk7XFxuK1xcdHJldHVybiBtb2RlO1xcbit9XFxuK1xcbiBTRUMoXFxcInJhd190cC9zeXNfZW50ZXJcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVxcXCIpXFxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG5AQCAtNjYsNiArMzU4LDQ2IEBAIGludCBpdGVyX25leHRfcmN1KGNvbnN0IHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX25ldyhcXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRpZiAoIXRhc2tfcHRyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7XFxuK1xcbitcXHRicGZfaXRlcl90YXNrX25ldyhcXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xcbitcXG4rXFx0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRpZiAoIXRhc2tfcHRyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGJwZl9pdGVyX3Rhc2tfbmV4dChcXHUwMDI2dGFza19pdCk7XFxuK1xcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcXG4rb3V0OlxcbitcXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXFx1MDAyNnRhc2tfaXQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcXFwiKVxcbiBpbnQgaXRlcl9uZXh0X3JjdV9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MjYuNzc3NzQ2MjE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTM4ODAzOTE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc1wiLFxuICAgIFwiY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuXCIsXG4gICAgXCJyZWxlYXNlX3JlZmVyZW5jZVwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInVubWFya19zdGFja19zbG90c19pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBmb3IgdHJhY2tpbmcgcmVmZXJlbmNlIGxpZmV0aW1lcywgcGFyZW50YWdlLCBhbmQgaW52YWxpZGF0aW9uIG9mIGl0ZXJhdG9yLW93bmVkIFBUUl9UT19CVEZfSUQgcG9pbnRlcnMgYW5kIGR5bnB0cnMgYWNyb3NzIGl0ZXJhdG9yIGFkdmFuY2UgYW5kIGRlc3Ryb3kgb3BlcmF0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHZlcmlmaWNhdGlvbiBvZiBlQlBGIHByb2dyYW1zIHZpYSBicGYoQlBGX1BST0dfTE9BRCkgYW5kIGludHJvZHVjZXMgbmV3IHZhbGlkYXRpb24gYW5kIHJlZmVyZW5jZSBsZWFrIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YThjNjM3NGMyZWQ4ZDliODc0YWYzMmEwODU2YjdjNWQ3MTk0ODQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDk6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzZiNjU3OTc4NzdkMC4uYWUzMGRmNjI5ZDViMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xNTE4LDkgKzE1MTgsOSBAQCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjIHtcbiBcbiAvKlxuICAqIFRoZSBsYXN0IHNlZW4gcmVyZWZlcmVuY2VkIG9iamVjdDsgVXBkYXRlZCBieSB1cGRhdGVfcmVmX29iaigpIHdoZW4gYSByZWdpc3RlciByZWZlcnMgdG8gYVxuLSAqIHJlZmVyZW5jZWQgb2JqZWN0LiBVc2VkIHdoZW4gdGhlIGhlbHBlciBvciBrZnVuYyBpcyBjYXN0aW5nIGEgcmVmZXJlbmNlZCBvYmplY3QsIHJldHVybmluZ1xuLSAqIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIHJlZmVyZW5jZWQgb2JqZWN0IG9yIGNyZWF0aW5nIGEgZHlucHRyIHdpdGggYSByZWZlcmVuY2VkXG4tICogb2JqZWN0IGFzIHBhcmVudC5cbisgKiByZWZlcmVuY2VkIG9iamVjdCBvciBhbm90aGVyIHZlcmlmaWVyLXRyYWNrZWQgbGlmZXRpbWUgYW5jaG9yLiBVc2VkIHdoZW4gdGhlIGhlbHBlciBvciBrZnVuY1xuKyAqIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nIGFsbG9jYXRlZCBtZW1vcnkgZGVyaXZlZCBmcm9tIGEgcmVmZXJlbmNlZCBvYmplY3RcbisgKiBvciBjcmVhdGluZyBhIGR5bnB0ciB3aG9zZSBiYWNraW5nIG9iamVjdCBoYXMgYSB0cmFja2VkIGxpZmV0aW1lLlxuICAqL1xuIHN0cnVjdCByZWZfb2JqX2Rlc2Mge1xuIFx0dTMyIGlkO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWIwMTM5NTQxODJmMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjM4LDEzICsyMzgsMTggQEAgc3RhdGljIHZvaWQgYnBmX21hcF9rZXlfc3RvcmUoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXgsIHU2NCBzdGF0ZSlcbiBcdFx0XHQgICAgIChwb2lzb25lZCA/IEJQRl9NQVBfS0VZX1BPSVNPTiA6IDBVTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqX2lkKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHUzMiBpZCwgdTMyIHBhcmVudF9pZClcbiB7XG4tXHRyZWZfb2JqLVx1MDAzZWlkID0gcmVnLVx1MDAzZWlkO1xuLVx0cmVmX29iai1cdTAwM2VwYXJlbnRfaWQgPSByZWctXHUwMDNlcGFyZW50X2lkO1xuK1x0cmVmX29iai1cdTAwM2VpZCA9IGlkO1xuK1x0cmVmX29iai1cdTAwM2VwYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XG4gXHRyZWZfb2JqLVx1MDAzZWNudCsrO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB1cGRhdGVfcmVmX29iaihzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3tcbitcdHVwZGF0ZV9yZWZfb2JqX2lkKHJlZl9vYmosIHJlZy1cdTAwM2VpZCwgcmVnLVx1MDAzZXBhcmVudF9pZCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdmFsaWRhdGVfcmVmX29iaihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqKVxuIHtcbiBcdGlmIChyZWZfb2JqLVx1MDAzZWNudCBcdTAwM2UgMSkge1xuQEAgLTk3Nyw3ICs5ODIsNyBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXG4ge1xuIFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcbi1cdGludCBzcGksIGksIGo7XG4rXHRpbnQgc3BpLCBpLCBqLCBlcnI7XG4gXG4gXHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbiBcdGlmIChzcGkgXHUwMDNjIDApXG5AQCAtOTg3LDggKzk5MiwxMSBAQCBzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSBpXTtcbiBcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbiBcbi1cdFx0aWYgKGkgPT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UocmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC1cdTAwM2VpZCkpO1xuK1x0XHRpZiAoaSA9PSAwKSB7XG4rXHRcdFx0ZXJyID0gcmVsZWFzZV9yZWZlcmVuY2UoZW52LCBzdC1cdTAwM2VpZCk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbiBcbiBcdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgc3QpO1xuIFxuQEAgLTYxNDAsOSArNjE0OCwxNiBAQCBzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gXG4gXHRpZiAoYXR5cGUgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBtYXJrX2J0Zl9sZF9yZWcoZW52LCByZWdzLCB2YWx1ZV9yZWdubywgcmV0LCByZWctXHUwMDNlYnRmLCBidGZfaWQsIGZsYWcpO1xuK1x0XHRlbnVtIGJwZl9yZWdfdHlwZSByZWdfdHlwZSA9IHJldDtcbitcdFx0dTMyIHBhcmVudF9pZCA9IHJlZy1cdTAwM2VwYXJlbnRfaWQ7XG4rXG4rXHRcdHJldCA9IG1hcmtfYnRmX2xkX3JlZyhlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLCByZWdfdHlwZSxcbitcdFx0XHRcdCAgICAgIHJlZy1cdTAwM2VidGYsIGJ0Zl9pZCwgZmxhZyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKChyZWdzW3ZhbHVlX3JlZ25vXS50eXBlIFx1MDAyNiBQVFJfVFJVU1RFRCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgXHUwMDI2IChNRU1fUkNVIHwgTUVNX1BFUkNQVSB8IE1FTV9VU0VSKSkpXG4rXHRcdFx0cmVnc1t2YWx1ZV9yZWdub10ucGFyZW50X2lkID0gcGFyZW50X2lkO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtOTQ1Niw2ICs5NDcxLDI0IEBAIHN0YXRpYyBpbnQgaWRzdGFja19wb3Aoc3RydWN0IGJwZl9pZG1hcCAqaWRtYXApXG4gXHRyZXR1cm4gaWRtYXAtXHUwMDNlbWFwWy0taWRtYXAtXHUwMDNlY250XS5vbGQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBwYXJlbnRfaWQpXG4re1xuK1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnN0YXRlLVx1MDAzZWFjcXVpcmVkX3JlZnM7IGkrKykge1xuK1x0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICh2c3RhdGUtXHUwMDNlcmVmc1tpXS5wYXJlbnRfaWQgIT0gcGFyZW50X2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR2ZXJib3NlKGVudiwgXCJMZWFraW5nIHJlZmVyZW5jZSBpZD0lZCBhbGxvY19pbnNuPSVkLiBSZWxlYXNlIGl0IGZpcnN0LlxcblwiLFxuK1x0XHRcdHZzdGF0ZS1cdTAwM2VyZWZzW2ldLmlkLCB2c3RhdGUtXHUwMDNlcmVmc1tpXS5pbnNuX2lkeCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIFJlbGVhc2UgaWQgYW5kIG9iamVjdHMgZGVyaXZlZCBmcm9tIGl0IGl0ZXJhdGl2ZWx5IGluIGEgREZTIG1hbm5lciAqL1xuIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuIHtcbkBAIC05NDY1LDMxICs5NDk4LDI1IEBAIHN0YXRpYyBpbnQgcmVsZWFzZV9yZWZlcmVuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkKVxuIFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbi1cdGludCBpLCBlcnI7XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWRzdGFjay1cdTAwM2VjbnQgPSAwO1xuIFx0ZXJyID0gaWRzdGFja19wdXNoKGlkc3RhY2ssIGlkKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoZmluZF9yZWZlcmVuY2Vfc3RhdGUodnN0YXRlLCBpZCkpIHtcbi1cdFx0ZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpO1xuLVx0XHRXQVJOX09OX09OQ0UoZXJyKTtcbi1cdH1cbi1cbiBcdHdoaWxlICgoaWQgPSBpZHN0YWNrX3BvcChpZHN0YWNrKSkpIHtcbiBcdFx0LypcbiBcdFx0ICogQ2hpbGQgcmVmZXJlbmNlcyBhcmUgaW5hY2Nlc3NpYmxlIGFmdGVyIHBhcmVudCBpcyByZWxlYXNlZCxcbiBcdFx0ICogYW55IGNoaWxkIHJlZmVyZW5jZXMgdGhhdCBleGlzdCBhdCB0aGlzIHBvaW50IGFyZSBhIGxlYWsuXG4gXHRcdCAqL1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2c3RhdGUtXHUwMDNlYWNxdWlyZWRfcmVmczsgaSsrKSB7XG4tXHRcdFx0aWYgKHZzdGF0ZS1cdTAwM2VyZWZzW2ldLnR5cGUgIT0gUkVGX1RZUEVfUFRSKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKHZzdGF0ZS1cdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBpZClcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcIkxlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxuXCIsXG4tXHRcdFx0XHR2c3RhdGUtXHUwMDNlcmVmc1tpXS5pZCwgdnN0YXRlLVx1MDAzZXJlZnNbaV0uaW5zbl9pZHgpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRlcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBpZCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcbitcdFx0aWYgKGZpbmRfcmVmZXJlbmNlX3N0YXRlKHZzdGF0ZSwgaWQpKSB7XG4rXHRcdFx0ZXJyID0gcmVsZWFzZV9yZWZlcmVuY2Vfbm9tYXJrKGVudiwgaWQpO1xuK1x0XHRcdFdBUk5fT05fT05DRShlcnIpO1xuIFx0XHR9XG4gXG4gXHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2sodnN0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgbWFzaywgKHtcbkBAIC05NTQxLDYgKzk1NjgsMzMgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdH0pKTtcbiB9XG4gXG4rc3RhdGljIGludCBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIHBhcmVudF9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDtcbitcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghcGFyZW50X2lkKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRlcnIgPSBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oZW52LCBwYXJlbnRfaWQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qXG4rXHQgKiBTdHJ1Y3QgaXRlcmF0b3JzIGNhbiByZWxlYXNlIHRoZSBwcmV2aW91cyBlbGVtZW50IG9uIGVhY2ggbmV4dCBjYWxsLlxuK1x0ICogUFRSX1RPX01FTSBpdGVyYXRvciByZXN1bHRzIHVzZSBzdG9yYWdlIHRoYXQgcmVtYWlucyB2YWxpZCB1bnRpbCBkZXN0cm95LlxuK1x0ICovXG4rXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCB1bnVzZWQsIHJlZywgKHtcbitcdFx0aWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCB8fCByZWctXHUwMDNlcGFyZW50X2lkICE9IHBhcmVudF9pZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpO1xuK1x0XHRtYXJrX3JlZ19pbnZhbGlkKGVudiwgcmVnKTtcbitcdH0pKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xuQEAgLTEzMTAwLDYgKzEzMTU0LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRyZXQgPSBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKGVudiwgcmVnLCByZWZfdCwgcmVmX3RuYW1lLCByZWZfaWQsIG1ldGEsIGksIGFyZ25vKTtcbiBcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0XHRpZiAobWV0YS1cdTAwM2VidGYgPT0gYnRmX3ZtbGludXggXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fZmlsZV0gXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgaSA9PSAwIFx1MDAyNlx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpIFx1MDAyNlx1MDAyNiByZWctXHUwMDNlcGFyZW50X2lkKVxuK1x0XHRcdFx0XHR1cGRhdGVfcmVmX29ial9pZChcdTAwMjZtZXRhLVx1MDAzZXJlZl9vYmosIHJlZy1cdTAwM2VwYXJlbnRfaWQsIDApO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuQEAgLTEzOTk1LDYgKzE0MDUzLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEoZ2V0X2l0ZXJfZnJvbV9zdGF0ZShlbnYtXHUwMDNlY3VyX3N0YXRlLCBcdTAwMjZtZXRhKS1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSkge1xuK1x0XHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7XG4gXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XG5AQCAtMTQxMDUsNiArMTQxNzAsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS5idGYgPSBkZXNjX2J0ZjtcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0udHlwZSA9IHR5cGU7XG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0Zl9pZCA9IHB0cl90eXBlX2lkO1xuK1xuK1x0XHRcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpIFx1MDAyNlx1MDAyNiAhKHR5cGUgXHUwMDI2IE1FTV9SQ1UpKVxuK1x0XHRcdFx0cmVnc1tCUEZfUkVHXzBdLnBhcmVudF9pZCA9IG1ldGEucmVmX29iai5pZDtcbiBcdFx0fVxuIFxuIFx0XHRpZiAoaXNfa2Z1bmNfcmV0X251bGwoXHUwMDI2bWV0YSkpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuaW5kZXggNzYwMTJkYmJkYjQxMy4uYTU1ZTVjZjI5NDc0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmNcbkBAIC0yOCw2ICsyOCwyOTggQEAgaW50IGl0ZXJfbmV4dF90cnVzdGVkKGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiB2bWFfcHRyLVx1MDAzZXZtX3N0YXJ0O1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4rXHR1NjQgdm1fc3RhcnQ7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghbmV4dF92bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHZtX3N0YXJ0ID0gdm1hX3B0ci1cdTAwM2V2bV9zdGFydDtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiB2bV9zdGFydDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9hZnRlcl9uZXh0X251bGwoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHIsICpuZXh0X3ZtYV9wdHI7XG4rXHR1NjQgdm1fc3RhcnQ7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5leHRfdm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmIChuZXh0X3ZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dm1fc3RhcnQgPSB2bWFfcHRyLVx1MDAzZXZtX3N0YXJ0O1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIHZtX3N0YXJ0O1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKGZpbGVfcHRyKVxuK1x0XHRyZXR1cm4gZmlsZV9wdHItXHUwMDNlZl9tb2RlO1xuK1x0cmV0dXJuIDA7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfZmllbGRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcbitcdHN0cnVjdCBmaWxlICpmaWxlX3B0cjtcbitcdHUzMiBtb2RlO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmaWxlX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fZmlsZTtcbitcdGlmICghZmlsZV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCFuZXh0X3ZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bW9kZSA9IGZpbGVfcHRyLVx1MDAzZWZfbW9kZTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiBtb2RlO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiTGVha2luZyByZWZlcmVuY2UgaWQ9XCIpXG4raW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1x0c3RydWN0IGJwZl9keW5wdHIgZHlucHRyO1xuK1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmaWxlX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fZmlsZTtcbitcdGlmICghZmlsZV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsIFx1MDAyNmR5bnB0cik7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRicGZfZHlucHRyX2ZpbGVfZGlzY2FyZChcdTAwMjZkeW5wdHIpO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiTGVha2luZyByZWZlcmVuY2UgaWQ9XCIpXG4raW50IGl0ZXJfbmV4dF9maWxlX2R5bnB0cl9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1x0c3RydWN0IGJwZl9keW5wdHIgZHlucHRyO1xuK1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmaWxlX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fZmlsZTtcbitcdGlmICghZmlsZV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX2ZpbGUoZmlsZV9wdHIsIDAsIFx1MDAyNmR5bnB0cik7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRicGZfZHlucHRyX2ZpbGVfZGlzY2FyZChcdTAwMjZkeW5wdHIpO1xuK1x0cmV0dXJuIDA7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2Rpc2NhcmRfYmVmb3JlX2FkdmFuY2UoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0aWYgKCFmaWxlX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbitcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFx1MDAyNmR5bnB0cik7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfY3VycmVudF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICghdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKHZtYV9wdHIpXG4rXHRcdGJwZl9rZnVuY190cnVzdGVkX3ZtYV90ZXN0KHZtYV9wdHIpO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19zdWNjZXNzXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX3JjdV9maWVsZF9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW1fcHRyO1xuK1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyID0gTlVMTDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAodm1hX3B0cikge1xuK1x0XHRtbV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX21tO1xuK1x0XHQvKiBleGVfZmlsZSBoYXMgUkNVIHByb3RlY3Rpb24gaW5kZXBlbmRlbnQgb2YgdGhlIGl0ZXJhdG9yLiAqL1xuK1x0XHRpZiAobW1fcHRyKVxuK1x0XHRcdGZpbGVfcHRyID0gbW1fcHRyLVx1MDAzZWV4ZV9maWxlO1xuK1x0fVxuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKGZpbGVfcHRyKVxuK1x0XHRyZXR1cm4gZmlsZV9wdHItXHUwMDNlZl9tb2RlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHIgPSBOVUxMO1xuK1x0dTMyIG1vZGUgPSAwO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICh2bWFfcHRyKSB7XG4rXHRcdG1tX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fbW07XG4rXHRcdGlmIChtbV9wdHIpXG4rXHRcdFx0ZmlsZV9wdHIgPSBtbV9wdHItXHUwMDNlZXhlX2ZpbGU7XG4rXHR9XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoZmlsZV9wdHIpXG4rXHRcdG1vZGUgPSBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gbW9kZTtcbit9XG4rXG4gU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuIGludCBpdGVyX25leHRfdHJ1c3RlZF9vcl9udWxsKGNvbnN0IHZvaWQgKmN0eClcbkBAIC02Niw2ICszNTgsNDYgQEAgaW50IGl0ZXJfbmV4dF9yY3UoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X3JjdV9hZnRlcl9kZXN0cm95KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayB0YXNrX2l0O1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3B0cjtcbitcbitcdGJwZl9pdGVyX3Rhc2tfbmV3KFx1MDAyNnRhc2tfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHRhc2tfcHRyID0gYnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNnRhc2tfaXQpO1xuK1x0YnBmX2l0ZXJfdGFza19kZXN0cm95KFx1MDAyNnRhc2tfaXQpO1xuK1x0aWYgKCF0YXNrX3B0cilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfcmN1X3Rhc2tfdGVzdCh0YXNrX3B0cik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4rXHRpZiAoIXRhc2tfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfbmV4dChcdTAwMjZ0YXNrX2l0KTtcbitcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2dGFza19pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuIGludCBpdGVyX25leHRfcmN1X29yX251bGwoY29uc3Qgdm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MjYuNzc3NzQ3NTE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0NTkxMzQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIHNlcmllcyBpbiB0aGUga2VybmVsIHJlcG8uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCBidXQgbGV0J3MgdGFrZSBhIG1ldGhvZGljYWwgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgKndoYXQqIGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgY2hhbmdlLiBSZWFkaW5nIHRoZSBkaWZmIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBwcm92aWRlZCBpcyBjcnVjaWFsLiBJdCdzIHNlY29uZCBuYXR1cmUgZm9yIG1lIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBtb2RpZmllZCBmaWxlcywgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGtlcm5lbC5cblxuQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jYC4gVGhlIGZhY3QgdGhhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaXRzIGhlYWRlciBhcmUgbW9kaWZpZWQgdGVsbHMgbWUgdGhpcyBpcyBjb3JlIEJQRiB2ZXJpZmllciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGltcG9ydGFudCwgYXMgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgZ2F0ZWtlZXBlciBmb3IgYW55IEJQRiBwcm9ncmFtIGxvYWRlZCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgaGFuZGxlcyBvcGVyYXRpb25zIGxpa2UgYEJQRl9QUk9HX0xPQURgLiBBbnkgZXJyb3IgaGVyZSBpcyBhbXBsaWZpZWQgYXMgdGhlIGVudGlyZSBrZXJuZWwgc2VjdXJpdHkgaXMgYWZmZWN0ZWQuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHJlYWQgdGhlIHBhdGNoIGluIGRldGFpbCB0byBmdWxseSBncmFzcCB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBMZXQncyBzZWUuLi4gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB0aGUgcGF0Y2ggYWZmZWN0cyB0aGVzZSBmdW5jdGlvbnM6XG5cbjEuICBgdXBkYXRlX3JlZl9vYmpfaWQoKWAgYW5kIGB1cGRhdGVfcmVmX29iaigpYFxuMi4gIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcigpYFxuMy4gIGBjaGVja19wdHJfdG9fYnRmX2FjY2VzcygpYFxuNC4gIGBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oKWAgKGEgbmV3IGZ1bmN0aW9uIC0gZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0bylcbjUuICBgcmVsZWFzZV9yZWZlcmVuY2UoKWBcbjYuICBgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKClgIChhbm90aGVyIG5ldyBmdW5jdGlvbilcbjcuICBgY2hlY2tfa2Z1bmNfYXJncygpYFxuOC4gIGBjaGVja19rZnVuY19jYWxsKClgXG5cblNpbmNlIEknbSBkZWFsaW5nIHdpdGggdGhlIEJQRiB2ZXJpZmllciwgSSdtIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgdGhlc2UgZnVuY3Rpb24gY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcycgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scywgbGlrZWx5IGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGNvbWJpbmF0aW9uIHRvIGVuc3VyZSBJIGhhdmUgZnVsbCBjb250ZXh0IGFyb3VuZCB0aGVzZSBjaGFuZ2VzIHRvIGVmZmVjdGl2ZWx5IGFzc2VzcyB0aGVpciBpbXBhY3QgYW5kIGNvcnJlY3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MzAuNzIzNjY0MDMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzkyNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTU1OD1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk1NzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk1NzE6c3RhdGljIGludCBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIHBhcmVudF9pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU3Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM4MTM9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA1Ny1cXHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBcXHUwMDI2bWV0YSktXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA1ODpcXHRcXHRlcnIgPSBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnMoZW52LCBtZXRhLnJlZl9vYmouaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA1OS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTozMC43OTkwNjI1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NDMzMTk4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IG5lZWRzIHRvIGJlIGxvb2tlZCBhdCwgdGhpbmtpbmcgYXMgaWYgSSBhbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipCUEYgVmVyaWZpZXIgXHUwMDI2IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIHZlcmlmaWVyJ3MgaW50ZXJuYWxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzcGVjaWZpY2FsbHkgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgKmNhbGxlZCogd2l0aGluIHRoZSBrZXJuZWwuIEknbSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYEJQRl9TWVNDQUxMYCB3aGljaCBpcyBjcml0aWNhbCBmb3Igc3lzdGVtIGNhbGwgaW50ZWdyYXRpb24sIGBCUEZfSklUYCB3aGljaCBpcyB2aXRhbCBmb3IgcGVyZm9ybWFuY2UsIG9yIGBCVEZgIHdoaWNoIGNoYW5nZXMgaG93IGRhdGEgaXMgdmFsaWRhdGVkLiBUaGVzZSBjb25maWcgb3B0aW9ucyBkcmFzdGljYWxseSBhZmZlY3Qgd2hhdCdzIGVuYWJsZWQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgdmVyaWZpZXIncyB1c2FnZSBhbmQgbWFwIG91dCB0aGVzZSBkZXBlbmRlbmNpZXMuXG5cbkJleW9uZCB0aGUgY29kZSBpdHNlbGYsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2R1bGVzIGFyZSBidWlsdC4gVGhhdCBtZWFucyBhIHF1aWNrIGNoZWNrIG9mIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBzZWUgaG93IHRoZSB2ZXJpZmllciBjb2RlIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEFuZCwgb2YgY291cnNlLCBhIGxvb2sgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRpcmVjdGx5IGFmZmVjdCB0aGUgdmVyaWZpZXIncyBiZWhhdmlvciBhbmQgdGhlIGZlYXR1cmVzIGl0IHN1cHBvcnRzLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBhbGwgb3B0aW9ucyBhcmUgY29uZmlndXJlZCBjb3JyZWN0bHkgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGVuYWJsZSBvciBkaXNhYmxlIGZlYXR1cmVzIGJhc2VkIG9uIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTozNS4yNDIzODU5MTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NDEwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyaWZpZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTctXFx0LmdldF9mdW5jX3Byb3RvID0gYnBmX2xzbV9mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY0PXN0YXRpYyBERUZJTkVfTVVURVgodXBkYXRlX211dGV4KTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6Njk6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX3N0cnVjdF9vcHNfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MC19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz01OTY0PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2UoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy01OTgwLVxcbmtlcm5lbC9icGYvYnRmLmM6NTk4MTpcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XFxua2VybmVsL2JwZi9idGYuYy01OTgyLVxcdCAqIGFuZCBzdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHZlcmlmaWNhdGlvbiB0cmFjZVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI1LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNy1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGNncm91cF9kZXZfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDMtXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBzeXNjdGxfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjQtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjc2Ni1cXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IGNnX3NvY2tvcHRfZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NzQ2PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQ4LVxcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NzQ5OlxcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXFx1MDAzZW9wcztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc1MC1cXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNS0vKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cXHUwMDNlZ2V0X2Z1bmNfcHJvdG8oKSBjYWxsYmFjayBpdCBzaG91bGQgcmV0dXJuXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzctICogYnBmX21hcF9sb29rdXBfZWxlbV9wcm90bywgc28gdGhhdCB2ZXJpZmllciBjYW4gcHJvcGVybHkgY2hlY2sgdGhlIGFyZ3VtZW50c1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjYzMD1zeXNjYWxsX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjY0Nzpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3lzY2FsbF92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY0OC1cXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTk5Mj1fX2JwZl9rZnVuYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmJwZl9pdGVyX3Rhc2tfdm1hX25leHQoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hICppdClcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMC1cXHQvKlxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcXHQgKiBUaGUgdmVyaWZpZXIgb25seSB0cnVzdHMgdm1fbW0gYW5kIHZtX2ZpbGUgKHNlZVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTAxMi1cXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTctLyogZHVtbXkgX29wcy4gVGhlIHZlcmlmaWVyIHdpbGwgb3BlcmF0ZSBvbiB0YXJnZXQgcHJvZ3JhbSdzIG9wcy4gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfZXh0ZW5zaW9uX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxLSNkZWZpbmUgQlBGX1BST0dfVFlQRShfaWQsIF9uYW1lLCBwcm9nX2N0eF90eXBlLCBrZXJuX2N0eF90eXBlKSBcXFxcXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyOlxcdFtfaWRdID0gXFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00My0jZGVmaW5lIEJQRl9NQVBfVFlQRShfaWQsIF9vcHMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI4NT1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03Mjk2LSAqIEZvciB0cmFkaXRpb25hbCBQVFJfVE9fTUFQX1ZBTFVFIG9yIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MsIHRoZSB2ZXJpZmllclxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3Mjk3OiAqIGNsZWFycyByZWctXFx1MDAzZWlkIGFmdGVyIHZhbHVlX29yX251bGwtXFx1MDAzZXZhbHVlIHRyYW5zaXRpb24sIHNpbmNlIHRoZSB2ZXJpZmllciBvbmx5XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyOTgtICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24ndCBjYXJlXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ2MDg9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3ODItXFx0XFx0XFx0XFx0ZW52LCBcXFwiVGhpcyBvcGVyYXRpb24gc3VidHJhY3RzIHBvaW50ZXIgcmVnaXN0ZXIgUiVkIGZyb20gc2NhbGFyIHJlZ2lzdGVyIFIlZC4gXFxcIlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDc4MzpcXHRcXHRcXHRcXHRcXFwiVGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDc4NC1cXHRcXHRcXHRcXHRwdHJfcmVnbm8sIGRzdCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc3MzA9Ym9vbCBicGZfZ2V0X2NhbGxfc3VtbWFyeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmNhbGwsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3OTUtICpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3OTY6ICogLSBpZiBzbywgYW5kIGlmIHZlcmlmaWVyIG9yIGN1cnJlbnQgSklUIGlubGluZXMgdGhlIGNhbGwgdG8gdGhlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Nzk3LSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5Nzc3PXN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg5NC1cXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4OTU6XFx0ZW52LVxcdTAwM2VvcHMgPSBzdF9vcHMtXFx1MDAzZXZlcmlmaWVyX29wcztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4OTYtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA1Mjg9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA1NjctXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNTY4OlxcdFxcdGVudi1cXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1t0Z3RfcHJvZy1cXHUwMDNldHlwZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTY5LVxcdFxcdHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMjAwPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMjEwLVxcdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyMTE6XFx0aWYgKEFSUkFZX1NJWkUoYnBmX3ZlcmlmaWVyX29wcykgPT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMTItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyMjItXFx0ZW52LVxcdTAwM2Vwcm9nID0gKnByb2c7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMjIzOlxcdGVudi1cXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXFx1MDAzZXByb2ctXFx1MDAzZXR5cGVdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIyNC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIzMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyMzI6XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTIzMy1cXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MzUuMzQxMjM1NDU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAyMzIwNDgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYnBmX2NoZWNrYCwgYXMgdGhhdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGFjY29yZGluZyB0byBgdmVyaWZpZXIuY2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcsIHNvIEknbSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhdCBgYnBmX2NoZWNrYCBpdHNlbGYgb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGl0IGNhbGxzIGFuZCB3aGljaCBhcmUgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLiBUaGUgZGlmZiBpbmRpY2F0ZXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXk6IGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnNgLCBgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYCwgYHJlbGVhc2VfcmVmZXJlbmNlYCwgYGNoZWNrX2tmdW5jX2NhbGxgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAsIGFuZCBgdXBkYXRlX3JlZl9vYmpfaWRgIC8gYHVwZGF0ZV9yZWZfb2JqYC4gVGhhdCdzIGEgZGVjZW50LXNpemVkIGNodW5rIG9mIHRoZSB2ZXJpZmljYXRpb24gcHJvY2VzcywgaXQgc2VlbXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBjaGFuZ2UsIEknbGwgbmVlZCB0byBwb3JlIG92ZXIgdGhvc2UgZnVuY3Rpb25zLCBhcyB0aGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggQlBGIHZlcmlmaWVycy4gVG8gZ2V0IHN0YXJ0ZWQsIEkgd2lsbCBmb2N1cyBvbiBsaW5lcyAxNDA0NSB0byAxNDE4MCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgdGhlIGFjdHVhbCBjb2RlIHRoYXQncyBiZWVuIG1vZGlmaWVkLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6MzkuMzY0NDQyODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDA0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwNDU6XFx0XFxuMTQwNDY6XFx0XFx0XFx0LyogSW4gdGhlIGNhc2Ugb2YgdGhlIGRlZmF1bHQgY2FsbGJhY2ssIHRoZSBjb29raWUgdmFsdWUgcGFzc2VkXFxuMTQwNDc6XFx0XFx0XFx0ICogdG8gYnBmX3Rocm93IGJlY29tZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJvZ3JhbS5cXG4xNDA0ODpcXHRcXHRcXHQgKi9cXG4xNDA0OTpcXHRcXHRcXHRpZiAoIWVudi1cXHUwMDNlZXhjZXB0aW9uX2NhbGxiYWNrX3N1YnByb2cpIHtcXG4xNDA1MDpcXHRcXHRcXHRcXHRlcnIgPSBjaGVja19yZXR1cm5fY29kZShlbnYsIEJQRl9SRUdfMSwgXFxcIlIxXFxcIik7XFxuMTQwNTE6XFx0XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTQwNTI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDA1MzpcXHRcXHRcXHR9XFxuMTQwNTQ6XFx0XFx0fVxcbjE0MDU1OlxcdFxcbjE0MDU2OlxcdFxcdGlmIChicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNlxcbjE0MDU3OlxcdFxcdCAgICAhKGdldF9pdGVyX2Zyb21fc3RhdGUoZW52LVxcdTAwM2VjdXJfc3RhdGUsIFxcdTAwMjZtZXRhKS1cXHUwMDNldHlwZSBcXHUwMDI2IE1FTV9SQ1UpKSB7XFxuMTQwNTg6XFx0XFx0XFx0ZXJyID0gaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKGVudiwgbWV0YS5yZWZfb2JqLmlkKTtcXG4xNDA1OTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE0MDYwOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTQwNjE6XFx0XFx0fVxcbjE0MDYyOlxcdFxcbjE0MDYzOlxcdFxcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcXG4xNDA2NDpcXHRcXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcXHUwMDI2cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbjE0MDY1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuMTQwNjY6XFx0XFx0XFx0dTMyIHJlZ25vID0gY2FsbGVyX3NhdmVkW2ldO1xcbjE0MDY3OlxcdFxcbjE0MDY4OlxcdFxcdFxcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFxcdTAwMjZyZWdzW3JlZ25vXSk7XFxuMTQwNjk6XFx0XFx0fVxcbjE0MDcwOlxcdFxcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGN1cl9mdW5jKGVudikpO1xcbjE0MDcxOlxcdFxcbjE0MDcyOlxcdFxcdC8qIENoZWNrIHJldHVybiB0eXBlICovXFxuMTQwNzM6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBtZXRhLmZ1bmNfcHJvdG8tXFx1MDAzZXR5cGUsIE5VTEwpO1xcbjE0MDc0OlxcdFxcbjE0MDc1OlxcdFxcdGlmIChpc19rZnVuY19hY3F1aXJlKFxcdTAwMjZtZXRhKSBcXHUwMDI2XFx1MDAyNiAhYnRmX3R5cGVfaXNfc3RydWN0X3B0cihtZXRhLmJ0ZiwgdCkpIHtcXG4xNDA3NjpcXHRcXHRcXHRpZiAobWV0YS5idGYgIT0gYnRmX3ZtbGludXggfHxcXG4xNDA3NzpcXHRcXHRcXHQgICAgKCFpc19icGZfb2JqX25ld19rZnVuYyhtZXRhLmZ1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTQwNzg6XFx0XFx0XFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG4xNDA3OTpcXHRcXHRcXHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xcbjE0MDgwOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiYWNxdWlyZSBrZXJuZWwgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIFBUUl9UT19CVEZfSURcXFxcblxcXCIpO1xcbjE0MDgxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MDgyOlxcdFxcdFxcdH1cXG4xNDA4MzpcXHRcXHR9XFxuMTQwODQ6XFx0XFxuMTQwODU6XFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xcbjE0MDg2OlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbjE0MDg3OlxcdFxcdFxcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcXHUwMDI2XFx1MDAyNiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcXG4xNDA4ODpcXHRcXHRcXHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXFxuMTQwODk6XFx0XFx0XFx0XFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XFxuMTQwOTA6XFx0XFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcXG4xNDA5MTpcXHRcXHRcXHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2cHRyX3R5cGVfaWQpO1xcbjE0MDkyOlxcdFxcdFxcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XFxuMTQwOTM6XFx0XFx0XFx0aWYgKGVycikge1xcbjE0MDk0OlxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTozOS4zNjU2NzI3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MDg3NDYwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBiZWVuIG1vZGlmaWVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBsb2dpYyBwcm9iYWJseSBoYXNuJ3QgYmVlbiBkcmFzdGljYWxseSBhbHRlcmVkLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlIG9mIGFueSB0d2Vha3MuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHJlYWQgYXJvdW5kIGxpbmUgOTU2MC4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoYXQgc3BlY2lmaWMgcmVnaW9uIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcywgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLCBhbmQgd2h5IHRoZXkgd2VyZSBtYWRlLiBUaGlzIHRhcmdldGVkIGFwcHJvYWNoIGlzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNvZGUgdXBkYXRlcyBpbiB0aGlzIGZpbGUsIHNvIEknbSBob3BpbmcgSSBjYW4gZ2V0IGEgcXVpY2sgZ3Jhc3Agb2YgdGhlIG1vZGlmaWNhdGlvbiB0aGF0IHRvb2sgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTo0My4wNzQ0MjA2ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTU1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTU1NTpcXHRcXHRyZXR1cm4gMDtcXG45NTU2OlxcdH1cXG45NTU3OlxcdFxcbjk1NTg6XFx0c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9ub25fb3duaW5nX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG45NTU5OlxcdHtcXG45NTYwOlxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqdW51c2VkO1xcbjk1NjE6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG45NTYyOlxcdFxcbjk1NjM6XFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LVxcdTAwM2VjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoe1xcbjk1NjQ6XFx0XFx0XFx0aWYgKHR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSkge1xcbjk1NjU6XFx0XFx0XFx0XFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfTk9OX09XTl9SRUYpO1xcbjk1NjY6XFx0XFx0XFx0XFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XFxuOTU2NzpcXHRcXHRcXHR9XFxuOTU2ODpcXHRcXHR9KSk7XFxuOTU2OTpcXHR9XFxuOTU3MDpcXHRcXG45NTcxOlxcdHN0YXRpYyBpbnQgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBwYXJlbnRfaWQpXFxuOTU3MjpcXHR7XFxuOTU3MzpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnVudXNlZDtcXG45NTc0OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuOTU3NTpcXHRcXHRpbnQgZXJyO1xcbjk1NzY6XFx0XFxuOTU3NzpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnRfaWQpKVxcbjk1Nzg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuOTU3OTpcXHRcXG45NTgwOlxcdFxcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIHBhcmVudF9pZCk7XFxuOTU4MTpcXHRcXHRpZiAoZXJyKVxcbjk1ODI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45NTgzOlxcdFxcbjk1ODQ6XFx0XFx0LypcXG45NTg1OlxcdFxcdCAqIFN0cnVjdCBpdGVyYXRvcnMgY2FuIHJlbGVhc2UgdGhlIHByZXZpb3VzIGVsZW1lbnQgb24gZWFjaCBuZXh0IGNhbGwuXFxuOTU4NjpcXHRcXHQgKiBQVFJfVE9fTUVNIGl0ZXJhdG9yIHJlc3VsdHMgdXNlIHN0b3JhZ2UgdGhhdCByZW1haW5zIHZhbGlkIHVudGlsIGRlc3Ryb3kuXFxuOTU4NzpcXHRcXHQgKi9cXG45NTg4OlxcdFxcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKGVudi1cXHUwMDNlY3VyX3N0YXRlLCB1bnVzZWQsIHJlZywgKHtcXG45NTg5OlxcdFxcdFxcdGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIHx8IHJlZy1cXHUwMDNlcGFyZW50X2lkICE9IHBhcmVudF9pZClcXG45NTkwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjk1OTE6XFx0XFx0XFx0YnBmX2RpYWdfcmVjb3JkX3NjcnViKGVudiwgcmVnLCBCUEZfRElBR19NT0RfUkVGX1JFTEVBU0UpO1xcbjk1OTI6XFx0XFx0XFx0bWFya19yZWdfaW52YWxpZChlbnYsIHJlZyk7XFxuOTU5MzpcXHRcXHR9KSk7XFxuOTU5NDpcXHRcXG45NTk1OlxcdFxcdHJldHVybiAwO1xcbjk1OTY6XFx0fVxcbjk1OTc6XFx0XFxuOTU5ODpcXHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjk1OTk6XFx0e1xcbjk2MDA6XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XFxuOTYwMTpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbjk2MDI6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG45NjAzOlxcdFxcdHUzMiBjbGVhcl9tYXNrID0gKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXFx1MDAzY1xcdTAwM2MgU1RBQ0tfSVRFUik7XFxuOTYwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6NDMuMDc1NDg4NzYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMjQ3MTAxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEV4Y2VsbGVudCwgdGhhdCdzIGEga2V5IHN1YnN5c3RlbSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHRvdGFsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgc2V0dXBzIHRocm91Z2ggdGhlIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbC4gVGhhdCdzIGEgaHVnZSBwb3NpdGl2ZS5cblxuTm93LCBkb2VzIGl0IGFjdHVhbGx5ICptb2RpZnkqIGNvcmUgbG9naWMgb3IgaW50cm9kdWNlIG5ldyBydW50aW1lIGFzc2VydGlvbnM/IEFic29sdXRlbHkuIFdlJ3JlIHNlZWluZyBjaGFuZ2VzIHRvIGhvdyBpdGVyYXRvci1vd25lZCBgUFRSX1RPX0JURl9JRGAgb2JqZWN0cyDigJMgdHJ1c3RlZCBCVEYgcG9pbnRlcnMgZnJvbSBpdGVyYXRvcnMgbGlrZSBgYnBmX2l0ZXJfdGFza192bWFfbmV4dGAg4oCTIGFyZSBoYW5kbGVkLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBkZWFsaW5nIHdpdGggbWVtb3J5IGxpZmV0aW1lIGFuZCBwb2ludGVyIHZhbGlkYXRpb24gd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIGV4cGxvaXRhYmxlIGJ1Z3MuIFNwZWNpZmljYWxseSwgdGhlIGFkZGVkIGBXQVJOX09OX09OQ0UoIXBhcmVudF9pZClgIGNhbGwgaW4gYGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc2AgaXMgYSBodWdlIHJlZCBmbGFnIHRoYXQgaXQgaXMgY2hlY2tpbmcgZm9yIHByZXZpb3VzbHkgdW5jYXVnaHQgY29uZGl0aW9ucy4gQmV5b25kIHRoaXMsIHdlIGFyZSBsb29raW5nIGF0IGFkZGVkIHJlZmVyZW5jZSBsZWFrIGNoZWNraW5nIChgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYCksIGludmFsaWRhdGlvbiBvbiBpdGVyYXRvciBhZHZhbmNlIGluIGBjaGVja19rZnVuY19jYWxsYCwgcHJvcGFnYXRpb24gb2YgYHBhcmVudF9pZGAgZm9yIHRydXN0ZWQgcG9pbnRlcnMgaW4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgdXBkYXRlcyB0byBkeW5wdHIgaGFuZGxpbmcgd2l0aCBgYnBmX2R5bnB0cl9mcm9tX2ZpbGVgLCBhbmQgZXJyb3IgcHJvcGFnYXRpb24gZml4ZXMuIFRoZXNlIGFsbCBwb2ludCB0byBhIGRlZXBlciBkaXZlIGludG8gcG90ZW50aWFsIGlzc3VlcyBhbmQgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIHNjcmVhbXMgXCJ2dWxuZXJhYmlsaXR5IGh1bnRpbmcgZ3JvdW5kXCIuXG5cbkNvbnNpZGVyaW5nIHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLCBpdCdzIGEgbm8tYnJhaW5lci4gVGhpcyBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gKEJQRiksIGFuZCBpbnRyb2R1Y2VzIG5ldyBjaGVja3MgYW5kIGxvZ2ljIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG9pbnRlciBoYW5kbGluZy4gQmFzZWQgb24gdGhlIGNyaXRlcmlvbiwgdGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5OZXh0IHN0ZXAgaXMgZmlndXJpbmcgb3V0IHRoZSByZXF1aXJlZCBgRW5hYmxlQ29uZmlnc2AuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgS2NvbmZpZyBmbGFncyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgQlBGIHZlcmlmaWVyLCBpdGVyYXRvcnMsIGFuZCBrZnVuY3MuIFdlJ2xsIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AgYW5kIGBpbml0L0tjb25maWdgIHRvIGlkZW50aWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfU1lTQ0FMTGAgYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGlzIHdpbGwgbWFrZSBjZXJ0YWluIHRoYXQgb3VyIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIHRvIHRyaWdnZXIgdGhlIGNvZGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTo0OC4xMDAyMDEwMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTAxMjIxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0OTo0OC4zNzkyMjc5MzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI5MDQ3NTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlcnk6XG5cbioqTG9jYXRpbmcgdGhlIEJQRl9TWVNDQUxMIE1hY3JvKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYEJQRl9TWVNDQUxMYC4gU2luY2UgdGhpcyBpcyBvYnZpb3VzbHkgYSBtYWNybyByZWxhdGVkIHRvIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIsIEknbSBnb2luZyB0byBhc3N1bWUgaXQncyBpbnZvbHZlZCB3aXRoIHN5c3RlbSBjYWxscyBhbmQga2VybmVsLWxldmVsIGludGVyYWN0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwgaGVhZGVycywgcHJvYmFibHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gQlBGIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIHRob3NlIGhlYWRlciBmaWxlcyBhcmUgdXN1YWxseSBsb2NhdGVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCB0eXBpY2FsbHkgdW5kZXIgYC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvYCwgb3Igc2ltaWxhciwgZGVwZW5kaW5nIG9uIHRoZSBkaXN0cmlidXRpb24gYW5kIGtlcm5lbCB2ZXJzaW9uLiBHaXZlbiB0aGUgdGVybSwgSSdsbCBiZSBsb29raW5nIGluIHRoZSBoZWFkZXIgZmlsZXMgZm9yIEJQRiBkZWZpbml0aW9ucywgd2hpY2ggY291bGQgYmUgaW4gdGhlIGdlbmVyaWMgQlBGIGhlYWRlcnMsIG9yIGV2ZW4gcmVsYXRlZCB0byBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gSSdsbCBzdGFydCB3aXRoIGAvdXNyL3NyYy9saW51eC9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgIG9yIHBvdGVudGlhbGx5IGAvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2JwZi5oYC4gSSdsbCBhbHNvIHdhbnQgdG8ga2VlcCBpbiBtaW5kIHRoYXQga2VybmVsIHZlcnNpb25zIGNhbiB2YXJ5LCBzbyB0aGUgZXhhY3QgcGF0aCBvciBjb250ZW50IG1pZ2h0IGJlIHNsaWdodGx5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBoZWFkZXIgZmlsZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDkyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6NTIuNjY5NzA2ODc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMwODk0Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ5OjU1LjAwMDYwNTI4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTIxMTk5MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBLZXJuZWwgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSBzcGVjaWZpY2FsbHkgd2FudCB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDI1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgdG9wLWxldmVsIHN3aXRjaGVzIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGUgQlBGIHN1YnN5c3RlbSwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZ2VuZXJhbCBmZWF0dXJlIGZsYWdzLiBMaW5lIDI1IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBCUEYgaXMgZXhwb3NlZCB0byBrZXJuZWwgY29uZmlnLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ5OjU2LjkyMTgwNzU5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdCMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcXG4gIDIxOlxcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXFxuICAyMjpcXHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbiAgMjM6XFx0XFx0Ym9vbFxcbiAgMjQ6XFx0XFxuICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDk6NTYuOTIxOTA5ODIyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzQ3Nzg1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgQlRGIGFuZCBJdHMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEJURiAoQmVya2VsZXkgUGFja2V0IEZpbHRlciBUeXBlIEZvcm1hdCksIGtmdW5jcywgYW5kIGl0ZXJhdG9ycy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBleGFtaW5lIHRoZSBgREVCVUdfSU5GT19CVEZgIG9wdGlvbi4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IG1pZ2h0IGlsbHVtaW5hdGUgd2hldGhlciBCVEYgaXMgYWN0dWFsbHkgYSBwcmVyZXF1aXNpdGUgZm9yIG9yIGludGVydHdpbmVkIHdpdGggdGhlIGZ1bmN0aW9uYWxpdHkgb2Yga2Z1bmNzIGFuZCBpdGVyYXRvcnMuIFRoZSBLY29uZmlnIHNob3VsZCBwcm92aWRlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb21tZW50cy4gVGhlIGdvYWwgaXMgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYXNwZWN0cyBvZiBCVEYgYXJlIHJlcXVpcmVkIG9yIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgdXNlIG9mIHRoZXNlIG90aGVyIGZlYXR1cmVzLCB1bHRpbWF0ZWx5IGVuc3VyaW5nIGNvcnJlY3QgZmVhdHVyZSBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ5OjU4Ljk1NjY5MjQ4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4ODE5NjIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfSU5GT19CVEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9Mzc4PWNvbmZpZyBERUJVR19JTkZPX1NQTElUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXFxubGliL0tjb25maWcuZGVidWc6Mzk4OmNvbmZpZyBERUJVR19JTkZPX0JURlxcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTQxOT1jb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cXG5saWIvS2NvbmZpZy5kZWJ1Zzo0Mjg6Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDowMS4xNDQ4OTcxNjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0NDA2MzYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIEJQRiBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgIGNvbmZpZ3VyYXRpb25zIOKAkyB0aG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBCUEYtcmVsYXRlZCBrZXJuZWwgZmVhdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IHNldCB0byB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUuXG5cbkJleW9uZCB0aG9zZSwgSSdsbCBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBrZnVuY3Mgb3IgaXRlcmF0b3JzPyBJIGtub3cgaG93IHRoZXNlIHN5c3RlbXMgdGVuZCB0byBpbnRlcmFjdCwgc28gSSdsbCB3YW50IHRvIGZpbmQgdGhvc2UgZGVwZW5kZW5jaWVzIGVhcmx5LlxuXG5UbyBkaWcgZGVlcGVyLCBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCBwYXRoIG5vdyBpcyB0byBwZXJmb3JtIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJ2xsIHNlYXJjaCBmb3IgYHNwZWNpYWxfa2Z1bmNfbGlzdGAgb3IgYGJwZl9pdGVyX2Agd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGF0IHNob3VsZCBxdWlja2x5IGlsbHVtaW5hdGUgd2hpY2ggY29uZmlncyAqdGhleSogZGVwZW5kIG9uLCBhbmQgaW4gdHVybiwgZ2l2ZSBtZSBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gVGhpcyBzaG91bGQgcmFwaWRseSByZXZlYWwgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbWF5IGhhdmUgbWlzc2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDIzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MDMuNjg4OTYzMTkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTcwOTYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGVjaWFsX2tmdW5jX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTExNzMyPWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgwMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MDI6QlRGX0lEX0xJU1Qoc3BlY2lhbF9rZnVuY19saXN0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgwMy1CVEZfSUQoZnVuYywgYnBmX29ial9uZXdfaW1wbClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg5NT1zdGF0aWMgYm9vbCBpc19icGZfb2JqX25ld19rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4OTYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTg5NzpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX29ial9uZXddIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExODk4OlxcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfb2JqX25ld19pbXBsXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4OTktfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTAxPXN0YXRpYyBib29sIGlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MDIte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkwMzpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3BlcmNwdV9vYmpfbmV3XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkwNDpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3BlcmNwdV9vYmpfbmV3X2ltcGxdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwNS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDc9c3RhdGljIGJvb2wgaXNfYnBmX29ial9kcm9wX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwOC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTA5OlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfb2JqX2Ryb3BdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTEwOlxcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfb2JqX2Ryb3BfaW1wbF07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTExLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkxMz1zdGF0aWMgYm9vbCBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkxNC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTE1OlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcGVyY3B1X29ial9kcm9wXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxNjpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTctfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTE5PXN0YXRpYyBib29sIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyMC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTIxOlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MjI6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGxdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyMy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MjU9c3RhdGljIGJvb2wgaXNfYnBmX2xpc3RfcHVzaF9rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MjYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkyNzpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfcHVzaF9mcm9udF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5Mjg6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X3B1c2hfZnJvbnRfaW1wbF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5Mjk6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X3B1c2hfYmFja10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MzA6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X3B1c2hfYmFja19pbXBsXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkzMTpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYWRkXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MzItfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTM0PXN0YXRpYyBib29sIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzNS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTM2OlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX2FkZF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5Mzc6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfYWRkX2ltcGxdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzOC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5NDA9c3RhdGljIGJvb2wgaXNfdGFza193b3JrX2FkZF9rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NDEte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk0MjpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWxdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTQzOlxcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTQ0LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk1ND1zdGF0aWMgYm9vbCBpc19rZnVuY19icGZfcmN1X3JlYWRfbG9jayhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTU1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NTY6XFx0cmV0dXJuIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yY3VfcmVhZF9sb2NrXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NTctfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTU5PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9yY3VfcmVhZF91bmxvY2soc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2MC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTYxOlxcdHJldHVybiBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmN1X3JlYWRfdW5sb2NrXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NjItfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTY0PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9wcmVlbXB0X2Rpc2FibGUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2NS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTY2OlxcdHJldHVybiBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcHJlZW1wdF9kaXNhYmxlXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NjctfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTY5PXN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9wcmVlbXB0X2VuYWJsZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTcwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NzE6XFx0cmV0dXJuIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9wcmVlbXB0X2VuYWJsZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTcyLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk3ND1ib29sIGJwZl9pc19rZnVuY19wa3RfY2hhbmdpbmcoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3NS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTc2OlxcdHJldHVybiBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTc3LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk4MD1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDE2LVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjAxNzpcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDE4OlxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDE5OlxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjAyMC1cXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMjI0PXN0YXRpYyBpbnQgcHJvY2Vzc19pcnFfZmxhZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzMDpcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xvY2FsX2lycV9zYXZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzMTpcXHQgICAgbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIyMzItXFx0XFx0aXJxX3NhdmUgPSB0cnVlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzMzpcXHRcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjM0LVxcdFxcdFxcdGtmdW5jX2NsYXNzID0gSVJRX0xPQ0tfS0ZVTkM7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM1OlxcdH0gZWxzZSBpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xvY2FsX2lycV9yZXN0b3JlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjIzNjpcXHRcXHQgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmVdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjM3LVxcdFxcdGlycV9zYXZlID0gZmFsc2U7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM4OlxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjIzOS1cXHRcXHRcXHRrZnVuY19jbGFzcyA9IElSUV9MT0NLX0tGVU5DO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDA4PXN0YXRpYyBib29sIGlzX2JwZl9saXN0X2FwaV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDEwLVxcdHJldHVybiBpc19icGZfbGlzdF9wdXNoX2tmdW5jKGJ0Zl9pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTE6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfcG9wX2Zyb250XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxMjpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9wb3BfYmFja10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTM6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfZGVsXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQxNDpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9mcm9udF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTU6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYmFja10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MTY6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfaXNfZmlyc3RdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDE3OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2lzX2xhc3RdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDE4OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9saXN0X2VtcHR5XTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0MTktfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDIxPXN0YXRpYyBib29sIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKHUzMiBidGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0MjMtXFx0cmV0dXJuIGlzX2JwZl9yYnRyZWVfYWRkX2tmdW5jKGJ0Zl9pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MjQ6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JidHJlZV9yZW1vdmVdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDI1OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfZmlyc3RdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDI2OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcm9vdF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0Mjc6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JidHJlZV9sZWZ0XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQyODpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX3JpZ2h0XTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0MjktfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNDMxPXN0YXRpYyBib29sIGlzX2JwZl9yZXNfc3Bpbl9sb2NrX2tmdW5jKHUzMiBidGZfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDMyLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI0MzM6XFx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDM0OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDM1OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDM2OlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDM3LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjQ2Mj1ib29sIGJwZl9pc190aHJvd19rZnVuYyhzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0NjQtXFx0cmV0dXJuIGJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQ2NTpcXHQgICAgICAgaW5zbi1cXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGhyb3ddO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ2Ni19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI0Njg9c3RhdGljIGJvb2wgaXNfYnBmX3dxX3NldF9jYWxsYmFja19rZnVuYyh1MzIgYnRmX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ2OS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDcwOlxcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl93cV9zZXRfY2FsbGJhY2tdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ3MS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI1MDk9c3RhdGljIGJvb2wgY2hlY2tfa2Z1bmNfaXNfZ3JhcGhfbm9kZV9hcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUxNy1cXHRcXHRyZXQgPSBpc19icGZfbGlzdF9wdXNoX2tmdW5jKGtmdW5jX2J0Zl9pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MTg6XFx0XFx0ICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbGlzdF9kZWxdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTE5OlxcdFxcdCAgICAgIGtmdW5jX2J0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfaXNfZmlyc3RdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTIwOlxcdFxcdCAgICAgIGtmdW5jX2J0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfaXNfbGFzdF07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTIxLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTIzLVxcdFxcdHJldCA9IChpc19icGZfcmJ0cmVlX2FkZF9rZnVuYyhrZnVuY19idGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTI0OlxcdFxcdCAgICAgICBrZnVuY19idGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcmVtb3ZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUyNTpcXHRcXHQgICAgICAga2Z1bmNfYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmJ0cmVlX2xlZnRdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTI2OlxcdFxcdCAgICAgICBrZnVuY19idGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yYnRyZWVfcmlnaHRdKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MjctXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3MTM9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkyOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5MzA6XFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkzMS1cXHRcXHRcXHRcXHRyZXQgPSBnZXRfa2Vybl9jdHhfYnRmX2lkKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVxcdTAwM2Vwcm9nKSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5ODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTg3OlxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fc2tiXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk4OC1cXHRcXHRcXHRcXHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfU0tCO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk4OTpcXHRcXHRcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV94ZHBdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTkwLVxcdFxcdFxcdFxcdGR5bnB0cl9hcmdfdHlwZSB8PSBEWU5QVFJfVFlQRV9YRFA7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTkxOlxcdFxcdFxcdH0gZWxzZSBpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX3NrYl9tZXRhXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Mi1cXHRcXHRcXHRcXHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfU0tCX01FVEE7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTkzOlxcdFxcdFxcdH0gZWxzZSBpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2R5bnB0cl9mcm9tX2ZpbGVdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk0LVxcdFxcdFxcdFxcdGR5bnB0cl9hcmdfdHlwZSB8PSBEWU5QVFJfVFlQRV9GSUxFO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk5NTpcXHRcXHRcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZmlsZV9kaXNjYXJkXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Ni1cXHRcXHRcXHRcXHRkeW5wdHJfYXJnX3R5cGUgfD0gRFlOUFRSX1RZUEVfRklMRSB8IE9CSl9SRUxFQVNFO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk5NzpcXHRcXHRcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfY2xvbmVdIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk4LVxcdFxcdFxcdFxcdCAgIChkeW5wdHJfYXJnX3R5cGUgXFx1MDAyNiBNRU1fVU5JTklUKSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDE1LVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzAxNjpcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfY3NzX3Rhc2tfbmV3XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzAxNy1cXHRcXHRcXHRcXHRpZiAoIWNoZWNrX2Nzc190YXNrX2l0ZXJfYWxsb3dsaXN0KGVudikpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE1Ny1cXHRcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTU4OlxcdFxcdFxcdFxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZHlucHRyX2Zyb21fZmlsZV0gXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNTktXFx0XFx0XFx0XFx0ICAgIGkgPT0gMCBcXHUwMDI2XFx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpIFxcdTAwMjZcXHUwMDI2IHJlZy1cXHUwMDNlcGFyZW50X2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDAwLVxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzQwMTpcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDAyOlxcdFxcdFxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0MDMtXFx0XFx0XFx0XFx0ZmxhZ3MgfD0gUFJPQ0VTU19TUElOX0xPQ0s7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDA0OlxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzQwNTpcXHRcXHRcXHQgICAgbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0MDYtXFx0XFx0XFx0XFx0ZmxhZ3MgfD0gUFJPQ0VTU19MT0NLX0lSUTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY0Mj1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzQ3LVxcdFxcdG1hcmtfcmVnX2dyYXBoX25vZGUocmVncywgQlBGX1JFR18wLCBcXHUwMDI2ZmllbGQtXFx1MDAzZWdyYXBoX3Jvb3QpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc0ODpcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc0OS1cXHRcXHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc1Mi1cXHRcXHRyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gbWV0YS1cXHUwMDNlcmV0X2J0Zl9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3NTM6XFx0fSBlbHNlIGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmRvbmx5X2Nhc3RdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzU0LVxcdFxcdHJldF90ID0gYnRmX3R5cGVfYnlfaWQoZGVzY19idGYsIG1ldGEtXFx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NzItXFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzc3MzpcXHR9IGVsc2UgaWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfc2xpY2VdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzc0OlxcdFxcdCAgIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfc2xpY2VfcmR3cl0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NzUtXFx0XFx0ZW51bSBicGZfdHlwZV9mbGFnIHR5cGVfZmxhZyA9IGdldF9keW5wdHJfdHlwZV9mbGFnKG1ldGEtXFx1MDAzZWR5bnB0ci50eXBlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc4OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM3ODk6XFx0XFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfc2xpY2VdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzkwLVxcdFxcdFxcdHJlZ3NbQlBGX1JFR18wXS50eXBlIHw9IE1FTV9SRE9OTFk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM4MTM9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1Ny1cXHRpZiAoIWluc24tXFx1MDAzZW9mZiBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg1ODpcXHQgICAgKGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzODU5OlxcdCAgICAgaW5zbi1cXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4NjAtXFx0XFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqYnJhbmNoO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzODgwLVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM4ODE6XFx0fSBlbHNlIGlmICghaW5zbi1cXHUwMDNlb2ZmIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfX19icGZfdHJhcF0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4ODItXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ1bmV4cGVjdGVkIF9fYnBmX3RyYXAoKSBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZT9cXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDM3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDAzODpcXHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGhyb3ddKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDM5LVxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19leGNlcHRpb25zKCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDA4Ni1cXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwODc6XFx0XFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA4ODpcXHRcXHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDg5LVxcdFxcdFxcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTA4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDEwOTpcXHRcXHRcXHRcXHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDExMC1cXHRcXHRcXHRcXHRcXHRtZXRhLnIwX3Jkb25seSA9IGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MTQyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDE0MzpcXHRcXHRcXHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfZ2V0X2ttZW1fY2FjaGVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDE0NC1cXHRcXHRcXHRcXHR0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQyMzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MjMxOlxcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MjMyLVxcdFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlY2FsbF9zZXNzaW9uX2Nvb2tpZSA9IHRydWU7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4MDU9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODIyLVxcdFxcdC8qIGZhbGxiYWNrIHRvIGRlZmF1bHQga2Z1bmMgd2hlbiBub3Qgc3VwcG9ydGVkIGJ5IG5ldGRldiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDgyMzpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9za2JdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODI0LVxcdFxcdHNlZW5fZGlyZWN0X3dyaXRlID0gZW52LVxcdTAwM2VzZWVuX2RpcmVjdF93cml0ZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgzMy1cXHRcXHRlbnYtXFx1MDAzZXNlZW5fZGlyZWN0X3dyaXRlID0gc2Vlbl9kaXJlY3Rfd3JpdGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODM0OlxcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3NldF9kZW50cnlfeGF0dHJdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODM1LVxcdFxcdGlmIChicGZfbHNtX2hhc19kX2lub2RlX2xvY2tlZChwcm9nKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MzYtXFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9zZXRfZGVudHJ5X3hhdHRyX2xvY2tlZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4Mzc6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVtb3ZlX2RlbnRyeV94YXR0cl0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4MzgtXFx0XFx0aWYgKGJwZl9sc21faGFzX2RfaW5vZGVfbG9ja2VkKHByb2cpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDgzOS1cXHRcXHRcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX3JlbW92ZV9kZW50cnlfeGF0dHJfbG9ja2VkO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg0MDpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg0MS1cXHRcXHRpZiAoIWVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDItXFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9keW5wdHJfZnJvbV9maWxlX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4NDM6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODQ0LVxcdFxcdGlmIChlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zbGVlcGFibGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODQ1LVxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4NDY6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NDctXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg3MT1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTQ4LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk0OTpcXHRcXHRpZiAoZGVzYy1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xpc3RfYWRkXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk1MC1cXHRcXHQgICAgaXNfYnBmX3JidHJlZV9hZGRfa2Z1bmMoZGVzYy1cXHUwMDNlZnVuY19pZCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk2Mi1cXHRcXHRcXHRcXHRcXHRcXHRub2RlX29mZnNldF9yZWcsIGluc24sIGluc25fYnVmLCBjbnQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2MzpcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2NDpcXHRcXHQgICBkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmRvbmx5X2Nhc3RdKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTY1LVxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTY2LVxcdFxcdCpjbnQgPSAxO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk2NzpcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NjgtXFx0XFx0ICAgKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0ZTRVNTSU9OIHx8XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5ODEtXFx0XFx0KmNudCA9IDM7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTgyOlxcdH0gZWxzZSBpZiAoZGVzYy1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk4My1cXHRcXHQgICAoZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT04gfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5OS1cXHRcXHQqY250ID0gNjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMDA6XFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAwMS1cXHRcXHQvKiBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldyhcXHUwMDI2aXQsIHN0YXJ0LCBlbmQpOyBSMT1cXHUwMDI2aXQsIFIyPXN0YXJ0LCBSMz1lbmQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTAyMy1cXHRcXHQqY250ID0gaTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwMjQ6XFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMjUtXFx0XFx0LyogaW5saW5lIGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCk7IFIxPVxcdTAwMjZpdCwgcmV0dXJucyBcXHUwMDI2cy1cXHUwMDNlY3VyIG9yIE5VTEwgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTA0MC1cXHRcXHQqY250ID0gaTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEwNDE6XFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwNDItXFx0XFx0LyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBpcyBhIG5vLW9wOyBlbWl0IGEgbm9wIHRvIGRyb3AgdGhlIGNhbGwgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MDMuNzc0Njc2OTc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjQ4MzAwMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBGb2N1cyBTeW1ib2wgUmV2aWV3IGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGlzIHJpZ2h0IGZvciB0aGUgQlBGIHZlcmlmaWVyIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3ZSdyZSBlbmFibGluZyBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMg4oCTIHRoZSBrZXkgZnVuY3Rpb25zIHdlJ3JlIHRhcmdldGluZyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4gQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIHdlICpkb24ndCogd2FudCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBmdW5jdGlvbnMsIGFsbG9jYXRvcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIFdlICpkbyogd2FudCB0byB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBBUEkgZW50cnkgcG9pbnRzLiBJbiB0aGlzIGNhc2UsIHRoYXQgYm9pbHMgZG93biB0bzpcblxuKiAgIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnNgXG4qICAgYGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbmBcbiogICBgcmVsZWFzZV9yZWZlcmVuY2VgXG4qICAgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYFxuKiAgIGBjaGVja19rZnVuY19jYWxsYFxuKiAgIGBjaGVja19rZnVuY19hcmdzYFxuKiAgIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmBcbiogICBgYnBmX2NoZWNrYFxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBtb2RpZmllZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBtYWtlIHN1cmU6XG5cbjEuICBgdXBkYXRlX3JlZl9vYmpfaWRgIChzdGF0aWMpXG4yLiAgYHVwZGF0ZV9yZWZfb2JqYCAoc3RhdGljKVxuMy4gIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAgKHN0YXRpYylcbjQuICBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIChzdGF0aWMpXG41LiAgYGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbmAgKHN0YXRpYylcbjYuICBgcmVsZWFzZV9yZWZlcmVuY2VgIChzdGF0aWMpXG43LiAgYGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRyc2AgKHN0YXRpYylcbjguICBgY2hlY2tfa2Z1bmNfYXJnc2AgKHN0YXRpYylcbjkuICBgY2hlY2tfa2Z1bmNfY2FsbGAgKHN0YXRpYylcblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGlzIGBicGZfY2hlY2tgLlxuXG5BbHJpZ2h0LCB0aW1lIGZvciBhIGZpbmFsIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogIFllcCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG4qICAgYFJlYXNvbmluZ2A6ICBBIGNvbmNpc2UgZXhwbGFuYXRpb24gaXMgdGhhdCB0aGlzIG1vZGlmaWVzIGxpZmV0aW1lIHRyYWNraW5nLCBpbnZhbGlkYXRpb24sIGFuZCBsZWFrIGNoZWNraW5nIGZvciBpdGVyYXRvci1yZXR1cm5lZCBgUFRSX1RPX0JURl9JRGAgcmVmZXJlbmNlcyBhbmQgZHluYW1pYyBwb2ludGVycyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci5cbiogICBgRm9jdXNTeW1ib2xzYDogIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGFib3ZlIGltcGxlbWVudGluZyB0aGUgY29yZSBsb2dpYywgcGx1cyB0aGUgZW50cnlwb2ludC4gQ2hlY2shXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiAgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxsIGdvb2QuXG5cbkV2ZXJ5dGhpbmcgbG9va3MgY29ycmVjdCBhbmQgdGhvcm91Z2hseSB2ZXJpZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTAxLCJPdXRwdXRUb2tlbnMiOjE5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDoxNi4wMjI5ODAzNTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI4MDAxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzXCIsXG4gICAgXCJjaGVja19yZWZlcmVuY2VfY2hpbGRyZW5cIixcbiAgICBcInJlbGVhc2VfcmVmZXJlbmNlXCIsXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwidW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciB0cmFja2luZyByZWZlcmVuY2UgbGlmZXRpbWVzLCBwYXJlbnRhZ2UsIGFuZCBpbnZhbGlkYXRpb24gb2YgaXRlcmF0b3Itb3duZWQgUFRSX1RPX0JURl9JRCBwb2ludGVycyBhbmQgZHlucHRycyBhY3Jvc3MgaXRlcmF0b3IgYWR2YW5jZSBhbmQgZGVzdHJveSBvcGVyYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdmVyaWZpY2F0aW9uIG9mIGVCUEYgcHJvZ3JhbXMgdmlhIGJwZihCUEZfUFJPR19MT0FEKSBhbmQgaW50cm9kdWNlcyBuZXcgdmFsaWRhdGlvbiBhbmQgcmVmZXJlbmNlIGxlYWsgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzXCIsXG4gICAgXCJjaGVja19yZWZlcmVuY2VfY2hpbGRyZW5cIixcbiAgICBcInJlbGVhc2VfcmVmZXJlbmNlXCIsXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwidW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGZvciB0cmFja2luZyByZWZlcmVuY2UgbGlmZXRpbWVzLCBwYXJlbnRhZ2UsIGFuZCBpbnZhbGlkYXRpb24gb2YgaXRlcmF0b3Itb3duZWQgUFRSX1RPX0JURl9JRCBwb2ludGVycyBhbmQgZHlucHRycyBhY3Jvc3MgaXRlcmF0b3IgYWR2YW5jZSBhbmQgZGVzdHJveSBvcGVyYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdmVyaWZpY2F0aW9uIG9mIGVCUEYgcHJvZ3JhbXMgdmlhIGJwZihCUEZfUFJPR19MT0FEKSBhbmQgaW50cm9kdWNlcyBuZXcgdmFsaWRhdGlvbiBhbmQgcmVmZXJlbmNlIGxlYWsgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDoxNi4xNjU3OTA4NTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzM2MjA0Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MTYuMTY2NjY5OTIyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTAzMzUzMjExNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXIncyBsaWZldGltZSB0cmFja2luZyBmb3IgdHJ1c3RlZCBwb2ludGVycyByZXR1cm5lZCBieSBzdHJ1Y3QgaXRlcmF0b3JzIChlLmcuLCBicGZfaXRlcl90YXNrX3ZtYSkgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgcGFyZW50X2lkIGFuZCBpbnZhbGlkYXRpbmcgdGhlbSB1cG9uIHN1YnNlcXVlbnQgaXRlcmF0b3Igc3RlcHMgb3IgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gQlBGIHByb2dyYW1zLlxcblxcblRoZSBjaGFuZ2VzIGludm9sdmUgcHVyZWx5IGludGVybmFsIEJQRiB2ZXJpZmllciBsb2dpYywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzZWxmdGVzdHMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgbWVjaGFuaXNtcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHJ1bnRpbWUgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaXRlcmF0b3IgYnVncyAoc3VjaCBhcyBVQUYpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhOGM2Mzc0YzJlZDhkOWI4NzRhZjMyYTA4NTZiN2M1ZDcxOTQ4NDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0OToyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzNmI2NTc5Nzg3N2QwLi5hZTMwZGY2MjlkNWIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE1MTgsOSArMTUxOCw5IEBAIHN0cnVjdCBicGZfZHlucHRyX2Rlc2Mge1xuIFxuIC8qXG4gICogVGhlIGxhc3Qgc2VlbiByZXJlZmVyZW5jZWQgb2JqZWN0OyBVcGRhdGVkIGJ5IHVwZGF0ZV9yZWZfb2JqKCkgd2hlbiBhIHJlZ2lzdGVyIHJlZmVycyB0byBhXG4tICogcmVmZXJlbmNlZCBvYmplY3QuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jIGlzIGNhc3RpbmcgYSByZWZlcmVuY2VkIG9iamVjdCwgcmV0dXJuaW5nXG4tICogYWxsb2NhdGVkIG1lbW9yeSBkZXJpdmVkIGZyb20gcmVmZXJlbmNlZCBvYmplY3Qgb3IgY3JlYXRpbmcgYSBkeW5wdHIgd2l0aCBhIHJlZmVyZW5jZWRcbi0gKiBvYmplY3QgYXMgcGFyZW50LlxuKyAqIHJlZmVyZW5jZWQgb2JqZWN0IG9yIGFub3RoZXIgdmVyaWZpZXItdHJhY2tlZCBsaWZldGltZSBhbmNob3IuIFVzZWQgd2hlbiB0aGUgaGVscGVyIG9yIGtmdW5jXG4rICogaXMgY2FzdGluZyBhIHJlZmVyZW5jZWQgb2JqZWN0LCByZXR1cm5pbmcgYWxsb2NhdGVkIG1lbW9yeSBkZXJpdmVkIGZyb20gYSByZWZlcmVuY2VkIG9iamVjdFxuKyAqIG9yIGNyZWF0aW5nIGEgZHlucHRyIHdob3NlIGJhY2tpbmcgb2JqZWN0IGhhcyBhIHRyYWNrZWQgbGlmZXRpbWUuXG4gICovXG4gc3RydWN0IHJlZl9vYmpfZGVzYyB7XG4gXHR1MzIgaWQ7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5lYjAxMzk1NDE4MmYyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMzgsMTMgKzIzOCwxOCBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX2tleV9zdG9yZShzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eCwgdTY0IHN0YXRlKVxuIFx0XHRcdCAgICAgKHBvaXNvbmVkID8gQlBGX01BUF9LRVlfUE9JU09OIDogMFVMTCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4rc3RhdGljIHZvaWQgdXBkYXRlX3JlZl9vYmpfaWQoc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgdTMyIGlkLCB1MzIgcGFyZW50X2lkKVxuIHtcbi1cdHJlZl9vYmotXHUwMDNlaWQgPSByZWctXHUwMDNlaWQ7XG4tXHRyZWZfb2JqLVx1MDAzZXBhcmVudF9pZCA9IHJlZy1cdTAwM2VwYXJlbnRfaWQ7XG4rXHRyZWZfb2JqLVx1MDAzZWlkID0gaWQ7XG4rXHRyZWZfb2JqLVx1MDAzZXBhcmVudF9pZCA9IHBhcmVudF9pZDtcbiBcdHJlZl9vYmotXHUwMDNlY250Kys7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZfb2JqKHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4re1xuK1x0dXBkYXRlX3JlZl9vYmpfaWQocmVmX29iaiwgcmVnLVx1MDAzZWlkLCByZWctXHUwMDNlcGFyZW50X2lkKTtcbit9XG4rXG4gc3RhdGljIGludCB2YWxpZGF0ZV9yZWZfb2JqKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmopXG4ge1xuIFx0aWYgKHJlZl9vYmotXHUwMDNlY250IFx1MDAzZSAxKSB7XG5AQCAtOTc3LDcgKzk4Miw3IEBAIHN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcbiB7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xuLVx0aW50IHNwaSwgaSwgajtcbitcdGludCBzcGksIGksIGosIGVycjtcbiBcbiBcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xuIFx0aWYgKHNwaSBcdTAwM2MgMClcbkBAIC05ODcsOCArOTkyLDExIEBAIHN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaSAtIGldO1xuIFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3QgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuIFxuLVx0XHRpZiAoaSA9PSAwKVxuLVx0XHRcdFdBUk5fT05fT05DRShyZWxlYXNlX3JlZmVyZW5jZShlbnYsIHN0LVx1MDAzZWlkKSk7XG4rXHRcdGlmIChpID09IDApIHtcbitcdFx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZShlbnYsIHN0LVx1MDAzZWlkKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuIFxuIFx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBzdCk7XG4gXG5AQCAtNjE0MCw5ICs2MTQ4LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdH1cbiBcbiBcdGlmIChhdHlwZSA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IG1hcmtfYnRmX2xkX3JlZyhlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vLCByZXQsIHJlZy1cdTAwM2VidGYsIGJ0Zl9pZCwgZmxhZyk7XG4rXHRcdGVudW0gYnBmX3JlZ190eXBlIHJlZ190eXBlID0gcmV0O1xuK1x0XHR1MzIgcGFyZW50X2lkID0gcmVnLVx1MDAzZXBhcmVudF9pZDtcbitcbitcdFx0cmV0ID0gbWFya19idGZfbGRfcmVnKGVudiwgcmVncywgdmFsdWVfcmVnbm8sIHJlZ190eXBlLFxuK1x0XHRcdFx0ICAgICAgcmVnLVx1MDAzZWJ0ZiwgYnRmX2lkLCBmbGFnKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoKHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgXHUwMDI2IFBUUl9UUlVTVEVEKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEocmVnc1t2YWx1ZV9yZWdub10udHlwZSBcdTAwMjYgKE1FTV9SQ1UgfCBNRU1fUEVSQ1BVIHwgTUVNX1VTRVIpKSlcbitcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS5wYXJlbnRfaWQgPSBwYXJlbnRfaWQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC05NDU2LDYgKzk0NzEsMjQgQEAgc3RhdGljIGludCBpZHN0YWNrX3BvcChzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcClcbiBcdHJldHVybiBpZG1hcC1cdTAwM2VtYXBbLS1pZG1hcC1cdTAwM2VjbnRdLm9sZDtcbiB9XG4gXG4rc3RhdGljIGludCBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHBhcmVudF9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2c3RhdGUtXHUwMDNlYWNxdWlyZWRfcmVmczsgaSsrKSB7XG4rXHRcdGlmICh2c3RhdGUtXHUwMDNlcmVmc1tpXS50eXBlICE9IFJFRl9UWVBFX1BUUilcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKHZzdGF0ZS1cdTAwM2VyZWZzW2ldLnBhcmVudF9pZCAhPSBwYXJlbnRfaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHZlcmJvc2UoZW52LCBcIkxlYWtpbmcgcmVmZXJlbmNlIGlkPSVkIGFsbG9jX2luc249JWQuIFJlbGVhc2UgaXQgZmlyc3QuXFxuXCIsXG4rXHRcdFx0dnN0YXRlLVx1MDAzZXJlZnNbaV0uaWQsIHZzdGF0ZS1cdTAwM2VyZWZzW2ldLmluc25faWR4KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogUmVsZWFzZSBpZCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb20gaXQgaXRlcmF0aXZlbHkgaW4gYSBERlMgbWFubmVyICovXG4gc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4ge1xuQEAgLTk0NjUsMzEgKzk0OTgsMjUgQEAgc3RhdGljIGludCByZWxlYXNlX3JlZmVyZW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWQpXG4gXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaztcbiBcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuLVx0aW50IGksIGVycjtcbitcdGludCBlcnI7XG4gXG4gXHRpZHN0YWNrLVx1MDAzZWNudCA9IDA7XG4gXHRlcnIgPSBpZHN0YWNrX3B1c2goaWRzdGFjaywgaWQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChmaW5kX3JlZmVyZW5jZV9zdGF0ZSh2c3RhdGUsIGlkKSkge1xuLVx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7XG4tXHRcdFdBUk5fT05fT05DRShlcnIpO1xuLVx0fVxuLVxuIFx0d2hpbGUgKChpZCA9IGlkc3RhY2tfcG9wKGlkc3RhY2spKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBDaGlsZCByZWZlcmVuY2VzIGFyZSBpbmFjY2Vzc2libGUgYWZ0ZXIgcGFyZW50IGlzIHJlbGVhc2VkLFxuIFx0XHQgKiBhbnkgY2hpbGQgcmVmZXJlbmNlcyB0aGF0IGV4aXN0IGF0IHRoaXMgcG9pbnQgYXJlIGEgbGVhay5cbiBcdFx0ICovXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZzdGF0ZS1cdTAwM2VhY3F1aXJlZF9yZWZzOyBpKyspIHtcbi1cdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0udHlwZSAhPSBSRUZfVFlQRV9QVFIpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAodnN0YXRlLVx1MDAzZXJlZnNbaV0ucGFyZW50X2lkICE9IGlkKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0dmVyYm9zZShlbnYsIFwiTGVha2luZyByZWZlcmVuY2UgaWQ9JWQgYWxsb2NfaW5zbj0lZC4gUmVsZWFzZSBpdCBmaXJzdC5cXG5cIixcbi1cdFx0XHRcdHZzdGF0ZS1cdTAwM2VyZWZzW2ldLmlkLCB2c3RhdGUtXHUwMDNlcmVmc1tpXS5pbnNuX2lkeCk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIGlkKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHRpZiAoZmluZF9yZWZlcmVuY2Vfc3RhdGUodnN0YXRlLCBpZCkpIHtcbitcdFx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LCBpZCk7XG4rXHRcdFx0V0FSTl9PTl9PTkNFKGVycik7XG4gXHRcdH1cbiBcbiBcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGVfbWFzayh2c3RhdGUsIHN0YXRlLCByZWcsIHN0YWNrLCBtYXNrLCAoe1xuQEAgLTk1NDEsNiArOTU2OCwzMyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX25vbl9vd25pbmdfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0fSkpO1xuIH1cbiBcbitzdGF0aWMgaW50IGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgcGFyZW50X2lkKVxuK3tcbitcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqdW51c2VkO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnRfaWQpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGVyciA9IGNoZWNrX3JlZmVyZW5jZV9jaGlsZHJlbihlbnYsIHBhcmVudF9pZCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0LypcbitcdCAqIFN0cnVjdCBpdGVyYXRvcnMgY2FuIHJlbGVhc2UgdGhlIHByZXZpb3VzIGVsZW1lbnQgb24gZWFjaCBuZXh0IGNhbGwuXG4rXHQgKiBQVFJfVE9fTUVNIGl0ZXJhdG9yIHJlc3VsdHMgdXNlIHN0b3JhZ2UgdGhhdCByZW1haW5zIHZhbGlkIHVudGlsIGRlc3Ryb3kuXG4rXHQgKi9cbitcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIHVudXNlZCwgcmVnLCAoe1xuK1x0XHRpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gcGFyZW50X2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRicGZfZGlhZ19yZWNvcmRfc2NydWIoZW52LCByZWcsIEJQRl9ESUFHX01PRF9SRUZfUkVMRUFTRSk7XG4rXHRcdG1hcmtfcmVnX2ludmFsaWQoZW52LCByZWcpO1xuK1x0fSkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG5AQCAtMTMxMDAsNiArMTMxNTQsMTAgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdHJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pO1xuIFx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRcdGlmIChtZXRhLVx1MDAzZWJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9keW5wdHJfZnJvbV9maWxlXSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICBpID09IDAgXHUwMDI2XHUwMDI2ICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2VwYXJlbnRfaWQpXG4rXHRcdFx0XHRcdHVwZGF0ZV9yZWZfb2JqX2lkKFx1MDAyNm1ldGEtXHUwMDNlcmVmX29iaiwgcmVnLVx1MDAzZXBhcmVudF9pZCwgMCk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG5AQCAtMTM5OTUsNiArMTQwNTMsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShnZXRfaXRlcl9mcm9tX3N0YXRlKGVudi1cdTAwM2VjdXJfc3RhdGUsIFx1MDAyNm1ldGEpLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpKSB7XG4rXHRcdGVyciA9IGludmFsaWRhdGVfaXRlcl9vd25lZF9idGZfcHRycyhlbnYsIG1ldGEucmVmX29iai5pZCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbiBcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcbkBAIC0xNDEwNSw2ICsxNDE3MCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0cmVnc1tCUEZfUkVHXzBdLmJ0ZiA9IGRlc2NfYnRmO1xuIFx0XHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlID0gdHlwZTtcbiBcdFx0XHRyZWdzW0JQRl9SRUdfMF0uYnRmX2lkID0gcHRyX3R5cGVfaWQ7XG4rXG4rXHRcdFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXHUwMDI2bWV0YSkgXHUwMDI2XHUwMDI2ICEodHlwZSBcdTAwMjYgTUVNX1JDVSkpXG4rXHRcdFx0XHRyZWdzW0JQRl9SRUdfMF0ucGFyZW50X2lkID0gbWV0YS5yZWZfb2JqLmlkO1xuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19rZnVuY19yZXRfbnVsbChcdTAwMjZtZXRhKSkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGVzdG1vZC5jXG5pbmRleCA3NjAxMmRiYmRiNDEzLi5hNTVlNWNmMjk0NzRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rlc3Rtb2QuY1xuQEAgLTI4LDYgKzI4LDI5OCBAQCBpbnQgaXRlcl9uZXh0X3RydXN0ZWQoY29uc3Qgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIHZtYV9wdHItXHUwMDNldm1fc3RhcnQ7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcbitcdHU2NCB2bV9zdGFydDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCFuZXh0X3ZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dm1fc3RhcnQgPSB2bWFfcHRyLVx1MDAzZXZtX3N0YXJ0O1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIHZtX3N0YXJ0O1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGl0ZXJfbmV4dF90cnVzdGVkX2FmdGVyX25leHRfbnVsbChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0ciwgKm5leHRfdm1hX3B0cjtcbitcdHU2NCB2bV9zdGFydDtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bmV4dF92bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKG5leHRfdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR2bV9zdGFydCA9IHZtYV9wdHItXHUwMDNldm1fc3RhcnQ7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gdm1fc3RhcnQ7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfZmllbGRfYWZ0ZXJfZGVzdHJveShjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbitcdHN0cnVjdCBmaWxlICpmaWxlX3B0cjtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZmlsZV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX2ZpbGU7XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoZmlsZV9wdHIpXG4rXHRcdHJldHVybiBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4rXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9maWVsZF9hZnRlcl9uZXh0KGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cl90YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgdm1hX2l0O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfcHRyLCAqbmV4dF92bWFfcHRyO1xuK1x0c3RydWN0IGZpbGUgKmZpbGVfcHRyO1xuK1x0dTMyIG1vZGU7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0aWYgKCFmaWxlX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRuZXh0X3ZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIW5leHRfdm1hX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtb2RlID0gZmlsZV9wdHItXHUwMDNlZl9tb2RlO1xuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIG1vZGU7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJMZWFraW5nIHJlZmVyZW5jZSBpZD1cIilcbitpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0aWYgKCFmaWxlX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFx1MDAyNmR5bnB0cik7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJMZWFraW5nIHJlZmVyZW5jZSBpZD1cIilcbitpbnQgaXRlcl9uZXh0X2ZpbGVfZHlucHRyX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBkeW5wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZpbGVfcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9maWxlO1xuK1x0aWYgKCFmaWxlX3B0cilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fZmlsZShmaWxlX3B0ciwgMCwgXHUwMDI2ZHlucHRyKTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdGJwZl9keW5wdHJfZmlsZV9kaXNjYXJkKFx1MDAyNmR5bnB0cik7XG4rXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfZmlsZV9keW5wdHJfZGlzY2FyZF9iZWZvcmVfYWR2YW5jZShjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbitcdHN0cnVjdCBicGZfZHlucHRyIGR5bnB0cjtcbitcdHN0cnVjdCBmaWxlICpmaWxlX3B0cjtcbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhcdTAwMjZ2bWFfaXQsIGN1cl90YXNrLCAwKTtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoIXZtYV9wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZmlsZV9wdHIgPSB2bWFfcHRyLVx1MDAzZXZtX2ZpbGU7XG4rXHRpZiAoIWZpbGVfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJwZl9keW5wdHJfZnJvbV9maWxlKGZpbGVfcHRyLCAwLCBcdTAwMjZkeW5wdHIpO1xuK1x0YnBmX2R5bnB0cl9maWxlX2Rpc2NhcmQoXHUwMDI2ZHlucHRyKTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitvdXQ6XG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9jdXJyZW50X2FmdGVyX25leHQoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKCF2bWFfcHRyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHZtYV9wdHIgPSBicGZfaXRlcl90YXNrX3ZtYV9uZXh0KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAodm1hX3B0cilcbitcdFx0YnBmX2tmdW5jX3RydXN0ZWRfdm1hX3Rlc3Qodm1hX3B0cik7XG4rb3V0OlxuK1x0YnBmX2l0ZXJfdGFza192bWFfZGVzdHJveShcdTAwMjZ2bWFfaXQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX3N1Y2Nlc3NcbitpbnQgaXRlcl9uZXh0X3RydXN0ZWRfcmN1X2ZpZWxkX2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSB2bWFfaXQ7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9wdHI7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbV9wdHI7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZV9wdHIgPSBOVUxMO1xuK1xuK1x0YnBmX2l0ZXJfdGFza192bWFfbmV3KFx1MDAyNnZtYV9pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dm1hX3B0ciA9IGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmICh2bWFfcHRyKSB7XG4rXHRcdG1tX3B0ciA9IHZtYV9wdHItXHUwMDNldm1fbW07XG4rXHRcdC8qIGV4ZV9maWxlIGhhcyBSQ1UgcHJvdGVjdGlvbiBpbmRlcGVuZGVudCBvZiB0aGUgaXRlcmF0b3IuICovXG4rXHRcdGlmIChtbV9wdHIpXG4rXHRcdFx0ZmlsZV9wdHIgPSBtbV9wdHItXHUwMDNlZXhlX2ZpbGU7XG4rXHR9XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95KFx1MDAyNnZtYV9pdCk7XG4rXHRpZiAoZmlsZV9wdHIpXG4rXHRcdHJldHVybiBmaWxlX3B0ci1cdTAwM2VmX21vZGU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfdHJ1c3RlZF9yY3VfZmllbGRfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hIHZtYV9pdDtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3B0cjtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX3B0cjtcbitcdHN0cnVjdCBmaWxlICpmaWxlX3B0ciA9IE5VTEw7XG4rXHR1MzIgbW9kZSA9IDA7XG4rXG4rXHRicGZfaXRlcl90YXNrX3ZtYV9uZXcoXHUwMDI2dm1hX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR2bWFfcHRyID0gYnBmX2l0ZXJfdGFza192bWFfbmV4dChcdTAwMjZ2bWFfaXQpO1xuK1x0aWYgKHZtYV9wdHIpIHtcbitcdFx0bW1fcHRyID0gdm1hX3B0ci1cdTAwM2V2bV9tbTtcbitcdFx0aWYgKG1tX3B0cilcbitcdFx0XHRmaWxlX3B0ciA9IG1tX3B0ci1cdTAwM2VleGVfZmlsZTtcbitcdH1cbitcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX25leHQoXHUwMDI2dm1hX2l0KTtcbitcdGlmIChmaWxlX3B0cilcbitcdFx0bW9kZSA9IGZpbGVfcHRyLVx1MDAzZWZfbW9kZTtcbitcdGJwZl9pdGVyX3Rhc2tfdm1hX2Rlc3Ryb3koXHUwMDI2dm1hX2l0KTtcbitcdHJldHVybiBtb2RlO1xuK31cbitcbiBTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4gaW50IGl0ZXJfbmV4dF90cnVzdGVkX29yX251bGwoY29uc3Qgdm9pZCAqY3R4KVxuQEAgLTY2LDYgKzM1OCw0NiBAQCBpbnQgaXRlcl9uZXh0X3JjdShjb25zdCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK19fc3VjY2Vzc1xuK2ludCBpdGVyX25leHRfcmN1X2FmdGVyX2Rlc3Ryb3koY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyX3Rhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdHN0cnVjdCBicGZfaXRlcl90YXNrIHRhc2tfaXQ7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfcHRyO1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2dGFza19pdCwgY3VyX3Rhc2ssIDApO1xuK1xuK1x0dGFza19wdHIgPSBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2dGFza19pdCk7XG4rXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2dGFza19pdCk7XG4rXHRpZiAoIXRhc2tfcHRyKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19yY3VfdGFza190ZXN0KHRhc2tfcHRyKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4rX19zdWNjZXNzXG4raW50IGl0ZXJfbmV4dF9yY3VfYWZ0ZXJfbmV4dChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJfdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2sgdGFza19pdDtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19wdHI7XG4rXG4rXHRicGZfaXRlcl90YXNrX25ldyhcdTAwMjZ0YXNrX2l0LCBjdXJfdGFzaywgMCk7XG4rXG4rXHR0YXNrX3B0ciA9IGJwZl9pdGVyX3Rhc2tfbmV4dChcdTAwMjZ0YXNrX2l0KTtcbitcdGlmICghdGFza19wdHIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNnRhc2tfaXQpO1xuK1x0YnBmX2tmdW5jX3JjdV90YXNrX3Rlc3QodGFza19wdHIpO1xuK291dDpcbitcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcdTAwMjZ0YXNrX2l0KTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCIpXG4gaW50IGl0ZXJfbmV4dF9yY3Vfb3JfbnVsbChjb25zdCB2b2lkICpjdHgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDoxNi4xNjY2NzE4ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzMzUyODcwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBvZiBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBhZGRyZXNzaW5nIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYE5lZWRzS01TQU4gPSBmYWxzZWAsIGJ1dCB3ZSBuZWVkIHRvIGJlIHJpZ29yb3VzLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgZmlsZXMgcmVsYXRlZCB0byBCUEYgdmVyaWZpY2F0aW9uOiBgYnBmX3ZlcmlmaWVyLmhgLCBgdmVyaWZpZXIuY2AsIGFuZCBhIHNlbGZ0ZXN0IGZpbGUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGltcHJvdmVkIGxpZmV0aW1lIHRyYWNraW5nIGZvciBwb2ludGVycyBvYnRhaW5lZCB0aHJvdWdoIEJQRiBzdHJ1Y3QgaXRlcmF0b3JzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgcHJldmVudGluZyBVQUYgYW5kIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgdXBkYXRlX3JlZl9vYmpfaWQoKWAsIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcigpYCwgZW5oYW5jZW1lbnRzIHRvIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGBjaGVja19yZWZlcmVuY2VfY2hpbGRyZW4oKWAsIGFuZCBgaW52YWxpZGF0ZV9pdGVyX293bmVkX2J0Zl9wdHJzKClgIGZ1bmN0aW9ucywgYWxvbmcgd2l0aCBhZGp1c3RtZW50cyB0byBgY2hlY2tfa2Z1bmNfYXJnc2AgYW5kIGBjaGVja19rZnVuY19jYWxsYC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpZGVhIGlzIHRvIGFuY2hvciB0aGUgbGlmZXRpbWUgb2YgdGhlc2UgaXRlcmF0b3ItcmV0dXJuZWQgcG9pbnRlcnMgKGBwYXJlbnRfaWRgKSBhbmQgaW52YWxpZGF0ZSB0aGVtIHdoZW4gdGhlIGl0ZXJhdG9yIGFkdmFuY2VzLlxuXG5UaGUgZnVuZGFtZW50YWwgcHJvYmxlbSBpcyB0aGF0LCBwcmV2aW91c2x5LCBCUEYgcHJvZ3JhbXMgY291bGQgdXNlIHBvaW50ZXJzIHJldHVybmVkIGJ5IGl0ZXJhdG9ycyBhZnRlciB0aGUgaXRlcmF0b3IgaGFkIG1vdmVkIG9uLCByZXN1bHRpbmcgaW4gYSBwb3RlbnRpYWxseSBVQUYgc2l0dWF0aW9uLiBUaGlzIHBhdGNoIG1pdGlnYXRlcyB0aGF0IGJ5IGludmFsaWRhdGluZyB0aGUgcG9pbnRlcnMuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYXBwbHkgb3VyIEtNU0FOIGxlbnMuIEZyb20gYSBwcmVsaW1pbmFyeSByZWFkLCB0aGUgYW5zd2VyIGlzIFwibm9cIi5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2ggZGV0YWlsczpcblxuMS4gICoqTm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlKio6IFRoZSBtb2RpZmllZCBzdHJ1Y3RzIGFyZSBpbnRlcm5hbCB0byB0aGUgdmVyaWZpZXIsIG5vIHJpc2sgb2YgZGF0YSBsZWFrYWdlLlxuMi4gICoqTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgYnJhbmNoaW5nKio6IEluaXRpYWxpemF0aW9ucyBzZWVtIHNvdW5kLiBgZXJyYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIGB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcmAuIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgdXNlcyBhbHJlYWR5IGluaXRpYWxpemVkIHJlZ3MuICBMb29wIGl0ZXJhdG9ycyBpbiBgY2hlY2tfcmVmZXJlbmNlX2NoaWxkcmVuYCBpdGVyYXRlIG92ZXIgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgZmllbGRzLiBTaW1pbGFybHksIGBpbnZhbGlkYXRlX2l0ZXJfb3duZWRfYnRmX3B0cnNgIHJlbGllcyBvbiBpbml0aWFsaXplZCB2YXJpYWJsZXMgYW5kIHN0YXRlcy5cbjMuICAqKk5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBhbGxvY2F0aW9ucyoqOiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9uIHNjaGVtZXMuXG40LiAgKipObyBib3VuZGFyeSBvciBsZW5ndGggbWFuaXB1bGF0aW9ucyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMqKjogTm90aGluZyBpbiB0aGUgcGF0Y2ggc3VnZ2VzdHMgdGhhdCB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMgYmVjb21lIGFjY2Vzc2libGUuXG5cblRoZSBwYXRjaCBhaW1zIHRvIGZpeCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUuIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIGZvciBkZXRlY3RpbmcgdGhpcyBraW5kIG9mIGJ1Zy4gVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIEtNU0FOIHJ1bGVzLCB3ZSAqZG9uJ3QqIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIGNoYW5nZXMgYXJlIGFib3V0IHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gdGhhdCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi4gSXQncyBhIHZlcmlmaWVyIHN0YXRpYyBhbmFseXNpcyBpbXByb3ZlbWVudC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gcHJlcGFyZSB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDI1LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDoyNi41MDE5NjIyNzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXIncyBsaWZldGltZSB0cmFja2luZyBmb3IgdHJ1c3RlZCBwb2ludGVycyByZXR1cm5lZCBieSBzdHJ1Y3QgaXRlcmF0b3JzIChlLmcuLCBicGZfaXRlcl90YXNrX3ZtYSkgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgcGFyZW50X2lkIGFuZCBpbnZhbGlkYXRpbmcgdGhlbSB1cG9uIHN1YnNlcXVlbnQgaXRlcmF0b3Igc3RlcHMgb3IgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gQlBGIHByb2dyYW1zLlxcblxcblRoZSBjaGFuZ2VzIGludm9sdmUgcHVyZWx5IGludGVybmFsIEJQRiB2ZXJpZmllciBsb2dpYywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzZWxmdGVzdHMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgbWVjaGFuaXNtcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHJ1bnRpbWUgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaXRlcmF0b3IgYnVncyAoc3VjaCBhcyBVQUYpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuaGFuY2VzIHRoZSBCUEYgdmVyaWZpZXIncyBsaWZldGltZSB0cmFja2luZyBmb3IgdHJ1c3RlZCBwb2ludGVycyByZXR1cm5lZCBieSBzdHJ1Y3QgaXRlcmF0b3JzIChlLmcuLCBicGZfaXRlcl90YXNrX3ZtYSkgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgcGFyZW50X2lkIGFuZCBpbnZhbGlkYXRpbmcgdGhlbSB1cG9uIHN1YnNlcXVlbnQgaXRlcmF0b3Igc3RlcHMgb3IgZGVzdHJ1Y3Rpb24uIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBhbmQgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gQlBGIHByb2dyYW1zLlxcblxcblRoZSBjaGFuZ2VzIGludm9sdmUgcHVyZWx5IGludGVybmFsIEJQRiB2ZXJpZmllciBsb2dpYywgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcsIGFuZCBzZWxmdGVzdHMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgbWVjaGFuaXNtcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHJ1bnRpbWUgc2FmZXR5IHZpb2xhdGlvbnMgcmVzdWx0aW5nIGZyb20gaXRlcmF0b3IgYnVncyAoc3VjaCBhcyBVQUYpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowz6wqj[1] Phase: Succeeded StartedAt: 2026-09-11 08:50:38 +0000 UTC FinishedAt: 2026-09-11 08:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 08:50:38 +0000 UTC FinishedAt: 2026-09-11 08:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2] Phase: Succeeded StartedAt: 2026-09-11 08:50:38 +0000 UTC FinishedAt: 2026-09-11 12:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 08:50:38 +0000 UTC FinishedAt: 2026-09-11 12:35:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 08:50:38 +0000 UTC FinishedAt: 2026-09-11 08:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 08:50:38 +0000 UTC FinishedAt: 2026-09-11 08:50:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz6wqj/series-workflowz6wqj-convert-artifact-3000552995/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 08:50:48 +0000 UTC FinishedAt: 2026-09-11 09:08:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 08:50:48 +0000 UTC FinishedAt: 2026-09-11 09:08:34 +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:*d6c95832-844a-490c-a9e3-e0dc1aad831c,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-workflowz6wqj/series-workflowz6wqj-convert-artifact-3000552995/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": "ba3194ee-bb70-4294-b6cb-83a73677de55", "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-workflowz6wqj/series-workflowz6wqj-build-action-1385382545/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:50:48 +0000 UTC FinishedAt: 2026-09-11 09:08:23 +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:*d6c95832-844a-490c-a9e3-e0dc1aad831c,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-workflowz6wqj/series-workflowz6wqj-convert-artifact-3000552995/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": "ba3194ee-bb70-4294-b6cb-83a73677de55", "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-workflowz6wqj/series-workflowz6wqj-build-action-1385382545/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 09:08:34 +0000 UTC FinishedAt: 2026-09-11 09:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 09:08:35 +0000 UTC FinishedAt: 2026-09-11 09:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 09:08:35 +0000 UTC FinishedAt: 2026-09-11 09:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 09:08:35 +0000 UTC FinishedAt: 2026-09-11 09:08:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz6wqj/series-workflowz6wqj-convert-artifact-3116120154/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 09:08:46 +0000 UTC FinishedAt: 2026-09-11 09:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 09:08:46 +0000 UTC FinishedAt: 2026-09-11 09:10:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba3194ee-bb70-4294-b6cb-83a73677de55,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-workflowz6wqj/series-workflowz6wqj-build-action-1385382545/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-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 09:10:56 +0000 UTC FinishedAt: 2026-09-11 09:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:10:56 +0000 UTC FinishedAt: 2026-09-11 09:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 09:10:56 +0000 UTC FinishedAt: 2026-09-11 09:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 09:10:56 +0000 UTC FinishedAt: 2026-09-11 09:32:14 +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:*d6c95832-844a-490c-a9e3-e0dc1aad831c,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-workflowz6wqj/series-workflowz6wqj-convert-artifact-3116120154/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": "417deb87-cc70-4c75-b137-8867bcbebd13", "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-workflowz6wqj/series-workflowz6wqj-build-action-789546302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 09:10:56 +0000 UTC FinishedAt: 2026-09-11 09:32:04 +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:*d6c95832-844a-490c-a9e3-e0dc1aad831c,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-workflowz6wqj/series-workflowz6wqj-convert-artifact-3116120154/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": "417deb87-cc70-4c75-b137-8867bcbebd13", "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-workflowz6wqj/series-workflowz6wqj-build-action-789546302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 09:32:14 +0000 UTC FinishedAt: 2026-09-11 09:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 09:32:14 +0000 UTC FinishedAt: 2026-09-11 09:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 09:32:14 +0000 UTC FinishedAt: 2026-09-11 09:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 09:32:14 +0000 UTC FinishedAt: 2026-09-11 09:34:15 +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:*417deb87-cc70-4c75-b137-8867bcbebd13,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-workflowz6wqj/series-workflowz6wqj-build-action-789546302/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-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 09:34:24 +0000 UTC FinishedAt: 2026-09-11 12:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 09:34:24 +0000 UTC FinishedAt: 2026-09-11 12:35:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"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:*ba3194ee-bb70-4294-b6cb-83a73677de55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*417deb87-cc70-4c75-b137-8867bcbebd13,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-workflowz6wqj/series-workflowz6wqj-build-action-1385382545/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-workflowz6wqj/series-workflowz6wqj-build-action-789546302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 09:34:24 +0000 UTC FinishedAt: 2026-09-11 09:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 09:34:24 +0000 UTC FinishedAt: 2026-09-11 09:34:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"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-workflowz6wqj/series-workflowz6wqj-convert-artifact-1588555535/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 09:34:24 +0000 UTC FinishedAt: 2026-09-11 09:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 09:34:24 +0000 UTC FinishedAt: 2026-09-11 09:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:34:24 +0000 UTC FinishedAt: 2026-09-11 09:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 09:34:34 +0000 UTC FinishedAt: 2026-09-11 12:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6wqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","invalidate_iter_owned_btf_ptrs","check_reference_children","release_reference","check_kfunc_call","check_kfunc_args","check_ptr_to_btf_access","unmark_stack_slots_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"c335e08b-0c41-4676-bc5c-59ae2edecd7d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 09:34:34 +0000 UTC FinishedAt: 2026-09-11 12:35:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba3194ee-bb70-4294-b6cb-83a73677de55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*417deb87-cc70-4c75-b137-8867bcbebd13,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-workflowz6wqj/series-workflowz6wqj-build-action-1385382545/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-workflowz6wqj/series-workflowz6wqj-build-action-789546302/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-workflowz6wqj/series-workflowz6wqj-convert-artifact-1588555535/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,}