Name: series-workflowh99x5 Phase: Succeeded StartedAt: 2026-07-28 14:39:44 +0000 UTC FinishedAt: 2026-07-28 19:38:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[0] Phase: Succeeded StartedAt: 2026-07-28 14:39:44 +0000 UTC FinishedAt: 2026-07-28 15:01:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 14:39:44 +0000 UTC FinishedAt: 2026-07-28 15:01:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "NETFILTER", "NETFILTER_XTABLES", "NETFILTER_XTABLES_LEGACY", "BRIDGE_NF_EBTABLES_LEGACY", "BRIDGE_EBT_T_FILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "NETFILTER", "NETFILTER_XTABLES", "NETFILTER_XTABLES_LEGACY", "BRIDGE_NF_EBTABLES_LEGACY", "BRIDGE_EBT_T_FILTER" ], "series_id": "aaf59a76-cba2-41a6-a8a2-1f9e35624cc6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_replace_finish", "do_update_counters", "do_replace", "update_counters", "compat_do_replace", "compat_update_counters", "do_ebt_set_ctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7QlJJREdFX0VCVF9UX0ZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3JlcGxhY2VfZmluaXNoJiMzNDssCiAgICAmIzM0O2RvX3VwZGF0ZV9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtkb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtjb21wYXRfZG9fcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtjb21wYXRfdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2RvX2VidF9zZXRfY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBpbiBlYnRhYmxlcyBieSBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgYWZ0ZXIgc29tZSBjaGVja3MgYW5kIGxvY2tzIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZWJ0YWJsZXMgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBFQlRfU09fU0VUX0VOVFJJRVNgIGFuZCBgRUJUX1NPX1NFVF9DT1VOVEVSU2Agc2V0c29ja29wdCBjb21tYW5kcy4gV2UgbmVlZCB0byBlbmFibGUgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdGVzdCB0aGlzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE0OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWNjZjU4YWY2MDdmZTZmOTY0NTE0NDBkMDYxOTk4ZmU3OTgxNzA4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDE0OjU5OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG5pbmRleCA5NmM5YThmNTdjODcwMi4uODE0OTZlYmY5MmE5YzkgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG5AQCAtMTAxNywxNiAmIzQzOzEwMTcsNiBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxuIFx0c3RydWN0IGVidF90YWJsZV9pbmZvICp0YWJsZTtcbiBcdHN0cnVjdCBlYnRfdGFibGUgKnQ7XG4gXG4tXHQvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrXG4tXHQgKiB0aGUgY2hlY2sgb24gdGhlIHNpemUgaXMgZG9uZSBsYXRlciwgd2hlbiB3ZSBoYXZlIHRoZSBsb2NrXG4tXHQgKi9cbi1cdGlmIChyZXBsLVx1MDAzZW51bV9jb3VudGVycykge1xuLVx0XHRjb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC1cdTAwM2VudW1fY291bnRlcnMsXG4tXHRcdFx0XHRcdCAgICBzaXplb2YoKmNvdW50ZXJzdG1wKSk7XG4tXHRcdGlmICghY291bnRlcnN0bXApXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4gXHRuZXdpbmZvLVx1MDAzZWNoYWluc3RhY2sgPSBOVUxMO1xuIFx0cmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycyhyZXBsLCBuZXdpbmZvKTtcbiBcdGlmIChyZXQgIT0gMClcbkBAIC0xMDUzLDYgJiM0MzsxMDQzLDE1IEBAIHN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXG4gXHRcdGdvdG8gZnJlZV91bmxvY2s7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHJlcGwtXHUwMDNlbnVtX2NvdW50ZXJzKSB7XG4mIzQzO1x0XHRjb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC1cdTAwM2VudW1fY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0XHQgICAgc2l6ZW9mKCpjb3VudGVyc3RtcCkpO1xuJiM0MztcdFx0aWYgKCFjb3VudGVyc3RtcCkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRnb3RvIGZyZWVfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiB3ZSBoYXZlIHRoZSBtdXRleCBsb2NrLCBzbyBubyBkYW5nZXIgaW4gcmVhZGluZyB0aGlzIHBvaW50ZXIgKi9cbiBcdHRhYmxlID0gdC1cdTAwM2Vwcml2YXRlO1xuIFx0LyogbWFrZSBzdXJlIHRoZSB0YWJsZSBjYW4gb25seSBiZSBybW1vZCYjMzk7ZWQgaWYgaXQgY29udGFpbnMgbm8gcnVsZXMgKi9cbkBAIC0xMzg2LDI1ICYjNDM7MTM4NSwyNyBAQCBzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywgdW5zaWduZWQgaW50IGxlbilcbiB7XG4gXHRpbnQgaSwgcmV0O1xuLVx0c3RydWN0IGVidF9jb3VudGVyICp0bXA7XG4mIzQzO1x0c3RydWN0IGVidF9jb3VudGVyICp0bXAgPSBOVUxMO1xuIFx0c3RydWN0IGVidF90YWJsZSAqdDtcbiBcbiBcdGlmIChudW1fY291bnRlcnMgPT0gMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR0bXAgPSB2bWFsbG9jX2FycmF5KG51bV9jb3VudGVycywgc2l6ZW9mKCp0bXApKTtcbi1cdGlmICghdG1wKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbiBcdHQgPSBmaW5kX3RhYmxlX2xvY2sobmV0LCBuYW1lLCBcdTAwMjZyZXQsIFx1MDAyNmVidF9tdXRleCk7XG4gXHRpZiAoIXQpXG4tXHRcdGdvdG8gZnJlZV90bXA7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKG51bV9jb3VudGVycyAhPSB0LVx1MDAzZXByaXZhdGUtXHUwMDNlbmVudHJpZXMpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4mIzQzO1x0dG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7XG4mIzQzO1x0aWYgKCF0bXApIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHVubG9ja19tdXRleDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGNvcHlfZnJvbV91c2VyKHRtcCwgY291bnRlcnMsXG4gXHRcdFx0ICAgYXJyYXlfc2l6ZShudW1fY291bnRlcnMsIHNpemVvZigqY291bnRlcnMpKSkpIHtcbiBcdFx0cmV0ID0gLUVGQVVMVDtcbkBAIC0xNDIyLDcgJiM0MzsxNDIzLDYgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0cmV0ID0gMDtcbiB1bmxvY2tfbXV0ZXg6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZWJ0X211dGV4KTtcbi1mcmVlX3RtcDpcbiBcdHZmcmVlKHRtcCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7QlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtCUklER0VfRUJUX1RfRklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fcmVwbGFjZV9maW5pc2gmIzM0OywKICAgICYjMzQ7ZG9fdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2RvX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7dXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2NvbXBhdF9kb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O2NvbXBhdF91cGRhdGVfY291bnRlcnMmIzM0OywKICAgICYjMzQ7ZG9fZWJ0X3NldF9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGluIGVidGFibGVzIGJ5IG1vdmluZyB0aGUgYWxsb2NhdGlvbiBvZiBgY291bnRlcnN0bXBgIGFuZCBgdG1wYCBhZnRlciBzb21lIGNoZWNrcyBhbmQgbG9ja3MgaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBlYnRhYmxlcyBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEVCVF9TT19TRVRfRU5UUklFU2AgYW5kIGBFQlRfU09fU0VUX0NPVU5URVJTYCBzZXRzb2Nrb3B0IGNvbW1hbmRzLiBXZSBuZWVkIHRvIGVuYWJsZSBsZWdhY3kgZWJ0YWJsZXMgc3VwcG9ydCB0byB0ZXN0IHRoaXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxY2NmNThhZjYwN2ZlNmY5NjQ1MTQ0MGQwNjE5OThmZTc5ODE3MDhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMTQ6NTk6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCA5NmM5YThmNTdjODcwMi4uODE0OTZlYmY5MmE5YzkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTAxNywxNiAmIzQzOzEwMTcsNiBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAogCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqdGFibGU7CiAJc3RydWN0IGVidF90YWJsZSAqdDsKIAotCS8qIHRoZSB1c2VyIHdhbnRzIGNvdW50ZXJzIGJhY2sKLQkgKiB0aGUgY2hlY2sgb24gdGhlIHNpemUgaXMgZG9uZSBsYXRlciwgd2hlbiB3ZSBoYXZlIHRoZSBsb2NrCi0JICovCi0JaWYgKHJlcGwtJmd0O251bV9jb3VudGVycykgewotCQljb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC0mZ3Q7bnVtX2NvdW50ZXJzLAotCQkJCQkgICAgc2l6ZW9mKCpjb3VudGVyc3RtcCkpOwotCQlpZiAoIWNvdW50ZXJzdG1wKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJbmV3aW5mby0mZ3Q7Y2hhaW5zdGFjayA9IE5VTEw7CiAJcmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycyhyZXBsLCBuZXdpbmZvKTsKIAlpZiAocmV0ICE9IDApCkBAIC0xMDUzLDYgJiM0MzsxMDQzLDE1IEBAIHN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsCiAJCWdvdG8gZnJlZV91bmxvY2s7CiAJfQogCiYjNDM7CWlmIChyZXBsLSZndDtudW1fY291bnRlcnMpIHsKJiM0MzsJCWNvdW50ZXJzdG1wID0gdm1hbGxvY19hcnJheShyZXBsLSZndDtudW1fY291bnRlcnMsCiYjNDM7CQkJCQkgICAgc2l6ZW9mKCpjb3VudGVyc3RtcCkpOwomIzQzOwkJaWYgKCFjb3VudGVyc3RtcCkgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBmcmVlX3VubG9jazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qIHdlIGhhdmUgdGhlIG11dGV4IGxvY2ssIHNvIG5vIGRhbmdlciBpbiByZWFkaW5nIHRoaXMgcG9pbnRlciAqLwogCXRhYmxlID0gdC0mZ3Q7cHJpdmF0ZTsKIAkvKiBtYWtlIHN1cmUgdGhlIHRhYmxlIGNhbiBvbmx5IGJlIHJtbW9kJiMzOTtlZCBpZiBpdCBjb250YWlucyBubyBydWxlcyAqLwpAQCAtMTM4NiwyNSAmIzQzOzEzODUsMjcgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgaSwgcmV0OwotCXN0cnVjdCBlYnRfY291bnRlciAqdG1wOwomIzQzOwlzdHJ1Y3QgZWJ0X2NvdW50ZXIgKnRtcCA9IE5VTEw7CiAJc3RydWN0IGVidF90YWJsZSAqdDsKIAogCWlmIChudW1fY291bnRlcnMgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0bXAgPSB2bWFsbG9jX2FycmF5KG51bV9jb3VudGVycywgc2l6ZW9mKCp0bXApKTsKLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAl0ID0gZmluZF90YWJsZV9sb2NrKG5ldCwgbmFtZSwgJmFtcDtyZXQsICZhbXA7ZWJ0X211dGV4KTsKIAlpZiAoIXQpCi0JCWdvdG8gZnJlZV90bXA7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJaWYgKG51bV9jb3VudGVycyAhPSB0LSZndDtwcml2YXRlLSZndDtuZW50cmllcykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja19tdXRleDsKIAl9CiAKJiM0MzsJdG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7CiYjNDM7CWlmICghdG1wKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byB1bmxvY2tfbXV0ZXg7CiYjNDM7CX0KJiM0MzsKIAlpZiAoY29weV9mcm9tX3VzZXIodG1wLCBjb3VudGVycywKIAkJCSAgIGFycmF5X3NpemUobnVtX2NvdW50ZXJzLCBzaXplb2YoKmNvdW50ZXJzKSkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CkBAIC0xNDIyLDcgJiM0MzsxNDIzLDYgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLAogCXJldCA9IDA7CiB1bmxvY2tfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZWJ0X211dGV4KTsKLWZyZWVfdG1wOgogCXZmcmVlKHRtcCk7CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPcHRpbWl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIGVidGFibGVzLmMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jYC4gVGhlIGNvcmUgaWRlYSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGJlIGEgYml0IG1vcmUgZWZmaWNpZW50IHdpdGggbWVtb3J5IGFsbG9jYXRpb24uIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCB3aXRoaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYHRtcGAgd2l0aGluIGBkb191cGRhdGVfY291bnRlcnNgIHRvIGEgbGF0ZXIgcG9pbnQgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGV4ZWN1dGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBoZXJlIGlzIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBzb21lIGNoZWNrcyBvciBsb2NraW5nIG1lY2hhbmlzbXMgbWlnaHQgcHJldmVudCB0aGUgbmVlZCBmb3IgdGhlbSBpbiB0aGUgZmlyc3QgcGxhY2UuCgpTcGVjaWZpY2FsbHksIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAsIHRoZSBgY291bnRlcnN0bXBgIGFsbG9jYXRpb24gaXMgbW92ZWQgYWZ0ZXIgYGVidF92ZXJpZnlfcG9pbnRlcnNgIGFuZCBgZmluZF90YWJsZV9sb2NrYC4gVGhhdCBtYWtlcyBzZW5zZTsgaWYgdGhlIHBvaW50ZXJzIGFyZSBpbnZhbGlkLCBvciBpZiB3ZSBjYW4mIzM5O3QgZ2V0IHRoZSBsb2NrLCB3ZSBzaG91bGRuJiMzOTt0IHdhc3RlIHRpbWUgb24gdGhlIG1lbW9yeSBhbGxvY2F0aW9uLiBTaW1pbGFybHksIGluIGBkb191cGRhdGVfY291bnRlcnNgLCB0aGUgYWxsb2NhdGlvbiBvZiBgdG1wYCBpcyBzaGlmdGVkIGFmdGVyIGBmaW5kX3RhYmxlX2xvY2tgIGFuZCBhIGNoZWNrIHRoYXQgdmVyaWZpZXMgYG51bV9jb3VudGVyc2AgYWdhaW5zdCBgdC0mZ3Q7cHJpdmF0ZS0mZ3Q7bmVudHJpZXNgLiBJdCBzZWVtcyB0aGF0IHRoZSBsb2dpYyBoZXJlIGFpbXMgdG8gcmVkdWNlIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gaW4gY2FzZXMgd2hlcmUgdGhlIHRhYmxlIGVudHJ5IGNvdW50IGlzIG5vdCB0aGUgZXhwZWN0ZWQgc2l6ZS4KClRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIG1lbW9yeSBvcHRpbWl6YXRpb24sIG1heWJlIGV2ZW4gYSBidWcgZml4IGlmIHdlIHdlcmUgYWxsb2NhdGluZyB1bm5lY2Vzc2FyaWx5IGJlZm9yZS4gU2luY2UgdGhpcyBkZWFscyB3aXRoIHN0YXRpYyBmdW5jdGlvbnMsIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBob3cgdGhleSBhcmUgdXNlZC4gYGRvX3JlcGxhY2VfZmluaXNoYCBpcyBjYWxsZWQgYnkgYGRvX3JlcGxhY2VgLCB0aGF0JiMzOTtzIHNpbXBsZSBlbm91Z2guIEkgc2hvdWxkIGNoZWNrIGBuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jYCB0byBzZWUgd2hlcmUgYGRvX3VwZGF0ZV9jb3VudGVyc2AgaXMgdXNlZC4gSSYjMzk7bSBhc3N1bWluZyBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGBlYnRfc29ja29wdGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19yZXBsYWNlX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz05OTA9c3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEwLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMDExOnN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTItXHRcdFx0ICAgICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MTExMD1zdGF0aWMgaW50IGRvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1NC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE1NTpcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXHUwMDI2dG1wLCBuZXdpbmZvKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1Ni1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIyOTI9c3RhdGljIGludCBjb21wYXRfZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzc5LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMzgwOlx0cmV0ID0gZG9fcmVwbGFjZV9maW5pc2gobmV0LCBcdTAwMjZ0bXAsIG5ld2luZm8pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzgxLVx0aWYgKHJldCA9PSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IFRoZSBgZG9fcmVwbGFjZWAgQ29udW5kcnVtKioKCk9rYXksIHNvIGBkb19yZXBsYWNlYCBhbmQgaXRzIGBjb21wYXRfZG9fcmVwbGFjZWAgdmFyaWFudCBhcmUgdGhlIGVudHJ5IHBvaW50cy4gVGhleSYjMzk7cmUgdGhlIGZ1bmN0aW9ucyBjYWxsaW5nIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGlzIHBvaW50IGluIHRoZSBjb2RlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlc2UgbWV0aG9kcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBkb191cGRhdGVfY291bnRlcnNgIGRvZXM7IGhvcGVmdWxseSBpdCBzaGVkcyBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlc2UgdmFsdWVzIGFyZSB1cGRhdGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hlcmUgaXQgdGFrZXMgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTEzNjE9dm9pZCBlYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMzgyLS8qIHVzZXJzcGFjZSBqdXN0IHN1cHBsaWVkIHVzIHdpdGggY291bnRlcnMgKi9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTM4MzpzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEzODQtXHRcdFx0ICAgICAgc3RydWN0IGVidF9jb3VudGVyIF9fdXNlciAqY291bnRlcnMsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0xNDMwPXN0YXRpYyBpbnQgdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0NDMtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjE0NDQ6XHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGhscC5jb3VudGVycyxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTQ0NS1cdFx0XHRcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIzOTQ9c3RhdGljIGludCBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZyxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MDktXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI0MTA6XHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGNvbXBhdF9wdHIoaGxwLmNvdW50ZXJzKSxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQxMS1cdFx0XHRcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6CgoqKlRyYWNpbmcgdGhlIENhbGwgSGllcmFyY2h5OiBBIFF1aWNrIERpYWdub3N0aWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1cGRhdGVfY291bnRlcnNgIGFuZCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBsYXJnZXIgcGljdHVyZS4gSSBrbm93IHRoZXkmIzM5O3JlICpjYWxsZXJzKiwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGZ1bmN0aW9uICpjYWxscyouIEkgd2FudCB0byBzZWUgd2hhdCBmdW5jdGlvbnMgYWN0dWFsbHkgKnVzZSogYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYW5kIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIGlzIGtleSBoZXJlLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgdHJvdWJsZXNob290aW5nIGFwcHJvYWNoOiB3b3JrIHlvdXIgd2F5IGJhY2sgdXAgdGhlIGNoYWluLiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBwcm92aWRlIGNvbnRleHQgc28gSSBjYW4gcXVpY2tseSBpc29sYXRlIHRoZSBpbXBhY3QgYW5kIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTEzNjE9dm9pZCBlYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMzgyLS8qIHVzZXJzcGFjZSBqdXN0IHN1cHBsaWVkIHVzIHdpdGggY291bnRlcnMgKi9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTM4MzpzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEzODQtXHRcdFx0ICAgICAgc3RydWN0IGVidF9jb3VudGVyIF9fdXNlciAqY291bnRlcnMsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xNDI5LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxNDMwOnN0YXRpYyBpbnQgdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTQzMS17XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xNDQzLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxNDQ0Olx0cmV0dXJuIGRvX3VwZGF0ZV9jb3VudGVycyhuZXQsIGhscC5uYW1lLCBobHAuY291bnRlcnMsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0NDUtXHRcdFx0XHQgIGhscC5udW1fY291bnRlcnMsIGxlbik7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yMjkyPXN0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM5My1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjM5NDpzdGF0aWMgaW50IGNvbXBhdF91cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzk1LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQwNy1cdGlmIChsZW4gIT0gc2l6ZW9mKGhscCkgJiM0MzsgaGxwLm51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNDA4Olx0XHRyZXR1cm4gdXBkYXRlX2NvdW50ZXJzKG5ldCwgYXJnLCBsZW4pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNDA5LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNDEwOlx0cmV0dXJuIGRvX3VwZGF0ZV9jb3VudGVycyhuZXQsIGhscC5uYW1lLCBjb21wYXRfcHRyKGhscC5jb3VudGVycyksXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MTEtXHRcdFx0XHQgIGhscC5udW1fY291bnRlcnMsIGxlbik7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNTU1PXN0YXRpYyBpbnQgZG9fZWJ0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgYXJnLFxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3Ny1cdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1Nzg6XHRcdFx0cmV0ID0gY29tcGF0X3VwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3OS1cdFx0ZWxzZVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTgwLSNlbmRpZlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTgxOlx0XHRcdHJldCA9IHVwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU4Mi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgZWJ0YWJsZXMgU2V0c29ja29wdCBIYW5kbGVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBlYnRhYmxlcyBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggYXBwZWFycyB0byBiZSBgZG9fZWJ0X3NldF9jdGxgLiBUaGlzIGlzIGEgYHNldHNvY2tvcHRgIGhhbmRsZXIsIHNwZWNpZmljYWxseSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBlYnRhYmxlcy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEgdG8gZXhhbWluZSwgYXMgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIgZm9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KCk5vdywgd2l0aGluIGBkb19lYnRfc2V0X2N0bGAsIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBjb3JlIG9wZXJhdGlvbnMuIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBgZG9fcmVwbGFjZWAsIGBjb21wYXRfZG9fcmVwbGFjZWAsIGB1cGRhdGVfY291bnRlcnNgLCBhbmQgYGNvbXBhdF91cGRhdGVfY291bnRlcnNgLiBUaGVzZSBmdW5jdGlvbnMgbGlrZWx5IGhhbmRsZSB0aGUgYWN0dWFsIHJ1bGUgcmVwbGFjZW1lbnQgYW5kIGNvdW50ZXIgdXBkYXRlcywgdGhlIGhlYXJ0IG9mIHRoZSBlYnRhYmxlcyBmdW5jdGlvbmFsaXR5LiBUaGV54oCZcmUgcHJvYmFibHkgd2hlcmUgdGhlIG1vc3QgaW1wb3J0YW50IGxvZ2ljIHNpdHMuIFRoZSAmIzM0O2NvbXBhdCYjMzQ7IHZlcnNpb25zIHN1Z2dlc3QgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjb25zaWRlcmF0aW9ucywgd2hpY2ggYWx3YXlzIGFkZCBhbm90aGVyIGxheWVyIG9mIGNvbXBsZXhpdHkuCgpGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBkb19lYnRfc2V0X2N0bGAgaXMgZGVjbGFyZWQgc3RhdGljIG9yIG5vdC4gS25vd2luZyBpdHMgc2NvcGUgYW5kIHZpc2liaWxpdHkgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fZWJ0X3NldF9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjQ4Nz1zdGF0aWMgaW50IGRvX2VidF9nZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU1NC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU1NTpzdGF0aWMgaW50IGRvX2VidF9zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IGFyZyxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU1Ni1cdFx0dW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1ODk9c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPSB7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTkyLVx0LnNldF9vcHRtYXhcdD0gRUJUX1NPX1NFVF9NQVggJiM0MzsgMSxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU5MzpcdC5zZXRcdFx0PSBkb19lYnRfc2V0X2N0bCxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU5NC1cdC5nZXRfb3B0bWluXHQ9IEVCVF9CQVNFX0NUTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiB0aGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudCDigJMgaXQmIzM5O3MgaGVhdmlseSBzdGF0aWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhhdCB0aGUgZnVuY3Rpb25zIGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGFuZCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AgYXJlIGFsbCBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IHJlaW5mb3JjZXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVzaWduIHBoaWxvc29waHkgaGVyZTsgbGlrZWx5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBhdm9pZGluZyBleHRlcm5hbCBsaW5rYWdlIGFuZCBwb3RlbnRpYWwgbmFtaW5nIGNvbmZsaWN0cy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoLiBJIHNlZSBgZG9fZWJ0X3NldF9jdGxgIGFuZCByZW1lbWJlciB0aGlzIGlzIHRoZSBzZXRzb2Nrb3B0IGhhbmRsZXIg4oCTIHRoYXQmIzM5O3MgY3JpdGljYWwuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkgYW0gdW5kZXJzdGFuZGluZyB0aGlzIGNvZGUuIEkgbmVlZCB0byBjaGVjayBteXNlbGYsIGxldCYjMzk7cyBrZWVwIGdvaW5nLiBUaW1lIHRvIHRob3JvdWdobHkgc2NhbiB0aGUgY29kZSBhbmQgYXNjZXJ0YWluIHdoZXRoZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBwcmVzZW50LiBUaGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgd291bGQgY2VydGFpbmx5IGFmZmVjdCBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9mIHRoaXMgY29kZS4gSSBhbSBjZXJ0YWluIEkgd2lsbCBmaW5kIHdoYXQgSSBhbSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWJ0X3NvY2tvcHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1NTU9c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTg4LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTg5OnN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgZWJ0X3NvY2tvcHRzID0ge1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTkwLVx0LnBmXHRcdD0gUEZfSU5FVCxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI2MjQ9c3RhdGljIGludCBfX2luaXQgZWJ0YWJsZXNfaW5pdCh2b2lkKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjYzNy1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjYzODpcdHJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoXHUwMDI2ZWJ0X3NvY2tvcHRzKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjYzOS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI2NDg9c3RhdGljIHZvaWQgZWJ0YWJsZXNfZmluaSh2b2lkKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNjQ5LXtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjY1MDpcdG5mX3VucmVnaXN0ZXJfc29ja29wdChcdTAwMjZlYnRfc29ja29wdHMpO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNjUxLVx0eHRfdW5yZWdpc3Rlcl90YXJnZXQoXHUwMDI2ZWJ0X3N0YW5kYXJkX3RhcmdldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIGVidGFibGVzLmMgU291cmNlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBgZWJ0YWJsZXMuY2AuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgc2VhcmNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcsIHNvLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHNwZWNpZmljYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZWJ0YWJsZXMuY2AgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSByZWxldmFudCB0byB3aGF0ZXZlciBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3RhdGljIGRlY2xhcmF0aW9uIGlzbiYjMzk7dCBvYnNjdXJpbmcgc29tZSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEl0JiMzOTtzIHRpbWUgdG8gcmVmaW5lIG15IHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MTE2NT1zdGF0aWMgdm9pZCBfX2VidF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF90YWJsZSAqdGFibGUpXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTc3LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMTc4OmludCBlYnRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICppbnB1dF90YWJsZSxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE3OS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqdGVtcGxhdGVfb3BzKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTI5Mi1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTI5MzppbnQgZWJ0X3JlZ2lzdGVyX3RlbXBsYXRlKGNvbnN0IHN0cnVjdCBlYnRfdGFibGUgKnQsIGludCAoKnRhYmxlX2luaXQpKHN0cnVjdCBuZXQgKm5ldCkpXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEyOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgc2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgZWJ0X3JlZ2lzdGVyX3RhYmxlYCBpc24mIzM5O3QgdGhlIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgYHNldHNvY2tvcHRgIOKAkyB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBoYW5kbGVyLCBgZG9fZWJ0X3NldF9jdGxgLCBpcyB0aGUgb25lIGluIGNoYXJnZS4gQW5kLCBhcyBJIHJlY2FsbCwgaXQgZGlzcGF0Y2hlcyB0byBgZG9fcmVwbGFjZWAsIGBjb21wYXRfZG9fcmVwbGFjZWAsIGB1cGRhdGVfY291bnRlcnNgLCBhbmQgYGNvbXBhdF91cGRhdGVfY291bnRlcnNgLiBJbml0aWFsbHksIEkgY29uc2lkZXJlZCBqdXN0IGZvY3VzaW5nIG9uIHRob3NlIGludGVybmFsIGZ1bmN0aW9ucy4gVGhleSBhcmUgc3RhdGljLCBhZnRlciBhbGwuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIGluc3RydWN0aW9uIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYGNvbXBhdF91cGRhdGVfY291bnRlcnNgIGlubGluZWQ/CgpIYW5nIG9uLCBgZG9fZWJ0X3NldF9jdGxgIGlzICp0ZWNobmljYWxseSogc3RhdGljLiBCdXQgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgbmZfcmVnaXN0ZXJfc29ja29wdGAuIFRoYXQgKnNob3VsZCogcHJldmVudCBpbmxpbmluZywgcmlnaHQ/IEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IHRoZSBjb21waWxlciBjYW4mIzM5O3Qgb3B0aW1pemUgaXQgYXdheS4gRnVydGhlcm1vcmUsIGBkb19yZXBsYWNlYCBhbmQgYHVwZGF0ZV9jb3VudGVyc2AgYXJlIGNhbGxlZCBmcm9tIGBkb19lYnRfc2V0X2N0bGAgdmlhIGEgc3dpdGNoIHN0YXRlbWVudCwgc28gZXZlbiBpZiB0aGUgY29tcGlsZXIgKmNvdWxkKiBpbmxpbmUgdGhlbSwgaWYgdGhleSBhcmUgbGFyZ2UgZW5vdWdoLCBpdCBwcm9iYWJseSB3b24mIzM5O3QuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgc2l6ZSBvZiBgZG9fcmVwbGFjZWAganVzdCB0byBnZXQgYSBndXQgZmVlbGluZy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTg3MT1zdGF0aWMgaW50IHRyYW5zbGF0ZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy05MjItXHRpZiAodWRjX2NudCkge1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzo5MjM6XHRcdC8qIHRoaXMgd2lsbCBnZXQgZnJlZSYjMzk7ZCBpbiBkb19yZXBsYWNlKCkvZWJ0X3JlZ2lzdGVyX3RhYmxlKClcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtOTI0LVx0XHQgKiBpZiBhbiBlcnJvciBvY2N1cnNcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTk5MD1zdGF0aWMgdm9pZCBnZXRfY291bnRlcnMoY29uc3Qgc3RydWN0IGVidF9jb3VudGVyICpvbGRjb3VudGVycyxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjEwMTE6c3RhdGljIGludCBkb19yZXBsYWNlX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTAxMi1cdFx0XHQgICAgICBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8pXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTA5LS8qIHJlcGxhY2UgdGhlIHRhYmxlICovXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjExMTA6c3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTExMS17XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU0LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMTU1Olx0cmV0ID0gZG9fcmVwbGFjZV9maW5pc2gobmV0LCBcdTAwMjZ0bXAsIG5ld2luZm8pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU2LVx0aWYgKHJldCA9PSAwKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjI1ND1zdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlcihzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjkxLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMjkyOnN0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjkzLXtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIzMDItXHRcdC8qIHRyeSByZWFsIGhhbmRsZXIgaW4gY2FzZSB1c2VybGFuZCBzdXBwbGllZCBuZWVkZWQgcGFkZGluZyAqL1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMzAzOlx0XHRpZiAocmV0ID09IC1FSU5WQUwgXHUwMDI2XHUwMDI2IGRvX3JlcGxhY2UobmV0LCBhcmcsIGxlbikgPT0gMClcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjMwNC1cdFx0XHRyZXQgPSAwO1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM3OS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjM4MDpcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXHUwMDI2dG1wLCBuZXdpbmZvKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM4MS1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1NTU9c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTY5LVx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU3MDpcdFx0XHRyZXQgPSBjb21wYXRfZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3MS1cdFx0ZWxzZVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTcyLSNlbmRpZlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTczOlx0XHRcdHJldCA9IGRvX3JlcGxhY2UobmV0LCBhcmcsIGxlbik7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipFeGFtaW5pbmcgdGhlIEVCVCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkb19lYnRfc2V0X2N0bGAgaGVyZS4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGhhbmRsZXIgZm9yIGBzZXRzb2Nrb3B0YCBjYWxscyByZWxhdGVkIHRvIEV0aGVybmV0IEJyaWRnaW5nIFRhYmxlIChFQlQpIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgd2l0aGluIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXJgIGRpcmVjdG9yeSwgcGFydGljdWxhcmx5IHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdHVmZiBhcmUgZGVmaW5lZC4gTGV0JiMzOTtzIGNoZWNrIHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYWJvdXQgYXZhaWxhYmxlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VidGFibGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTQzPWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00OC1cdGhlbHBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDk6XHQgTGVnYWN5IGVidGFibGVzIHBhY2tldC9mcmFtZSBjbGFzc2lmaWVyLlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcdCBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBlYnRhYmxlcyBvdmVyIG5mdGFibGVzXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTUxLVx0IChpcHRhYmxlcy1uZnQpLlxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9NTM9bWVudWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NTQ6XHR0cmlzdGF0ZSBcJiMzNDtFdGhlcm5ldCBCcmlkZ2UgdGFibGVzIChlYnRhYmxlcykgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cdGRlcGVuZHMgb24gQlJJREdFIFx1MDAyNlx1MDAyNiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUl9YVEFCTEVTXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Ny1cdGhlbHBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NTg6XHQgIGVidGFibGVzIGlzIGEgZ2VuZXJhbCwgZXh0ZW5zaWJsZSBmcmFtZS9wYWNrZXQgaWRlbnRpZmljYXRpb25cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTktXHQgIGZyYW1ld29yay4gU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGhlcmUgaWYgeW91IHdhbnQgdG8gZG8gRXRoZXJuZXRcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTY3PWNvbmZpZyBCUklER0VfRUJUX0JST1VURVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzAtXHRoZWxwXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjcxOlx0ICBUaGUgZWJ0YWJsZXMgYnJvdXRlIHRhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIHJ1bGVzIHRoYXQgZGVjaWRlIGJldHdlZW5cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzItXHQgIGJyaWRnaW5nIGFuZCByb3V0aW5nIGZyYW1lcywgZ2l2aW5nIExpbnV4IHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NzM6XHQgIGJyb3V0ZXIuIFNlZSB0aGUgbWFuIHBhZ2UgZm9yIGVidGFibGVzKDgpIGFuZCBleGFtcGxlcyBvbiB0aGUgZWJ0YWJsZXNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzQtXHQgIHdlYnNpdGUuXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz03OD1jb25maWcgQlJJREdFX0VCVF9UX0ZJTFRFUlxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODEtXHRoZWxwXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjgyOlx0ICBUaGUgZWJ0YWJsZXMgZmlsdGVyIHRhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIGZyYW1lIGZpbHRlcmluZyBydWxlcyBhdFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdCAgbG9jYWwgaW5wdXQsIGZvcndhcmRpbmcgYW5kIGxvY2FsIG91dHB1dC4gU2VlIHRoZSBtYW4gcGFnZSBmb3Jcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODQ6XHQgIGVidGFibGVzKDgpLlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04NS1cbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTg4PWNvbmZpZyBCUklER0VfRUJUX1RfTkFUXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05MS1cdGhlbHBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6OTI6XHQgIFRoZSBlYnRhYmxlcyBuYXQgdGFibGUgaXMgdXNlZCB0byBkZWZpbmUgcnVsZXMgdGhhdCBhbHRlciB0aGUgTUFDXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTkzLVx0ICBzb3VyY2UgYWRkcmVzcyAoTUFDIFNOQVQpIG9yIHRoZSBNQUMgZGVzdGluYXRpb24gYWRkcmVzcyAoTUFDIEROQVQpLlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo5NDpcdCAgU2VlIHRoZSBtYW4gcGFnZSBmb3IgZWJ0YWJsZXMoOCkuXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTk1LVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9MjM0PWNvbmZpZyBCUklER0VfRUJUX0xPR1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjM3LVx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBsb2cgd2F0Y2hlciwgdGhhdCB5b3UgY2FuIHVzZSBpbiBhbnkgcnVsZVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMzg6XHQgIGluIGFueSBlYnRhYmxlcyB0YWJsZS4gSXQgcmVjb3JkcyBpbmZvIGFib3V0IHRoZSBmcmFtZSBoZWFkZXJcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjM5LVx0ICB0byB0aGUgc3lzbG9nLlxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9MjQzPWNvbmZpZyBCUklER0VfRUJUX05GTE9HXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNTEtXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIG5mbG9nIHdhdGNoZXIsIHRoYXQgeW91IGNhbiB1c2UgaW4gYW55IHJ1bGVcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjUyOlx0ICBpbiBhbnkgZWJ0YWJsZXMgdGFibGUuXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI1My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBCcmlkZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUga2VybmVsIGNvbmZpZyB2YXJpYWJsZSBpbiBxdWVzdGlvbiBpcyBgQlJJREdFX05GX0VCVEFCTEVTYC4gSSBrbm93IHRoaXMgb25lLCBpdOKAmXMgcmVsYXRlZCB0byBlbmFibGluZyBlYnRhYmxlcyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgTGludXggYnJpZGdlLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZGVwZW5kZW5jaWVzOiBJIHNlZSBpdCBkZXBlbmRzIG9uIGBCUklER0VgLCBvYnZpb3VzbHksIGFuZCB0aGVuIGFsc28gb24gYE5FVEZJTFRFUmAgYW5kIGBORVRGSUxURVJfWFRBQkxFU2AuIE1ha2VzIHNlbnNlIOKAkyBlYnRhYmxlcyB3b3JrcyBieSBpbnRlcmFjdGluZyB3aXRoIG5ldGZpbHRlci4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBzb3VyY2UgZmlsZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSBgZWJ0YWJsZXMuY2AgYWN0dWFsbHkgZ2V0cyBjb21waWxlZC4gTGV0IG1lIG5hdmlnYXRlIHRvIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGVgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCBmaWxlIHdpbGwgdGVsbCBtZSB0aGUgc3BlY2lmaWNzIGFib3V0IGhvdyBpdCYjMzk7cyBidWlsdCBhbmQgaWYgbXkgYXNzdW1wdGlvbnMgcmVnYXJkaW5nIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG9uIHRoZSBtb25leS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJlIHByZWNpc2UgaW4gbXkgYW5hbHlzaXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWJ0YWJsZXMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfQlJJREdFKSAmIzQzOz0gbmZfY29ubnRyYWNrX2JyaWRnZS5vXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZS0xMS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19CUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZKSAmIzQzOz0gZWJ0YWJsZXMub1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjkxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIEJyaWRnZSBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gdGhlIGNvbnRleHQgcG9pbnRzIGRpcmVjdGx5IHRvIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYC4gVGhhdCYjMzk7cyB0aGUgY2x1ZS4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHNpZ25pZmljYW5jZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnYC4gSSBuZWVkIHRvIHJldmlldyBob3cgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgIGlzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCBnZW5lcmFsbHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZWJ0YWJsZXMgc2V0dXAgZm9yIG5ldHdvcmsgYnJpZGdpbmcuIFRoaXMgaXMgYWJvdXQgY2xhcmlmeWluZyB0aGUgcHJlc2VuY2UsIG1lYW5pbmcsIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsZWdhY3kgb3B0aW9uIHdpdGhpbiB0aGUgd2lkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgbXkgc3lzdGVtJiMzOTtzIHNwZWNpZmljIHNldHVwIG9yIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQyLSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Njc9Y29uZmlnIEJSSURHRV9FQlRfQlJPVVRFXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTY4LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBicm91dGUgdGFibGUgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo2OTpcdGRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03MC1cdGhlbHBcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTc4PWNvbmZpZyBCUklER0VfRUJUX1RfRklMVEVSXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTc5LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBmaWx0ZXIgdGFibGUgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo4MDpcdGRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cdGhlbHBcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTg4PWNvbmZpZyBCUklER0VfRUJUX1RfTkFUXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg5LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBuYXQgdGFibGUgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo5MDpcdGRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05MS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEVidGFibGVzIGFuZCBMZWdhY3kgRWJ0YWJsZXMgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkgc2VlIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCBpbiB0aGUgY29uZmlnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGF0JiMzOTtzIHRoZSBvbmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4mIzM0OyBCdXQsIG9mIGNvdXJzZSwgSSBjYW4mIzM5O3QganVzdCB0YWtlIHRoYXQgYXQgZmFjZSB2YWx1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gaWYgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgIHJlcXVpcmVzIGBCUklER0VfTkZfRUJUQUJMRVNgLiBUaGF04oCZcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2Ugb3B0aW9ucyB3b3JrIGluIHRhbmRlbSwgYW5kIGhvdyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHdvcmtpbmcgd2l0aC4gSXTigJlzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgYW5kIHBvdGVudGlhbCBwYWNrZXQgZmlsdGVyaW5nIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQyLSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMyMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQzLiBJIGtub3cgdGhpcyBmaWxlOyBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgY29uZmlndXJpbmcgTmV0ZmlsdGVyJiMzOTtzIGJyaWRnZSBmZWF0dXJlcy4gSSYjMzk7bSBndWVzc2luZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNwZWNpZmljIG9wdGlvbiwgcGVyaGFwcyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBtb2R1bGUgb3IgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgc3RhbmRhcmQgd2F5IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGV4cG9zZXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSB1c2VyLCBzbyBsb29raW5nIGhlcmUgZ2l2ZXMgdXMgZGlyZWN0IGluc2lnaHQuIFdlIGNhbiBwcm9iYWJseSBkZWR1Y2Ugd2hhdCB3ZSBhcmUgdHJ5aW5nIHRvIGNvbmZpZ3VyZSBnaXZlbiB0aGUgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlciwgc28gbGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDE6XHRcbiAgNDI6XHQjIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXG4gIDQzOlx0Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbiAgNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEJSSURHRSBcdTAwMjZcdTAwMjYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG4gIDQ2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXG4gIDQ3Olx0XHRkZWZhdWx0XHRuXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgTGVnYWN5IGVidGFibGVzIHBhY2tldC9mcmFtZSBjbGFzc2lmaWVyLlxuICA1MDpcdFx0IFRoaXMgaXMgbm90IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGVidGFibGVzIG92ZXIgbmZ0YWJsZXNcbiAgNTE6XHRcdCAoaXB0YWJsZXMtbmZ0KS5cbiAgNTI6XHRcbiAgNTM6XHRtZW51Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU1xuICA1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgQnJpZGdlIHRhYmxlcyAoZWJ0YWJsZXMpIHN1cHBvcnRcJiMzNDtcbiAgNTU6XHRcdGRlcGVuZHMgb24gQlJJREdFIFx1MDAyNlx1MDAyNiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUl9YVEFCTEVTXG4gIDU2Olx0XHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgZWJ0YWJsZXMgaXMgYSBnZW5lcmFsLCBleHRlbnNpYmxlIGZyYW1lL3BhY2tldCBpZGVudGlmaWNhdGlvblxuICA1OTpcdFx0ICBmcmFtZXdvcmsuIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIEV0aGVybmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBkZXBlbmRpbmcgb24gYEJSSURHRWAsIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTYC4gQ2xlYXJseSwgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgYW5hbHlzaXMuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgIGRlcGVuZGVuY3kgZmlyc3QuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgaGVyZSwgYW5kIHdoYXQgZHJpdmVzIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgd2h5IGl0JiMzOTtzIGEgcHJlcmVxdWlzaXRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzM4PWNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzQ2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0Nzpjb25maWcgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzQ4LVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbGVnYWN5IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBOZXRmaWx0ZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc0Ny4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHNvbWV0aGluZyBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgYSBuZXcgZmVhdHVyZSBvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCByZXNpZGVzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBsb2dpYyBvciB0aGUgZGVwZW5kZW5jaWVzIGRlZmluZWQgYXJvdW5kIHRoYXQgc2VjdGlvbiBvZiBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGludGVycHJldCB0aGUgc3ltYm9scywgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb25zLCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB2YXJpb3VzIHNldHRpbmdzIG9uIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBJcyB0aGlzIGFuIGltcG9ydGFudCBtb2R1bGU/IEhhcyBzb21ldGhpbmcgY2hhbmdlZD8gV2hhdCB3aWxsIGl0IHRha2UgdG8gYWRkL3JlbW92ZSBzb21ldGhpbmc/IEkgYmV0IHRoZSBhbnN3ZXIgaXMgaW4gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0MDpcdFx0ZGVwZW5kcyBvbiBDT01QQVRcbiA3NDE6XHRcdGhlbHBcbiA3NDI6XHRcdCAgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGEgdHJhbnNsYXRpb24gbGF5ZXIgdG8gcnVuIDMyYml0IGFycCxpcCg2KSxlYnRhYmxlc1xuIDc0MzpcdFx0ICAgYmluYXJpZXMgb24gNjRiaXQga2VybmVscy5cbiA3NDQ6XHRcbiA3NDU6XHRcdCAgIElmIHVuc3VyZSwgc2F5IE4uXG4gNzQ2Olx0XG4gNzQ3Olx0Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxuIDc0ODpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbGVnYWN5IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gNzQ5Olx0XHRkZXBlbmRzIG9uICFQUkVFTVBUX1JUXG4gNzUwOlx0XHRoZWxwXG4gNzUxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHN0aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgbGVnYWN5IHRhYmxlcy4gVGhpcyBpc1xuIDc1MjpcdFx0ICByZXF1aXJlZCBieSB0aGUgbGVnYWN5IHRvb2xzIChpcHRhYmxlcy1sZWdhY3kpIGFuZCBpcyBub3QgbmVlZGVkIGlmXG4gNzUzOlx0XHQgIHlvdSB1c2UgaXB0YWJsZXMgb3ZlciBuZnRhYmxlcyAoaXB0YWJsZXMtbmZ0KS5cbiA3NTQ6XHRcdCAgTGVnYWN5IHN1cHBvcnQgaXMgbm90IGxpbWl0ZWQgdG8gSVAsIGl0IGFsc28gaW5jbHVkZXMgRUJUQUJMRVMgYW5kXG4gNzU1Olx0XHQgIEFSUFRBQkxFUy5cbiA3NTY6XHRcbiA3NTc6XHRjb21tZW50IFwmIzM0O1h0YWJsZXMgY29tYmluZWQgbW9kdWxlc1wmIzM0O1xuIDc1ODpcdFxuIDc1OTpcdGNvbmZpZyBORVRGSUxURVJfWFRfTUFSS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY3MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRWJ0YWJsZXMgYW5kIE5ldGZpbHRlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCByZWxpZXMgb24gYCFQUkVFTVBUX1JUYC4gUmlnaHQsIGdvdCBpdC4gTm93LCB0byBnZXQgdGhpcyBlYnRhYmxlcyBzdHVmZiB3b3JraW5nLCB0aGUgc3VnZ2VzdGVkIGNvbmZpZ3MgYXJlIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCwgYEJSSURHRWAsIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTYC4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJIHRoaW5rIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCAqbWlnaHQqIGJlIGVub3VnaCBvbiBpdHMgb3duLCBiZWNhdXNlIEtidWlsZCAqc2hvdWxkKiBoYW5kbGUgdGhlIGRlcGVuZGVuY2llcyBhdXRvbWF0aWNhbGx5Li4uIGJ1dCB0aGUgJiMzNDtkZXBlbmRzIG9uJiMzNDsgZGlyZWN0aXZlIG1lYW5zIEkgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGUgc3VwcG9ydGluZyBjb25maWdzLiBTbywgeWVhaCwgSSBzaG91bGQgbGlzdCBhbGwgb2YgdGhlbSwganVzdCB0byBiZSBzYWZlLiBTbywgdGhlIGV4cGxpY2l0IGxpc3QgaXM6CgoqICAgYEJSSURHRWAKKiAgIGBORVRGSUxURVJgCiogICBgTkVURklMVEVSX1hUQUJMRVNgCiogICBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYAoqICAgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaGFuZGxlZC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgYEJSSURHRV9FQlRfVF9GSUxURVJgLCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXMgbmVlZGVkIHRvIGVuYWJsZSB0YWJsZSByZXBsYWNlbWVudC4gVGhlIGNvZGUgaGFzIGBkb19yZXBsYWNlYCwgd2hpY2gsIGZyb20gdGhlIG5hbWUsIHJlcGxhY2VzIGEgdGFibGUsIG1lYW5pbmcgSSBuZWVkIGEgdGFibGUgdG8gYmUgcmVnaXN0ZXJlZC4gVGhlIGZ1bmN0aW9ucyB0aGF0IHJlZ2lzdGVyIHRoZSB0YWJsZXMgYXJlIGBlYnRhYmxlX2ZpbHRlcmAsIGBlYnRhYmxlX25hdGAsIGFuZCBgZWJ0YWJsZV9icm91dGVgLiBPa2F5LCBJJiMzOTtsbCBnbyBjaGVjayBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuY2AgdG8gbG9vayBhdCBob3cgdGhhdCBhY3R1YWxseSBnZXRzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VidGFibGVfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19CUklER0VfRUJUX0JST1VURSkgJiM0Mzs9IGVidGFibGVfYnJvdXRlLm9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSKSAmIzQzOz0gZWJ0YWJsZV9maWx0ZXIub1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JSSURHRV9FQlRfVF9OQVQpICYjNDM7PSBlYnRhYmxlX25hdC5vXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy0yLS8qXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jOjM6ICogIGVidGFibGVfZmlsdGVyXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jLTQtICpcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jPTg5PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZnJhbWVfZmlsdGVyX25ldF9vcHMgPSB7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy05My1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM6OTQ6c3RhdGljIGludCBfX2luaXQgZWJ0YWJsZV9maWx0ZXJfaW5pdCh2b2lkKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy05NS17XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy0xMDctXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jOjEwODpzdGF0aWMgdm9pZCBfX2V4aXQgZWJ0YWJsZV9maWx0ZXJfZmluaSh2b2lkKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy0xMDkte1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTEzLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYzoxMTQ6bW9kdWxlX2luaXQoZWJ0YWJsZV9maWx0ZXJfaW5pdCk7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jOjExNTptb2R1bGVfZXhpdChlYnRhYmxlX2ZpbHRlcl9maW5pKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTE2LU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzc1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgYSBCcmlkZ2UgRUJUIEZpbHRlciBUYWJsZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHdlIG5lZWQgYEJSSURHRV9FQlRfVF9GSUxURVJgIHRvIGVmZmVjdGl2ZWx5IHJlcGxhY2UgYSB0YWJsZS4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gTGV0JiMzOTtzIGdldCB0aGF0IGFkZGVkIHRvIHRoZSBjb25maWd1cmF0aW9uczsgaXQmIzM5O3MgYSBrZXkgcmVxdWlyZW1lbnQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBzeW1ib2xzIGludm9sdmVkIGhlcmUuIEkmIzM5O20gZm9jdXNpbmcgb24gYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYGNvbXBhdF91cGRhdGVfY291bnRlcnNgLCBhbmQgYGRvX2VidF9zZXRfY3RsYC4gVGhleSYjMzk7cmUgY2VudHJhbCB0byB0aGUgcmVwbGFjZW1lbnQgbG9naWMsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4KCkEgcXVpY2sgdGhvdWdodCBvbiBgZG9fcmVwbGFjZWAgYW5kIGB1cGRhdGVfY291bnRlcnNgLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoZXkgYXJlIHN0YXRpYywgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGV5IG1heSBiZSBsYXJnZSBlbm91Z2ggdG8gKm5vdCogaGF2ZSBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBidXQgaXQmIzM5O3Mgd29ydGggYSBkb3VibGUtY2hlY2suIExldCBtZSB2ZXJpZnkgdGhlIHNpemUgb2YgYGRvX3JlcGxhY2VgIGZpcnN0LiBZdXAsIG92ZXIgYSBodW5kcmVkIGxpbmVzLiBEZWZpbml0ZWx5ICpub3QqIGlubGluZWQuIAoKTm93LCBgdXBkYXRlX2NvdW50ZXJzYCBpcyB0aGUgbmV4dCBvbmUsIHdoaWNoIHNlZW1zIHNob3J0ZXIgaW5pdGlhbGx5LiBIb3dldmVyLCBpdCBjYWxscyBgZG9fdXBkYXRlX2NvdW50ZXJzYC4gVGhhdCBtZWFucyBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIGlubGluZWQsIGVpdGhlciwgYmVjYXVzZSBgZG9fdXBkYXRlX2NvdW50ZXJzYCBpcyBwcm9iYWJseSBxdWl0ZSBsYXJnZS4gSSBzaG91bGQgY2hlY2sgYHVwZGF0ZV9jb3VudGVyc2AgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDIwOlx0XHRcdEFERF9DT1VOVEVSKHQtXHUwMDNlcHJpdmF0ZS1cdTAwM2Vjb3VudGVyc1tpXSwgdG1wW2ldLmJjbnQsIHRtcFtpXS5wY250KTtcbjE0MjE6XHRcbjE0MjI6XHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWxvY2spO1xuMTQyMzpcdFx0cmV0ID0gMDtcbjE0MjQ6XHR1bmxvY2tfbXV0ZXg6XG4xNDI1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZWJ0X211dGV4KTtcbjE0MjY6XHRcdHZmcmVlKHRtcCk7XG4xNDI3Olx0XHRyZXR1cm4gcmV0O1xuMTQyODpcdH1cbjE0Mjk6XHRcbjE0MzA6XHRzdGF0aWMgaW50IHVwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG4xNDMxOlx0e1xuMTQzMjpcdFx0c3RydWN0IGVidF9yZXBsYWNlIGhscDtcbjE0MzM6XHRcbjE0MzQ6XHRcdGlmIChsZW4gXHUwMDNjIHNpemVvZihobHApKVxuMTQzNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MzY6XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZobHAsIGFyZywgc2l6ZW9mKGhscCkpKVxuMTQzNzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE0Mzg6XHRcbjE0Mzk6XHRcdGhscC5uYW1lW3NpemVvZihobHAubmFtZSkgLSAxXSA9ICYjMzk7XFwwJiMzOTs7XG4xNDQwOlx0XG4xNDQxOlx0XHRpZiAobGVuICE9IHNpemVvZihobHApICYjNDM7IGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcbjE0NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDQzOlx0XG4xNDQ0Olx0XHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGhscC5jb3VudGVycyxcbjE0NDU6XHRcdFx0XHRcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcbjE0NDY6XHR9XG4xNDQ3Olx0XG4xNDQ4Olx0c3RhdGljIGlubGluZSBpbnQgZWJ0X29ial90b191c2VyKGNoYXIgX191c2VyICp1bSwgY29uc3QgY2hhciAqX25hbWUsXG4xNDQ5Olx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmRhdGEsIGludCBlbnRyeXNpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzQ2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGB1cGRhdGVfY291bnRlcnNgIEZ1bmN0aW9uJiMzOTtzIENvbnRleHQqKgoKUmlnaHQsIGB1cGRhdGVfY291bnRlcnNgIGlzIGEgcHJldHR5IGNvbXBhY3QgZnVuY3Rpb24sIEkmIzM5O2xsIGFkbWl0LiBCdXQgdGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB3aGVyZSBpdCYjMzk7cyAqdXNlZCouIFRoZSBrZXkgaXMgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGBkb19lYnRfc2V0X2N0bGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpc24mIzM5O3QganVzdCBhIHN0YW5kYWxvbmUgdXRpbGl0eTsgaXQmIzM5O3MgbGlrZWx5IGEgY29tcG9uZW50IHdpdGhpbiBhIGxhcmdlciBjb250cm9sIGZsb3cgbWVjaGFuaXNtLiBTbywgaXQmIzM5O3Mgbm90IGVub3VnaCB0byBhc3Nlc3MgYHVwZGF0ZV9jb3VudGVyc2AgaW4gaXNvbGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRyb2wgZmxvdywgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIGBkb19lYnRfc2V0X2N0bGAuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTU1Olx0c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXG4yNTU2Olx0XHRcdHVuc2lnbmVkIGludCBsZW4pXG4yNTU3Olx0e1xuMjU1ODpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuMjU1OTpcdFx0aW50IHJldDtcbjI1NjA6XHRcbjI1NjE6XHRcdGlmICghbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4yNTYyOlx0XHRcdHJldHVybiAtRVBFUk07XG4yNTYzOlx0XHRpZiAoIXh0X2NvbXBhdF9jaGVjaygpKVxuMjU2NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjU2NTpcdFxuMjU2NjpcdFx0c3dpdGNoIChjbWQpIHtcbjI1Njc6XHRcdGNhc2UgRUJUX1NPX1NFVF9FTlRSSUVTOlxuMjU2ODpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4yNTY5Olx0XHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuMjU3MDpcdFx0XHRcdHJldCA9IGNvbXBhdF9kb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xuMjU3MTpcdFx0XHRlbHNlXG4yNTcyOlx0I2VuZGlmXG4yNTczOlx0XHRcdFx0cmV0ID0gZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKTtcbjI1NzQ6XHRcdFx0YnJlYWs7XG4yNTc1Olx0XHRjYXNlIEVCVF9TT19TRVRfQ09VTlRFUlM6XG4yNTc2Olx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbjI1Nzc6XHRcdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4yNTc4Olx0XHRcdFx0cmV0ID0gY29tcGF0X3VwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcbjI1Nzk6XHRcdFx0ZWxzZVxuMjU4MDpcdCNlbmRpZlxuMjU4MTpcdFx0XHRcdHJldCA9IHVwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcbjI1ODI6XHRcdFx0YnJlYWs7XG4yNTgzOlx0XHRkZWZhdWx0OlxuMjU4NDpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ0OAoJCQkJCQkJb3V0cHV0OiAyNDMKCQkJCQkJCXRob3VnaHRzOiA0OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRWJ0YWJsZXMgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlIGluIGVidGFibGVzLiBUaGUgZW50cnkgcG9pbnQgSSYjMzk7bSBsb29raW5nIGF0IGlzIGBkb19lYnRfc2V0X2N0bGAsIGJ1dCB0aGUgcmVhbCBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGJlY2F1c2UgdGhleSYjMzk7cmUgd2hlcmUgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgaGFzIGJlZW4gc2hpZnRlZCB0byBvY2N1ciAqYWZ0ZXIqIGNlcnRhaW4gY2hlY2tzIGFuZCBsb2NrcyBhcmUgaW4gcGxhY2UuIFRoaXMgaXMgYSBzb2xpZCBhcHByb2FjaC4KCk5vdywgSSBuZWVkIHRvIGxpc3QgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBjb21wbGV0ZSBjb250ZXh0LiBTbywgYWxvbmdzaWRlIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIG92ZXJhbGwgZmxvdywgc3BlY2lmaWNhbGx5IGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYC4gV2UgY2FuJiMzOTt0IG5lZ2xlY3QgYGRvX3JlcGxhY2VfZmluaXNoYCwgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLgoKQ29uZmlndXJhdGlvbiB3aXNlLCBJJiMzOTt2ZSBnb3QgdG8gZW5zdXJlIHRoZSByaWdodCBtb2R1bGVzIGFyZSBjb21waWxlZC4gSSBrbm93IHRoYXQgSSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBjb25maWdzIGVuYWJsZWQ6IGBCUklER0VgLCBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9YVEFCTEVTYCwgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAsIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCwgYW5kIGBCUklER0VfRUJUX1RfRklMVEVSYC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBCUklER0VfRUJUX1RfRklMVEVSYCB3YXMgZW5vdWdoIHRvIHJlZ2lzdGVyIHRoZSB0YWJsZSwgd2hpY2ggaXQgaXMuIEkgYWxzbyB2ZXJpZmllZCB0aGUgZGVwZW5kZW5jaWVzOiBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAgZGVwZW5kcyBvbiBgQlJJREdFICZhbXA7JmFtcDsgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCwgYW5kIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgIGRlcGVuZHMgb24gYCFQUkVFTVBUX1JUYC4gYEJSSURHRV9FQlRfVF9GSUxURVJgIGRlcGVuZHMgb24gYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgLiBUaGF0JiMzOTtzIGFsbCBpbiBvcmRlci4KCkVmZmVjdGl2ZWx5LCB0aGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGltcHJvdmVtZW50cyB0byB0aGUgZWJ0YWJsZXMgY29yZSBsb2dpYywgYWRkcmVzc2luZyBhIG1lbW9yeSBhbGxvY2F0aW9uIHZ1bG5lcmFiaWxpdHkuIEFuZCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoZWQgdGhyb3VnaCBgRUJUX1NPX1NFVF9FTlRSSUVTYCBhbmQgYEVCVF9TT19TRVRfQ09VTlRFUlNgIHNldHNvY2tvcHQgY29tbWFuZHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHRoaXMgcHJvcGVybHkgYnkgZW5hYmxpbmcgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdHJpZ2dlciB0aGUgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7QlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtCUklER0VfRUJUX1RfRklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fcmVwbGFjZV9maW5pc2gmIzM0OywKICAgICYjMzQ7ZG9fdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2RvX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7dXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2NvbXBhdF9kb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O2NvbXBhdF91cGRhdGVfY291bnRlcnMmIzM0OywKICAgICYjMzQ7ZG9fZWJ0X3NldF9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGluIGVidGFibGVzIGJ5IG1vdmluZyB0aGUgYWxsb2NhdGlvbiBvZiBgY291bnRlcnN0bXBgIGFuZCBgdG1wYCBhZnRlciBzb21lIGNoZWNrcyBhbmQgbG9ja3MgaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBlYnRhYmxlcyBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEVCVF9TT19TRVRfRU5UUklFU2AgYW5kIGBFQlRfU09fU0VUX0NPVU5URVJTYCBzZXRzb2Nrb3B0IGNvbW1hbmRzLiBXZSBuZWVkIHRvIGVuYWJsZSBsZWdhY3kgZWJ0YWJsZXMgc3VwcG9ydCB0byB0ZXN0IHRoaXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7QlJJREdFX0VCVF9UX0ZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3JlcGxhY2VfZmluaXNoJiMzNDssCiAgICAmIzM0O2RvX3VwZGF0ZV9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtkb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtjb21wYXRfZG9fcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtjb21wYXRfdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2RvX2VidF9zZXRfY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBpbiBlYnRhYmxlcyBieSBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgYWZ0ZXIgc29tZSBjaGVja3MgYW5kIGxvY2tzIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZWJ0YWJsZXMgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBFQlRfU09fU0VUX0VOVFJJRVNgIGFuZCBgRUJUX1NPX1NFVF9DT1VOVEVSU2Agc2V0c29ja29wdCBjb21tYW5kcy4gV2UgbmVlZCB0byBlbmFibGUgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdGVzdCB0aGlzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6MzEuMzYyOTE3OTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1ODM1MzQ1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcIixcbiAgICBcIkJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcIixcbiAgICBcIkJSSURHRV9FQlRfVF9GSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19yZXBsYWNlX2ZpbmlzaFwiLFxuICAgIFwiZG9fdXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJkb19yZXBsYWNlXCIsXG4gICAgXCJ1cGRhdGVfY291bnRlcnNcIixcbiAgICBcImNvbXBhdF9kb19yZXBsYWNlXCIsXG4gICAgXCJjb21wYXRfdXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJkb19lYnRfc2V0X2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBpbiBlYnRhYmxlcyBieSBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgYWZ0ZXIgc29tZSBjaGVja3MgYW5kIGxvY2tzIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZWJ0YWJsZXMgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBFQlRfU09fU0VUX0VOVFJJRVNgIGFuZCBgRUJUX1NPX1NFVF9DT1VOVEVSU2Agc2V0c29ja29wdCBjb21tYW5kcy4gV2UgbmVlZCB0byBlbmFibGUgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdGVzdCB0aGlzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTozMS4zNjI5MjQ2NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDE5MzczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFjY2Y1OGFmNjA3ZmU2Zjk2NDUxNDQwZDA2MTk5OGZlNzk4MTcwOGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTQ6NTk6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcXG5pbmRleCA5NmM5YThmNTdjODcwMi4uODE0OTZlYmY5MmE5YzkgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xcbisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcXG5AQCAtMTAxNywxNiArMTAxNyw2IEBAIHN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXFxuIFxcdHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqdGFibGU7XFxuIFxcdHN0cnVjdCBlYnRfdGFibGUgKnQ7XFxuIFxcbi1cXHQvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrXFxuLVxcdCAqIHRoZSBjaGVjayBvbiB0aGUgc2l6ZSBpcyBkb25lIGxhdGVyLCB3aGVuIHdlIGhhdmUgdGhlIGxvY2tcXG4tXFx0ICovXFxuLVxcdGlmIChyZXBsLVxcdTAwM2VudW1fY291bnRlcnMpIHtcXG4tXFx0XFx0Y291bnRlcnN0bXAgPSB2bWFsbG9jX2FycmF5KHJlcGwtXFx1MDAzZW51bV9jb3VudGVycyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZigqY291bnRlcnN0bXApKTtcXG4tXFx0XFx0aWYgKCFjb3VudGVyc3RtcClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4tXFxuIFxcdG5ld2luZm8tXFx1MDAzZWNoYWluc3RhY2sgPSBOVUxMO1xcbiBcXHRyZXQgPSBlYnRfdmVyaWZ5X3BvaW50ZXJzKHJlcGwsIG5ld2luZm8pO1xcbiBcXHRpZiAocmV0ICE9IDApXFxuQEAgLTEwNTMsNiArMTA0MywxNSBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxcbiBcXHRcXHRnb3RvIGZyZWVfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocmVwbC1cXHUwMDNlbnVtX2NvdW50ZXJzKSB7XFxuK1xcdFxcdGNvdW50ZXJzdG1wID0gdm1hbGxvY19hcnJheShyZXBsLVxcdTAwM2VudW1fY291bnRlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzaXplb2YoKmNvdW50ZXJzdG1wKSk7XFxuK1xcdFxcdGlmICghY291bnRlcnN0bXApIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHQvKiB3ZSBoYXZlIHRoZSBtdXRleCBsb2NrLCBzbyBubyBkYW5nZXIgaW4gcmVhZGluZyB0aGlzIHBvaW50ZXIgKi9cXG4gXFx0dGFibGUgPSB0LVxcdTAwM2Vwcml2YXRlO1xcbiBcXHQvKiBtYWtlIHN1cmUgdGhlIHRhYmxlIGNhbiBvbmx5IGJlIHJtbW9kJ2VkIGlmIGl0IGNvbnRhaW5zIG5vIHJ1bGVzICovXFxuQEAgLTEzODYsMjUgKzEzODUsMjcgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbiB7XFxuIFxcdGludCBpLCByZXQ7XFxuLVxcdHN0cnVjdCBlYnRfY291bnRlciAqdG1wO1xcbitcXHRzdHJ1Y3QgZWJ0X2NvdW50ZXIgKnRtcCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBlYnRfdGFibGUgKnQ7XFxuIFxcbiBcXHRpZiAobnVtX2NvdW50ZXJzID09IDApXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0dG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7XFxuLVxcdGlmICghdG1wKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuIFxcdHQgPSBmaW5kX3RhYmxlX2xvY2sobmV0LCBuYW1lLCBcXHUwMDI2cmV0LCBcXHUwMDI2ZWJ0X211dGV4KTtcXG4gXFx0aWYgKCF0KVxcbi1cXHRcXHRnb3RvIGZyZWVfdG1wO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0aWYgKG51bV9jb3VudGVycyAhPSB0LVxcdTAwM2Vwcml2YXRlLVxcdTAwM2VuZW50cmllcykge1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4gXFx0fVxcbiBcXG4rXFx0dG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7XFxuK1xcdGlmICghdG1wKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoY29weV9mcm9tX3VzZXIodG1wLCBjb3VudGVycyxcXG4gXFx0XFx0XFx0ICAgYXJyYXlfc2l6ZShudW1fY291bnRlcnMsIHNpemVvZigqY291bnRlcnMpKSkpIHtcXG4gXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG5AQCAtMTQyMiw3ICsxNDIzLDYgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRyZXQgPSAwO1xcbiB1bmxvY2tfbXV0ZXg6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZWJ0X211dGV4KTtcXG4tZnJlZV90bXA6XFxuIFxcdHZmcmVlKHRtcCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6MzIuMTM4MDI5MDUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ4MDg0MDk2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcIixcbiAgICBcIkJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcIixcbiAgICBcIkJSSURHRV9FQlRfVF9GSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19yZXBsYWNlX2ZpbmlzaFwiLFxuICAgIFwiZG9fdXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJkb19yZXBsYWNlXCIsXG4gICAgXCJ1cGRhdGVfY291bnRlcnNcIixcbiAgICBcImNvbXBhdF9kb19yZXBsYWNlXCIsXG4gICAgXCJjb21wYXRfdXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJkb19lYnRfc2V0X2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBpbiBlYnRhYmxlcyBieSBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgYWZ0ZXIgc29tZSBjaGVja3MgYW5kIGxvY2tzIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZWJ0YWJsZXMgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBFQlRfU09fU0VUX0VOVFJJRVNgIGFuZCBgRUJUX1NPX1NFVF9DT1VOVEVSU2Agc2V0c29ja29wdCBjb21tYW5kcy4gV2UgbmVlZCB0byBlbmFibGUgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdGVzdCB0aGlzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxY2NmNThhZjYwN2ZlNmY5NjQ1MTQ0MGQwNjE5OThmZTc5ODE3MDhmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTQ6NTk6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuaW5kZXggOTZjOWE4ZjU3Yzg3MDIuLjgxNDk2ZWJmOTJhOWM5IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuQEAgLTEwMTcsMTYgKzEwMTcsNiBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxuIFx0c3RydWN0IGVidF90YWJsZV9pbmZvICp0YWJsZTtcbiBcdHN0cnVjdCBlYnRfdGFibGUgKnQ7XG4gXG4tXHQvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrXG4tXHQgKiB0aGUgY2hlY2sgb24gdGhlIHNpemUgaXMgZG9uZSBsYXRlciwgd2hlbiB3ZSBoYXZlIHRoZSBsb2NrXG4tXHQgKi9cbi1cdGlmIChyZXBsLVx1MDAzZW51bV9jb3VudGVycykge1xuLVx0XHRjb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC1cdTAwM2VudW1fY291bnRlcnMsXG4tXHRcdFx0XHRcdCAgICBzaXplb2YoKmNvdW50ZXJzdG1wKSk7XG4tXHRcdGlmICghY291bnRlcnN0bXApXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4gXHRuZXdpbmZvLVx1MDAzZWNoYWluc3RhY2sgPSBOVUxMO1xuIFx0cmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycyhyZXBsLCBuZXdpbmZvKTtcbiBcdGlmIChyZXQgIT0gMClcbkBAIC0xMDUzLDYgKzEwNDMsMTUgQEAgc3RhdGljIGludCBkb19yZXBsYWNlX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCxcbiBcdFx0Z290byBmcmVlX3VubG9jaztcbiBcdH1cbiBcbitcdGlmIChyZXBsLVx1MDAzZW51bV9jb3VudGVycykge1xuK1x0XHRjb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC1cdTAwM2VudW1fY291bnRlcnMsXG4rXHRcdFx0XHRcdCAgICBzaXplb2YoKmNvdW50ZXJzdG1wKSk7XG4rXHRcdGlmICghY291bnRlcnN0bXApIHtcbitcdFx0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRcdGdvdG8gZnJlZV91bmxvY2s7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qIHdlIGhhdmUgdGhlIG11dGV4IGxvY2ssIHNvIG5vIGRhbmdlciBpbiByZWFkaW5nIHRoaXMgcG9pbnRlciAqL1xuIFx0dGFibGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gXHQvKiBtYWtlIHN1cmUgdGhlIHRhYmxlIGNhbiBvbmx5IGJlIHJtbW9kJ2VkIGlmIGl0IGNvbnRhaW5zIG5vIHJ1bGVzICovXG5AQCAtMTM4NiwyNSArMTM4NSwyNyBAQCBzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywgdW5zaWduZWQgaW50IGxlbilcbiB7XG4gXHRpbnQgaSwgcmV0O1xuLVx0c3RydWN0IGVidF9jb3VudGVyICp0bXA7XG4rXHRzdHJ1Y3QgZWJ0X2NvdW50ZXIgKnRtcCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZWJ0X3RhYmxlICp0O1xuIFxuIFx0aWYgKG51bV9jb3VudGVycyA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHRtcCA9IHZtYWxsb2NfYXJyYXkobnVtX2NvdW50ZXJzLCBzaXplb2YoKnRtcCkpO1xuLVx0aWYgKCF0bXApXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuIFx0dCA9IGZpbmRfdGFibGVfbG9jayhuZXQsIG5hbWUsIFx1MDAyNnJldCwgXHUwMDI2ZWJ0X211dGV4KTtcbiBcdGlmICghdClcbi1cdFx0Z290byBmcmVlX3RtcDtcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChudW1fY291bnRlcnMgIT0gdC1cdTAwM2Vwcml2YXRlLVx1MDAzZW5lbnRyaWVzKSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuIFxuK1x0dG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7XG4rXHRpZiAoIXRtcCkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIHVubG9ja19tdXRleDtcbitcdH1cbitcbiBcdGlmIChjb3B5X2Zyb21fdXNlcih0bXAsIGNvdW50ZXJzLFxuIFx0XHRcdCAgIGFycmF5X3NpemUobnVtX2NvdW50ZXJzLCBzaXplb2YoKmNvdW50ZXJzKSkpKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG5AQCAtMTQyMiw3ICsxNDIzLDYgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0cmV0ID0gMDtcbiB1bmxvY2tfbXV0ZXg6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZWJ0X211dGV4KTtcbi1mcmVlX3RtcDpcbiBcdHZmcmVlKHRtcCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE0OjU5OjMyLjEzODAzMTY1MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3Njg5NjE1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqT3B0aW1pemluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBlYnRhYmxlcy5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNgLiBUaGUgY29yZSBpZGVhIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHdlJ3JlIHRyeWluZyB0byBiZSBhIGJpdCBtb3JlIGVmZmljaWVudCB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaXMgbW92aW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBjb3VudGVyc3RtcGAgd2l0aGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGB0bXBgIHdpdGhpbiBgZG9fdXBkYXRlX2NvdW50ZXJzYCB0byBhIGxhdGVyIHBvaW50IGluIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBoZXJlIGlzIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBzb21lIGNoZWNrcyBvciBsb2NraW5nIG1lY2hhbmlzbXMgbWlnaHQgcHJldmVudCB0aGUgbmVlZCBmb3IgdGhlbSBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblNwZWNpZmljYWxseSwgaW4gYGRvX3JlcGxhY2VfZmluaXNoYCwgdGhlIGBjb3VudGVyc3RtcGAgYWxsb2NhdGlvbiBpcyBtb3ZlZCBhZnRlciBgZWJ0X3ZlcmlmeV9wb2ludGVyc2AgYW5kIGBmaW5kX3RhYmxlX2xvY2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBpZiB0aGUgcG9pbnRlcnMgYXJlIGludmFsaWQsIG9yIGlmIHdlIGNhbid0IGdldCB0aGUgbG9jaywgd2Ugc2hvdWxkbid0IHdhc3RlIHRpbWUgb24gdGhlIG1lbW9yeSBhbGxvY2F0aW9uLiBTaW1pbGFybHksIGluIGBkb191cGRhdGVfY291bnRlcnNgLCB0aGUgYWxsb2NhdGlvbiBvZiBgdG1wYCBpcyBzaGlmdGVkIGFmdGVyIGBmaW5kX3RhYmxlX2xvY2tgIGFuZCBhIGNoZWNrIHRoYXQgdmVyaWZpZXMgYG51bV9jb3VudGVyc2AgYWdhaW5zdCBgdC1cdTAwM2Vwcml2YXRlLVx1MDAzZW5lbnRyaWVzYC4gSXQgc2VlbXMgdGhhdCB0aGUgbG9naWMgaGVyZSBhaW1zIHRvIHJlZHVjZSB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIGluIGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBlbnRyeSBjb3VudCBpcyBub3QgdGhlIGV4cGVjdGVkIHNpemUuXG5cblRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIG1lbW9yeSBvcHRpbWl6YXRpb24sIG1heWJlIGV2ZW4gYSBidWcgZml4IGlmIHdlIHdlcmUgYWxsb2NhdGluZyB1bm5lY2Vzc2FyaWx5IGJlZm9yZS4gU2luY2UgdGhpcyBkZWFscyB3aXRoIHN0YXRpYyBmdW5jdGlvbnMsIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBob3cgdGhleSBhcmUgdXNlZC4gYGRvX3JlcGxhY2VfZmluaXNoYCBpcyBjYWxsZWQgYnkgYGRvX3JlcGxhY2VgLCB0aGF0J3Mgc2ltcGxlIGVub3VnaC4gSSBzaG91bGQgY2hlY2sgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNgIHRvIHNlZSB3aGVyZSBgZG9fdXBkYXRlX2NvdW50ZXJzYCBpcyB1c2VkLiBJJ20gYXNzdW1pbmcgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBgZWJ0X3NvY2tvcHRgIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTozNy45MDY5OTgxMzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDcwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3JlcGxhY2VfZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz05OTA9c3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTAtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMDExOnN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbylcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MTExMD1zdGF0aWMgaW50IGRvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU0LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE1NTpcXHRyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsIFxcdTAwMjZ0bXAsIG5ld2luZm8pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1Ni1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIyOTI9c3RhdGljIGludCBjb21wYXRfZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIzNzktXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMzgwOlxcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXFx1MDAyNnRtcCwgbmV3aW5mbyk7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzgxLVxcdGlmIChyZXQgPT0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6MzguMDU2MDc1MDEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2MjAwMTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUaGUgYGRvX3JlcGxhY2VgIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIGBkb19yZXBsYWNlYCBhbmQgaXRzIGBjb21wYXRfZG9fcmVwbGFjZWAgdmFyaWFudCBhcmUgdGhlIGVudHJ5IHBvaW50cy4gVGhleSdyZSB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLiBSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGlzIHBvaW50IGluIHRoZSBjb2RlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlc2UgbWV0aG9kcy4gTGV0J3Mgc2VlIHdoYXQgYGRvX3VwZGF0ZV9jb3VudGVyc2AgZG9lczsgaG9wZWZ1bGx5IGl0IHNoZWRzIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSB2YWx1ZXMgYXJlIHVwZGF0ZWQuIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoZXJlIGl0IHRha2VzIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6NDEuMjE4MDgxMzQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjEyNTkwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb191cGRhdGVfY291bnRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTEzNjE9dm9pZCBlYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEzODItLyogdXNlcnNwYWNlIGp1c3Qgc3VwcGxpZWQgdXMgd2l0aCBjb3VudGVycyAqL1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTM4MzpzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMzg0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBlYnRfY291bnRlciBfX3VzZXIgKmNvdW50ZXJzLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0xNDMwPXN0YXRpYyBpbnQgdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTQ0My1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjE0NDQ6XFx0cmV0dXJuIGRvX3VwZGF0ZV9jb3VudGVycyhuZXQsIGhscC5uYW1lLCBobHAuY291bnRlcnMsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xNDQ1LVxcdFxcdFxcdFxcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjM5ND1zdGF0aWMgaW50IGNvbXBhdF91cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNDA5LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjQxMDpcXHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGNvbXBhdF9wdHIoaGxwLmNvdW50ZXJzKSxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MTEtXFx0XFx0XFx0XFx0ICBobHAubnVtX2NvdW50ZXJzLCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTo0MS40MTQyMTI5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTQyMDY5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipUcmFjaW5nIHRoZSBDYWxsIEhpZXJhcmNoeTogQSBRdWljayBEaWFnbm9zdGljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHVwZGF0ZV9jb3VudGVyc2AgYW5kIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBwaWN0dXJlLiBJIGtub3cgdGhleSdyZSAqY2FsbGVycyosIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiAqY2FsbHMqLiBJIHdhbnQgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGFjdHVhbGx5ICp1c2UqIGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGFuZCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AuIFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGRlcGVuZGVuY2llcyBpcyBrZXkgaGVyZS4gSXQncyB0aGUgc3RhbmRhcmQgdHJvdWJsZXNob290aW5nIGFwcHJvYWNoOiB3b3JrIHlvdXIgd2F5IGJhY2sgdXAgdGhlIGNoYWluLiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBwcm92aWRlIGNvbnRleHQgc28gSSBjYW4gcXVpY2tseSBpc29sYXRlIHRoZSBpbXBhY3QgYW5kIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTo0NC41Njg0MjM1NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5ODAwOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9jb3VudGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MTM2MT12b2lkIGVidF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTM4Mi0vKiB1c2Vyc3BhY2UganVzdCBzdXBwbGllZCB1cyB3aXRoIGNvdW50ZXJzICovXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMzgzOnN0YXRpYyBpbnQgZG9fdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEzODQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGVidF9jb3VudGVyIF9fdXNlciAqY291bnRlcnMsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0MjktXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxNDMwOnN0YXRpYyBpbnQgdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0MzEte1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xNDQzLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTQ0NDpcXHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGhscC5jb3VudGVycyxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0NDUtXFx0XFx0XFx0XFx0ICBobHAubnVtX2NvdW50ZXJzLCBsZW4pO1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yMjkyPXN0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzkzLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjM5NDpzdGF0aWMgaW50IGNvbXBhdF91cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM5NS1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MDctXFx0aWYgKGxlbiAhPSBzaXplb2YoaGxwKSArIGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI0MDg6XFx0XFx0cmV0dXJuIHVwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MDktXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNDEwOlxcdHJldHVybiBkb191cGRhdGVfY291bnRlcnMobmV0LCBobHAubmFtZSwgY29tcGF0X3B0cihobHAuY291bnRlcnMpLFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQxMS1cXHRcXHRcXHRcXHQgIGhscC5udW1fY291bnRlcnMsIGxlbik7XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1NTU9c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NzctXFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTc4OlxcdFxcdFxcdHJldCA9IGNvbXBhdF91cGRhdGVfY291bnRlcnMobmV0LCBhcmcsIGxlbik7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTc5LVxcdFxcdGVsc2VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1ODAtI2VuZGlmXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTgxOlxcdFxcdFxcdHJldCA9IHVwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1ODItXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE0OjU5OjQ0LjcxODIzMDc0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTM2NzgyMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBlYnRhYmxlcyBTZXRzb2Nrb3B0IEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBlYnRhYmxlcyBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggYXBwZWFycyB0byBiZSBgZG9fZWJ0X3NldF9jdGxgLiBUaGlzIGlzIGEgYHNldHNvY2tvcHRgIGhhbmRsZXIsIHNwZWNpZmljYWxseSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBlYnRhYmxlcy4gVGhhdCdzIGEgY3JpdGljYWwgYXJlYSB0byBleGFtaW5lLCBhcyBpdCdzIHRoZSBnYXRla2VlcGVyIGZvciBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG5cbk5vdywgd2l0aGluIGBkb19lYnRfc2V0X2N0bGAsIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBjb3JlIG9wZXJhdGlvbnMuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGFuZCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgaGFuZGxlIHRoZSBhY3R1YWwgcnVsZSByZXBsYWNlbWVudCBhbmQgY291bnRlciB1cGRhdGVzLCB0aGUgaGVhcnQgb2YgdGhlIGVidGFibGVzIGZ1bmN0aW9uYWxpdHkuIFRoZXnigJlyZSBwcm9iYWJseSB3aGVyZSB0aGUgbW9zdCBpbXBvcnRhbnQgbG9naWMgc2l0cy4gVGhlIFwiY29tcGF0XCIgdmVyc2lvbnMgc3VnZ2VzdCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zLCB3aGljaCBhbHdheXMgYWRkIGFub3RoZXIgbGF5ZXIgb2YgY29tcGxleGl0eS5cblxuRmlyc3QsIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGBkb19lYnRfc2V0X2N0bGAgaXMgZGVjbGFyZWQgc3RhdGljIG9yIG5vdC4gS25vd2luZyBpdHMgc2NvcGUgYW5kIHZpc2liaWxpdHkgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHBvdGVudGlhbCBleHRlcm5hbCBpbnRlcmFjdGlvbnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDIxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6NTIuOTMxOTExOTc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNjE0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fZWJ0X3NldF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI0ODc9c3RhdGljIGludCBkb19lYnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU1NC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1NTU6c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTU2LVxcdFxcdHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1ODk9c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPSB7XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1OTItXFx0LnNldF9vcHRtYXhcXHQ9IEVCVF9TT19TRVRfTUFYICsgMSxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1OTM6XFx0LnNldFxcdFxcdD0gZG9fZWJ0X3NldF9jdGwsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTk0LVxcdC5nZXRfb3B0bWluXFx0PSBFQlRfQkFTRV9DVEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE0OjU5OjUzLjA0MDA3OTcxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM4MTExOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgY29uZmlybWluZyBteSBpbml0aWFsIGFzc2Vzc21lbnQg4oCTIGl0J3MgaGVhdmlseSBzdGF0aWMuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IHRoZSBmdW5jdGlvbnMgYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYW5kIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYCBhcmUgYWxsIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgcmVpbmZvcmNlcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBoZXJlOyBsaWtlbHksIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5IHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIGF2b2lkaW5nIGV4dGVybmFsIGxpbmthZ2UgYW5kIHBvdGVudGlhbCBuYW1pbmcgY29uZmxpY3RzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guIEkgc2VlIGBkb19lYnRfc2V0X2N0bGAgYW5kIHJlbWVtYmVyIHRoaXMgaXMgdGhlIHNldHNvY2tvcHQgaGFuZGxlciDigJMgdGhhdCdzIGNyaXRpY2FsLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb2RlLiBJIG5lZWQgdG8gY2hlY2sgbXlzZWxmLCBsZXQncyBrZWVwIGdvaW5nLiBUaW1lIHRvIHRob3JvdWdobHkgc2NhbiB0aGUgY29kZSBhbmQgYXNjZXJ0YWluIHdoZXRoZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBwcmVzZW50LiBUaGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgd291bGQgY2VydGFpbmx5IGFmZmVjdCBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9mIHRoaXMgY29kZS4gSSBhbSBjZXJ0YWluIEkgd2lsbCBmaW5kIHdoYXQgSSBhbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE0OjU5OjU2LjY3ODE5NTk2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5ODgyOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVidF9zb2Nrb3B0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjU1NT1zdGF0aWMgaW50IGRvX2VidF9zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IGFyZyxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU4OC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1ODk6c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPSB7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTkwLVxcdC5wZlxcdFxcdD0gUEZfSU5FVCxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjYyND1zdGF0aWMgaW50IF9faW5pdCBlYnRhYmxlc19pbml0KHZvaWQpXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI2MzctXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNjM4OlxcdHJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoXFx1MDAyNmVidF9zb2Nrb3B0cyk7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNjM5LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI2NDg9c3RhdGljIHZvaWQgZWJ0YWJsZXNfZmluaSh2b2lkKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjY0OS17XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNjUwOlxcdG5mX3VucmVnaXN0ZXJfc29ja29wdChcXHUwMDI2ZWJ0X3NvY2tvcHRzKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI2NTEtXFx0eHRfdW5yZWdpc3Rlcl90YXJnZXQoXFx1MDAyNmVidF9zdGFuZGFyZF90YXJnZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTo1Ni45MTgwODY0NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzczNTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIGVidGFibGVzLmMgU291cmNlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGVidGFibGVzLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSdtIG5vdGljaW5nIGlzIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBmb2N1cyBteSBzZWFyY2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLCBzbywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHNwZWNpZmljYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZWJ0YWJsZXMuY2AgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSByZWxldmFudCB0byB3aGF0ZXZlciBJJ20gaW52ZXN0aWdhdGluZy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGF0aWMgZGVjbGFyYXRpb24gaXNuJ3Qgb2JzY3VyaW5nIHNvbWUgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJdCdzIHRpbWUgdG8gcmVmaW5lIG15IHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjIzMTgyNTMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI3OTU0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTExNjU9c3RhdGljIHZvaWQgX19lYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBlYnRfdGFibGUgKnRhYmxlKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTc3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE3ODppbnQgZWJ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGVidF90YWJsZSAqaW5wdXRfdGFibGUsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTc5LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnRlbXBsYXRlX29wcylcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTI5Mi1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjEyOTM6aW50IGVidF9yZWdpc3Rlcl90ZW1wbGF0ZShjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICp0LCBpbnQgKCp0YWJsZV9pbml0KShzdHJ1Y3QgbmV0ICpuZXQpKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTI5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjQ3NDYyNjI2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAzMDQwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBlYnRfcmVnaXN0ZXJfdGFibGVgIGlzbid0IHRoZSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGBzZXRzb2Nrb3B0YCDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUgaGFuZGxlciwgYGRvX2VidF9zZXRfY3RsYCwgaXMgdGhlIG9uZSBpbiBjaGFyZ2UuIEFuZCwgYXMgSSByZWNhbGwsIGl0IGRpc3BhdGNoZXMgdG8gYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYW5kIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYC4gSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQganVzdCBmb2N1c2luZyBvbiB0aG9zZSBpbnRlcm5hbCBmdW5jdGlvbnMuIFRoZXkgYXJlIHN0YXRpYywgYWZ0ZXIgYWxsLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbiB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBxdWVzdGlvbiBpcywgYXJlIGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYCBpbmxpbmVkP1xuXG5IYW5nIG9uLCBgZG9fZWJ0X3NldF9jdGxgIGlzICp0ZWNobmljYWxseSogc3RhdGljLiBCdXQgaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBuZl9yZWdpc3Rlcl9zb2Nrb3B0YC4gVGhhdCAqc2hvdWxkKiBwcmV2ZW50IGlubGluaW5nLCByaWdodD8gRnVuY3Rpb24gcG9pbnRlcnMgYXJlIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgdGhlIGNvbXBpbGVyIGNhbid0IG9wdGltaXplIGl0IGF3YXkuIEZ1cnRoZXJtb3JlLCBgZG9fcmVwbGFjZWAgYW5kIGB1cGRhdGVfY291bnRlcnNgIGFyZSBjYWxsZWQgZnJvbSBgZG9fZWJ0X3NldF9jdGxgIHZpYSBhIHN3aXRjaCBzdGF0ZW1lbnQsIHNvIGV2ZW4gaWYgdGhlIGNvbXBpbGVyICpjb3VsZCogaW5saW5lIHRoZW0sIGlmIHRoZXkgYXJlIGxhcmdlIGVub3VnaCwgaXQgcHJvYmFibHkgd29uJ3QuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBzaXplIG9mIGBkb19yZXBsYWNlYCBqdXN0IHRvIGdldCBhIGd1dCBmZWVsaW5nLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDowNS45Nzc2NzAxNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzQyNTU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19yZXBsYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz04NzE9c3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy05MjItXFx0aWYgKHVkY19jbnQpIHtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjkyMzpcXHRcXHQvKiB0aGlzIHdpbGwgZ2V0IGZyZWUnZCBpbiBkb19yZXBsYWNlKCkvZWJ0X3JlZ2lzdGVyX3RhYmxlKClcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTkyNC1cXHRcXHQgKiBpZiBhbiBlcnJvciBvY2N1cnNcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9OTkwPXN0YXRpYyB2b2lkIGdldF9jb3VudGVycyhjb25zdCBzdHJ1Y3QgZWJ0X2NvdW50ZXIgKm9sZGNvdW50ZXJzLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEwLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTAxMTpzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTAxMi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExMDktLyogcmVwbGFjZSB0aGUgdGFibGUgKi9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjExMTA6c3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExMTEte1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU0LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE1NTpcXHRyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsIFxcdTAwMjZ0bXAsIG5ld2luZm8pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1Ni1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIyNTQ9c3RhdGljIGludCBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXIoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjkxLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjI5MjpzdGF0aWMgaW50IGNvbXBhdF9kb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIyOTMte1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzAyLVxcdFxcdC8qIHRyeSByZWFsIGhhbmRsZXIgaW4gY2FzZSB1c2VybGFuZCBzdXBwbGllZCBuZWVkZWQgcGFkZGluZyAqL1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjMwMzpcXHRcXHRpZiAocmV0ID09IC1FSU5WQUwgXFx1MDAyNlxcdTAwMjYgZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKSA9PSAwKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjMwNC1cXHRcXHRcXHRyZXQgPSAwO1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzc5LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjM4MDpcXHRyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsIFxcdTAwMjZ0bXAsIG5ld2luZm8pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM4MS1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1NTU9c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NjktXFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTcwOlxcdFxcdFxcdHJldCA9IGNvbXBhdF9kb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3MS1cXHRcXHRlbHNlXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTcyLSNlbmRpZlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU3MzpcXHRcXHRcXHRyZXQgPSBkb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3NC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MDYuMTk1MTAxN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMwMDEwNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkV4YW1pbmluZyB0aGUgRUJUIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBkb19lYnRfc2V0X2N0bGAgaGVyZS4gUmlnaHQsIHRoYXQncyB0aGUgaGFuZGxlciBmb3IgYHNldHNvY2tvcHRgIGNhbGxzIHJlbGF0ZWQgdG8gRXRoZXJuZXQgQnJpZGdpbmcgVGFibGUgKEVCVCkgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUuIExldCdzIHNlZS4uLiB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHdpdGhpbiB0aGUgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyYCBkaXJlY3RvcnksIHBhcnRpY3VsYXJseSB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdHVmZiBhcmUgZGVmaW5lZC4gTGV0J3MgY2hlY2sgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGNhbiBsZWFybiBhYm91dCBhdmFpbGFibGUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjA5LjYyNTEyODU0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzOTQzODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVidGFibGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00OC1cXHRoZWxwXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0OTpcXHQgTGVnYWN5IGVidGFibGVzIHBhY2tldC9mcmFtZSBjbGFzc2lmaWVyLlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NTA6XFx0IFRoaXMgaXMgbm90IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGVidGFibGVzIG92ZXIgbmZ0YWJsZXNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTUxLVxcdCAoaXB0YWJsZXMtbmZ0KS5cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9NTM9bWVudWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjU0OlxcdHRyaXN0YXRlIFxcXCJFdGhlcm5ldCBCcmlkZ2UgdGFibGVzIChlYnRhYmxlcykgc3VwcG9ydFxcXCJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTU1LVxcdGRlcGVuZHMgb24gQlJJREdFIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfWFRBQkxFU1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Ny1cXHRoZWxwXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo1ODpcXHQgIGVidGFibGVzIGlzIGEgZ2VuZXJhbCwgZXh0ZW5zaWJsZSBmcmFtZS9wYWNrZXQgaWRlbnRpZmljYXRpb25cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTU5LVxcdCAgZnJhbWV3b3JrLiBTYXkgJ1knIG9yICdNJyBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIEV0aGVybmV0XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTY3PWNvbmZpZyBCUklER0VfRUJUX0JST1VURVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03MC1cXHRoZWxwXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo3MTpcXHQgIFRoZSBlYnRhYmxlcyBicm91dGUgdGFibGUgaXMgdXNlZCB0byBkZWZpbmUgcnVsZXMgdGhhdCBkZWNpZGUgYmV0d2Vlblxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzItXFx0ICBicmlkZ2luZyBhbmQgcm91dGluZyBmcmFtZXMsIGdpdmluZyBMaW51eCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo3MzpcXHQgIGJyb3V0ZXIuIFNlZSB0aGUgbWFuIHBhZ2UgZm9yIGVidGFibGVzKDgpIGFuZCBleGFtcGxlcyBvbiB0aGUgZWJ0YWJsZXNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTc0LVxcdCAgd2Vic2l0ZS5cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Nzg9Y29uZmlnIEJSSURHRV9FQlRfVF9GSUxURVJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODEtXFx0aGVscFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODI6XFx0ICBUaGUgZWJ0YWJsZXMgZmlsdGVyIHRhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIGZyYW1lIGZpbHRlcmluZyBydWxlcyBhdFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0ICBsb2NhbCBpbnB1dCwgZm9yd2FyZGluZyBhbmQgbG9jYWwgb3V0cHV0LiBTZWUgdGhlIG1hbiBwYWdlIGZvclxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODQ6XFx0ICBlYnRhYmxlcyg4KS5cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg1LVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz04OD1jb25maWcgQlJJREdFX0VCVF9UX05BVFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05MS1cXHRoZWxwXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo5MjpcXHQgIFRoZSBlYnRhYmxlcyBuYXQgdGFibGUgaXMgdXNlZCB0byBkZWZpbmUgcnVsZXMgdGhhdCBhbHRlciB0aGUgTUFDXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05My1cXHQgIHNvdXJjZSBhZGRyZXNzIChNQUMgU05BVCkgb3IgdGhlIE1BQyBkZXN0aW5hdGlvbiBhZGRyZXNzIChNQUMgRE5BVCkuXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo5NDpcXHQgIFNlZSB0aGUgbWFuIHBhZ2UgZm9yIGVidGFibGVzKDgpLlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctOTUtXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTIzND1jb25maWcgQlJJREdFX0VCVF9MT0dcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjM3LVxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbG9nIHdhdGNoZXIsIHRoYXQgeW91IGNhbiB1c2UgaW4gYW55IHJ1bGVcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIzODpcXHQgIGluIGFueSBlYnRhYmxlcyB0YWJsZS4gSXQgcmVjb3JkcyBpbmZvIGFib3V0IHRoZSBmcmFtZSBoZWFkZXJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIzOS1cXHQgIHRvIHRoZSBzeXNsb2cuXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTI0Mz1jb25maWcgQlJJREdFX0VCVF9ORkxPR1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNTEtXFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBuZmxvZyB3YXRjaGVyLCB0aGF0IHlvdSBjYW4gdXNlIGluIGFueSBydWxlXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyNTI6XFx0ICBpbiBhbnkgZWJ0YWJsZXMgdGFibGUuXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjA5LjgxOTEzNTg5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE2NzI5ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBCcmlkZ2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBrZXJuZWwgY29uZmlnIHZhcmlhYmxlIGluIHF1ZXN0aW9uIGlzIGBCUklER0VfTkZfRUJUQUJMRVNgLiBJIGtub3cgdGhpcyBvbmUsIGl04oCZcyByZWxhdGVkIHRvIGVuYWJsaW5nIGVidGFibGVzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBMaW51eCBicmlkZ2UuIExldCdzIGJyZWFrIGRvd24gdGhlIGRlcGVuZGVuY2llczogSSBzZWUgaXQgZGVwZW5kcyBvbiBgQlJJREdFYCwgb2J2aW91c2x5LCBhbmQgdGhlbiBhbHNvIG9uIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX1hUQUJMRVNgLiBNYWtlcyBzZW5zZSDigJMgZWJ0YWJsZXMgd29ya3MgYnkgaW50ZXJhY3Rpbmcgd2l0aCBuZXRmaWx0ZXIuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBzb3VyY2UgZmlsZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSBgZWJ0YWJsZXMuY2AgYWN0dWFsbHkgZ2V0cyBjb21waWxlZC4gTGV0IG1lIG5hdmlnYXRlIHRvIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGVgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCBmaWxlIHdpbGwgdGVsbCBtZSB0aGUgc3BlY2lmaWNzIGFib3V0IGhvdyBpdCdzIGJ1aWx0IGFuZCBpZiBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhcmUgb24gdGhlIG1vbmV5LiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYmUgcHJlY2lzZSBpbiBteSBhbmFseXNpcyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTExLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MTMuNDM1ODY4Nzg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NjczNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWJ0YWJsZXMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0JSSURHRSkgKz0gbmZfY29ubnRyYWNrX2JyaWRnZS5vXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kpICs9IGVidGFibGVzLm9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZS0xMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MTMuNTkxODQxNzUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzQxNDE5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBCcmlkZ2UgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIGNvbnRleHQgcG9pbnRzIGRpcmVjdGx5IHRvIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYC4gVGhhdCdzIHRoZSBjbHVlLiBNeSBpbW1lZGlhdGUgcmVmbGV4IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgc2lnbmlmaWNhbmNlLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEkgbmVlZCB0byByZXZpZXcgaG93IGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgZ2VuZXJhbGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGVidGFibGVzIHNldHVwIGZvciBuZXR3b3JrIGJyaWRnaW5nLiBUaGlzIGlzIGFib3V0IGNsYXJpZnlpbmcgdGhlIHByZXNlbmNlLCBtZWFuaW5nLCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgbGVnYWN5IG9wdGlvbiB3aXRoaW4gdGhlIHdpZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IG15IHN5c3RlbSdzIHNwZWNpZmljIHNldHVwIG9yIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjkxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MTguNTY1OTg3NjQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYxMjE2NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDItIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Njc9Y29uZmlnIEJSSURHRV9FQlRfQlJPVVRFXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02OC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBicm91dGUgdGFibGUgc3VwcG9ydFxcXCJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjY5OlxcdGRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzAtXFx0aGVscFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz03OD1jb25maWcgQlJJREdFX0VCVF9UX0ZJTFRFUlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzktXFx0dHJpc3RhdGUgXFxcImVidDogZmlsdGVyIHRhYmxlIHN1cHBvcnRcXFwiXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo4MDpcXHRkZXBlbmRzIG9uIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTgxLVxcdGhlbHBcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9ODg9Y29uZmlnIEJSSURHRV9FQlRfVF9OQVRcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg5LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG5hdCB0YWJsZSBzdXBwb3J0XFxcIlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05MS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjE4Ljc2MjExNjEzOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU2MjI3NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEVidGFibGVzIGFuZCBMZWdhY3kgRWJ0YWJsZXMgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gSSBzZWUgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgIGluIHRoZSBjb25maWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB0aGUgb25lIHdlJ3JlIGRlYWxpbmcgd2l0aC5cIiBCdXQsIG9mIGNvdXJzZSwgSSBjYW4ndCBqdXN0IHRha2UgdGhhdCBhdCBmYWNlIHZhbHVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGFuZCBjb25maXJtIGlmIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCByZXF1aXJlcyBgQlJJREdFX05GX0VCVEFCTEVTYC4gVGhhdOKAmXMgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIG9wdGlvbnMgd29yayBpbiB0YW5kZW0sIGFuZCBob3cgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgd2l0aC4gSXTigJlzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgYW5kIHBvdGVudGlhbCBwYWNrZXQgZmlsdGVyaW5nIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDoyMi44MTgzNDgyNDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTIyOTgzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDItIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MjMuMDEzNTg0OTM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTk3ODAxNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQzLiBJIGtub3cgdGhpcyBmaWxlOyBpdCdzIHRoZSBoZWFydCBvZiBjb25maWd1cmluZyBOZXRmaWx0ZXIncyBicmlkZ2UgZmVhdHVyZXMuIEknbSBndWVzc2luZyB3ZSdyZSBsb29raW5nIGF0IGEgc3BlY2lmaWMgb3B0aW9uLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIG1vZHVsZSBvciBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYnJpZGdpbmcgY29udGV4dC4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBzdGFuZGFyZCB3YXkgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gZXhwb3NlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIHVzZXIsIHNvIGxvb2tpbmcgaGVyZSBnaXZlcyB1cyBkaXJlY3QgaW5zaWdodC4gV2UgY2FuIHByb2JhYmx5IGRlZHVjZSB3aGF0IHdlIGFyZSB0cnlpbmcgdG8gY29uZmlndXJlIGdpdmVuIHRoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLCBzbyBsZXQncyBnZXQgcmlnaHQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MjYuNDEzMzY5MjUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0MTpcXHRcXG4gIDQyOlxcdCMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3BcXG4gIDQzOlxcdGNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZXFxuICA0NDpcXHRcXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IEVCVEFCTEVTIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRSBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG4gIDQ3OlxcdFxcdGRlZmF1bHRcXHRuXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgTGVnYWN5IGVidGFibGVzIHBhY2tldC9mcmFtZSBjbGFzc2lmaWVyLlxcbiAgNTA6XFx0XFx0IFRoaXMgaXMgbm90IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGVidGFibGVzIG92ZXIgbmZ0YWJsZXNcXG4gIDUxOlxcdFxcdCAoaXB0YWJsZXMtbmZ0KS5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0bWVudWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNcXG4gIDU0OlxcdFxcdHRyaXN0YXRlIFxcXCJFdGhlcm5ldCBCcmlkZ2UgdGFibGVzIChlYnRhYmxlcykgc3VwcG9ydFxcXCJcXG4gIDU1OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfWFRBQkxFU1xcbiAgNTY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIGVidGFibGVzIGlzIGEgZ2VuZXJhbCwgZXh0ZW5zaWJsZSBmcmFtZS9wYWNrZXQgaWRlbnRpZmljYXRpb25cXG4gIDU5OlxcdFxcdCAgZnJhbWV3b3JrLiBTYXkgJ1knIG9yICdNJyBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIEV0aGVybmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjI2LjQxMzUxNDYxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM4NDc4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCdzIGZsYWdnZWQgYXMgZGVwZW5kaW5nIG9uIGBCUklER0VgLCBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCwgYW5kIGBORVRGSUxURVJfWFRBQkxFU2AuIENsZWFybHksIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgYW5hbHlzaXMuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAgZGVwZW5kZW5jeSBmaXJzdC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGhlcmUsIGFuZCB3aGF0IGRyaXZlcyB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHdoeSBpdCdzIGEgcHJlcmVxdWlzaXRlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDozMS45NTE5OTczMjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODA3MTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzM4PWNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0Nzpjb25maWcgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTc0OC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbGVnYWN5IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDozMi4xNTAwNzUxNDFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MjgzMDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBOZXRmaWx0ZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3NDcuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgc29tZXRoaW5nIGludGVyZXN0aW5nLCBwb3RlbnRpYWxseSBhIG5ldyBmZWF0dXJlIG9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHJlc2lkZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIHRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBhcm91bmQgdGhhdCBzZWN0aW9uIG9mIGNvZGUuIEknbGwgbmVlZCB0byBpbnRlcnByZXQgdGhlIHN5bWJvbHMsIGV2YWx1YXRlIHRoZSBleHByZXNzaW9ucywgYW5kIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdmFyaW91cyBzZXR0aW5ncyBvbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4gSXMgdGhpcyBhbiBpbXBvcnRhbnQgbW9kdWxlPyBIYXMgc29tZXRoaW5nIGNoYW5nZWQ/IFdoYXQgd2lsbCBpdCB0YWtlIHRvIGFkZC9yZW1vdmUgc29tZXRoaW5nPyBJIGJldCB0aGUgYW5zd2VyIGlzIGluIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MzYuMjAyOTA5NDM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdFxcdGRlcGVuZHMgb24gQ09NUEFUXFxuIDc0MTpcXHRcXHRoZWxwXFxuIDc0MjpcXHRcXHQgICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHRyYW5zbGF0aW9uIGxheWVyIHRvIHJ1biAzMmJpdCBhcnAsaXAoNiksZWJ0YWJsZXNcXG4gNzQzOlxcdFxcdCAgIGJpbmFyaWVzIG9uIDY0Yml0IGtlcm5lbHMuXFxuIDc0NDpcXHRcXG4gNzQ1OlxcdFxcdCAgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDc0NjpcXHRcXG4gNzQ3OlxcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gNzQ4OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBsZWdhY3kgdGFibGVzIHN1cHBvcnRcXFwiXFxuIDc0OTpcXHRcXHRkZXBlbmRzIG9uICFQUkVFTVBUX1JUXFxuIDc1MDpcXHRcXHRoZWxwXFxuIDc1MTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHN0aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgbGVnYWN5IHRhYmxlcy4gVGhpcyBpc1xcbiA3NTI6XFx0XFx0ICByZXF1aXJlZCBieSB0aGUgbGVnYWN5IHRvb2xzIChpcHRhYmxlcy1sZWdhY3kpIGFuZCBpcyBub3QgbmVlZGVkIGlmXFxuIDc1MzpcXHRcXHQgIHlvdSB1c2UgaXB0YWJsZXMgb3ZlciBuZnRhYmxlcyAoaXB0YWJsZXMtbmZ0KS5cXG4gNzU0OlxcdFxcdCAgTGVnYWN5IHN1cHBvcnQgaXMgbm90IGxpbWl0ZWQgdG8gSVAsIGl0IGFsc28gaW5jbHVkZXMgRUJUQUJMRVMgYW5kXFxuIDc1NTpcXHRcXHQgIEFSUFRBQkxFUy5cXG4gNzU2OlxcdFxcbiA3NTc6XFx0Y29tbWVudCBcXFwiWHRhYmxlcyBjb21iaW5lZCBtb2R1bGVzXFxcIlxcbiA3NTg6XFx0XFxuIDc1OTpcXHRjb25maWcgTkVURklMVEVSX1hUX01BUktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MzYuMjAzMDg4MTA1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTY2NzMwOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBFYnRhYmxlcyBhbmQgTmV0ZmlsdGVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCByZWxpZXMgb24gYCFQUkVFTVBUX1JUYC4gUmlnaHQsIGdvdCBpdC4gTm93LCB0byBnZXQgdGhpcyBlYnRhYmxlcyBzdHVmZiB3b3JraW5nLCB0aGUgc3VnZ2VzdGVkIGNvbmZpZ3MgYXJlIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCwgYEJSSURHRWAsIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTYC4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJIHRoaW5rIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCAqbWlnaHQqIGJlIGVub3VnaCBvbiBpdHMgb3duLCBiZWNhdXNlIEtidWlsZCAqc2hvdWxkKiBoYW5kbGUgdGhlIGRlcGVuZGVuY2llcyBhdXRvbWF0aWNhbGx5Li4uIGJ1dCB0aGUgXCJkZXBlbmRzIG9uXCIgZGlyZWN0aXZlIG1lYW5zIEkgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGUgc3VwcG9ydGluZyBjb25maWdzLiBTbywgeWVhaCwgSSBzaG91bGQgbGlzdCBhbGwgb2YgdGhlbSwganVzdCB0byBiZSBzYWZlLiBTbywgdGhlIGV4cGxpY2l0IGxpc3QgaXM6XG5cbiogICBgQlJJREdFYFxuKiAgIGBORVRGSUxURVJgXG4qICAgYE5FVEZJTFRFUl9YVEFCTEVTYFxuKiAgIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgXG4qICAgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgXG5cbkFscmlnaHQsIHRoYXQncyB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGhhbmRsZWQuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIGBCUklER0VfRUJUX1RfRklMVEVSYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGlzIG5lZWRlZCB0byBlbmFibGUgdGFibGUgcmVwbGFjZW1lbnQuIFRoZSBjb2RlIGhhcyBgZG9fcmVwbGFjZWAsIHdoaWNoLCBmcm9tIHRoZSBuYW1lLCByZXBsYWNlcyBhIHRhYmxlLCBtZWFuaW5nIEkgbmVlZCBhIHRhYmxlIHRvIGJlIHJlZ2lzdGVyZWQuIFRoZSBmdW5jdGlvbnMgdGhhdCByZWdpc3RlciB0aGUgdGFibGVzIGFyZSBgZWJ0YWJsZV9maWx0ZXJgLCBgZWJ0YWJsZV9uYXRgLCBhbmQgYGVidGFibGVfYnJvdXRlYC4gT2theSwgSSdsbCBnbyBjaGVjayBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuY2AgdG8gbG9vayBhdCBob3cgdGhhdCBhY3R1YWxseSBnZXRzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6NDYuMzY5ODIyMTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyMzgwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWJ0YWJsZV9maWx0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19CUklER0VfRUJUX0JST1VURSkgKz0gZWJ0YWJsZV9icm91dGUub1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSKSArPSBlYnRhYmxlX2ZpbHRlci5vXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JSSURHRV9FQlRfVF9OQVQpICs9IGVidGFibGVfbmF0Lm9cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMi0vKlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM6MzogKiAgZWJ0YWJsZV9maWx0ZXJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jLTQtICpcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM9ODk9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBmcmFtZV9maWx0ZXJfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtOTMtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYzo5NDpzdGF0aWMgaW50IF9faW5pdCBlYnRhYmxlX2ZpbHRlcl9pbml0KHZvaWQpXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy05NS17XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jLTEwNy1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jOjEwODpzdGF0aWMgdm9pZCBfX2V4aXQgZWJ0YWJsZV9maWx0ZXJfZmluaSh2b2lkKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTA5LXtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTEzLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM6MTE0Om1vZHVsZV9pbml0KGVidGFibGVfZmlsdGVyX2luaXQpO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM6MTE1Om1vZHVsZV9leGl0KGVidGFibGVfZmlsdGVyX2ZpbmkpO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTE2LU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6NDYuNTMwMDY1NzI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NzI1NzgwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBhIEJyaWRnZSBFQlQgRmlsdGVyIFRhYmxlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCB3ZSBuZWVkIGBCUklER0VfRUJUX1RfRklMVEVSYCB0byBlZmZlY3RpdmVseSByZXBsYWNlIGEgdGFibGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIExldCdzIGdldCB0aGF0IGFkZGVkIHRvIHRoZSBjb25maWd1cmF0aW9uczsgaXQncyBhIGtleSByZXF1aXJlbWVudC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBzeW1ib2xzIGludm9sdmVkIGhlcmUuIEknbSBmb2N1c2luZyBvbiBgZG9fcmVwbGFjZWAsIGBjb21wYXRfZG9fcmVwbGFjZWAsIGB1cGRhdGVfY291bnRlcnNgLCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AsIGFuZCBgZG9fZWJ0X3NldF9jdGxgLiBUaGV5J3JlIGNlbnRyYWwgdG8gdGhlIHJlcGxhY2VtZW50IGxvZ2ljLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuXG5cbkEgcXVpY2sgdGhvdWdodCBvbiBgZG9fcmVwbGFjZWAgYW5kIGB1cGRhdGVfY291bnRlcnNgLiBJJ20gcHJldHR5IHN1cmUgdGhleSBhcmUgc3RhdGljLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIHRoZXkgbWF5IGJlIGxhcmdlIGVub3VnaCB0byAqbm90KiBoYXZlIGJlZW4gaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGJ1dCBpdCdzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBMZXQgbWUgdmVyaWZ5IHRoZSBzaXplIG9mIGBkb19yZXBsYWNlYCBmaXJzdC4gWXVwLCBvdmVyIGEgaHVuZHJlZCBsaW5lcy4gRGVmaW5pdGVseSAqbm90KiBpbmxpbmVkLiBcblxuTm93LCBgdXBkYXRlX2NvdW50ZXJzYCBpcyB0aGUgbmV4dCBvbmUsIHdoaWNoIHNlZW1zIHNob3J0ZXIgaW5pdGlhbGx5LiBIb3dldmVyLCBpdCBjYWxscyBgZG9fdXBkYXRlX2NvdW50ZXJzYC4gVGhhdCBtZWFucyBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIGlubGluZWQsIGVpdGhlciwgYmVjYXVzZSBgZG9fdXBkYXRlX2NvdW50ZXJzYCBpcyBwcm9iYWJseSBxdWl0ZSBsYXJnZS4gSSBzaG91bGQgY2hlY2sgYHVwZGF0ZV9jb3VudGVyc2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDo1MS4zMDI2NDcyOTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRcXHRcXHRBRERfQ09VTlRFUih0LVxcdTAwM2Vwcml2YXRlLVxcdTAwM2Vjb3VudGVyc1tpXSwgdG1wW2ldLmJjbnQsIHRtcFtpXS5wY250KTtcXG4xNDIxOlxcdFxcbjE0MjI6XFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4xNDIzOlxcdFxcdHJldCA9IDA7XFxuMTQyNDpcXHR1bmxvY2tfbXV0ZXg6XFxuMTQyNTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmVidF9tdXRleCk7XFxuMTQyNjpcXHRcXHR2ZnJlZSh0bXApO1xcbjE0Mjc6XFx0XFx0cmV0dXJuIHJldDtcXG4xNDI4OlxcdH1cXG4xNDI5OlxcdFxcbjE0MzA6XFx0c3RhdGljIGludCB1cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbjE0MzE6XFx0e1xcbjE0MzI6XFx0XFx0c3RydWN0IGVidF9yZXBsYWNlIGhscDtcXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZihobHApKVxcbjE0MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQzNjpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmhscCwgYXJnLCBzaXplb2YoaGxwKSkpXFxuMTQzNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xNDM4OlxcdFxcbjE0Mzk6XFx0XFx0aGxwLm5hbWVbc2l6ZW9mKGhscC5uYW1lKSAtIDFdID0gJ1xcXFwwJztcXG4xNDQwOlxcdFxcbjE0NDE6XFx0XFx0aWYgKGxlbiAhPSBzaXplb2YoaGxwKSArIGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcXG4xNDQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGhscC5jb3VudGVycyxcXG4xNDQ1OlxcdFxcdFxcdFxcdFxcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcXG4xNDQ2OlxcdH1cXG4xNDQ3OlxcdFxcbjE0NDg6XFx0c3RhdGljIGlubGluZSBpbnQgZWJ0X29ial90b191c2VyKGNoYXIgX191c2VyICp1bSwgY29uc3QgY2hhciAqX25hbWUsXFxuMTQ0OTpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmRhdGEsIGludCBlbnRyeXNpemUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjUxLjMwMjk2NzAxOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc3NTc1MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHVwZGF0ZV9jb3VudGVyc2AgRnVuY3Rpb24ncyBDb250ZXh0KipcblxuUmlnaHQsIGB1cGRhdGVfY291bnRlcnNgIGlzIGEgcHJldHR5IGNvbXBhY3QgZnVuY3Rpb24sIEknbGwgYWRtaXQuIEJ1dCB0aGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHdoZXJlIGl0J3MgKnVzZWQqLiBUaGUga2V5IGlzIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGBkb19lYnRfc2V0X2N0bGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpc24ndCBqdXN0IGEgc3RhbmRhbG9uZSB1dGlsaXR5OyBpdCdzIGxpa2VseSBhIGNvbXBvbmVudCB3aXRoaW4gYSBsYXJnZXIgY29udHJvbCBmbG93IG1lY2hhbmlzbS4gU28sIGl0J3Mgbm90IGVub3VnaCB0byBhc3Nlc3MgYHVwZGF0ZV9jb3VudGVyc2AgaW4gaXNvbGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRyb2wgZmxvdywgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIGBkb19lYnRfc2V0X2N0bGAuIExldCdzIGdldCByaWdodCB0byBpdCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDo1Ni4yODA1NDU0OTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NTU6XFx0c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXFxuMjU1NjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuKVxcbjI1NTc6XFx0e1xcbjI1NTg6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbjI1NTk6XFx0XFx0aW50IHJldDtcXG4yNTYwOlxcdFxcbjI1NjE6XFx0XFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXFxuMjU2MjpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjI1NjM6XFx0XFx0aWYgKCF4dF9jb21wYXRfY2hlY2soKSlcXG4yNTY0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjU2NTpcXHRcXG4yNTY2OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuMjU2NzpcXHRcXHRjYXNlIEVCVF9TT19TRVRfRU5UUklFUzpcXG4yNTY4OlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuMjU2OTpcXHRcXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG4yNTcwOlxcdFxcdFxcdFxcdHJldCA9IGNvbXBhdF9kb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xcbjI1NzE6XFx0XFx0XFx0ZWxzZVxcbjI1NzI6XFx0I2VuZGlmXFxuMjU3MzpcXHRcXHRcXHRcXHRyZXQgPSBkb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xcbjI1NzQ6XFx0XFx0XFx0YnJlYWs7XFxuMjU3NTpcXHRcXHRjYXNlIEVCVF9TT19TRVRfQ09VTlRFUlM6XFxuMjU3NjpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbjI1Nzc6XFx0XFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxuMjU3ODpcXHRcXHRcXHRcXHRyZXQgPSBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKG5ldCwgYXJnLCBsZW4pO1xcbjI1Nzk6XFx0XFx0XFx0ZWxzZVxcbjI1ODA6XFx0I2VuZGlmXFxuMjU4MTpcXHRcXHRcXHRcXHRyZXQgPSB1cGRhdGVfY291bnRlcnMobmV0LCBhcmcsIGxlbik7XFxuMjU4MjpcXHRcXHRcXHRicmVhaztcXG4yNTgzOlxcdFxcdGRlZmF1bHQ6XFxuMjU4NDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDo1Ni4yODkyNDE4MDJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0MDg5NDA5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRWJ0YWJsZXMgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZSBpbiBlYnRhYmxlcy4gVGhlIGVudHJ5IHBvaW50IEknbSBsb29raW5nIGF0IGlzIGBkb19lYnRfc2V0X2N0bGAsIGJ1dCB0aGUgcmVhbCBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGJlY2F1c2UgdGhleSdyZSB3aGVyZSB0aGUgYWxsb2NhdGlvbiBvZiBgY291bnRlcnN0bXBgIGFuZCBgdG1wYCBoYXMgYmVlbiBzaGlmdGVkIHRvIG9jY3VyICphZnRlciogY2VydGFpbiBjaGVja3MgYW5kIGxvY2tzIGFyZSBpbiBwbGFjZS4gVGhpcyBpcyBhIHNvbGlkIGFwcHJvYWNoLlxuXG5Ob3csIEkgbmVlZCB0byBsaXN0IHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgY29tcGxldGUgY29udGV4dC4gU28sIGFsb25nc2lkZSBgZG9fcmVwbGFjZV9maW5pc2hgIGFuZCBgZG9fdXBkYXRlX2NvdW50ZXJzYCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBvdmVyYWxsIGZsb3csIHNwZWNpZmljYWxseSBgZG9fcmVwbGFjZWAsIGBjb21wYXRfZG9fcmVwbGFjZWAsIGB1cGRhdGVfY291bnRlcnNgLCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AuIFdlIGNhbid0IG5lZ2xlY3QgYGRvX3JlcGxhY2VfZmluaXNoYCwgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLlxuXG5Db25maWd1cmF0aW9uIHdpc2UsIEkndmUgZ290IHRvIGVuc3VyZSB0aGUgcmlnaHQgbW9kdWxlcyBhcmUgY29tcGlsZWQuIEkga25vdyB0aGF0IEkgd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmcgY29uZmlncyBlbmFibGVkOiBgQlJJREdFYCwgYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfWFRBQkxFU2AsIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAsIGFuZCBgQlJJREdFX0VCVF9UX0ZJTFRFUmAuXG5cbkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBCUklER0VfRUJUX1RfRklMVEVSYCB3YXMgZW5vdWdoIHRvIHJlZ2lzdGVyIHRoZSB0YWJsZSwgd2hpY2ggaXQgaXMuIEkgYWxzbyB2ZXJpZmllZCB0aGUgZGVwZW5kZW5jaWVzOiBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAgZGVwZW5kcyBvbiBgQlJJREdFIFx1MDAyNlx1MDAyNiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAgZGVwZW5kcyBvbiBgIVBSRUVNUFRfUlRgLiBgQlJJREdFX0VCVF9UX0ZJTFRFUmAgZGVwZW5kcyBvbiBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAuIFRoYXQncyBhbGwgaW4gb3JkZXIuXG5cbkVmZmVjdGl2ZWx5LCB0aGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGltcHJvdmVtZW50cyB0byB0aGUgZWJ0YWJsZXMgY29yZSBsb2dpYywgYWRkcmVzc2luZyBhIG1lbW9yeSBhbGxvY2F0aW9uIHZ1bG5lcmFiaWxpdHkuIEFuZCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoZWQgdGhyb3VnaCBgRUJUX1NPX1NFVF9FTlRSSUVTYCBhbmQgYEVCVF9TT19TRVRfQ09VTlRFUlNgIHNldHNvY2tvcHQgY29tbWFuZHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHRoaXMgcHJvcGVybHkgYnkgZW5hYmxpbmcgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdHJpZ2dlciB0aGUgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0OCwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMTowNi42OTgxODY4ODRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgyNDc2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJCUklER0VfRUJUX1RfRklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fcmVwbGFjZV9maW5pc2hcIixcbiAgICBcImRvX3VwZGF0ZV9jb3VudGVyc1wiLFxuICAgIFwiZG9fcmVwbGFjZVwiLFxuICAgIFwidXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJjb21wYXRfZG9fcmVwbGFjZVwiLFxuICAgIFwiY29tcGF0X3VwZGF0ZV9jb3VudGVyc1wiLFxuICAgIFwiZG9fZWJ0X3NldF9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgaW4gZWJ0YWJsZXMgYnkgbW92aW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBjb3VudGVyc3RtcGAgYW5kIGB0bXBgIGFmdGVyIHNvbWUgY2hlY2tzIGFuZCBsb2NrcyBpbiBgZG9fcmVwbGFjZV9maW5pc2hgIGFuZCBgZG9fdXBkYXRlX2NvdW50ZXJzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGVidGFibGVzIGxvZ2ljLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgRUJUX1NPX1NFVF9FTlRSSUVTYCBhbmQgYEVCVF9TT19TRVRfQ09VTlRFUlNgIHNldHNvY2tvcHQgY29tbWFuZHMuIFdlIG5lZWQgdG8gZW5hYmxlIGxlZ2FjeSBlYnRhYmxlcyBzdXBwb3J0IHRvIHRlc3QgdGhpcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiQlJJREdFX0VCVF9UX0ZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3JlcGxhY2VfZmluaXNoXCIsXG4gICAgXCJkb191cGRhdGVfY291bnRlcnNcIixcbiAgICBcImRvX3JlcGxhY2VcIixcbiAgICBcInVwZGF0ZV9jb3VudGVyc1wiLFxuICAgIFwiY29tcGF0X2RvX3JlcGxhY2VcIixcbiAgICBcImNvbXBhdF91cGRhdGVfY291bnRlcnNcIixcbiAgICBcImRvX2VidF9zZXRfY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGluIGVidGFibGVzIGJ5IG1vdmluZyB0aGUgYWxsb2NhdGlvbiBvZiBgY291bnRlcnN0bXBgIGFuZCBgdG1wYCBhZnRlciBzb21lIGNoZWNrcyBhbmQgbG9ja3MgaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBlYnRhYmxlcyBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEVCVF9TT19TRVRfRU5UUklFU2AgYW5kIGBFQlRfU09fU0VUX0NPVU5URVJTYCBzZXRzb2Nrb3B0IGNvbW1hbmRzLiBXZSBuZWVkIHRvIGVuYWJsZSBsZWdhY3kgZWJ0YWJsZXMgc3VwcG9ydCB0byB0ZXN0IHRoaXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowh99x5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 14:39:44 +0000 UTC FinishedAt: 2026-07-28 15:01:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "NETFILTER", "NETFILTER_XTABLES", "NETFILTER_XTABLES_LEGACY", "BRIDGE_NF_EBTABLES_LEGACY", "BRIDGE_EBT_T_FILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "NETFILTER", "NETFILTER_XTABLES", "NETFILTER_XTABLES_LEGACY", "BRIDGE_NF_EBTABLES_LEGACY", "BRIDGE_EBT_T_FILTER" ], "series_id": "aaf59a76-cba2-41a6-a8a2-1f9e35624cc6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_replace_finish", "do_update_counters", "do_replace", "update_counters", "compat_do_replace", "compat_update_counters", "do_ebt_set_ctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7QlJJREdFX0VCVF9UX0ZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3JlcGxhY2VfZmluaXNoJiMzNDssCiAgICAmIzM0O2RvX3VwZGF0ZV9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtkb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtjb21wYXRfZG9fcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtjb21wYXRfdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2RvX2VidF9zZXRfY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBpbiBlYnRhYmxlcyBieSBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgYWZ0ZXIgc29tZSBjaGVja3MgYW5kIGxvY2tzIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZWJ0YWJsZXMgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBFQlRfU09fU0VUX0VOVFJJRVNgIGFuZCBgRUJUX1NPX1NFVF9DT1VOVEVSU2Agc2V0c29ja29wdCBjb21tYW5kcy4gV2UgbmVlZCB0byBlbmFibGUgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdGVzdCB0aGlzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE0OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWNjZjU4YWY2MDdmZTZmOTY0NTE0NDBkMDYxOTk4ZmU3OTgxNzA4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDE0OjU5OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG5pbmRleCA5NmM5YThmNTdjODcwMi4uODE0OTZlYmY5MmE5YzkgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG5AQCAtMTAxNywxNiAmIzQzOzEwMTcsNiBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxuIFx0c3RydWN0IGVidF90YWJsZV9pbmZvICp0YWJsZTtcbiBcdHN0cnVjdCBlYnRfdGFibGUgKnQ7XG4gXG4tXHQvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrXG4tXHQgKiB0aGUgY2hlY2sgb24gdGhlIHNpemUgaXMgZG9uZSBsYXRlciwgd2hlbiB3ZSBoYXZlIHRoZSBsb2NrXG4tXHQgKi9cbi1cdGlmIChyZXBsLVx1MDAzZW51bV9jb3VudGVycykge1xuLVx0XHRjb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC1cdTAwM2VudW1fY291bnRlcnMsXG4tXHRcdFx0XHRcdCAgICBzaXplb2YoKmNvdW50ZXJzdG1wKSk7XG4tXHRcdGlmICghY291bnRlcnN0bXApXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4gXHRuZXdpbmZvLVx1MDAzZWNoYWluc3RhY2sgPSBOVUxMO1xuIFx0cmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycyhyZXBsLCBuZXdpbmZvKTtcbiBcdGlmIChyZXQgIT0gMClcbkBAIC0xMDUzLDYgJiM0MzsxMDQzLDE1IEBAIHN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXG4gXHRcdGdvdG8gZnJlZV91bmxvY2s7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHJlcGwtXHUwMDNlbnVtX2NvdW50ZXJzKSB7XG4mIzQzO1x0XHRjb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC1cdTAwM2VudW1fY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0XHQgICAgc2l6ZW9mKCpjb3VudGVyc3RtcCkpO1xuJiM0MztcdFx0aWYgKCFjb3VudGVyc3RtcCkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRnb3RvIGZyZWVfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiB3ZSBoYXZlIHRoZSBtdXRleCBsb2NrLCBzbyBubyBkYW5nZXIgaW4gcmVhZGluZyB0aGlzIHBvaW50ZXIgKi9cbiBcdHRhYmxlID0gdC1cdTAwM2Vwcml2YXRlO1xuIFx0LyogbWFrZSBzdXJlIHRoZSB0YWJsZSBjYW4gb25seSBiZSBybW1vZCYjMzk7ZWQgaWYgaXQgY29udGFpbnMgbm8gcnVsZXMgKi9cbkBAIC0xMzg2LDI1ICYjNDM7MTM4NSwyNyBAQCBzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywgdW5zaWduZWQgaW50IGxlbilcbiB7XG4gXHRpbnQgaSwgcmV0O1xuLVx0c3RydWN0IGVidF9jb3VudGVyICp0bXA7XG4mIzQzO1x0c3RydWN0IGVidF9jb3VudGVyICp0bXAgPSBOVUxMO1xuIFx0c3RydWN0IGVidF90YWJsZSAqdDtcbiBcbiBcdGlmIChudW1fY291bnRlcnMgPT0gMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR0bXAgPSB2bWFsbG9jX2FycmF5KG51bV9jb3VudGVycywgc2l6ZW9mKCp0bXApKTtcbi1cdGlmICghdG1wKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbiBcdHQgPSBmaW5kX3RhYmxlX2xvY2sobmV0LCBuYW1lLCBcdTAwMjZyZXQsIFx1MDAyNmVidF9tdXRleCk7XG4gXHRpZiAoIXQpXG4tXHRcdGdvdG8gZnJlZV90bXA7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKG51bV9jb3VudGVycyAhPSB0LVx1MDAzZXByaXZhdGUtXHUwMDNlbmVudHJpZXMpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4gXG4mIzQzO1x0dG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7XG4mIzQzO1x0aWYgKCF0bXApIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHVubG9ja19tdXRleDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGNvcHlfZnJvbV91c2VyKHRtcCwgY291bnRlcnMsXG4gXHRcdFx0ICAgYXJyYXlfc2l6ZShudW1fY291bnRlcnMsIHNpemVvZigqY291bnRlcnMpKSkpIHtcbiBcdFx0cmV0ID0gLUVGQVVMVDtcbkBAIC0xNDIyLDcgJiM0MzsxNDIzLDYgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0cmV0ID0gMDtcbiB1bmxvY2tfbXV0ZXg6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZWJ0X211dGV4KTtcbi1mcmVlX3RtcDpcbiBcdHZmcmVlKHRtcCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7QlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtCUklER0VfRUJUX1RfRklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fcmVwbGFjZV9maW5pc2gmIzM0OywKICAgICYjMzQ7ZG9fdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2RvX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7dXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2NvbXBhdF9kb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O2NvbXBhdF91cGRhdGVfY291bnRlcnMmIzM0OywKICAgICYjMzQ7ZG9fZWJ0X3NldF9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGluIGVidGFibGVzIGJ5IG1vdmluZyB0aGUgYWxsb2NhdGlvbiBvZiBgY291bnRlcnN0bXBgIGFuZCBgdG1wYCBhZnRlciBzb21lIGNoZWNrcyBhbmQgbG9ja3MgaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBlYnRhYmxlcyBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEVCVF9TT19TRVRfRU5UUklFU2AgYW5kIGBFQlRfU09fU0VUX0NPVU5URVJTYCBzZXRzb2Nrb3B0IGNvbW1hbmRzLiBXZSBuZWVkIHRvIGVuYWJsZSBsZWdhY3kgZWJ0YWJsZXMgc3VwcG9ydCB0byB0ZXN0IHRoaXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxY2NmNThhZjYwN2ZlNmY5NjQ1MTQ0MGQwNjE5OThmZTc5ODE3MDhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMTQ6NTk6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCA5NmM5YThmNTdjODcwMi4uODE0OTZlYmY5MmE5YzkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTAxNywxNiAmIzQzOzEwMTcsNiBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAogCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqdGFibGU7CiAJc3RydWN0IGVidF90YWJsZSAqdDsKIAotCS8qIHRoZSB1c2VyIHdhbnRzIGNvdW50ZXJzIGJhY2sKLQkgKiB0aGUgY2hlY2sgb24gdGhlIHNpemUgaXMgZG9uZSBsYXRlciwgd2hlbiB3ZSBoYXZlIHRoZSBsb2NrCi0JICovCi0JaWYgKHJlcGwtJmd0O251bV9jb3VudGVycykgewotCQljb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC0mZ3Q7bnVtX2NvdW50ZXJzLAotCQkJCQkgICAgc2l6ZW9mKCpjb3VudGVyc3RtcCkpOwotCQlpZiAoIWNvdW50ZXJzdG1wKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJbmV3aW5mby0mZ3Q7Y2hhaW5zdGFjayA9IE5VTEw7CiAJcmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycyhyZXBsLCBuZXdpbmZvKTsKIAlpZiAocmV0ICE9IDApCkBAIC0xMDUzLDYgJiM0MzsxMDQzLDE1IEBAIHN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsCiAJCWdvdG8gZnJlZV91bmxvY2s7CiAJfQogCiYjNDM7CWlmIChyZXBsLSZndDtudW1fY291bnRlcnMpIHsKJiM0MzsJCWNvdW50ZXJzdG1wID0gdm1hbGxvY19hcnJheShyZXBsLSZndDtudW1fY291bnRlcnMsCiYjNDM7CQkJCQkgICAgc2l6ZW9mKCpjb3VudGVyc3RtcCkpOwomIzQzOwkJaWYgKCFjb3VudGVyc3RtcCkgewomIzQzOwkJCXJldCA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBmcmVlX3VubG9jazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qIHdlIGhhdmUgdGhlIG11dGV4IGxvY2ssIHNvIG5vIGRhbmdlciBpbiByZWFkaW5nIHRoaXMgcG9pbnRlciAqLwogCXRhYmxlID0gdC0mZ3Q7cHJpdmF0ZTsKIAkvKiBtYWtlIHN1cmUgdGhlIHRhYmxlIGNhbiBvbmx5IGJlIHJtbW9kJiMzOTtlZCBpZiBpdCBjb250YWlucyBubyBydWxlcyAqLwpAQCAtMTM4NiwyNSAmIzQzOzEzODUsMjcgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgaSwgcmV0OwotCXN0cnVjdCBlYnRfY291bnRlciAqdG1wOwomIzQzOwlzdHJ1Y3QgZWJ0X2NvdW50ZXIgKnRtcCA9IE5VTEw7CiAJc3RydWN0IGVidF90YWJsZSAqdDsKIAogCWlmIChudW1fY291bnRlcnMgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0bXAgPSB2bWFsbG9jX2FycmF5KG51bV9jb3VudGVycywgc2l6ZW9mKCp0bXApKTsKLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAl0ID0gZmluZF90YWJsZV9sb2NrKG5ldCwgbmFtZSwgJmFtcDtyZXQsICZhbXA7ZWJ0X211dGV4KTsKIAlpZiAoIXQpCi0JCWdvdG8gZnJlZV90bXA7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJaWYgKG51bV9jb3VudGVycyAhPSB0LSZndDtwcml2YXRlLSZndDtuZW50cmllcykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja19tdXRleDsKIAl9CiAKJiM0MzsJdG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7CiYjNDM7CWlmICghdG1wKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byB1bmxvY2tfbXV0ZXg7CiYjNDM7CX0KJiM0MzsKIAlpZiAoY29weV9mcm9tX3VzZXIodG1wLCBjb3VudGVycywKIAkJCSAgIGFycmF5X3NpemUobnVtX2NvdW50ZXJzLCBzaXplb2YoKmNvdW50ZXJzKSkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CkBAIC0xNDIyLDcgJiM0MzsxNDIzLDYgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLAogCXJldCA9IDA7CiB1bmxvY2tfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZWJ0X211dGV4KTsKLWZyZWVfdG1wOgogCXZmcmVlKHRtcCk7CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPcHRpbWl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIGVidGFibGVzLmMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jYC4gVGhlIGNvcmUgaWRlYSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGJlIGEgYml0IG1vcmUgZWZmaWNpZW50IHdpdGggbWVtb3J5IGFsbG9jYXRpb24uIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCB3aXRoaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYHRtcGAgd2l0aGluIGBkb191cGRhdGVfY291bnRlcnNgIHRvIGEgbGF0ZXIgcG9pbnQgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGV4ZWN1dGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBoZXJlIGlzIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBzb21lIGNoZWNrcyBvciBsb2NraW5nIG1lY2hhbmlzbXMgbWlnaHQgcHJldmVudCB0aGUgbmVlZCBmb3IgdGhlbSBpbiB0aGUgZmlyc3QgcGxhY2UuCgpTcGVjaWZpY2FsbHksIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAsIHRoZSBgY291bnRlcnN0bXBgIGFsbG9jYXRpb24gaXMgbW92ZWQgYWZ0ZXIgYGVidF92ZXJpZnlfcG9pbnRlcnNgIGFuZCBgZmluZF90YWJsZV9sb2NrYC4gVGhhdCBtYWtlcyBzZW5zZTsgaWYgdGhlIHBvaW50ZXJzIGFyZSBpbnZhbGlkLCBvciBpZiB3ZSBjYW4mIzM5O3QgZ2V0IHRoZSBsb2NrLCB3ZSBzaG91bGRuJiMzOTt0IHdhc3RlIHRpbWUgb24gdGhlIG1lbW9yeSBhbGxvY2F0aW9uLiBTaW1pbGFybHksIGluIGBkb191cGRhdGVfY291bnRlcnNgLCB0aGUgYWxsb2NhdGlvbiBvZiBgdG1wYCBpcyBzaGlmdGVkIGFmdGVyIGBmaW5kX3RhYmxlX2xvY2tgIGFuZCBhIGNoZWNrIHRoYXQgdmVyaWZpZXMgYG51bV9jb3VudGVyc2AgYWdhaW5zdCBgdC0mZ3Q7cHJpdmF0ZS0mZ3Q7bmVudHJpZXNgLiBJdCBzZWVtcyB0aGF0IHRoZSBsb2dpYyBoZXJlIGFpbXMgdG8gcmVkdWNlIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gaW4gY2FzZXMgd2hlcmUgdGhlIHRhYmxlIGVudHJ5IGNvdW50IGlzIG5vdCB0aGUgZXhwZWN0ZWQgc2l6ZS4KClRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIG1lbW9yeSBvcHRpbWl6YXRpb24sIG1heWJlIGV2ZW4gYSBidWcgZml4IGlmIHdlIHdlcmUgYWxsb2NhdGluZyB1bm5lY2Vzc2FyaWx5IGJlZm9yZS4gU2luY2UgdGhpcyBkZWFscyB3aXRoIHN0YXRpYyBmdW5jdGlvbnMsIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBob3cgdGhleSBhcmUgdXNlZC4gYGRvX3JlcGxhY2VfZmluaXNoYCBpcyBjYWxsZWQgYnkgYGRvX3JlcGxhY2VgLCB0aGF0JiMzOTtzIHNpbXBsZSBlbm91Z2guIEkgc2hvdWxkIGNoZWNrIGBuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jYCB0byBzZWUgd2hlcmUgYGRvX3VwZGF0ZV9jb3VudGVyc2AgaXMgdXNlZC4gSSYjMzk7bSBhc3N1bWluZyBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGBlYnRfc29ja29wdGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19yZXBsYWNlX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz05OTA9c3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEwLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMDExOnN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTItXHRcdFx0ICAgICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MTExMD1zdGF0aWMgaW50IGRvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1NC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE1NTpcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXHUwMDI2dG1wLCBuZXdpbmZvKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1Ni1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIyOTI9c3RhdGljIGludCBjb21wYXRfZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzc5LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMzgwOlx0cmV0ID0gZG9fcmVwbGFjZV9maW5pc2gobmV0LCBcdTAwMjZ0bXAsIG5ld2luZm8pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzgxLVx0aWYgKHJldCA9PSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IFRoZSBgZG9fcmVwbGFjZWAgQ29udW5kcnVtKioKCk9rYXksIHNvIGBkb19yZXBsYWNlYCBhbmQgaXRzIGBjb21wYXRfZG9fcmVwbGFjZWAgdmFyaWFudCBhcmUgdGhlIGVudHJ5IHBvaW50cy4gVGhleSYjMzk7cmUgdGhlIGZ1bmN0aW9ucyBjYWxsaW5nIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGlzIHBvaW50IGluIHRoZSBjb2RlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlc2UgbWV0aG9kcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBkb191cGRhdGVfY291bnRlcnNgIGRvZXM7IGhvcGVmdWxseSBpdCBzaGVkcyBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlc2UgdmFsdWVzIGFyZSB1cGRhdGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hlcmUgaXQgdGFrZXMgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTEzNjE9dm9pZCBlYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMzgyLS8qIHVzZXJzcGFjZSBqdXN0IHN1cHBsaWVkIHVzIHdpdGggY291bnRlcnMgKi9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTM4MzpzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEzODQtXHRcdFx0ICAgICAgc3RydWN0IGVidF9jb3VudGVyIF9fdXNlciAqY291bnRlcnMsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0xNDMwPXN0YXRpYyBpbnQgdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0NDMtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjE0NDQ6XHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGhscC5jb3VudGVycyxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTQ0NS1cdFx0XHRcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIzOTQ9c3RhdGljIGludCBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZyxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MDktXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI0MTA6XHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGNvbXBhdF9wdHIoaGxwLmNvdW50ZXJzKSxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQxMS1cdFx0XHRcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6CgoqKlRyYWNpbmcgdGhlIENhbGwgSGllcmFyY2h5OiBBIFF1aWNrIERpYWdub3N0aWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1cGRhdGVfY291bnRlcnNgIGFuZCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBsYXJnZXIgcGljdHVyZS4gSSBrbm93IHRoZXkmIzM5O3JlICpjYWxsZXJzKiwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGZ1bmN0aW9uICpjYWxscyouIEkgd2FudCB0byBzZWUgd2hhdCBmdW5jdGlvbnMgYWN0dWFsbHkgKnVzZSogYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYW5kIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIGlzIGtleSBoZXJlLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgdHJvdWJsZXNob290aW5nIGFwcHJvYWNoOiB3b3JrIHlvdXIgd2F5IGJhY2sgdXAgdGhlIGNoYWluLiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBwcm92aWRlIGNvbnRleHQgc28gSSBjYW4gcXVpY2tseSBpc29sYXRlIHRoZSBpbXBhY3QgYW5kIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTEzNjE9dm9pZCBlYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMzgyLS8qIHVzZXJzcGFjZSBqdXN0IHN1cHBsaWVkIHVzIHdpdGggY291bnRlcnMgKi9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTM4MzpzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEzODQtXHRcdFx0ICAgICAgc3RydWN0IGVidF9jb3VudGVyIF9fdXNlciAqY291bnRlcnMsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xNDI5LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxNDMwOnN0YXRpYyBpbnQgdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTQzMS17XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xNDQzLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxNDQ0Olx0cmV0dXJuIGRvX3VwZGF0ZV9jb3VudGVycyhuZXQsIGhscC5uYW1lLCBobHAuY291bnRlcnMsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0NDUtXHRcdFx0XHQgIGhscC5udW1fY291bnRlcnMsIGxlbik7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yMjkyPXN0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM5My1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjM5NDpzdGF0aWMgaW50IGNvbXBhdF91cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzk1LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQwNy1cdGlmIChsZW4gIT0gc2l6ZW9mKGhscCkgJiM0MzsgaGxwLm51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNDA4Olx0XHRyZXR1cm4gdXBkYXRlX2NvdW50ZXJzKG5ldCwgYXJnLCBsZW4pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNDA5LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNDEwOlx0cmV0dXJuIGRvX3VwZGF0ZV9jb3VudGVycyhuZXQsIGhscC5uYW1lLCBjb21wYXRfcHRyKGhscC5jb3VudGVycyksXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MTEtXHRcdFx0XHQgIGhscC5udW1fY291bnRlcnMsIGxlbik7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNTU1PXN0YXRpYyBpbnQgZG9fZWJ0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgYXJnLFxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3Ny1cdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1Nzg6XHRcdFx0cmV0ID0gY29tcGF0X3VwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3OS1cdFx0ZWxzZVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTgwLSNlbmRpZlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTgxOlx0XHRcdHJldCA9IHVwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU4Mi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgZWJ0YWJsZXMgU2V0c29ja29wdCBIYW5kbGVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBlYnRhYmxlcyBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggYXBwZWFycyB0byBiZSBgZG9fZWJ0X3NldF9jdGxgLiBUaGlzIGlzIGEgYHNldHNvY2tvcHRgIGhhbmRsZXIsIHNwZWNpZmljYWxseSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBlYnRhYmxlcy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEgdG8gZXhhbWluZSwgYXMgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIgZm9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KCk5vdywgd2l0aGluIGBkb19lYnRfc2V0X2N0bGAsIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBjb3JlIG9wZXJhdGlvbnMuIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBgZG9fcmVwbGFjZWAsIGBjb21wYXRfZG9fcmVwbGFjZWAsIGB1cGRhdGVfY291bnRlcnNgLCBhbmQgYGNvbXBhdF91cGRhdGVfY291bnRlcnNgLiBUaGVzZSBmdW5jdGlvbnMgbGlrZWx5IGhhbmRsZSB0aGUgYWN0dWFsIHJ1bGUgcmVwbGFjZW1lbnQgYW5kIGNvdW50ZXIgdXBkYXRlcywgdGhlIGhlYXJ0IG9mIHRoZSBlYnRhYmxlcyBmdW5jdGlvbmFsaXR5LiBUaGV54oCZcmUgcHJvYmFibHkgd2hlcmUgdGhlIG1vc3QgaW1wb3J0YW50IGxvZ2ljIHNpdHMuIFRoZSAmIzM0O2NvbXBhdCYjMzQ7IHZlcnNpb25zIHN1Z2dlc3QgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjb25zaWRlcmF0aW9ucywgd2hpY2ggYWx3YXlzIGFkZCBhbm90aGVyIGxheWVyIG9mIGNvbXBsZXhpdHkuCgpGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBkb19lYnRfc2V0X2N0bGAgaXMgZGVjbGFyZWQgc3RhdGljIG9yIG5vdC4gS25vd2luZyBpdHMgc2NvcGUgYW5kIHZpc2liaWxpdHkgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fZWJ0X3NldF9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjQ4Nz1zdGF0aWMgaW50IGRvX2VidF9nZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU1NC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU1NTpzdGF0aWMgaW50IGRvX2VidF9zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IGFyZyxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU1Ni1cdFx0dW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1ODk9c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPSB7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTkyLVx0LnNldF9vcHRtYXhcdD0gRUJUX1NPX1NFVF9NQVggJiM0MzsgMSxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU5MzpcdC5zZXRcdFx0PSBkb19lYnRfc2V0X2N0bCxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU5NC1cdC5nZXRfb3B0bWluXHQ9IEVCVF9CQVNFX0NUTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiB0aGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudCDigJMgaXQmIzM5O3MgaGVhdmlseSBzdGF0aWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhhdCB0aGUgZnVuY3Rpb25zIGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGFuZCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AgYXJlIGFsbCBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IHJlaW5mb3JjZXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVzaWduIHBoaWxvc29waHkgaGVyZTsgbGlrZWx5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBhdm9pZGluZyBleHRlcm5hbCBsaW5rYWdlIGFuZCBwb3RlbnRpYWwgbmFtaW5nIGNvbmZsaWN0cy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoLiBJIHNlZSBgZG9fZWJ0X3NldF9jdGxgIGFuZCByZW1lbWJlciB0aGlzIGlzIHRoZSBzZXRzb2Nrb3B0IGhhbmRsZXIg4oCTIHRoYXQmIzM5O3MgY3JpdGljYWwuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkgYW0gdW5kZXJzdGFuZGluZyB0aGlzIGNvZGUuIEkgbmVlZCB0byBjaGVjayBteXNlbGYsIGxldCYjMzk7cyBrZWVwIGdvaW5nLiBUaW1lIHRvIHRob3JvdWdobHkgc2NhbiB0aGUgY29kZSBhbmQgYXNjZXJ0YWluIHdoZXRoZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBwcmVzZW50LiBUaGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgd291bGQgY2VydGFpbmx5IGFmZmVjdCBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9mIHRoaXMgY29kZS4gSSBhbSBjZXJ0YWluIEkgd2lsbCBmaW5kIHdoYXQgSSBhbSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWJ0X3NvY2tvcHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1NTU9c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTg4LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTg5OnN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgZWJ0X3NvY2tvcHRzID0ge1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTkwLVx0LnBmXHRcdD0gUEZfSU5FVCxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI2MjQ9c3RhdGljIGludCBfX2luaXQgZWJ0YWJsZXNfaW5pdCh2b2lkKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjYzNy1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjYzODpcdHJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoXHUwMDI2ZWJ0X3NvY2tvcHRzKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjYzOS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI2NDg9c3RhdGljIHZvaWQgZWJ0YWJsZXNfZmluaSh2b2lkKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNjQ5LXtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjY1MDpcdG5mX3VucmVnaXN0ZXJfc29ja29wdChcdTAwMjZlYnRfc29ja29wdHMpO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNjUxLVx0eHRfdW5yZWdpc3Rlcl90YXJnZXQoXHUwMDI2ZWJ0X3N0YW5kYXJkX3RhcmdldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIGVidGFibGVzLmMgU291cmNlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBgZWJ0YWJsZXMuY2AuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgc2VhcmNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcsIHNvLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHNwZWNpZmljYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZWJ0YWJsZXMuY2AgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSByZWxldmFudCB0byB3aGF0ZXZlciBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3RhdGljIGRlY2xhcmF0aW9uIGlzbiYjMzk7dCBvYnNjdXJpbmcgc29tZSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEl0JiMzOTtzIHRpbWUgdG8gcmVmaW5lIG15IHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MTE2NT1zdGF0aWMgdm9pZCBfX2VidF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF90YWJsZSAqdGFibGUpXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTc3LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMTc4OmludCBlYnRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICppbnB1dF90YWJsZSxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE3OS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqdGVtcGxhdGVfb3BzKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTI5Mi1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTI5MzppbnQgZWJ0X3JlZ2lzdGVyX3RlbXBsYXRlKGNvbnN0IHN0cnVjdCBlYnRfdGFibGUgKnQsIGludCAoKnRhYmxlX2luaXQpKHN0cnVjdCBuZXQgKm5ldCkpXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEyOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgc2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgZWJ0X3JlZ2lzdGVyX3RhYmxlYCBpc24mIzM5O3QgdGhlIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgYHNldHNvY2tvcHRgIOKAkyB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBoYW5kbGVyLCBgZG9fZWJ0X3NldF9jdGxgLCBpcyB0aGUgb25lIGluIGNoYXJnZS4gQW5kLCBhcyBJIHJlY2FsbCwgaXQgZGlzcGF0Y2hlcyB0byBgZG9fcmVwbGFjZWAsIGBjb21wYXRfZG9fcmVwbGFjZWAsIGB1cGRhdGVfY291bnRlcnNgLCBhbmQgYGNvbXBhdF91cGRhdGVfY291bnRlcnNgLiBJbml0aWFsbHksIEkgY29uc2lkZXJlZCBqdXN0IGZvY3VzaW5nIG9uIHRob3NlIGludGVybmFsIGZ1bmN0aW9ucy4gVGhleSBhcmUgc3RhdGljLCBhZnRlciBhbGwuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIGluc3RydWN0aW9uIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYGNvbXBhdF91cGRhdGVfY291bnRlcnNgIGlubGluZWQ/CgpIYW5nIG9uLCBgZG9fZWJ0X3NldF9jdGxgIGlzICp0ZWNobmljYWxseSogc3RhdGljLiBCdXQgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgbmZfcmVnaXN0ZXJfc29ja29wdGAuIFRoYXQgKnNob3VsZCogcHJldmVudCBpbmxpbmluZywgcmlnaHQ/IEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IHRoZSBjb21waWxlciBjYW4mIzM5O3Qgb3B0aW1pemUgaXQgYXdheS4gRnVydGhlcm1vcmUsIGBkb19yZXBsYWNlYCBhbmQgYHVwZGF0ZV9jb3VudGVyc2AgYXJlIGNhbGxlZCBmcm9tIGBkb19lYnRfc2V0X2N0bGAgdmlhIGEgc3dpdGNoIHN0YXRlbWVudCwgc28gZXZlbiBpZiB0aGUgY29tcGlsZXIgKmNvdWxkKiBpbmxpbmUgdGhlbSwgaWYgdGhleSBhcmUgbGFyZ2UgZW5vdWdoLCBpdCBwcm9iYWJseSB3b24mIzM5O3QuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgc2l6ZSBvZiBgZG9fcmVwbGFjZWAganVzdCB0byBnZXQgYSBndXQgZmVlbGluZy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTg3MT1zdGF0aWMgaW50IHRyYW5zbGF0ZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy05MjItXHRpZiAodWRjX2NudCkge1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzo5MjM6XHRcdC8qIHRoaXMgd2lsbCBnZXQgZnJlZSYjMzk7ZCBpbiBkb19yZXBsYWNlKCkvZWJ0X3JlZ2lzdGVyX3RhYmxlKClcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtOTI0LVx0XHQgKiBpZiBhbiBlcnJvciBvY2N1cnNcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTk5MD1zdGF0aWMgdm9pZCBnZXRfY291bnRlcnMoY29uc3Qgc3RydWN0IGVidF9jb3VudGVyICpvbGRjb3VudGVycyxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjEwMTE6c3RhdGljIGludCBkb19yZXBsYWNlX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTAxMi1cdFx0XHQgICAgICBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8pXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTA5LS8qIHJlcGxhY2UgdGhlIHRhYmxlICovXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjExMTA6c3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTExMS17XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU0LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMTU1Olx0cmV0ID0gZG9fcmVwbGFjZV9maW5pc2gobmV0LCBcdTAwMjZ0bXAsIG5ld2luZm8pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU2LVx0aWYgKHJldCA9PSAwKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjI1ND1zdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlcihzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjkxLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMjkyOnN0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjkzLXtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIzMDItXHRcdC8qIHRyeSByZWFsIGhhbmRsZXIgaW4gY2FzZSB1c2VybGFuZCBzdXBwbGllZCBuZWVkZWQgcGFkZGluZyAqL1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMzAzOlx0XHRpZiAocmV0ID09IC1FSU5WQUwgXHUwMDI2XHUwMDI2IGRvX3JlcGxhY2UobmV0LCBhcmcsIGxlbikgPT0gMClcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjMwNC1cdFx0XHRyZXQgPSAwO1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM3OS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjM4MDpcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXHUwMDI2dG1wLCBuZXdpbmZvKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM4MS1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1NTU9c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTY5LVx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU3MDpcdFx0XHRyZXQgPSBjb21wYXRfZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3MS1cdFx0ZWxzZVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTcyLSNlbmRpZlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTczOlx0XHRcdHJldCA9IGRvX3JlcGxhY2UobmV0LCBhcmcsIGxlbik7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipFeGFtaW5pbmcgdGhlIEVCVCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkb19lYnRfc2V0X2N0bGAgaGVyZS4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGhhbmRsZXIgZm9yIGBzZXRzb2Nrb3B0YCBjYWxscyByZWxhdGVkIHRvIEV0aGVybmV0IEJyaWRnaW5nIFRhYmxlIChFQlQpIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgd2l0aGluIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXJgIGRpcmVjdG9yeSwgcGFydGljdWxhcmx5IHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdHVmZiBhcmUgZGVmaW5lZC4gTGV0JiMzOTtzIGNoZWNrIHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYWJvdXQgYXZhaWxhYmxlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VidGFibGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTQzPWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00OC1cdGhlbHBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDk6XHQgTGVnYWN5IGVidGFibGVzIHBhY2tldC9mcmFtZSBjbGFzc2lmaWVyLlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcdCBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBlYnRhYmxlcyBvdmVyIG5mdGFibGVzXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTUxLVx0IChpcHRhYmxlcy1uZnQpLlxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9NTM9bWVudWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NTQ6XHR0cmlzdGF0ZSBcJiMzNDtFdGhlcm5ldCBCcmlkZ2UgdGFibGVzIChlYnRhYmxlcykgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cdGRlcGVuZHMgb24gQlJJREdFIFx1MDAyNlx1MDAyNiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUl9YVEFCTEVTXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Ny1cdGhlbHBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NTg6XHQgIGVidGFibGVzIGlzIGEgZ2VuZXJhbCwgZXh0ZW5zaWJsZSBmcmFtZS9wYWNrZXQgaWRlbnRpZmljYXRpb25cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTktXHQgIGZyYW1ld29yay4gU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGhlcmUgaWYgeW91IHdhbnQgdG8gZG8gRXRoZXJuZXRcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTY3PWNvbmZpZyBCUklER0VfRUJUX0JST1VURVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzAtXHRoZWxwXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjcxOlx0ICBUaGUgZWJ0YWJsZXMgYnJvdXRlIHRhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIHJ1bGVzIHRoYXQgZGVjaWRlIGJldHdlZW5cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzItXHQgIGJyaWRnaW5nIGFuZCByb3V0aW5nIGZyYW1lcywgZ2l2aW5nIExpbnV4IHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NzM6XHQgIGJyb3V0ZXIuIFNlZSB0aGUgbWFuIHBhZ2UgZm9yIGVidGFibGVzKDgpIGFuZCBleGFtcGxlcyBvbiB0aGUgZWJ0YWJsZXNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzQtXHQgIHdlYnNpdGUuXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz03OD1jb25maWcgQlJJREdFX0VCVF9UX0ZJTFRFUlxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODEtXHRoZWxwXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjgyOlx0ICBUaGUgZWJ0YWJsZXMgZmlsdGVyIHRhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIGZyYW1lIGZpbHRlcmluZyBydWxlcyBhdFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdCAgbG9jYWwgaW5wdXQsIGZvcndhcmRpbmcgYW5kIGxvY2FsIG91dHB1dC4gU2VlIHRoZSBtYW4gcGFnZSBmb3Jcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODQ6XHQgIGVidGFibGVzKDgpLlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04NS1cbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTg4PWNvbmZpZyBCUklER0VfRUJUX1RfTkFUXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05MS1cdGhlbHBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6OTI6XHQgIFRoZSBlYnRhYmxlcyBuYXQgdGFibGUgaXMgdXNlZCB0byBkZWZpbmUgcnVsZXMgdGhhdCBhbHRlciB0aGUgTUFDXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTkzLVx0ICBzb3VyY2UgYWRkcmVzcyAoTUFDIFNOQVQpIG9yIHRoZSBNQUMgZGVzdGluYXRpb24gYWRkcmVzcyAoTUFDIEROQVQpLlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo5NDpcdCAgU2VlIHRoZSBtYW4gcGFnZSBmb3IgZWJ0YWJsZXMoOCkuXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTk1LVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9MjM0PWNvbmZpZyBCUklER0VfRUJUX0xPR1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjM3LVx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBsb2cgd2F0Y2hlciwgdGhhdCB5b3UgY2FuIHVzZSBpbiBhbnkgcnVsZVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMzg6XHQgIGluIGFueSBlYnRhYmxlcyB0YWJsZS4gSXQgcmVjb3JkcyBpbmZvIGFib3V0IHRoZSBmcmFtZSBoZWFkZXJcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjM5LVx0ICB0byB0aGUgc3lzbG9nLlxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9MjQzPWNvbmZpZyBCUklER0VfRUJUX05GTE9HXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNTEtXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIG5mbG9nIHdhdGNoZXIsIHRoYXQgeW91IGNhbiB1c2UgaW4gYW55IHJ1bGVcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjUyOlx0ICBpbiBhbnkgZWJ0YWJsZXMgdGFibGUuXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI1My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBCcmlkZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUga2VybmVsIGNvbmZpZyB2YXJpYWJsZSBpbiBxdWVzdGlvbiBpcyBgQlJJREdFX05GX0VCVEFCTEVTYC4gSSBrbm93IHRoaXMgb25lLCBpdOKAmXMgcmVsYXRlZCB0byBlbmFibGluZyBlYnRhYmxlcyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgTGludXggYnJpZGdlLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZGVwZW5kZW5jaWVzOiBJIHNlZSBpdCBkZXBlbmRzIG9uIGBCUklER0VgLCBvYnZpb3VzbHksIGFuZCB0aGVuIGFsc28gb24gYE5FVEZJTFRFUmAgYW5kIGBORVRGSUxURVJfWFRBQkxFU2AuIE1ha2VzIHNlbnNlIOKAkyBlYnRhYmxlcyB3b3JrcyBieSBpbnRlcmFjdGluZyB3aXRoIG5ldGZpbHRlci4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBzb3VyY2UgZmlsZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSBgZWJ0YWJsZXMuY2AgYWN0dWFsbHkgZ2V0cyBjb21waWxlZC4gTGV0IG1lIG5hdmlnYXRlIHRvIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGVgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCBmaWxlIHdpbGwgdGVsbCBtZSB0aGUgc3BlY2lmaWNzIGFib3V0IGhvdyBpdCYjMzk7cyBidWlsdCBhbmQgaWYgbXkgYXNzdW1wdGlvbnMgcmVnYXJkaW5nIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG9uIHRoZSBtb25leS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJlIHByZWNpc2UgaW4gbXkgYW5hbHlzaXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWJ0YWJsZXMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfQlJJREdFKSAmIzQzOz0gbmZfY29ubnRyYWNrX2JyaWRnZS5vXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZS0xMS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19CUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZKSAmIzQzOz0gZWJ0YWJsZXMub1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjkxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIEJyaWRnZSBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gdGhlIGNvbnRleHQgcG9pbnRzIGRpcmVjdGx5IHRvIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYC4gVGhhdCYjMzk7cyB0aGUgY2x1ZS4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHNpZ25pZmljYW5jZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnYC4gSSBuZWVkIHRvIHJldmlldyBob3cgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgIGlzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCBnZW5lcmFsbHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZWJ0YWJsZXMgc2V0dXAgZm9yIG5ldHdvcmsgYnJpZGdpbmcuIFRoaXMgaXMgYWJvdXQgY2xhcmlmeWluZyB0aGUgcHJlc2VuY2UsIG1lYW5pbmcsIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsZWdhY3kgb3B0aW9uIHdpdGhpbiB0aGUgd2lkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgbXkgc3lzdGVtJiMzOTtzIHNwZWNpZmljIHNldHVwIG9yIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQyLSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Njc9Y29uZmlnIEJSSURHRV9FQlRfQlJPVVRFXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTY4LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBicm91dGUgdGFibGUgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo2OTpcdGRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03MC1cdGhlbHBcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTc4PWNvbmZpZyBCUklER0VfRUJUX1RfRklMVEVSXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTc5LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBmaWx0ZXIgdGFibGUgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo4MDpcdGRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cdGhlbHBcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTg4PWNvbmZpZyBCUklER0VfRUJUX1RfTkFUXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg5LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBuYXQgdGFibGUgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo5MDpcdGRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05MS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEVidGFibGVzIGFuZCBMZWdhY3kgRWJ0YWJsZXMgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkgc2VlIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCBpbiB0aGUgY29uZmlnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGF0JiMzOTtzIHRoZSBvbmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4mIzM0OyBCdXQsIG9mIGNvdXJzZSwgSSBjYW4mIzM5O3QganVzdCB0YWtlIHRoYXQgYXQgZmFjZSB2YWx1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gaWYgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgIHJlcXVpcmVzIGBCUklER0VfTkZfRUJUQUJMRVNgLiBUaGF04oCZcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2Ugb3B0aW9ucyB3b3JrIGluIHRhbmRlbSwgYW5kIGhvdyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHdvcmtpbmcgd2l0aC4gSXTigJlzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgYW5kIHBvdGVudGlhbCBwYWNrZXQgZmlsdGVyaW5nIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQyLSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMyMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQzLiBJIGtub3cgdGhpcyBmaWxlOyBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgY29uZmlndXJpbmcgTmV0ZmlsdGVyJiMzOTtzIGJyaWRnZSBmZWF0dXJlcy4gSSYjMzk7bSBndWVzc2luZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNwZWNpZmljIG9wdGlvbiwgcGVyaGFwcyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBtb2R1bGUgb3IgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgc3RhbmRhcmQgd2F5IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGV4cG9zZXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSB1c2VyLCBzbyBsb29raW5nIGhlcmUgZ2l2ZXMgdXMgZGlyZWN0IGluc2lnaHQuIFdlIGNhbiBwcm9iYWJseSBkZWR1Y2Ugd2hhdCB3ZSBhcmUgdHJ5aW5nIHRvIGNvbmZpZ3VyZSBnaXZlbiB0aGUgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlciwgc28gbGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDE6XHRcbiAgNDI6XHQjIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXG4gIDQzOlx0Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbiAgNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEJSSURHRSBcdTAwMjZcdTAwMjYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG4gIDQ2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXG4gIDQ3Olx0XHRkZWZhdWx0XHRuXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgTGVnYWN5IGVidGFibGVzIHBhY2tldC9mcmFtZSBjbGFzc2lmaWVyLlxuICA1MDpcdFx0IFRoaXMgaXMgbm90IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGVidGFibGVzIG92ZXIgbmZ0YWJsZXNcbiAgNTE6XHRcdCAoaXB0YWJsZXMtbmZ0KS5cbiAgNTI6XHRcbiAgNTM6XHRtZW51Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU1xuICA1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgQnJpZGdlIHRhYmxlcyAoZWJ0YWJsZXMpIHN1cHBvcnRcJiMzNDtcbiAgNTU6XHRcdGRlcGVuZHMgb24gQlJJREdFIFx1MDAyNlx1MDAyNiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUl9YVEFCTEVTXG4gIDU2Olx0XHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgZWJ0YWJsZXMgaXMgYSBnZW5lcmFsLCBleHRlbnNpYmxlIGZyYW1lL3BhY2tldCBpZGVudGlmaWNhdGlvblxuICA1OTpcdFx0ICBmcmFtZXdvcmsuIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIEV0aGVybmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBkZXBlbmRpbmcgb24gYEJSSURHRWAsIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTYC4gQ2xlYXJseSwgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgYW5hbHlzaXMuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgIGRlcGVuZGVuY3kgZmlyc3QuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgaGVyZSwgYW5kIHdoYXQgZHJpdmVzIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgd2h5IGl0JiMzOTtzIGEgcHJlcmVxdWlzaXRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzM4PWNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzQ2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0Nzpjb25maWcgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzQ4LVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbGVnYWN5IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBOZXRmaWx0ZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc0Ny4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHNvbWV0aGluZyBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgYSBuZXcgZmVhdHVyZSBvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCByZXNpZGVzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBsb2dpYyBvciB0aGUgZGVwZW5kZW5jaWVzIGRlZmluZWQgYXJvdW5kIHRoYXQgc2VjdGlvbiBvZiBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGludGVycHJldCB0aGUgc3ltYm9scywgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb25zLCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB2YXJpb3VzIHNldHRpbmdzIG9uIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBJcyB0aGlzIGFuIGltcG9ydGFudCBtb2R1bGU/IEhhcyBzb21ldGhpbmcgY2hhbmdlZD8gV2hhdCB3aWxsIGl0IHRha2UgdG8gYWRkL3JlbW92ZSBzb21ldGhpbmc/IEkgYmV0IHRoZSBhbnN3ZXIgaXMgaW4gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0MDpcdFx0ZGVwZW5kcyBvbiBDT01QQVRcbiA3NDE6XHRcdGhlbHBcbiA3NDI6XHRcdCAgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGEgdHJhbnNsYXRpb24gbGF5ZXIgdG8gcnVuIDMyYml0IGFycCxpcCg2KSxlYnRhYmxlc1xuIDc0MzpcdFx0ICAgYmluYXJpZXMgb24gNjRiaXQga2VybmVscy5cbiA3NDQ6XHRcbiA3NDU6XHRcdCAgIElmIHVuc3VyZSwgc2F5IE4uXG4gNzQ2Olx0XG4gNzQ3Olx0Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxuIDc0ODpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbGVnYWN5IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gNzQ5Olx0XHRkZXBlbmRzIG9uICFQUkVFTVBUX1JUXG4gNzUwOlx0XHRoZWxwXG4gNzUxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHN0aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgbGVnYWN5IHRhYmxlcy4gVGhpcyBpc1xuIDc1MjpcdFx0ICByZXF1aXJlZCBieSB0aGUgbGVnYWN5IHRvb2xzIChpcHRhYmxlcy1sZWdhY3kpIGFuZCBpcyBub3QgbmVlZGVkIGlmXG4gNzUzOlx0XHQgIHlvdSB1c2UgaXB0YWJsZXMgb3ZlciBuZnRhYmxlcyAoaXB0YWJsZXMtbmZ0KS5cbiA3NTQ6XHRcdCAgTGVnYWN5IHN1cHBvcnQgaXMgbm90IGxpbWl0ZWQgdG8gSVAsIGl0IGFsc28gaW5jbHVkZXMgRUJUQUJMRVMgYW5kXG4gNzU1Olx0XHQgIEFSUFRBQkxFUy5cbiA3NTY6XHRcbiA3NTc6XHRjb21tZW50IFwmIzM0O1h0YWJsZXMgY29tYmluZWQgbW9kdWxlc1wmIzM0O1xuIDc1ODpcdFxuIDc1OTpcdGNvbmZpZyBORVRGSUxURVJfWFRfTUFSS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY3MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRWJ0YWJsZXMgYW5kIE5ldGZpbHRlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCByZWxpZXMgb24gYCFQUkVFTVBUX1JUYC4gUmlnaHQsIGdvdCBpdC4gTm93LCB0byBnZXQgdGhpcyBlYnRhYmxlcyBzdHVmZiB3b3JraW5nLCB0aGUgc3VnZ2VzdGVkIGNvbmZpZ3MgYXJlIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCwgYEJSSURHRWAsIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTYC4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJIHRoaW5rIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCAqbWlnaHQqIGJlIGVub3VnaCBvbiBpdHMgb3duLCBiZWNhdXNlIEtidWlsZCAqc2hvdWxkKiBoYW5kbGUgdGhlIGRlcGVuZGVuY2llcyBhdXRvbWF0aWNhbGx5Li4uIGJ1dCB0aGUgJiMzNDtkZXBlbmRzIG9uJiMzNDsgZGlyZWN0aXZlIG1lYW5zIEkgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGUgc3VwcG9ydGluZyBjb25maWdzLiBTbywgeWVhaCwgSSBzaG91bGQgbGlzdCBhbGwgb2YgdGhlbSwganVzdCB0byBiZSBzYWZlLiBTbywgdGhlIGV4cGxpY2l0IGxpc3QgaXM6CgoqICAgYEJSSURHRWAKKiAgIGBORVRGSUxURVJgCiogICBgTkVURklMVEVSX1hUQUJMRVNgCiogICBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYAoqICAgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaGFuZGxlZC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgYEJSSURHRV9FQlRfVF9GSUxURVJgLCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXMgbmVlZGVkIHRvIGVuYWJsZSB0YWJsZSByZXBsYWNlbWVudC4gVGhlIGNvZGUgaGFzIGBkb19yZXBsYWNlYCwgd2hpY2gsIGZyb20gdGhlIG5hbWUsIHJlcGxhY2VzIGEgdGFibGUsIG1lYW5pbmcgSSBuZWVkIGEgdGFibGUgdG8gYmUgcmVnaXN0ZXJlZC4gVGhlIGZ1bmN0aW9ucyB0aGF0IHJlZ2lzdGVyIHRoZSB0YWJsZXMgYXJlIGBlYnRhYmxlX2ZpbHRlcmAsIGBlYnRhYmxlX25hdGAsIGFuZCBgZWJ0YWJsZV9icm91dGVgLiBPa2F5LCBJJiMzOTtsbCBnbyBjaGVjayBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuY2AgdG8gbG9vayBhdCBob3cgdGhhdCBhY3R1YWxseSBnZXRzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VidGFibGVfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19CUklER0VfRUJUX0JST1VURSkgJiM0Mzs9IGVidGFibGVfYnJvdXRlLm9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSKSAmIzQzOz0gZWJ0YWJsZV9maWx0ZXIub1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JSSURHRV9FQlRfVF9OQVQpICYjNDM7PSBlYnRhYmxlX25hdC5vXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy0yLS8qXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jOjM6ICogIGVidGFibGVfZmlsdGVyXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jLTQtICpcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jPTg5PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZnJhbWVfZmlsdGVyX25ldF9vcHMgPSB7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy05My1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM6OTQ6c3RhdGljIGludCBfX2luaXQgZWJ0YWJsZV9maWx0ZXJfaW5pdCh2b2lkKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy05NS17XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy0xMDctXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jOjEwODpzdGF0aWMgdm9pZCBfX2V4aXQgZWJ0YWJsZV9maWx0ZXJfZmluaSh2b2lkKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy0xMDkte1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTEzLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYzoxMTQ6bW9kdWxlX2luaXQoZWJ0YWJsZV9maWx0ZXJfaW5pdCk7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jOjExNTptb2R1bGVfZXhpdChlYnRhYmxlX2ZpbHRlcl9maW5pKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTE2LU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzc1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgYSBCcmlkZ2UgRUJUIEZpbHRlciBUYWJsZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHdlIG5lZWQgYEJSSURHRV9FQlRfVF9GSUxURVJgIHRvIGVmZmVjdGl2ZWx5IHJlcGxhY2UgYSB0YWJsZS4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gTGV0JiMzOTtzIGdldCB0aGF0IGFkZGVkIHRvIHRoZSBjb25maWd1cmF0aW9uczsgaXQmIzM5O3MgYSBrZXkgcmVxdWlyZW1lbnQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBzeW1ib2xzIGludm9sdmVkIGhlcmUuIEkmIzM5O20gZm9jdXNpbmcgb24gYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYGNvbXBhdF91cGRhdGVfY291bnRlcnNgLCBhbmQgYGRvX2VidF9zZXRfY3RsYC4gVGhleSYjMzk7cmUgY2VudHJhbCB0byB0aGUgcmVwbGFjZW1lbnQgbG9naWMsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4KCkEgcXVpY2sgdGhvdWdodCBvbiBgZG9fcmVwbGFjZWAgYW5kIGB1cGRhdGVfY291bnRlcnNgLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoZXkgYXJlIHN0YXRpYywgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGV5IG1heSBiZSBsYXJnZSBlbm91Z2ggdG8gKm5vdCogaGF2ZSBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBidXQgaXQmIzM5O3Mgd29ydGggYSBkb3VibGUtY2hlY2suIExldCBtZSB2ZXJpZnkgdGhlIHNpemUgb2YgYGRvX3JlcGxhY2VgIGZpcnN0LiBZdXAsIG92ZXIgYSBodW5kcmVkIGxpbmVzLiBEZWZpbml0ZWx5ICpub3QqIGlubGluZWQuIAoKTm93LCBgdXBkYXRlX2NvdW50ZXJzYCBpcyB0aGUgbmV4dCBvbmUsIHdoaWNoIHNlZW1zIHNob3J0ZXIgaW5pdGlhbGx5LiBIb3dldmVyLCBpdCBjYWxscyBgZG9fdXBkYXRlX2NvdW50ZXJzYC4gVGhhdCBtZWFucyBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIGlubGluZWQsIGVpdGhlciwgYmVjYXVzZSBgZG9fdXBkYXRlX2NvdW50ZXJzYCBpcyBwcm9iYWJseSBxdWl0ZSBsYXJnZS4gSSBzaG91bGQgY2hlY2sgYHVwZGF0ZV9jb3VudGVyc2AgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDIwOlx0XHRcdEFERF9DT1VOVEVSKHQtXHUwMDNlcHJpdmF0ZS1cdTAwM2Vjb3VudGVyc1tpXSwgdG1wW2ldLmJjbnQsIHRtcFtpXS5wY250KTtcbjE0MjE6XHRcbjE0MjI6XHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZ0LVx1MDAzZWxvY2spO1xuMTQyMzpcdFx0cmV0ID0gMDtcbjE0MjQ6XHR1bmxvY2tfbXV0ZXg6XG4xNDI1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZWJ0X211dGV4KTtcbjE0MjY6XHRcdHZmcmVlKHRtcCk7XG4xNDI3Olx0XHRyZXR1cm4gcmV0O1xuMTQyODpcdH1cbjE0Mjk6XHRcbjE0MzA6XHRzdGF0aWMgaW50IHVwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG4xNDMxOlx0e1xuMTQzMjpcdFx0c3RydWN0IGVidF9yZXBsYWNlIGhscDtcbjE0MzM6XHRcbjE0MzQ6XHRcdGlmIChsZW4gXHUwMDNjIHNpemVvZihobHApKVxuMTQzNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MzY6XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZobHAsIGFyZywgc2l6ZW9mKGhscCkpKVxuMTQzNzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE0Mzg6XHRcbjE0Mzk6XHRcdGhscC5uYW1lW3NpemVvZihobHAubmFtZSkgLSAxXSA9ICYjMzk7XFwwJiMzOTs7XG4xNDQwOlx0XG4xNDQxOlx0XHRpZiAobGVuICE9IHNpemVvZihobHApICYjNDM7IGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcbjE0NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDQzOlx0XG4xNDQ0Olx0XHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGhscC5jb3VudGVycyxcbjE0NDU6XHRcdFx0XHRcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcbjE0NDY6XHR9XG4xNDQ3Olx0XG4xNDQ4Olx0c3RhdGljIGlubGluZSBpbnQgZWJ0X29ial90b191c2VyKGNoYXIgX191c2VyICp1bSwgY29uc3QgY2hhciAqX25hbWUsXG4xNDQ5Olx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKmRhdGEsIGludCBlbnRyeXNpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzQ2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGB1cGRhdGVfY291bnRlcnNgIEZ1bmN0aW9uJiMzOTtzIENvbnRleHQqKgoKUmlnaHQsIGB1cGRhdGVfY291bnRlcnNgIGlzIGEgcHJldHR5IGNvbXBhY3QgZnVuY3Rpb24sIEkmIzM5O2xsIGFkbWl0LiBCdXQgdGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB3aGVyZSBpdCYjMzk7cyAqdXNlZCouIFRoZSBrZXkgaXMgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGBkb19lYnRfc2V0X2N0bGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpc24mIzM5O3QganVzdCBhIHN0YW5kYWxvbmUgdXRpbGl0eTsgaXQmIzM5O3MgbGlrZWx5IGEgY29tcG9uZW50IHdpdGhpbiBhIGxhcmdlciBjb250cm9sIGZsb3cgbWVjaGFuaXNtLiBTbywgaXQmIzM5O3Mgbm90IGVub3VnaCB0byBhc3Nlc3MgYHVwZGF0ZV9jb3VudGVyc2AgaW4gaXNvbGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRyb2wgZmxvdywgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIGBkb19lYnRfc2V0X2N0bGAuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTU1Olx0c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXG4yNTU2Olx0XHRcdHVuc2lnbmVkIGludCBsZW4pXG4yNTU3Olx0e1xuMjU1ODpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuMjU1OTpcdFx0aW50IHJldDtcbjI1NjA6XHRcbjI1NjE6XHRcdGlmICghbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4yNTYyOlx0XHRcdHJldHVybiAtRVBFUk07XG4yNTYzOlx0XHRpZiAoIXh0X2NvbXBhdF9jaGVjaygpKVxuMjU2NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjU2NTpcdFxuMjU2NjpcdFx0c3dpdGNoIChjbWQpIHtcbjI1Njc6XHRcdGNhc2UgRUJUX1NPX1NFVF9FTlRSSUVTOlxuMjU2ODpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG4yNTY5Olx0XHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxuMjU3MDpcdFx0XHRcdHJldCA9IGNvbXBhdF9kb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xuMjU3MTpcdFx0XHRlbHNlXG4yNTcyOlx0I2VuZGlmXG4yNTczOlx0XHRcdFx0cmV0ID0gZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKTtcbjI1NzQ6XHRcdFx0YnJlYWs7XG4yNTc1Olx0XHRjYXNlIEVCVF9TT19TRVRfQ09VTlRFUlM6XG4yNTc2Olx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbjI1Nzc6XHRcdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG4yNTc4Olx0XHRcdFx0cmV0ID0gY29tcGF0X3VwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcbjI1Nzk6XHRcdFx0ZWxzZVxuMjU4MDpcdCNlbmRpZlxuMjU4MTpcdFx0XHRcdHJldCA9IHVwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcbjI1ODI6XHRcdFx0YnJlYWs7XG4yNTgzOlx0XHRkZWZhdWx0OlxuMjU4NDpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ0OAoJCQkJCQkJb3V0cHV0OiAyNDMKCQkJCQkJCXRob3VnaHRzOiA0OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRWJ0YWJsZXMgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlIGluIGVidGFibGVzLiBUaGUgZW50cnkgcG9pbnQgSSYjMzk7bSBsb29raW5nIGF0IGlzIGBkb19lYnRfc2V0X2N0bGAsIGJ1dCB0aGUgcmVhbCBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGJlY2F1c2UgdGhleSYjMzk7cmUgd2hlcmUgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgaGFzIGJlZW4gc2hpZnRlZCB0byBvY2N1ciAqYWZ0ZXIqIGNlcnRhaW4gY2hlY2tzIGFuZCBsb2NrcyBhcmUgaW4gcGxhY2UuIFRoaXMgaXMgYSBzb2xpZCBhcHByb2FjaC4KCk5vdywgSSBuZWVkIHRvIGxpc3QgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBjb21wbGV0ZSBjb250ZXh0LiBTbywgYWxvbmdzaWRlIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIG92ZXJhbGwgZmxvdywgc3BlY2lmaWNhbGx5IGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYC4gV2UgY2FuJiMzOTt0IG5lZ2xlY3QgYGRvX3JlcGxhY2VfZmluaXNoYCwgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLgoKQ29uZmlndXJhdGlvbiB3aXNlLCBJJiMzOTt2ZSBnb3QgdG8gZW5zdXJlIHRoZSByaWdodCBtb2R1bGVzIGFyZSBjb21waWxlZC4gSSBrbm93IHRoYXQgSSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBjb25maWdzIGVuYWJsZWQ6IGBCUklER0VgLCBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9YVEFCTEVTYCwgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAsIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCwgYW5kIGBCUklER0VfRUJUX1RfRklMVEVSYC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBCUklER0VfRUJUX1RfRklMVEVSYCB3YXMgZW5vdWdoIHRvIHJlZ2lzdGVyIHRoZSB0YWJsZSwgd2hpY2ggaXQgaXMuIEkgYWxzbyB2ZXJpZmllZCB0aGUgZGVwZW5kZW5jaWVzOiBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAgZGVwZW5kcyBvbiBgQlJJREdFICZhbXA7JmFtcDsgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCwgYW5kIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgIGRlcGVuZHMgb24gYCFQUkVFTVBUX1JUYC4gYEJSSURHRV9FQlRfVF9GSUxURVJgIGRlcGVuZHMgb24gYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgLiBUaGF0JiMzOTtzIGFsbCBpbiBvcmRlci4KCkVmZmVjdGl2ZWx5LCB0aGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGltcHJvdmVtZW50cyB0byB0aGUgZWJ0YWJsZXMgY29yZSBsb2dpYywgYWRkcmVzc2luZyBhIG1lbW9yeSBhbGxvY2F0aW9uIHZ1bG5lcmFiaWxpdHkuIEFuZCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoZWQgdGhyb3VnaCBgRUJUX1NPX1NFVF9FTlRSSUVTYCBhbmQgYEVCVF9TT19TRVRfQ09VTlRFUlNgIHNldHNvY2tvcHQgY29tbWFuZHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHRoaXMgcHJvcGVybHkgYnkgZW5hYmxpbmcgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdHJpZ2dlciB0aGUgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7QlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWSYjMzQ7LAogICAgJiMzNDtCUklER0VfRUJUX1RfRklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fcmVwbGFjZV9maW5pc2gmIzM0OywKICAgICYjMzQ7ZG9fdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2RvX3JlcGxhY2UmIzM0OywKICAgICYjMzQ7dXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2NvbXBhdF9kb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O2NvbXBhdF91cGRhdGVfY291bnRlcnMmIzM0OywKICAgICYjMzQ7ZG9fZWJ0X3NldF9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGluIGVidGFibGVzIGJ5IG1vdmluZyB0aGUgYWxsb2NhdGlvbiBvZiBgY291bnRlcnN0bXBgIGFuZCBgdG1wYCBhZnRlciBzb21lIGNoZWNrcyBhbmQgbG9ja3MgaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBlYnRhYmxlcyBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEVCVF9TT19TRVRfRU5UUklFU2AgYW5kIGBFQlRfU09fU0VUX0NPVU5URVJTYCBzZXRzb2Nrb3B0IGNvbW1hbmRzLiBXZSBuZWVkIHRvIGVuYWJsZSBsZWdhY3kgZWJ0YWJsZXMgc3VwcG9ydCB0byB0ZXN0IHRoaXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUQUJMRVNfTEVHQUNZJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kmIzM0OywKICAgICYjMzQ7QlJJREdFX0VCVF9UX0ZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3JlcGxhY2VfZmluaXNoJiMzNDssCiAgICAmIzM0O2RvX3VwZGF0ZV9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtkb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9jb3VudGVycyYjMzQ7LAogICAgJiMzNDtjb21wYXRfZG9fcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtjb21wYXRfdXBkYXRlX2NvdW50ZXJzJiMzNDssCiAgICAmIzM0O2RvX2VidF9zZXRfY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBpbiBlYnRhYmxlcyBieSBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgYWZ0ZXIgc29tZSBjaGVja3MgYW5kIGxvY2tzIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZWJ0YWJsZXMgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBFQlRfU09fU0VUX0VOVFJJRVNgIGFuZCBgRUJUX1NPX1NFVF9DT1VOVEVSU2Agc2V0c29ja29wdCBjb21tYW5kcy4gV2UgbmVlZCB0byBlbmFibGUgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdGVzdCB0aGlzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6MzEuMzYyOTE3OTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1ODM1MzQ1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcIixcbiAgICBcIkJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcIixcbiAgICBcIkJSSURHRV9FQlRfVF9GSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19yZXBsYWNlX2ZpbmlzaFwiLFxuICAgIFwiZG9fdXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJkb19yZXBsYWNlXCIsXG4gICAgXCJ1cGRhdGVfY291bnRlcnNcIixcbiAgICBcImNvbXBhdF9kb19yZXBsYWNlXCIsXG4gICAgXCJjb21wYXRfdXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJkb19lYnRfc2V0X2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBpbiBlYnRhYmxlcyBieSBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgYWZ0ZXIgc29tZSBjaGVja3MgYW5kIGxvY2tzIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZWJ0YWJsZXMgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBFQlRfU09fU0VUX0VOVFJJRVNgIGFuZCBgRUJUX1NPX1NFVF9DT1VOVEVSU2Agc2V0c29ja29wdCBjb21tYW5kcy4gV2UgbmVlZCB0byBlbmFibGUgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdGVzdCB0aGlzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTozMS4zNjI5MjQ2NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDE5MzczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFjY2Y1OGFmNjA3ZmU2Zjk2NDUxNDQwZDA2MTk5OGZlNzk4MTcwOGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTQ6NTk6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcXG5pbmRleCA5NmM5YThmNTdjODcwMi4uODE0OTZlYmY5MmE5YzkgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xcbisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcXG5AQCAtMTAxNywxNiArMTAxNyw2IEBAIHN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXFxuIFxcdHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqdGFibGU7XFxuIFxcdHN0cnVjdCBlYnRfdGFibGUgKnQ7XFxuIFxcbi1cXHQvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrXFxuLVxcdCAqIHRoZSBjaGVjayBvbiB0aGUgc2l6ZSBpcyBkb25lIGxhdGVyLCB3aGVuIHdlIGhhdmUgdGhlIGxvY2tcXG4tXFx0ICovXFxuLVxcdGlmIChyZXBsLVxcdTAwM2VudW1fY291bnRlcnMpIHtcXG4tXFx0XFx0Y291bnRlcnN0bXAgPSB2bWFsbG9jX2FycmF5KHJlcGwtXFx1MDAzZW51bV9jb3VudGVycyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZigqY291bnRlcnN0bXApKTtcXG4tXFx0XFx0aWYgKCFjb3VudGVyc3RtcClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4tXFxuIFxcdG5ld2luZm8tXFx1MDAzZWNoYWluc3RhY2sgPSBOVUxMO1xcbiBcXHRyZXQgPSBlYnRfdmVyaWZ5X3BvaW50ZXJzKHJlcGwsIG5ld2luZm8pO1xcbiBcXHRpZiAocmV0ICE9IDApXFxuQEAgLTEwNTMsNiArMTA0MywxNSBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxcbiBcXHRcXHRnb3RvIGZyZWVfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocmVwbC1cXHUwMDNlbnVtX2NvdW50ZXJzKSB7XFxuK1xcdFxcdGNvdW50ZXJzdG1wID0gdm1hbGxvY19hcnJheShyZXBsLVxcdTAwM2VudW1fY291bnRlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzaXplb2YoKmNvdW50ZXJzdG1wKSk7XFxuK1xcdFxcdGlmICghY291bnRlcnN0bXApIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHQvKiB3ZSBoYXZlIHRoZSBtdXRleCBsb2NrLCBzbyBubyBkYW5nZXIgaW4gcmVhZGluZyB0aGlzIHBvaW50ZXIgKi9cXG4gXFx0dGFibGUgPSB0LVxcdTAwM2Vwcml2YXRlO1xcbiBcXHQvKiBtYWtlIHN1cmUgdGhlIHRhYmxlIGNhbiBvbmx5IGJlIHJtbW9kJ2VkIGlmIGl0IGNvbnRhaW5zIG5vIHJ1bGVzICovXFxuQEAgLTEzODYsMjUgKzEzODUsMjcgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbiB7XFxuIFxcdGludCBpLCByZXQ7XFxuLVxcdHN0cnVjdCBlYnRfY291bnRlciAqdG1wO1xcbitcXHRzdHJ1Y3QgZWJ0X2NvdW50ZXIgKnRtcCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBlYnRfdGFibGUgKnQ7XFxuIFxcbiBcXHRpZiAobnVtX2NvdW50ZXJzID09IDApXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0dG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7XFxuLVxcdGlmICghdG1wKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuIFxcdHQgPSBmaW5kX3RhYmxlX2xvY2sobmV0LCBuYW1lLCBcXHUwMDI2cmV0LCBcXHUwMDI2ZWJ0X211dGV4KTtcXG4gXFx0aWYgKCF0KVxcbi1cXHRcXHRnb3RvIGZyZWVfdG1wO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0aWYgKG51bV9jb3VudGVycyAhPSB0LVxcdTAwM2Vwcml2YXRlLVxcdTAwM2VuZW50cmllcykge1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4gXFx0fVxcbiBcXG4rXFx0dG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7XFxuK1xcdGlmICghdG1wKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoY29weV9mcm9tX3VzZXIodG1wLCBjb3VudGVycyxcXG4gXFx0XFx0XFx0ICAgYXJyYXlfc2l6ZShudW1fY291bnRlcnMsIHNpemVvZigqY291bnRlcnMpKSkpIHtcXG4gXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG5AQCAtMTQyMiw3ICsxNDIzLDYgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRyZXQgPSAwO1xcbiB1bmxvY2tfbXV0ZXg6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZWJ0X211dGV4KTtcXG4tZnJlZV90bXA6XFxuIFxcdHZmcmVlKHRtcCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6MzIuMTM4MDI5MDUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ4MDg0MDk2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcIixcbiAgICBcIkJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcIixcbiAgICBcIkJSSURHRV9FQlRfVF9GSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19yZXBsYWNlX2ZpbmlzaFwiLFxuICAgIFwiZG9fdXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJkb19yZXBsYWNlXCIsXG4gICAgXCJ1cGRhdGVfY291bnRlcnNcIixcbiAgICBcImNvbXBhdF9kb19yZXBsYWNlXCIsXG4gICAgXCJjb21wYXRfdXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJkb19lYnRfc2V0X2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBpbiBlYnRhYmxlcyBieSBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGNvdW50ZXJzdG1wYCBhbmQgYHRtcGAgYWZ0ZXIgc29tZSBjaGVja3MgYW5kIGxvY2tzIGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZWJ0YWJsZXMgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBFQlRfU09fU0VUX0VOVFJJRVNgIGFuZCBgRUJUX1NPX1NFVF9DT1VOVEVSU2Agc2V0c29ja29wdCBjb21tYW5kcy4gV2UgbmVlZCB0byBlbmFibGUgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdGVzdCB0aGlzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxY2NmNThhZjYwN2ZlNmY5NjQ1MTQ0MGQwNjE5OThmZTc5ODE3MDhmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTQ6NTk6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuaW5kZXggOTZjOWE4ZjU3Yzg3MDIuLjgxNDk2ZWJmOTJhOWM5IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xuQEAgLTEwMTcsMTYgKzEwMTcsNiBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxuIFx0c3RydWN0IGVidF90YWJsZV9pbmZvICp0YWJsZTtcbiBcdHN0cnVjdCBlYnRfdGFibGUgKnQ7XG4gXG4tXHQvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrXG4tXHQgKiB0aGUgY2hlY2sgb24gdGhlIHNpemUgaXMgZG9uZSBsYXRlciwgd2hlbiB3ZSBoYXZlIHRoZSBsb2NrXG4tXHQgKi9cbi1cdGlmIChyZXBsLVx1MDAzZW51bV9jb3VudGVycykge1xuLVx0XHRjb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC1cdTAwM2VudW1fY291bnRlcnMsXG4tXHRcdFx0XHRcdCAgICBzaXplb2YoKmNvdW50ZXJzdG1wKSk7XG4tXHRcdGlmICghY291bnRlcnN0bXApXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4gXHRuZXdpbmZvLVx1MDAzZWNoYWluc3RhY2sgPSBOVUxMO1xuIFx0cmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycyhyZXBsLCBuZXdpbmZvKTtcbiBcdGlmIChyZXQgIT0gMClcbkBAIC0xMDUzLDYgKzEwNDMsMTUgQEAgc3RhdGljIGludCBkb19yZXBsYWNlX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCxcbiBcdFx0Z290byBmcmVlX3VubG9jaztcbiBcdH1cbiBcbitcdGlmIChyZXBsLVx1MDAzZW51bV9jb3VudGVycykge1xuK1x0XHRjb3VudGVyc3RtcCA9IHZtYWxsb2NfYXJyYXkocmVwbC1cdTAwM2VudW1fY291bnRlcnMsXG4rXHRcdFx0XHRcdCAgICBzaXplb2YoKmNvdW50ZXJzdG1wKSk7XG4rXHRcdGlmICghY291bnRlcnN0bXApIHtcbitcdFx0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRcdGdvdG8gZnJlZV91bmxvY2s7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qIHdlIGhhdmUgdGhlIG11dGV4IGxvY2ssIHNvIG5vIGRhbmdlciBpbiByZWFkaW5nIHRoaXMgcG9pbnRlciAqL1xuIFx0dGFibGUgPSB0LVx1MDAzZXByaXZhdGU7XG4gXHQvKiBtYWtlIHN1cmUgdGhlIHRhYmxlIGNhbiBvbmx5IGJlIHJtbW9kJ2VkIGlmIGl0IGNvbnRhaW5zIG5vIHJ1bGVzICovXG5AQCAtMTM4NiwyNSArMTM4NSwyNyBAQCBzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywgdW5zaWduZWQgaW50IGxlbilcbiB7XG4gXHRpbnQgaSwgcmV0O1xuLVx0c3RydWN0IGVidF9jb3VudGVyICp0bXA7XG4rXHRzdHJ1Y3QgZWJ0X2NvdW50ZXIgKnRtcCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZWJ0X3RhYmxlICp0O1xuIFxuIFx0aWYgKG51bV9jb3VudGVycyA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHRtcCA9IHZtYWxsb2NfYXJyYXkobnVtX2NvdW50ZXJzLCBzaXplb2YoKnRtcCkpO1xuLVx0aWYgKCF0bXApXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuIFx0dCA9IGZpbmRfdGFibGVfbG9jayhuZXQsIG5hbWUsIFx1MDAyNnJldCwgXHUwMDI2ZWJ0X211dGV4KTtcbiBcdGlmICghdClcbi1cdFx0Z290byBmcmVlX3RtcDtcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChudW1fY291bnRlcnMgIT0gdC1cdTAwM2Vwcml2YXRlLVx1MDAzZW5lbnRyaWVzKSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuIFxuK1x0dG1wID0gdm1hbGxvY19hcnJheShudW1fY291bnRlcnMsIHNpemVvZigqdG1wKSk7XG4rXHRpZiAoIXRtcCkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIHVubG9ja19tdXRleDtcbitcdH1cbitcbiBcdGlmIChjb3B5X2Zyb21fdXNlcih0bXAsIGNvdW50ZXJzLFxuIFx0XHRcdCAgIGFycmF5X3NpemUobnVtX2NvdW50ZXJzLCBzaXplb2YoKmNvdW50ZXJzKSkpKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG5AQCAtMTQyMiw3ICsxNDIzLDYgQEAgc3RhdGljIGludCBkb191cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0cmV0ID0gMDtcbiB1bmxvY2tfbXV0ZXg6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZWJ0X211dGV4KTtcbi1mcmVlX3RtcDpcbiBcdHZmcmVlKHRtcCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE0OjU5OjMyLjEzODAzMTY1MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3Njg5NjE1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqT3B0aW1pemluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBlYnRhYmxlcy5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNgLiBUaGUgY29yZSBpZGVhIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHdlJ3JlIHRyeWluZyB0byBiZSBhIGJpdCBtb3JlIGVmZmljaWVudCB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaXMgbW92aW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBjb3VudGVyc3RtcGAgd2l0aGluIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGB0bXBgIHdpdGhpbiBgZG9fdXBkYXRlX2NvdW50ZXJzYCB0byBhIGxhdGVyIHBvaW50IGluIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBoZXJlIGlzIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBzb21lIGNoZWNrcyBvciBsb2NraW5nIG1lY2hhbmlzbXMgbWlnaHQgcHJldmVudCB0aGUgbmVlZCBmb3IgdGhlbSBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblNwZWNpZmljYWxseSwgaW4gYGRvX3JlcGxhY2VfZmluaXNoYCwgdGhlIGBjb3VudGVyc3RtcGAgYWxsb2NhdGlvbiBpcyBtb3ZlZCBhZnRlciBgZWJ0X3ZlcmlmeV9wb2ludGVyc2AgYW5kIGBmaW5kX3RhYmxlX2xvY2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBpZiB0aGUgcG9pbnRlcnMgYXJlIGludmFsaWQsIG9yIGlmIHdlIGNhbid0IGdldCB0aGUgbG9jaywgd2Ugc2hvdWxkbid0IHdhc3RlIHRpbWUgb24gdGhlIG1lbW9yeSBhbGxvY2F0aW9uLiBTaW1pbGFybHksIGluIGBkb191cGRhdGVfY291bnRlcnNgLCB0aGUgYWxsb2NhdGlvbiBvZiBgdG1wYCBpcyBzaGlmdGVkIGFmdGVyIGBmaW5kX3RhYmxlX2xvY2tgIGFuZCBhIGNoZWNrIHRoYXQgdmVyaWZpZXMgYG51bV9jb3VudGVyc2AgYWdhaW5zdCBgdC1cdTAwM2Vwcml2YXRlLVx1MDAzZW5lbnRyaWVzYC4gSXQgc2VlbXMgdGhhdCB0aGUgbG9naWMgaGVyZSBhaW1zIHRvIHJlZHVjZSB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIGluIGNhc2VzIHdoZXJlIHRoZSB0YWJsZSBlbnRyeSBjb3VudCBpcyBub3QgdGhlIGV4cGVjdGVkIHNpemUuXG5cblRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIG1lbW9yeSBvcHRpbWl6YXRpb24sIG1heWJlIGV2ZW4gYSBidWcgZml4IGlmIHdlIHdlcmUgYWxsb2NhdGluZyB1bm5lY2Vzc2FyaWx5IGJlZm9yZS4gU2luY2UgdGhpcyBkZWFscyB3aXRoIHN0YXRpYyBmdW5jdGlvbnMsIGBkb19yZXBsYWNlX2ZpbmlzaGAgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBob3cgdGhleSBhcmUgdXNlZC4gYGRvX3JlcGxhY2VfZmluaXNoYCBpcyBjYWxsZWQgYnkgYGRvX3JlcGxhY2VgLCB0aGF0J3Mgc2ltcGxlIGVub3VnaC4gSSBzaG91bGQgY2hlY2sgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNgIHRvIHNlZSB3aGVyZSBgZG9fdXBkYXRlX2NvdW50ZXJzYCBpcyB1c2VkLiBJJ20gYXNzdW1pbmcgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBgZWJ0X3NvY2tvcHRgIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTozNy45MDY5OTgxMzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDcwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3JlcGxhY2VfZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz05OTA9c3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTAtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMDExOnN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbylcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MTExMD1zdGF0aWMgaW50IGRvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU0LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE1NTpcXHRyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsIFxcdTAwMjZ0bXAsIG5ld2luZm8pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1Ni1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIyOTI9c3RhdGljIGludCBjb21wYXRfZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIzNzktXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMzgwOlxcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXFx1MDAyNnRtcCwgbmV3aW5mbyk7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzgxLVxcdGlmIChyZXQgPT0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6MzguMDU2MDc1MDEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2MjAwMTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUaGUgYGRvX3JlcGxhY2VgIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIGBkb19yZXBsYWNlYCBhbmQgaXRzIGBjb21wYXRfZG9fcmVwbGFjZWAgdmFyaWFudCBhcmUgdGhlIGVudHJ5IHBvaW50cy4gVGhleSdyZSB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLiBSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGlzIHBvaW50IGluIHRoZSBjb2RlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlc2UgbWV0aG9kcy4gTGV0J3Mgc2VlIHdoYXQgYGRvX3VwZGF0ZV9jb3VudGVyc2AgZG9lczsgaG9wZWZ1bGx5IGl0IHNoZWRzIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSB2YWx1ZXMgYXJlIHVwZGF0ZWQuIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoZXJlIGl0IHRha2VzIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6NDEuMjE4MDgxMzQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjEyNTkwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb191cGRhdGVfY291bnRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTEzNjE9dm9pZCBlYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEzODItLyogdXNlcnNwYWNlIGp1c3Qgc3VwcGxpZWQgdXMgd2l0aCBjb3VudGVycyAqL1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTM4MzpzdGF0aWMgaW50IGRvX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMzg0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBlYnRfY291bnRlciBfX3VzZXIgKmNvdW50ZXJzLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0xNDMwPXN0YXRpYyBpbnQgdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTQ0My1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjE0NDQ6XFx0cmV0dXJuIGRvX3VwZGF0ZV9jb3VudGVycyhuZXQsIGhscC5uYW1lLCBobHAuY291bnRlcnMsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xNDQ1LVxcdFxcdFxcdFxcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjM5ND1zdGF0aWMgaW50IGNvbXBhdF91cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNDA5LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjQxMDpcXHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGNvbXBhdF9wdHIoaGxwLmNvdW50ZXJzKSxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MTEtXFx0XFx0XFx0XFx0ICBobHAubnVtX2NvdW50ZXJzLCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTo0MS40MTQyMTI5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTQyMDY5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipUcmFjaW5nIHRoZSBDYWxsIEhpZXJhcmNoeTogQSBRdWljayBEaWFnbm9zdGljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHVwZGF0ZV9jb3VudGVyc2AgYW5kIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBwaWN0dXJlLiBJIGtub3cgdGhleSdyZSAqY2FsbGVycyosIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiAqY2FsbHMqLiBJIHdhbnQgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGFjdHVhbGx5ICp1c2UqIGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGFuZCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AuIFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGRlcGVuZGVuY2llcyBpcyBrZXkgaGVyZS4gSXQncyB0aGUgc3RhbmRhcmQgdHJvdWJsZXNob290aW5nIGFwcHJvYWNoOiB3b3JrIHlvdXIgd2F5IGJhY2sgdXAgdGhlIGNoYWluLiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBwcm92aWRlIGNvbnRleHQgc28gSSBjYW4gcXVpY2tseSBpc29sYXRlIHRoZSBpbXBhY3QgYW5kIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTo0NC41Njg0MjM1NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5ODAwOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9jb3VudGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MTM2MT12b2lkIGVidF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTM4Mi0vKiB1c2Vyc3BhY2UganVzdCBzdXBwbGllZCB1cyB3aXRoIGNvdW50ZXJzICovXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMzgzOnN0YXRpYyBpbnQgZG9fdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEzODQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGVidF9jb3VudGVyIF9fdXNlciAqY291bnRlcnMsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0MjktXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxNDMwOnN0YXRpYyBpbnQgdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0MzEte1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xNDQzLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTQ0NDpcXHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGhscC5jb3VudGVycyxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTE0NDUtXFx0XFx0XFx0XFx0ICBobHAubnVtX2NvdW50ZXJzLCBsZW4pO1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yMjkyPXN0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzkzLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjM5NDpzdGF0aWMgaW50IGNvbXBhdF91cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM5NS1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MDctXFx0aWYgKGxlbiAhPSBzaXplb2YoaGxwKSArIGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI0MDg6XFx0XFx0cmV0dXJuIHVwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI0MDktXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNDEwOlxcdHJldHVybiBkb191cGRhdGVfY291bnRlcnMobmV0LCBobHAubmFtZSwgY29tcGF0X3B0cihobHAuY291bnRlcnMpLFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjQxMS1cXHRcXHRcXHRcXHQgIGhscC5udW1fY291bnRlcnMsIGxlbik7XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1NTU9c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NzctXFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTc4OlxcdFxcdFxcdHJldCA9IGNvbXBhdF91cGRhdGVfY291bnRlcnMobmV0LCBhcmcsIGxlbik7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTc5LVxcdFxcdGVsc2VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1ODAtI2VuZGlmXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTgxOlxcdFxcdFxcdHJldCA9IHVwZGF0ZV9jb3VudGVycyhuZXQsIGFyZywgbGVuKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1ODItXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE0OjU5OjQ0LjcxODIzMDc0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTM2NzgyMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBlYnRhYmxlcyBTZXRzb2Nrb3B0IEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBlYnRhYmxlcyBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggYXBwZWFycyB0byBiZSBgZG9fZWJ0X3NldF9jdGxgLiBUaGlzIGlzIGEgYHNldHNvY2tvcHRgIGhhbmRsZXIsIHNwZWNpZmljYWxseSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBlYnRhYmxlcy4gVGhhdCdzIGEgY3JpdGljYWwgYXJlYSB0byBleGFtaW5lLCBhcyBpdCdzIHRoZSBnYXRla2VlcGVyIGZvciBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG5cbk5vdywgd2l0aGluIGBkb19lYnRfc2V0X2N0bGAsIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBjb3JlIG9wZXJhdGlvbnMuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGFuZCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgaGFuZGxlIHRoZSBhY3R1YWwgcnVsZSByZXBsYWNlbWVudCBhbmQgY291bnRlciB1cGRhdGVzLCB0aGUgaGVhcnQgb2YgdGhlIGVidGFibGVzIGZ1bmN0aW9uYWxpdHkuIFRoZXnigJlyZSBwcm9iYWJseSB3aGVyZSB0aGUgbW9zdCBpbXBvcnRhbnQgbG9naWMgc2l0cy4gVGhlIFwiY29tcGF0XCIgdmVyc2lvbnMgc3VnZ2VzdCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zLCB3aGljaCBhbHdheXMgYWRkIGFub3RoZXIgbGF5ZXIgb2YgY29tcGxleGl0eS5cblxuRmlyc3QsIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGBkb19lYnRfc2V0X2N0bGAgaXMgZGVjbGFyZWQgc3RhdGljIG9yIG5vdC4gS25vd2luZyBpdHMgc2NvcGUgYW5kIHZpc2liaWxpdHkgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHBvdGVudGlhbCBleHRlcm5hbCBpbnRlcmFjdGlvbnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDIxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTQ6NTk6NTIuOTMxOTExOTc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNjE0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fZWJ0X3NldF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI0ODc9c3RhdGljIGludCBkb19lYnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU1NC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1NTU6c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTU2LVxcdFxcdHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1ODk9c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPSB7XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1OTItXFx0LnNldF9vcHRtYXhcXHQ9IEVCVF9TT19TRVRfTUFYICsgMSxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1OTM6XFx0LnNldFxcdFxcdD0gZG9fZWJ0X3NldF9jdGwsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTk0LVxcdC5nZXRfb3B0bWluXFx0PSBFQlRfQkFTRV9DVEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE0OjU5OjUzLjA0MDA3OTcxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM4MTExOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgY29uZmlybWluZyBteSBpbml0aWFsIGFzc2Vzc21lbnQg4oCTIGl0J3MgaGVhdmlseSBzdGF0aWMuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IHRoZSBmdW5jdGlvbnMgYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYW5kIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYCBhcmUgYWxsIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgcmVpbmZvcmNlcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBoZXJlOyBsaWtlbHksIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5IHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIGF2b2lkaW5nIGV4dGVybmFsIGxpbmthZ2UgYW5kIHBvdGVudGlhbCBuYW1pbmcgY29uZmxpY3RzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guIEkgc2VlIGBkb19lYnRfc2V0X2N0bGAgYW5kIHJlbWVtYmVyIHRoaXMgaXMgdGhlIHNldHNvY2tvcHQgaGFuZGxlciDigJMgdGhhdCdzIGNyaXRpY2FsLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb2RlLiBJIG5lZWQgdG8gY2hlY2sgbXlzZWxmLCBsZXQncyBrZWVwIGdvaW5nLiBUaW1lIHRvIHRob3JvdWdobHkgc2NhbiB0aGUgY29kZSBhbmQgYXNjZXJ0YWluIHdoZXRoZXIgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBwcmVzZW50LiBUaGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgd291bGQgY2VydGFpbmx5IGFmZmVjdCBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9mIHRoaXMgY29kZS4gSSBhbSBjZXJ0YWluIEkgd2lsbCBmaW5kIHdoYXQgSSBhbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE0OjU5OjU2LjY3ODE5NTk2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5ODgyOTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVidF9zb2Nrb3B0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjU1NT1zdGF0aWMgaW50IGRvX2VidF9zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IGFyZyxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU4OC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1ODk6c3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPSB7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTkwLVxcdC5wZlxcdFxcdD0gUEZfSU5FVCxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjYyND1zdGF0aWMgaW50IF9faW5pdCBlYnRhYmxlc19pbml0KHZvaWQpXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI2MzctXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNjM4OlxcdHJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoXFx1MDAyNmVidF9zb2Nrb3B0cyk7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNjM5LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI2NDg9c3RhdGljIHZvaWQgZWJ0YWJsZXNfZmluaSh2b2lkKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjY0OS17XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNjUwOlxcdG5mX3VucmVnaXN0ZXJfc29ja29wdChcXHUwMDI2ZWJ0X3NvY2tvcHRzKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI2NTEtXFx0eHRfdW5yZWdpc3Rlcl90YXJnZXQoXFx1MDAyNmVidF9zdGFuZGFyZF90YXJnZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNDo1OTo1Ni45MTgwODY0NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzczNTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIGVidGFibGVzLmMgU291cmNlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGVidGFibGVzLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSdtIG5vdGljaW5nIGlzIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBmb2N1cyBteSBzZWFyY2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLCBzbywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHNwZWNpZmljYWxseSB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZWJ0YWJsZXMuY2AgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSByZWxldmFudCB0byB3aGF0ZXZlciBJJ20gaW52ZXN0aWdhdGluZy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGF0aWMgZGVjbGFyYXRpb24gaXNuJ3Qgb2JzY3VyaW5nIHNvbWUgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJdCdzIHRpbWUgdG8gcmVmaW5lIG15IHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjIzMTgyNTMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI3OTU0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTExNjU9c3RhdGljIHZvaWQgX19lYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBlYnRfdGFibGUgKnRhYmxlKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTc3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE3ODppbnQgZWJ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGVidF90YWJsZSAqaW5wdXRfdGFibGUsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTc5LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnRlbXBsYXRlX29wcylcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTI5Mi1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjEyOTM6aW50IGVidF9yZWdpc3Rlcl90ZW1wbGF0ZShjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICp0LCBpbnQgKCp0YWJsZV9pbml0KShzdHJ1Y3QgbmV0ICpuZXQpKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTI5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjQ3NDYyNjI2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAzMDQwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBlYnRfcmVnaXN0ZXJfdGFibGVgIGlzbid0IHRoZSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGBzZXRzb2Nrb3B0YCDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUgaGFuZGxlciwgYGRvX2VidF9zZXRfY3RsYCwgaXMgdGhlIG9uZSBpbiBjaGFyZ2UuIEFuZCwgYXMgSSByZWNhbGwsIGl0IGRpc3BhdGNoZXMgdG8gYGRvX3JlcGxhY2VgLCBgY29tcGF0X2RvX3JlcGxhY2VgLCBgdXBkYXRlX2NvdW50ZXJzYCwgYW5kIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYC4gSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQganVzdCBmb2N1c2luZyBvbiB0aG9zZSBpbnRlcm5hbCBmdW5jdGlvbnMuIFRoZXkgYXJlIHN0YXRpYywgYWZ0ZXIgYWxsLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbiB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBxdWVzdGlvbiBpcywgYXJlIGBkb19yZXBsYWNlYCwgYGNvbXBhdF9kb19yZXBsYWNlYCwgYHVwZGF0ZV9jb3VudGVyc2AsIGBjb21wYXRfdXBkYXRlX2NvdW50ZXJzYCBpbmxpbmVkP1xuXG5IYW5nIG9uLCBgZG9fZWJ0X3NldF9jdGxgIGlzICp0ZWNobmljYWxseSogc3RhdGljLiBCdXQgaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBuZl9yZWdpc3Rlcl9zb2Nrb3B0YC4gVGhhdCAqc2hvdWxkKiBwcmV2ZW50IGlubGluaW5nLCByaWdodD8gRnVuY3Rpb24gcG9pbnRlcnMgYXJlIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgdGhlIGNvbXBpbGVyIGNhbid0IG9wdGltaXplIGl0IGF3YXkuIEZ1cnRoZXJtb3JlLCBgZG9fcmVwbGFjZWAgYW5kIGB1cGRhdGVfY291bnRlcnNgIGFyZSBjYWxsZWQgZnJvbSBgZG9fZWJ0X3NldF9jdGxgIHZpYSBhIHN3aXRjaCBzdGF0ZW1lbnQsIHNvIGV2ZW4gaWYgdGhlIGNvbXBpbGVyICpjb3VsZCogaW5saW5lIHRoZW0sIGlmIHRoZXkgYXJlIGxhcmdlIGVub3VnaCwgaXQgcHJvYmFibHkgd29uJ3QuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBzaXplIG9mIGBkb19yZXBsYWNlYCBqdXN0IHRvIGdldCBhIGd1dCBmZWVsaW5nLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDowNS45Nzc2NzAxNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzQyNTU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19yZXBsYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz04NzE9c3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy05MjItXFx0aWYgKHVkY19jbnQpIHtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjkyMzpcXHRcXHQvKiB0aGlzIHdpbGwgZ2V0IGZyZWUnZCBpbiBkb19yZXBsYWNlKCkvZWJ0X3JlZ2lzdGVyX3RhYmxlKClcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTkyNC1cXHRcXHQgKiBpZiBhbiBlcnJvciBvY2N1cnNcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9OTkwPXN0YXRpYyB2b2lkIGdldF9jb3VudGVycyhjb25zdCBzdHJ1Y3QgZWJ0X2NvdW50ZXIgKm9sZGNvdW50ZXJzLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEwLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTAxMTpzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTAxMi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8pXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExMDktLyogcmVwbGFjZSB0aGUgdGFibGUgKi9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjExMTA6c3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExMTEte1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU0LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE1NTpcXHRyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsIFxcdTAwMjZ0bXAsIG5ld2luZm8pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1Ni1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIyNTQ9c3RhdGljIGludCBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXIoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjkxLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjI5MjpzdGF0aWMgaW50IGNvbXBhdF9kb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIyOTMte1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzAyLVxcdFxcdC8qIHRyeSByZWFsIGhhbmRsZXIgaW4gY2FzZSB1c2VybGFuZCBzdXBwbGllZCBuZWVkZWQgcGFkZGluZyAqL1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjMwMzpcXHRcXHRpZiAocmV0ID09IC1FSU5WQUwgXFx1MDAyNlxcdTAwMjYgZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKSA9PSAwKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjMwNC1cXHRcXHRcXHRyZXQgPSAwO1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzc5LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjM4MDpcXHRyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsIFxcdTAwMjZ0bXAsIG5ld2luZm8pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM4MS1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTI1NTU9c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NjktXFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTcwOlxcdFxcdFxcdHJldCA9IGNvbXBhdF9kb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3MS1cXHRcXHRlbHNlXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTcyLSNlbmRpZlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU3MzpcXHRcXHRcXHRyZXQgPSBkb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU3NC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MDYuMTk1MTAxN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMwMDEwNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkV4YW1pbmluZyB0aGUgRUJUIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBkb19lYnRfc2V0X2N0bGAgaGVyZS4gUmlnaHQsIHRoYXQncyB0aGUgaGFuZGxlciBmb3IgYHNldHNvY2tvcHRgIGNhbGxzIHJlbGF0ZWQgdG8gRXRoZXJuZXQgQnJpZGdpbmcgVGFibGUgKEVCVCkgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUuIExldCdzIHNlZS4uLiB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHdpdGhpbiB0aGUgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyYCBkaXJlY3RvcnksIHBhcnRpY3VsYXJseSB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdHVmZiBhcmUgZGVmaW5lZC4gTGV0J3MgY2hlY2sgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGNhbiBsZWFybiBhYm91dCBhdmFpbGFibGUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjA5LjYyNTEyODU0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzOTQzODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVidGFibGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00OC1cXHRoZWxwXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0OTpcXHQgTGVnYWN5IGVidGFibGVzIHBhY2tldC9mcmFtZSBjbGFzc2lmaWVyLlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NTA6XFx0IFRoaXMgaXMgbm90IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGVidGFibGVzIG92ZXIgbmZ0YWJsZXNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTUxLVxcdCAoaXB0YWJsZXMtbmZ0KS5cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9NTM9bWVudWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjU0OlxcdHRyaXN0YXRlIFxcXCJFdGhlcm5ldCBCcmlkZ2UgdGFibGVzIChlYnRhYmxlcykgc3VwcG9ydFxcXCJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTU1LVxcdGRlcGVuZHMgb24gQlJJREdFIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfWFRBQkxFU1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Ny1cXHRoZWxwXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo1ODpcXHQgIGVidGFibGVzIGlzIGEgZ2VuZXJhbCwgZXh0ZW5zaWJsZSBmcmFtZS9wYWNrZXQgaWRlbnRpZmljYXRpb25cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTU5LVxcdCAgZnJhbWV3b3JrLiBTYXkgJ1knIG9yICdNJyBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIEV0aGVybmV0XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTY3PWNvbmZpZyBCUklER0VfRUJUX0JST1VURVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03MC1cXHRoZWxwXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo3MTpcXHQgIFRoZSBlYnRhYmxlcyBicm91dGUgdGFibGUgaXMgdXNlZCB0byBkZWZpbmUgcnVsZXMgdGhhdCBkZWNpZGUgYmV0d2Vlblxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzItXFx0ICBicmlkZ2luZyBhbmQgcm91dGluZyBmcmFtZXMsIGdpdmluZyBMaW51eCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo3MzpcXHQgIGJyb3V0ZXIuIFNlZSB0aGUgbWFuIHBhZ2UgZm9yIGVidGFibGVzKDgpIGFuZCBleGFtcGxlcyBvbiB0aGUgZWJ0YWJsZXNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTc0LVxcdCAgd2Vic2l0ZS5cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Nzg9Y29uZmlnIEJSSURHRV9FQlRfVF9GSUxURVJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODEtXFx0aGVscFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODI6XFx0ICBUaGUgZWJ0YWJsZXMgZmlsdGVyIHRhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIGZyYW1lIGZpbHRlcmluZyBydWxlcyBhdFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0ICBsb2NhbCBpbnB1dCwgZm9yd2FyZGluZyBhbmQgbG9jYWwgb3V0cHV0LiBTZWUgdGhlIG1hbiBwYWdlIGZvclxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODQ6XFx0ICBlYnRhYmxlcyg4KS5cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg1LVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz04OD1jb25maWcgQlJJREdFX0VCVF9UX05BVFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05MS1cXHRoZWxwXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo5MjpcXHQgIFRoZSBlYnRhYmxlcyBuYXQgdGFibGUgaXMgdXNlZCB0byBkZWZpbmUgcnVsZXMgdGhhdCBhbHRlciB0aGUgTUFDXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05My1cXHQgIHNvdXJjZSBhZGRyZXNzIChNQUMgU05BVCkgb3IgdGhlIE1BQyBkZXN0aW5hdGlvbiBhZGRyZXNzIChNQUMgRE5BVCkuXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo5NDpcXHQgIFNlZSB0aGUgbWFuIHBhZ2UgZm9yIGVidGFibGVzKDgpLlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctOTUtXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTIzND1jb25maWcgQlJJREdFX0VCVF9MT0dcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjM3LVxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbG9nIHdhdGNoZXIsIHRoYXQgeW91IGNhbiB1c2UgaW4gYW55IHJ1bGVcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIzODpcXHQgIGluIGFueSBlYnRhYmxlcyB0YWJsZS4gSXQgcmVjb3JkcyBpbmZvIGFib3V0IHRoZSBmcmFtZSBoZWFkZXJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIzOS1cXHQgIHRvIHRoZSBzeXNsb2cuXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTI0Mz1jb25maWcgQlJJREdFX0VCVF9ORkxPR1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNTEtXFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBuZmxvZyB3YXRjaGVyLCB0aGF0IHlvdSBjYW4gdXNlIGluIGFueSBydWxlXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyNTI6XFx0ICBpbiBhbnkgZWJ0YWJsZXMgdGFibGUuXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjA5LjgxOTEzNTg5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE2NzI5ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBCcmlkZ2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBrZXJuZWwgY29uZmlnIHZhcmlhYmxlIGluIHF1ZXN0aW9uIGlzIGBCUklER0VfTkZfRUJUQUJMRVNgLiBJIGtub3cgdGhpcyBvbmUsIGl04oCZcyByZWxhdGVkIHRvIGVuYWJsaW5nIGVidGFibGVzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBMaW51eCBicmlkZ2UuIExldCdzIGJyZWFrIGRvd24gdGhlIGRlcGVuZGVuY2llczogSSBzZWUgaXQgZGVwZW5kcyBvbiBgQlJJREdFYCwgb2J2aW91c2x5LCBhbmQgdGhlbiBhbHNvIG9uIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX1hUQUJMRVNgLiBNYWtlcyBzZW5zZSDigJMgZWJ0YWJsZXMgd29ya3MgYnkgaW50ZXJhY3Rpbmcgd2l0aCBuZXRmaWx0ZXIuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBzb3VyY2UgZmlsZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSBgZWJ0YWJsZXMuY2AgYWN0dWFsbHkgZ2V0cyBjb21waWxlZC4gTGV0IG1lIG5hdmlnYXRlIHRvIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGVgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCBmaWxlIHdpbGwgdGVsbCBtZSB0aGUgc3BlY2lmaWNzIGFib3V0IGhvdyBpdCdzIGJ1aWx0IGFuZCBpZiBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhcmUgb24gdGhlIG1vbmV5LiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYmUgcHJlY2lzZSBpbiBteSBhbmFseXNpcyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTExLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MTMuNDM1ODY4Nzg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NjczNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWJ0YWJsZXMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0JSSURHRSkgKz0gbmZfY29ubnRyYWNrX2JyaWRnZS5vXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kpICs9IGVidGFibGVzLm9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZS0xMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MTMuNTkxODQxNzUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzQxNDE5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBCcmlkZ2UgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIGNvbnRleHQgcG9pbnRzIGRpcmVjdGx5IHRvIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYC4gVGhhdCdzIHRoZSBjbHVlLiBNeSBpbW1lZGlhdGUgcmVmbGV4IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgc2lnbmlmaWNhbmNlLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEkgbmVlZCB0byByZXZpZXcgaG93IGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgZ2VuZXJhbGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGVidGFibGVzIHNldHVwIGZvciBuZXR3b3JrIGJyaWRnaW5nLiBUaGlzIGlzIGFib3V0IGNsYXJpZnlpbmcgdGhlIHByZXNlbmNlLCBtZWFuaW5nLCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgbGVnYWN5IG9wdGlvbiB3aXRoaW4gdGhlIHdpZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IG15IHN5c3RlbSdzIHNwZWNpZmljIHNldHVwIG9yIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjkxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MTguNTY1OTg3NjQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYxMjE2NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDItIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Njc9Y29uZmlnIEJSSURHRV9FQlRfQlJPVVRFXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02OC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBicm91dGUgdGFibGUgc3VwcG9ydFxcXCJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjY5OlxcdGRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzAtXFx0aGVscFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz03OD1jb25maWcgQlJJREdFX0VCVF9UX0ZJTFRFUlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzktXFx0dHJpc3RhdGUgXFxcImVidDogZmlsdGVyIHRhYmxlIHN1cHBvcnRcXFwiXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo4MDpcXHRkZXBlbmRzIG9uIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTgxLVxcdGhlbHBcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9ODg9Y29uZmlnIEJSSURHRV9FQlRfVF9OQVRcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg5LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG5hdCB0YWJsZSBzdXBwb3J0XFxcIlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05MS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjE4Ljc2MjExNjEzOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU2MjI3NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEVidGFibGVzIGFuZCBMZWdhY3kgRWJ0YWJsZXMgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gSSBzZWUgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgIGluIHRoZSBjb25maWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB0aGUgb25lIHdlJ3JlIGRlYWxpbmcgd2l0aC5cIiBCdXQsIG9mIGNvdXJzZSwgSSBjYW4ndCBqdXN0IHRha2UgdGhhdCBhdCBmYWNlIHZhbHVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGFuZCBjb25maXJtIGlmIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCByZXF1aXJlcyBgQlJJREdFX05GX0VCVEFCTEVTYC4gVGhhdOKAmXMgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIG9wdGlvbnMgd29yayBpbiB0YW5kZW0sIGFuZCBob3cgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgd2l0aC4gSXTigJlzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgYW5kIHBvdGVudGlhbCBwYWNrZXQgZmlsdGVyaW5nIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDoyMi44MTgzNDgyNDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTIyOTgzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDItIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MjMuMDEzNTg0OTM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTk3ODAxNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQzLiBJIGtub3cgdGhpcyBmaWxlOyBpdCdzIHRoZSBoZWFydCBvZiBjb25maWd1cmluZyBOZXRmaWx0ZXIncyBicmlkZ2UgZmVhdHVyZXMuIEknbSBndWVzc2luZyB3ZSdyZSBsb29raW5nIGF0IGEgc3BlY2lmaWMgb3B0aW9uLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIG1vZHVsZSBvciBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYnJpZGdpbmcgY29udGV4dC4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBzdGFuZGFyZCB3YXkgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gZXhwb3NlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIHVzZXIsIHNvIGxvb2tpbmcgaGVyZSBnaXZlcyB1cyBkaXJlY3QgaW5zaWdodC4gV2UgY2FuIHByb2JhYmx5IGRlZHVjZSB3aGF0IHdlIGFyZSB0cnlpbmcgdG8gY29uZmlndXJlIGdpdmVuIHRoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLCBzbyBsZXQncyBnZXQgcmlnaHQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MjYuNDEzMzY5MjUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0MTpcXHRcXG4gIDQyOlxcdCMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3BcXG4gIDQzOlxcdGNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZXFxuICA0NDpcXHRcXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IEVCVEFCTEVTIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRSBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG4gIDQ3OlxcdFxcdGRlZmF1bHRcXHRuXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgTGVnYWN5IGVidGFibGVzIHBhY2tldC9mcmFtZSBjbGFzc2lmaWVyLlxcbiAgNTA6XFx0XFx0IFRoaXMgaXMgbm90IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGVidGFibGVzIG92ZXIgbmZ0YWJsZXNcXG4gIDUxOlxcdFxcdCAoaXB0YWJsZXMtbmZ0KS5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0bWVudWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNcXG4gIDU0OlxcdFxcdHRyaXN0YXRlIFxcXCJFdGhlcm5ldCBCcmlkZ2UgdGFibGVzIChlYnRhYmxlcykgc3VwcG9ydFxcXCJcXG4gIDU1OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfWFRBQkxFU1xcbiAgNTY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIGVidGFibGVzIGlzIGEgZ2VuZXJhbCwgZXh0ZW5zaWJsZSBmcmFtZS9wYWNrZXQgaWRlbnRpZmljYXRpb25cXG4gIDU5OlxcdFxcdCAgZnJhbWV3b3JrLiBTYXkgJ1knIG9yICdNJyBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIEV0aGVybmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjI2LjQxMzUxNDYxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM4NDc4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCdzIGZsYWdnZWQgYXMgZGVwZW5kaW5nIG9uIGBCUklER0VgLCBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCwgYW5kIGBORVRGSUxURVJfWFRBQkxFU2AuIENsZWFybHksIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgYW5hbHlzaXMuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAgZGVwZW5kZW5jeSBmaXJzdC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGhlcmUsIGFuZCB3aGF0IGRyaXZlcyB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHdoeSBpdCdzIGEgcHJlcmVxdWlzaXRlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDozMS45NTE5OTczMjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODA3MTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzM4PWNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0Nzpjb25maWcgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTc0OC1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbGVnYWN5IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDozMi4xNTAwNzUxNDFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MjgzMDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBOZXRmaWx0ZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3NDcuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgc29tZXRoaW5nIGludGVyZXN0aW5nLCBwb3RlbnRpYWxseSBhIG5ldyBmZWF0dXJlIG9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHJlc2lkZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIHRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBhcm91bmQgdGhhdCBzZWN0aW9uIG9mIGNvZGUuIEknbGwgbmVlZCB0byBpbnRlcnByZXQgdGhlIHN5bWJvbHMsIGV2YWx1YXRlIHRoZSBleHByZXNzaW9ucywgYW5kIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdmFyaW91cyBzZXR0aW5ncyBvbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4gSXMgdGhpcyBhbiBpbXBvcnRhbnQgbW9kdWxlPyBIYXMgc29tZXRoaW5nIGNoYW5nZWQ/IFdoYXQgd2lsbCBpdCB0YWtlIHRvIGFkZC9yZW1vdmUgc29tZXRoaW5nPyBJIGJldCB0aGUgYW5zd2VyIGlzIGluIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MzYuMjAyOTA5NDM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdFxcdGRlcGVuZHMgb24gQ09NUEFUXFxuIDc0MTpcXHRcXHRoZWxwXFxuIDc0MjpcXHRcXHQgICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHRyYW5zbGF0aW9uIGxheWVyIHRvIHJ1biAzMmJpdCBhcnAsaXAoNiksZWJ0YWJsZXNcXG4gNzQzOlxcdFxcdCAgIGJpbmFyaWVzIG9uIDY0Yml0IGtlcm5lbHMuXFxuIDc0NDpcXHRcXG4gNzQ1OlxcdFxcdCAgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDc0NjpcXHRcXG4gNzQ3OlxcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gNzQ4OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBsZWdhY3kgdGFibGVzIHN1cHBvcnRcXFwiXFxuIDc0OTpcXHRcXHRkZXBlbmRzIG9uICFQUkVFTVBUX1JUXFxuIDc1MDpcXHRcXHRoZWxwXFxuIDc1MTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHN0aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgbGVnYWN5IHRhYmxlcy4gVGhpcyBpc1xcbiA3NTI6XFx0XFx0ICByZXF1aXJlZCBieSB0aGUgbGVnYWN5IHRvb2xzIChpcHRhYmxlcy1sZWdhY3kpIGFuZCBpcyBub3QgbmVlZGVkIGlmXFxuIDc1MzpcXHRcXHQgIHlvdSB1c2UgaXB0YWJsZXMgb3ZlciBuZnRhYmxlcyAoaXB0YWJsZXMtbmZ0KS5cXG4gNzU0OlxcdFxcdCAgTGVnYWN5IHN1cHBvcnQgaXMgbm90IGxpbWl0ZWQgdG8gSVAsIGl0IGFsc28gaW5jbHVkZXMgRUJUQUJMRVMgYW5kXFxuIDc1NTpcXHRcXHQgIEFSUFRBQkxFUy5cXG4gNzU2OlxcdFxcbiA3NTc6XFx0Y29tbWVudCBcXFwiWHRhYmxlcyBjb21iaW5lZCBtb2R1bGVzXFxcIlxcbiA3NTg6XFx0XFxuIDc1OTpcXHRjb25maWcgTkVURklMVEVSX1hUX01BUktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6MzYuMjAzMDg4MTA1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTY2NzMwOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBFYnRhYmxlcyBhbmQgTmV0ZmlsdGVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBrZXJuZWwgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZYCByZWxpZXMgb24gYCFQUkVFTVBUX1JUYC4gUmlnaHQsIGdvdCBpdC4gTm93LCB0byBnZXQgdGhpcyBlYnRhYmxlcyBzdHVmZiB3b3JraW5nLCB0aGUgc3VnZ2VzdGVkIGNvbmZpZ3MgYXJlIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCwgYEJSSURHRWAsIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTYC4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJIHRoaW5rIGBCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZYCAqbWlnaHQqIGJlIGVub3VnaCBvbiBpdHMgb3duLCBiZWNhdXNlIEtidWlsZCAqc2hvdWxkKiBoYW5kbGUgdGhlIGRlcGVuZGVuY2llcyBhdXRvbWF0aWNhbGx5Li4uIGJ1dCB0aGUgXCJkZXBlbmRzIG9uXCIgZGlyZWN0aXZlIG1lYW5zIEkgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGUgc3VwcG9ydGluZyBjb25maWdzLiBTbywgeWVhaCwgSSBzaG91bGQgbGlzdCBhbGwgb2YgdGhlbSwganVzdCB0byBiZSBzYWZlLiBTbywgdGhlIGV4cGxpY2l0IGxpc3QgaXM6XG5cbiogICBgQlJJREdFYFxuKiAgIGBORVRGSUxURVJgXG4qICAgYE5FVEZJTFRFUl9YVEFCTEVTYFxuKiAgIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgXG4qICAgYEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lgXG5cbkFscmlnaHQsIHRoYXQncyB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGhhbmRsZWQuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIGBCUklER0VfRUJUX1RfRklMVEVSYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGlzIG5lZWRlZCB0byBlbmFibGUgdGFibGUgcmVwbGFjZW1lbnQuIFRoZSBjb2RlIGhhcyBgZG9fcmVwbGFjZWAsIHdoaWNoLCBmcm9tIHRoZSBuYW1lLCByZXBsYWNlcyBhIHRhYmxlLCBtZWFuaW5nIEkgbmVlZCBhIHRhYmxlIHRvIGJlIHJlZ2lzdGVyZWQuIFRoZSBmdW5jdGlvbnMgdGhhdCByZWdpc3RlciB0aGUgdGFibGVzIGFyZSBgZWJ0YWJsZV9maWx0ZXJgLCBgZWJ0YWJsZV9uYXRgLCBhbmQgYGVidGFibGVfYnJvdXRlYC4gT2theSwgSSdsbCBnbyBjaGVjayBgbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuY2AgdG8gbG9vayBhdCBob3cgdGhhdCBhY3R1YWxseSBnZXRzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6NDYuMzY5ODIyMTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyMzgwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWJ0YWJsZV9maWx0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19CUklER0VfRUJUX0JST1VURSkgKz0gZWJ0YWJsZV9icm91dGUub1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSKSArPSBlYnRhYmxlX2ZpbHRlci5vXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JSSURHRV9FQlRfVF9OQVQpICs9IGVidGFibGVfbmF0Lm9cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMi0vKlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM6MzogKiAgZWJ0YWJsZV9maWx0ZXJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jLTQtICpcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM9ODk9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBmcmFtZV9maWx0ZXJfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtOTMtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYzo5NDpzdGF0aWMgaW50IF9faW5pdCBlYnRhYmxlX2ZpbHRlcl9pbml0KHZvaWQpXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYy05NS17XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jLTEwNy1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jOjEwODpzdGF0aWMgdm9pZCBfX2V4aXQgZWJ0YWJsZV9maWx0ZXJfZmluaSh2b2lkKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTA5LXtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTEzLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM6MTE0Om1vZHVsZV9pbml0KGVidGFibGVfZmlsdGVyX2luaXQpO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmM6MTE1Om1vZHVsZV9leGl0KGVidGFibGVfZmlsdGVyX2ZpbmkpO1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMtMTE2LU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTU6MDA6NDYuNTMwMDY1NzI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NzI1NzgwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBhIEJyaWRnZSBFQlQgRmlsdGVyIFRhYmxlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCB3ZSBuZWVkIGBCUklER0VfRUJUX1RfRklMVEVSYCB0byBlZmZlY3RpdmVseSByZXBsYWNlIGEgdGFibGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIExldCdzIGdldCB0aGF0IGFkZGVkIHRvIHRoZSBjb25maWd1cmF0aW9uczsgaXQncyBhIGtleSByZXF1aXJlbWVudC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBzeW1ib2xzIGludm9sdmVkIGhlcmUuIEknbSBmb2N1c2luZyBvbiBgZG9fcmVwbGFjZWAsIGBjb21wYXRfZG9fcmVwbGFjZWAsIGB1cGRhdGVfY291bnRlcnNgLCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AsIGFuZCBgZG9fZWJ0X3NldF9jdGxgLiBUaGV5J3JlIGNlbnRyYWwgdG8gdGhlIHJlcGxhY2VtZW50IGxvZ2ljLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuXG5cbkEgcXVpY2sgdGhvdWdodCBvbiBgZG9fcmVwbGFjZWAgYW5kIGB1cGRhdGVfY291bnRlcnNgLiBJJ20gcHJldHR5IHN1cmUgdGhleSBhcmUgc3RhdGljLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIHRoZXkgbWF5IGJlIGxhcmdlIGVub3VnaCB0byAqbm90KiBoYXZlIGJlZW4gaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGJ1dCBpdCdzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBMZXQgbWUgdmVyaWZ5IHRoZSBzaXplIG9mIGBkb19yZXBsYWNlYCBmaXJzdC4gWXVwLCBvdmVyIGEgaHVuZHJlZCBsaW5lcy4gRGVmaW5pdGVseSAqbm90KiBpbmxpbmVkLiBcblxuTm93LCBgdXBkYXRlX2NvdW50ZXJzYCBpcyB0aGUgbmV4dCBvbmUsIHdoaWNoIHNlZW1zIHNob3J0ZXIgaW5pdGlhbGx5LiBIb3dldmVyLCBpdCBjYWxscyBgZG9fdXBkYXRlX2NvdW50ZXJzYC4gVGhhdCBtZWFucyBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIGlubGluZWQsIGVpdGhlciwgYmVjYXVzZSBgZG9fdXBkYXRlX2NvdW50ZXJzYCBpcyBwcm9iYWJseSBxdWl0ZSBsYXJnZS4gSSBzaG91bGQgY2hlY2sgYHVwZGF0ZV9jb3VudGVyc2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDo1MS4zMDI2NDcyOTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRcXHRcXHRBRERfQ09VTlRFUih0LVxcdTAwM2Vwcml2YXRlLVxcdTAwM2Vjb3VudGVyc1tpXSwgdG1wW2ldLmJjbnQsIHRtcFtpXS5wY250KTtcXG4xNDIxOlxcdFxcbjE0MjI6XFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4xNDIzOlxcdFxcdHJldCA9IDA7XFxuMTQyNDpcXHR1bmxvY2tfbXV0ZXg6XFxuMTQyNTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmVidF9tdXRleCk7XFxuMTQyNjpcXHRcXHR2ZnJlZSh0bXApO1xcbjE0Mjc6XFx0XFx0cmV0dXJuIHJldDtcXG4xNDI4OlxcdH1cXG4xNDI5OlxcdFxcbjE0MzA6XFx0c3RhdGljIGludCB1cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbjE0MzE6XFx0e1xcbjE0MzI6XFx0XFx0c3RydWN0IGVidF9yZXBsYWNlIGhscDtcXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIHNpemVvZihobHApKVxcbjE0MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQzNjpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmhscCwgYXJnLCBzaXplb2YoaGxwKSkpXFxuMTQzNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xNDM4OlxcdFxcbjE0Mzk6XFx0XFx0aGxwLm5hbWVbc2l6ZW9mKGhscC5uYW1lKSAtIDFdID0gJ1xcXFwwJztcXG4xNDQwOlxcdFxcbjE0NDE6XFx0XFx0aWYgKGxlbiAhPSBzaXplb2YoaGxwKSArIGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcXG4xNDQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHRyZXR1cm4gZG9fdXBkYXRlX2NvdW50ZXJzKG5ldCwgaGxwLm5hbWUsIGhscC5jb3VudGVycyxcXG4xNDQ1OlxcdFxcdFxcdFxcdFxcdCAgaGxwLm51bV9jb3VudGVycywgbGVuKTtcXG4xNDQ2OlxcdH1cXG4xNDQ3OlxcdFxcbjE0NDg6XFx0c3RhdGljIGlubGluZSBpbnQgZWJ0X29ial90b191c2VyKGNoYXIgX191c2VyICp1bSwgY29uc3QgY2hhciAqX25hbWUsXFxuMTQ0OTpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmRhdGEsIGludCBlbnRyeXNpemUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE1OjAwOjUxLjMwMjk2NzAxOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc3NTc1MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHVwZGF0ZV9jb3VudGVyc2AgRnVuY3Rpb24ncyBDb250ZXh0KipcblxuUmlnaHQsIGB1cGRhdGVfY291bnRlcnNgIGlzIGEgcHJldHR5IGNvbXBhY3QgZnVuY3Rpb24sIEknbGwgYWRtaXQuIEJ1dCB0aGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHdoZXJlIGl0J3MgKnVzZWQqLiBUaGUga2V5IGlzIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGBkb19lYnRfc2V0X2N0bGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpc24ndCBqdXN0IGEgc3RhbmRhbG9uZSB1dGlsaXR5OyBpdCdzIGxpa2VseSBhIGNvbXBvbmVudCB3aXRoaW4gYSBsYXJnZXIgY29udHJvbCBmbG93IG1lY2hhbmlzbS4gU28sIGl0J3Mgbm90IGVub3VnaCB0byBhc3Nlc3MgYHVwZGF0ZV9jb3VudGVyc2AgaW4gaXNvbGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRyb2wgZmxvdywgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIGBkb19lYnRfc2V0X2N0bGAuIExldCdzIGdldCByaWdodCB0byBpdCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDo1Ni4yODA1NDU0OTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NTU6XFx0c3RhdGljIGludCBkb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBhcmcsXFxuMjU1NjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuKVxcbjI1NTc6XFx0e1xcbjI1NTg6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbjI1NTk6XFx0XFx0aW50IHJldDtcXG4yNTYwOlxcdFxcbjI1NjE6XFx0XFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXFxuMjU2MjpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjI1NjM6XFx0XFx0aWYgKCF4dF9jb21wYXRfY2hlY2soKSlcXG4yNTY0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjU2NTpcXHRcXG4yNTY2OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuMjU2NzpcXHRcXHRjYXNlIEVCVF9TT19TRVRfRU5UUklFUzpcXG4yNTY4OlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuMjU2OTpcXHRcXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG4yNTcwOlxcdFxcdFxcdFxcdHJldCA9IGNvbXBhdF9kb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xcbjI1NzE6XFx0XFx0XFx0ZWxzZVxcbjI1NzI6XFx0I2VuZGlmXFxuMjU3MzpcXHRcXHRcXHRcXHRyZXQgPSBkb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xcbjI1NzQ6XFx0XFx0XFx0YnJlYWs7XFxuMjU3NTpcXHRcXHRjYXNlIEVCVF9TT19TRVRfQ09VTlRFUlM6XFxuMjU3NjpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbjI1Nzc6XFx0XFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxuMjU3ODpcXHRcXHRcXHRcXHRyZXQgPSBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKG5ldCwgYXJnLCBsZW4pO1xcbjI1Nzk6XFx0XFx0XFx0ZWxzZVxcbjI1ODA6XFx0I2VuZGlmXFxuMjU4MTpcXHRcXHRcXHRcXHRyZXQgPSB1cGRhdGVfY291bnRlcnMobmV0LCBhcmcsIGxlbik7XFxuMjU4MjpcXHRcXHRcXHRicmVhaztcXG4yNTgzOlxcdFxcdGRlZmF1bHQ6XFxuMjU4NDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMDo1Ni4yODkyNDE4MDJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0MDg5NDA5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRWJ0YWJsZXMgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZSBpbiBlYnRhYmxlcy4gVGhlIGVudHJ5IHBvaW50IEknbSBsb29raW5nIGF0IGlzIGBkb19lYnRfc2V0X2N0bGAsIGJ1dCB0aGUgcmVhbCBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGJlY2F1c2UgdGhleSdyZSB3aGVyZSB0aGUgYWxsb2NhdGlvbiBvZiBgY291bnRlcnN0bXBgIGFuZCBgdG1wYCBoYXMgYmVlbiBzaGlmdGVkIHRvIG9jY3VyICphZnRlciogY2VydGFpbiBjaGVja3MgYW5kIGxvY2tzIGFyZSBpbiBwbGFjZS4gVGhpcyBpcyBhIHNvbGlkIGFwcHJvYWNoLlxuXG5Ob3csIEkgbmVlZCB0byBsaXN0IHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgY29tcGxldGUgY29udGV4dC4gU28sIGFsb25nc2lkZSBgZG9fcmVwbGFjZV9maW5pc2hgIGFuZCBgZG9fdXBkYXRlX2NvdW50ZXJzYCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBvdmVyYWxsIGZsb3csIHNwZWNpZmljYWxseSBgZG9fcmVwbGFjZWAsIGBjb21wYXRfZG9fcmVwbGFjZWAsIGB1cGRhdGVfY291bnRlcnNgLCBgY29tcGF0X3VwZGF0ZV9jb3VudGVyc2AuIFdlIGNhbid0IG5lZ2xlY3QgYGRvX3JlcGxhY2VfZmluaXNoYCwgYW5kIGBkb191cGRhdGVfY291bnRlcnNgLlxuXG5Db25maWd1cmF0aW9uIHdpc2UsIEkndmUgZ290IHRvIGVuc3VyZSB0aGUgcmlnaHQgbW9kdWxlcyBhcmUgY29tcGlsZWQuIEkga25vdyB0aGF0IEkgd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmcgY29uZmlncyBlbmFibGVkOiBgQlJJREdFYCwgYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfWFRBQkxFU2AsIGBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAsIGFuZCBgQlJJREdFX0VCVF9UX0ZJTFRFUmAuXG5cbkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBCUklER0VfRUJUX1RfRklMVEVSYCB3YXMgZW5vdWdoIHRvIHJlZ2lzdGVyIHRoZSB0YWJsZSwgd2hpY2ggaXQgaXMuIEkgYWxzbyB2ZXJpZmllZCB0aGUgZGVwZW5kZW5jaWVzOiBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAgZGVwZW5kcyBvbiBgQlJJREdFIFx1MDAyNlx1MDAyNiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWWAgZGVwZW5kcyBvbiBgIVBSRUVNUFRfUlRgLiBgQlJJREdFX0VCVF9UX0ZJTFRFUmAgZGVwZW5kcyBvbiBgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWWAuIFRoYXQncyBhbGwgaW4gb3JkZXIuXG5cbkVmZmVjdGl2ZWx5LCB0aGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGltcHJvdmVtZW50cyB0byB0aGUgZWJ0YWJsZXMgY29yZSBsb2dpYywgYWRkcmVzc2luZyBhIG1lbW9yeSBhbGxvY2F0aW9uIHZ1bG5lcmFiaWxpdHkuIEFuZCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoZWQgdGhyb3VnaCBgRUJUX1NPX1NFVF9FTlRSSUVTYCBhbmQgYEVCVF9TT19TRVRfQ09VTlRFUlNgIHNldHNvY2tvcHQgY29tbWFuZHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHRoaXMgcHJvcGVybHkgYnkgZW5hYmxpbmcgbGVnYWN5IGVidGFibGVzIHN1cHBvcnQgdG8gdHJpZ2dlciB0aGUgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0OCwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxNTowMTowNi42OTgxODY4ODRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgyNDc2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJCUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZXCIsXG4gICAgXCJCUklER0VfRUJUX1RfRklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fcmVwbGFjZV9maW5pc2hcIixcbiAgICBcImRvX3VwZGF0ZV9jb3VudGVyc1wiLFxuICAgIFwiZG9fcmVwbGFjZVwiLFxuICAgIFwidXBkYXRlX2NvdW50ZXJzXCIsXG4gICAgXCJjb21wYXRfZG9fcmVwbGFjZVwiLFxuICAgIFwiY29tcGF0X3VwZGF0ZV9jb3VudGVyc1wiLFxuICAgIFwiZG9fZWJ0X3NldF9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgaW4gZWJ0YWJsZXMgYnkgbW92aW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBjb3VudGVyc3RtcGAgYW5kIGB0bXBgIGFmdGVyIHNvbWUgY2hlY2tzIGFuZCBsb2NrcyBpbiBgZG9fcmVwbGFjZV9maW5pc2hgIGFuZCBgZG9fdXBkYXRlX2NvdW50ZXJzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGVidGFibGVzIGxvZ2ljLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgRUJUX1NPX1NFVF9FTlRSSUVTYCBhbmQgYEVCVF9TT19TRVRfQ09VTlRFUlNgIHNldHNvY2tvcHQgY29tbWFuZHMuIFdlIG5lZWQgdG8gZW5hYmxlIGxlZ2FjeSBlYnRhYmxlcyBzdXBwb3J0IHRvIHRlc3QgdGhpcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVwiLFxuICAgIFwiQlJJREdFX0VCVF9UX0ZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3JlcGxhY2VfZmluaXNoXCIsXG4gICAgXCJkb191cGRhdGVfY291bnRlcnNcIixcbiAgICBcImRvX3JlcGxhY2VcIixcbiAgICBcInVwZGF0ZV9jb3VudGVyc1wiLFxuICAgIFwiY29tcGF0X2RvX3JlcGxhY2VcIixcbiAgICBcImNvbXBhdF91cGRhdGVfY291bnRlcnNcIixcbiAgICBcImRvX2VidF9zZXRfY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGluIGVidGFibGVzIGJ5IG1vdmluZyB0aGUgYWxsb2NhdGlvbiBvZiBgY291bnRlcnN0bXBgIGFuZCBgdG1wYCBhZnRlciBzb21lIGNoZWNrcyBhbmQgbG9ja3MgaW4gYGRvX3JlcGxhY2VfZmluaXNoYCBhbmQgYGRvX3VwZGF0ZV9jb3VudGVyc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBlYnRhYmxlcyBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEVCVF9TT19TRVRfRU5UUklFU2AgYW5kIGBFQlRfU09fU0VUX0NPVU5URVJTYCBzZXRzb2Nrb3B0IGNvbW1hbmRzLiBXZSBuZWVkIHRvIGVuYWJsZSBsZWdhY3kgZWJ0YWJsZXMgc3VwcG9ydCB0byB0ZXN0IHRoaXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowh99x5[1] Phase: Succeeded StartedAt: 2026-07-28 15:01:18 +0000 UTC FinishedAt: 2026-07-28 15:01:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 15:01:18 +0000 UTC FinishedAt: 2026-07-28 15:01:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2] Phase: Succeeded StartedAt: 2026-07-28 15:01:18 +0000 UTC FinishedAt: 2026-07-28 19:38:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 15:01:19 +0000 UTC FinishedAt: 2026-07-28 19:38:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 15:01:19 +0000 UTC FinishedAt: 2026-07-28 15:02:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 15:01:19 +0000 UTC FinishedAt: 2026-07-28 15:01:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowh99x5/series-workflowh99x5-convert-artifact-233653380/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 15:02:04 +0000 UTC FinishedAt: 2026-07-28 15:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 15:02:04 +0000 UTC FinishedAt: 2026-07-28 15:47:04 +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:*3380654c-dbc7-48ea-9668-a0648f1e9438,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-workflowh99x5/series-workflowh99x5-convert-artifact-233653380/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": "70b3f777-637a-4f97-8e8a-30fc9cda4c5e", "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-workflowh99x5/series-workflowh99x5-build-action-418449858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 15:02:04 +0000 UTC FinishedAt: 2026-07-28 15:46:54 +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:*3380654c-dbc7-48ea-9668-a0648f1e9438,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-workflowh99x5/series-workflowh99x5-convert-artifact-233653380/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": "70b3f777-637a-4f97-8e8a-30fc9cda4c5e", "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-workflowh99x5/series-workflowh99x5-build-action-418449858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 15:47:04 +0000 UTC FinishedAt: 2026-07-28 15:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 15:47:04 +0000 UTC FinishedAt: 2026-07-28 15:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 15:47:04 +0000 UTC FinishedAt: 2026-07-28 15:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 15:47:04 +0000 UTC FinishedAt: 2026-07-28 15:47:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowh99x5/series-workflowh99x5-convert-artifact-730565379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 15:47:15 +0000 UTC FinishedAt: 2026-07-28 15:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 15:47:15 +0000 UTC FinishedAt: 2026-07-28 15:49:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*70b3f777-637a-4f97-8e8a-30fc9cda4c5e,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-workflowh99x5/series-workflowh99x5-build-action-418449858/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-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 15:49:17 +0000 UTC FinishedAt: 2026-07-28 15:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 15:49:17 +0000 UTC FinishedAt: 2026-07-28 15:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 15:49:17 +0000 UTC FinishedAt: 2026-07-28 16:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 15:49:17 +0000 UTC FinishedAt: 2026-07-28 16:32:11 +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:*3380654c-dbc7-48ea-9668-a0648f1e9438,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-workflowh99x5/series-workflowh99x5-convert-artifact-730565379/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": "bb3969e1-e0a0-461e-91f8-41f0f7bb446c", "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-workflowh99x5/series-workflowh99x5-build-action-930888119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 15:49:17 +0000 UTC FinishedAt: 2026-07-28 16:32:03 +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:*3380654c-dbc7-48ea-9668-a0648f1e9438,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-workflowh99x5/series-workflowh99x5-convert-artifact-730565379/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": "bb3969e1-e0a0-461e-91f8-41f0f7bb446c", "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-workflowh99x5/series-workflowh99x5-build-action-930888119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 16:32:11 +0000 UTC FinishedAt: 2026-07-28 16:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 16:32:11 +0000 UTC FinishedAt: 2026-07-28 16:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 16:32:11 +0000 UTC FinishedAt: 2026-07-28 16:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 16:32:11 +0000 UTC FinishedAt: 2026-07-28 16:33:49 +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:*bb3969e1-e0a0-461e-91f8-41f0f7bb446c,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-workflowh99x5/series-workflowh99x5-build-action-930888119/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-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 16:33:59 +0000 UTC FinishedAt: 2026-07-28 19:38:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 16:33:59 +0000 UTC FinishedAt: 2026-07-28 19:38:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"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:*70b3f777-637a-4f97-8e8a-30fc9cda4c5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb3969e1-e0a0-461e-91f8-41f0f7bb446c,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-workflowh99x5/series-workflowh99x5-build-action-418449858/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-workflowh99x5/series-workflowh99x5-build-action-930888119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 16:33:59 +0000 UTC FinishedAt: 2026-07-28 16:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 16:33:59 +0000 UTC FinishedAt: 2026-07-28 16:34:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"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-workflowh99x5/series-workflowh99x5-convert-artifact-2726710812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 16:33:59 +0000 UTC FinishedAt: 2026-07-28 16:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 16:33:59 +0000 UTC FinishedAt: 2026-07-28 16:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 16:33:59 +0000 UTC FinishedAt: 2026-07-28 16:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 16:34:09 +0000 UTC FinishedAt: 2026-07-28 19:38:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh99x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_replace_finish","do_update_counters","do_replace","update_counters","compat_do_replace","compat_update_counters","do_ebt_set_ctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_XTABLES","NETFILTER_XTABLES_LEGACY","BRIDGE_NF_EBTABLES_LEGACY","BRIDGE_EBT_T_FILTER"],"series_id":"aaf59a76-cba2-41a6-a8a2-1f9e35624cc6","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 16:34:09 +0000 UTC FinishedAt: 2026-07-28 19:38:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*70b3f777-637a-4f97-8e8a-30fc9cda4c5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb3969e1-e0a0-461e-91f8-41f0f7bb446c,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-workflowh99x5/series-workflowh99x5-build-action-418449858/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-workflowh99x5/series-workflowh99x5-build-action-930888119/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-workflowh99x5/series-workflowh99x5-convert-artifact-2726710812/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,}