Name: series-workflowhsm6h Phase: Succeeded StartedAt: 2026-07-26 07:24:20 +0000 UTC FinishedAt: 2026-07-26 12:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[0] Phase: Succeeded StartedAt: 2026-07-26 07:24:20 +0000 UTC FinishedAt: 2026-07-26 07:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 07:24:20 +0000 UTC FinishedAt: 2026-07-26 07:42:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "50406d35f5635e1cc523e61409d57e851b5f5df8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "PERF_EVENTS", "CPU_SUP_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "50406d35f5635e1cc523e61409d57e851b5f5df8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "PERF_EVENTS", "CPU_SUP_AMD" ], "series_id": "ba4e828e-e95c-4a58-9a87-12c96c2b49cf" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "svm_update_lbrv", "svm_enable_lbrv", "svm_vcpu_after_set_cpuid", "perf_get_x86_pmu_capability" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0NQVV9TVVBfQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZtX3VwZGF0ZV9sYnJ2JiMzNDssCiAgICAmIzM0O3N2bV9lbmFibGVfbGJydiYjMzQ7LAogICAgJiMzNDtzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQmIzM0OywKICAgICYjMzQ7cGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQU1EIExCUiBWMiAoTGFzdCBCcmFuY2ggUmVjb3JkIFZlcnNpb24gMikgaW4gS1ZNLiBJdCBtb2RpZmllcyBTVk0gdG8gaGFuZGxlIG5ldyBNU1JzIChNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9BTURfU0FNUF9CUl9GUk9NKSBhbmQgQ1BVSUQgZmVhdHVyZXMgKEFNRF9MQlJfVjIsIEFNRF9MQlJfUE1DX0ZSRUVaRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gQU1EIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDAzMGIzZGE5ODJiMzc4OGU1MDg2OGIzMWFiM2IyZWQyMDIyYzY5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA3OjQwOjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9jb3JlLmMgYi9hcmNoL3g4Ni9ldmVudHMvY29yZS5jXG5pbmRleCA0YjllMTA1MzA5YzZhOS4uNGFjYmNhMWE4OGExODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9ldmVudHMvY29yZS5jXG5AQCAtMzEzOCw2ICYjNDM7MzEzOCw3IEBAIHZvaWQgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgKmNhcClcbiBcdGNhcC1cdTAwM2ViaXRfd2lkdGhfZml4ZWRcdD0gY2FwLVx1MDAzZW51bV9jb3VudGVyc19maXhlZCA/IHg4Nl9wbXUuY250dmFsX2JpdHMgOiAwO1xuIFx0Y2FwLVx1MDAzZWV2ZW50c19tYXNrXHQ9ICh1bnNpZ25lZCBpbnQpeDg2X3BtdS5ldmVudHNfbWFza2w7XG4gXHRjYXAtXHUwMDNlZXZlbnRzX21hc2tfbGVuXHQ9IHg4Nl9wbXUuZXZlbnRzX21hc2tfbGVuO1xuJiM0MztcdGNhcC1cdTAwM2VudW1fYnJhbmNoZXNfbGJyXHQ9IHg4Nl9wbXUubGJyX25yO1xuIFx0Y2FwLVx1MDAzZXBlYnNfZXB0XHRcdD0geDg2X3BtdS5wZWJzX2VwdDtcbiBcdGNhcC1cdTAwM2VtZWRpYXRlZFx0XHQ9ICEhKHBtdS5jYXBhYmlsaXRpZXMgXHUwMDI2IFBFUkZfUE1VX0NBUF9NRURJQVRFRF9WUE1VKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXG5pbmRleCAxZWIxMzY3M2U4ODlmOS4uZjE4Y2YwOTg2ZTEyZDMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxuQEAgLTMwNiw2ICYjNDM7MzA2LDcgQEAgc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSB7XG4gXHRpbnRcdFx0Yml0X3dpZHRoX2ZpeGVkO1xuIFx0dW5zaWduZWQgaW50XHRldmVudHNfbWFzaztcbiBcdGludFx0XHRldmVudHNfbWFza19sZW47XG4mIzQzO1x0aW50XHRcdG51bV9icmFuY2hlc19sYnI7XG4gXHR1bnNpZ25lZCBpbnRcdHBlYnNfZXB0XHQ6MTtcbiBcdHVuc2lnbmVkIGludFx0bWVkaWF0ZWRcdDoxO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMzEuLmYzYmM5N2JjNmFjYWIzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5AQCAtMjUzLDYgJiM0MzsyNTMsOCBAQCBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7XG4gI2RlZmluZSBTVk1fVFNDX1JBVElPX01BWFx0MHgwMDAwMDBmZmZmZmZmZmZmVUxMXG4gI2RlZmluZSBTVk1fVFNDX1JBVElPX0RFRkFVTFRcdDB4MDEwMDAwMDAwMFVMTFxuIFxuJiM0MzsjZGVmaW5lIFNWTV9MQlJfVjJfU1RBQ0tfU0laRSAxNlxuJiM0MztcbiBcbiAvKiBBVklDICovXG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfR1VFU1RfUEhZU0lDQUxfSURfTUFTS1x0KDB4RkZVTEwpXG5AQCAtMzY4LDggJiM0MzszNzAsMTUgQEAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhIHtcbiBcdHU2NCBicl90bztcbiBcdHU2NCBsYXN0X2V4Y3BfZnJvbTtcbiBcdHU2NCBsYXN0X2V4Y3BfdG87XG4tXHR1OCByZXNlcnZlZF8weDI5OFs3Ml07XG4mIzQzO1x0dTY0IGRiZ19leHRuX2NmZztcbiYjNDM7XHR1OCByZXNlcnZlZF8weDJhMFs2NF07XG4gXHR1NjQgc3BlY19jdHJsO1x0XHQvKiBHdWVzdCB2ZXJzaW9uIG9mIFNQRUNfQ1RSTCBhdCAweDJFMCAqL1xuJiM0MztcdHU4IHJlc2VydmVkXzB4MmU4WzkwNF07XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHU2NCBsYnJfc3RhY2tfZnJvbTtcbiYjNDM7XHRcdHU2NCBsYnJfc3RhY2tfdG87XG4mIzQzO1x0fSBfX3BhY2tlZCBsYnJbMTZdO1xuJiM0MztcdHU2NCBsYnJfc2VsZWN0O1xuIH0gX19wYWNrZWQ7XG4gXG4gLyogU2F2ZSBhcmVhIGRlZmluaXRpb24gZm9yIFNFVi1FUyBhbmQgU0VWLVNOUCBndWVzdHMgKi9cbkBAIC01NTIsNyAmIzQzOzU2MSw3IEBAIHN0cnVjdCB2bWNiIHtcbiBcdH07XG4gfSBfX3BhY2tlZDtcbiBcbi0jZGVmaW5lIEVYUEVDVEVEX1ZNQ0JfU0FWRV9BUkVBX1NJWkVcdFx0NzQ0XG4mIzQzOyNkZWZpbmUgRVhQRUNURURfVk1DQl9TQVZFX0FSRUFfU0laRVx0XHQxOTEyXG4gI2RlZmluZSBFWFBFQ1RFRF9HSENCX1NBVkVfQVJFQV9TSVpFXHRcdDEwMzJcbiAjZGVmaW5lIEVYUEVDVEVEX1NFVl9FU19TQVZFX0FSRUFfU0laRVx0XHQxNjQ4XG4gI2RlZmluZSBFWFBFQ1RFRF9WTUNCX0NPTlRST0xfQVJFQV9TSVpFXHRcdDEwMjRcbkBAIC01NzcsNyAmIzQzOzU4Niw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuIFx0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHhkOCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDE4MCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI0OCk7XG4tXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI5OCk7XG4mIzQzO1x0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHgyYTApO1xuJiM0MztcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MmU4KTtcbiBcbiBcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQoc2V2X2VzX3NhdmVfYXJlYSwgMHhjOCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHNldl9lc19zYXZlX2FyZWEsIDB4Y2MpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IDI2OThmYTQyY2Q5NzExLi41MWI2OTFmOTE0NDJiYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuQEAgLTEyNjYsNyAmIzQzOzEyNjYsOSBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXG4gXHQpO1xuIFxuIFx0a3ZtX2NwdV9jYXBfaW5pdChDUFVJRF84MDAwXzAwMjJfRUFYLFxuLVx0XHRGKFBFUkZNT05fVjIpLFxuJiM0MztcdFx0U0NBVFRFUkVEX0YoUEVSRk1PTl9WMiksXG4mIzQzO1x0XHRTQ0FUVEVSRURfRihBTURfTEJSX1YyKSxcbiYjNDM7XHRcdFNDQVRURVJFRF9GKEFNRF9MQlJfUE1DX0ZSRUVaRSksXG4gXHQpO1xuIFxuIFx0aWYgKCFzdGF0aWNfY3B1X2hhc19idWcoWDg2X0JVR19OVUxMX1NFRykpXG5AQCAtMTg4Myw2ICYjNDM7MTg4NSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBfX2RvX2NwdWlkX2Z1bmMoc3RydWN0IGt2bV9jcHVpZF9hcnJheSAqYXJyYXksIHUzMiBmdW5jdGlvbilcbiBcdFx0Y3B1aWRfZW50cnlfb3ZlcnJpZGUoZW50cnksIENQVUlEXzgwMDBfMDAyMl9FQVgpO1xuIFxuIFx0XHRlYnguc3BsaXQubnVtX2NvcmVfcG1jID0ga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikpXG4mIzQzO1x0XHRcdGVieC5zcGxpdC5sYnJfdjJfc3RhY2tfc3ogPVxuJiM0MztcdFx0XHRcdG1pbihrdm1fcG11X2NhcC5udW1fYnJhbmNoZXNfbGJyLCBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpO1xuJiM0MztcbiBcdFx0ZW50cnktXHUwMDNlZWJ4ID0gZWJ4LmZ1bGw7XG4gXHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG5pbmRleCA2NTdmNWY3NDNlZDk3NS4uOWE1OGY5MWViMTczZDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG5AQCAtNzAsNyAmIzQzOzcwLDkgQEBcbiAjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMDdfRURYLCA4KVxuIFxuIC8qIENQVUlEIGxldmVsIDB4ODAwMDAwMjIgKEVBWCkgKi9cbi0jZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9QRVJGTU9OX1YyXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMClcbiYjNDM7I2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMlx0XHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMClcbiYjNDM7I2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMlx0XHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMSlcbiYjNDM7I2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMilcbiBcbiAvKiBDUFVJRCBsZXZlbCAweDgwMDAwMDIxIChFQ1gpICovXG4gI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfVFNBX1NRX05PXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIxX0VDWCwgMSlcbkBAIC0xNDYsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIF9fZmVhdHVyZV90cmFuc2xhdGUoaW50IHg4Nl9mZWF0dXJlKVxuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShTR1hfRURFQ0NTU0EpO1xuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShDT05TVEFOVF9UU0MpO1xuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShQRVJGTU9OX1YyKTtcbiYjNDM7XHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEFNRF9MQlJfVjIpO1xuJiM0MztcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQU1EX0xCUl9QTUNfRlJFRVpFKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoUlJTQkFfQ1RSTCk7XG4gXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEJISV9DVFJMKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoVFNBX1NRX05PKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggZWY2OWE1MWFiMjdmOTguLjNlYzkxYzFjNThkY2M1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTc0NCw2ICYjNDM7NzQ0LDQ3IEBAIHN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN2bS1cdTAwM2VsYnJfbXNyc19pbnRlcmNlcHRlZCA9IGludGVyY2VwdDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHN2bV9sYnJ2Ml9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBzdm1fbGJydjJfYWN0aXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuJiM0MztcdHJldHVybiBzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdfZXh0bl9jZmcgXHUwMDI2IERCR19FWFROX0NGR19MQlJWMkVOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiYjNDM7XHRib29sIGludGVyY2VwdCA9ICFzdm1fbGJydjJfYWN0aXZlKHZjcHUpO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJjZXB0ID09IHN2bS1cdTAwM2VsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzMjsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRzdm1fc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9BTURfU0FNUF9CUl9GUk9NICYjNDM7IGksIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuJiM0MztcbiYjNDM7XHRzdm1fc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9BTUQ2NF9MQlJfU0VMRUNULCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEQkdfRVhUTl9DRkcgc3RheXMgcGVybWFuZW50bHkgaW50ZXJjZXB0ZWQgZm9yIG5vbi1TRVYtRVMgZ3Vlc3RzIHNvXG4mIzQzO1x0ICogS1ZNIGNhbiBvYnNlcnZlIExCUlYyRU4gYW5kIGxhemlseSB0b2dnbGUgVl9MQlIuICBTRVYtRVMmIzQzOyBndWVzdHMgbXVzdFxuJiM0MztcdCAqIGRlbGVnYXRlIExCUiB2aXJ0dWFsaXphdGlvbiB0byB0aGUgcHJvY2Vzc29yIChwZXIgdGhlIEFQTSksIHdoZXJlXG4mIzQzO1x0ICogaW50ZXJjZXB0aW5nIExCUiBNU1JzIGNhbiBiZSBmYXRhbCwgc28gdG9nZ2xlIGl0IHdpdGggdGhlIHJlc3QuICBTZWVcbiYjNDM7XHQgKiBjb21taXQgYjdlNGJlMGEyMjRmIChcJiMzNDtLVk06IFNFVi1FUzogRGVsZWdhdGUgTEJSIHZpcnR1YWxpemF0aW9uIHRvIHRoZVxuJiM0MztcdCAqIHByb2Nlc3NvclwmIzM0OykuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX3Nldl9lc19ndWVzdCh2Y3B1KSlcbiYjNDM7XHRcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRF9EQkdfRVhUTl9DRkcsIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuJiM0MztcbiYjNDM7XHRzdm0tXHUwMDNlbGJydjJfbXNyc19pbnRlcmNlcHRlZCA9IGludGVyY2VwdDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHN2bV92Y3B1X2ZyZWVfbXNycG0odm9pZCAqbXNycG0pXG4ge1xuIFx0X19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShtc3JwbSksIGdldF9vcmRlcihNU1JQTV9TSVpFKSk7XG5AQCAtNzk5LDggJiM0Mzs4NDAsMTAgQEAgc3RhdGljIHZvaWQgc3ZtX3JlY2FsY19tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm1fZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfVFlQRV9SVyk7XG4gI2VuZGlmXG4gXG4tXHRpZiAobGJydilcbiYjNDM7XHRpZiAobGJydikge1xuIFx0XHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbiYjNDM7XHRcdHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJQQikpXG4gXHRcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0lBMzJfUFJFRF9DTUQsIE1TUl9UWVBFX1csXG5AQCAtODY4LDYgJiM0Mzs5MTEsNyBAQCB2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XG4gXHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbiYjNDM7XHRzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX3N2bV9kaXNhYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTg4MCw5ICYjNDM7OTI0LDExIEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdGJvb2wgY3VycmVudF9lbmFibGVfbGJydiA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSO1xuJiM0MztcbiBcdGJvb2wgZW5hYmxlX2xicnYgPSAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IERFQlVHQ1RMTVNSX0xCUikgfHxcbiBcdFx0XHQgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoc3ZtLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7XG4mIzQzO1x0XHRcdCAgICAoc3ZtLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSkgfHxcbiYjNDM7XHRcdFx0ICAgIHN2bV9sYnJ2Ml9hY3RpdmUodmNwdSk7XG4gXG4gXHRpZiAoZW5hYmxlX2xicnYgXHUwMDI2XHUwMDI2ICFjdXJyZW50X2VuYWJsZV9sYnJ2KVxuIFx0XHRfX3N2bV9lbmFibGVfbGJydih2Y3B1KTtcbkBAIC04OTYsNiAmIzQzOzk0Miw3IEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGRvLCBzbyBhbHdheXMgcmVjYWxjdWxhdGUgdGhlIGludGVyY2VwdHMgaGVyZS5cbiBcdCAqL1xuIFx0c3ZtX3JlY2FsY19sYnJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4mIzQzO1x0c3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbiB9XG4gXG4gdm9pZCBkaXNhYmxlX25taV9zaW5nbGVzdGVwKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuQEAgLTEzNDEsNiAmIzQzOzEzODgsNyBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRzdm0tXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSB0cnVlO1xuIFx0c3ZtLVx1MDAzZWxicl9tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbiYjNDM7XHRzdm0tXHUwMDNlbGJydjJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG4gXG4gXHRzdm0tXHUwMDNldm1jYjAxLnB0ciA9IHBhZ2VfYWRkcmVzcyh2bWNiMDFfcGFnZSk7XG4gXHRzdm0tXHUwMDNldm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5AQCAtMjc4Nyw2ICYjNDM7MjgzNSwxOSBAQCBzdGF0aWMgdTY0ICpzdm1fdm1jYl9sYnIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiBtc3IpXG4gXHRyZXR1cm4gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5icl9mcm9tO1xuIH1cbiBcbiYjNDM7c3RhdGljIHU2NCAqc3ZtX3ZtY2JfbGJydjIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiBtc3IpXG4mIzQzO3tcbiYjNDM7XHR1MzIgb2Zmc2V0ID0gbXNyIC0gTVNSX0FNRF9TQU1QX0JSX0ZST007XG4mIzQzO1x0dTMyIGlkeCA9IG9mZnNldCBcdTAwM2VcdTAwM2UgMTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShpZHggXHUwMDNlPSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUubGJyWzBdLmxicl9zdGFja19mcm9tO1xuJiM0MztcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAyNiAxKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUubGJyW2lkeF0ubGJyX3N0YWNrX3RvO1xuJiM0MztcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicltpZHhdLmxicl9zdGFja19mcm9tO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIHNldl9lc19wcmV2ZW50X21zcl9hY2Nlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiB7XG5AQCAtMjg4Miw2ICYjNDM7Mjk0MywyMSBAQCBzdGF0aWMgaW50IHN2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiBcdGNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBsYnJ2ID8gKnN2bV92bWNiX2xicihzdm0sIG1zcl9pbmZvLVx1MDAzZWluZGV4KSA6IDA7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRF9EQkdfRVhUTl9DRkc6XG4mIzQzO1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4mIzQzO1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbiYjNDM7XHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRDY0X0xCUl9TRUxFQ1Q6XG4mIzQzO1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4mIzQzO1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbiYjNDM7XHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicl9zZWxlY3Q7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1TUl9BTURfU0FNUF9CUl9GUk9NIC4uLiBNU1JfQU1EX1NBTVBfQlJfRlJPTSAmIzQzOyAzMTpcbiYjNDM7XHRcdGlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSlcbiYjNDM7XHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuJiM0MztcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9ICpzdm1fdm1jYl9sYnJ2Mihzdm0sIG1zcl9pbmZvLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBNU1JfVk1fSFNBVkVfUEE6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zcjtcbiBcdFx0YnJlYWs7XG5AQCAtMzE2MCw2ICYjNDM7MzIzNiwxMCBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpXG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5ERUJVR0NUTE1TUl9CVEY7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmICgoZGF0YSBcdTAwMjYgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSkpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcbiBcdFx0aWYgKGRhdGEgXHUwMDI2IERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG5AQCAtMzE4MSw2ICYjNDM7MzI2MSw0MCBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpXG4gXHRcdCpzdm1fdm1jYl9sYnIoc3ZtLCBlY3gpID0gZGF0YTtcbiBcdFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cdTAwM2V2bWNiLCBWTUNCX0xCUik7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRF9EQkdfRVhUTl9DRkc6XG4mIzQzO1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4mIzQzO1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZGF0YSBcdTAwMjYgREJHX0VYVE5fQ0ZHX1JFU0VSVkVEX0JJVFMpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9PSBkYXRhKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9IGRhdGE7XG4mIzQzO1x0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbiYjNDM7XHRcdHN2bV91cGRhdGVfbGJydih2Y3B1KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRDY0X0xCUl9TRUxFQ1Q6XG4mIzQzO1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4mIzQzO1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZGF0YSBcdTAwMjYgTEJSX1NFTEVDVF9SRVNFUlZFRF9CSVRTKVxuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5sYnJfc2VsZWN0ID09IGRhdGEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUubGJyX3NlbGVjdCA9IGRhdGE7XG4mIzQzO1x0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRF9TQU1QX0JSX0ZST00gLi4uIE1TUl9BTURfU0FNUF9CUl9GUk9NICYjNDM7IDMxOlxuJiM0MztcdFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxuJiM0MztcdFx0XHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XG4mIzQzO1xuJiM0MztcdFx0KnN2bV92bWNiX2xicnYyKHN2bSwgZWN4KSA9IGRhdGE7XG4mIzQzO1x0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBNU1JfVk1fSFNBVkVfUEE6XG4gXHRcdC8qXG4gXHRcdCAqIE9sZCBrZXJuZWxzIGRpZCBub3QgdmFsaWRhdGUgdGhlIHZhbHVlIHdyaXR0ZW4gdG9cbkBAIC00NzEwLDYgJiM0Mzs0ODI0LDIwIEBAIHN0YXRpYyBib29sIHN2bV9oYXNfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGNwdWlkX3F1ZXJ5X2xicnYyX3N0YWNrX3NpemUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmVudHJ5O1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApO1xuJiM0MztcdGlmICghZW50cnkgfHwgZW50cnktXHUwMDNlZWF4IFx1MDAzYyAweDgwMDAwMDIyKVxuJiM0MztcdFx0Z290byBub3RfZm91bmQ7XG4mIzQzO1x0ZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDIyKTtcbiYjNDM7XHRpZiAoZW50cnkpXG4mIzQzO1x0XHRyZXR1cm4gKGVudHJ5LVx1MDAzZWVieCBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDB4M2Y7XG4mIzQzO25vdF9mb3VuZDpcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuQEAgLTQ3MzYsNiAmIzQzOzQ4NjQsMTAgQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChndWVzdF9jcHVpZF9pc19pbnRlbF9jb21wYXRpYmxlKHZjcHUpKVxuIFx0XHRndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX1ZfVk1TQVZFX1ZNTE9BRCk7XG4gXG4mIzQzO1x0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHZjcHUpICE9IFNWTV9MQlJfVjJfU1RBQ0tfU0laRSlcbiYjNDM7XHRcdGd1ZXN0X2NwdV9jYXBfY2xlYXIodmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7XG4mIzQzO1xuIFx0aWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSlcbiBcdFx0c2V2X3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN2bSk7XG4gfVxuQEAgLTU1ODIsNiAmIzQzOzU3MTQsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHN2bV9zZXRfY3B1X2NhcHModm9pZClcbiBcdFx0aWYgKGt2bV9wbXVfY2FwLnZlcnNpb24gIT0gMiB8fFxuIFx0XHQgICAgIWt2bV9jcHVfY2FwX2hhcyhYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUpKVxuIFx0XHRcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbGJydiB8fCAhZW5hYmxlX21lZGlhdGVkX3BtdSB8fFxuJiM0MztcdFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXG4mIzQzO1x0XHRcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xuIFx0fVxuIFxuIFx0LyogQ1BVSUQgMHg4MDAwMDAxRiAoU01FL1NFViBmZWF0dXJlcykgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggNzE2YmUyMWZiYTMzNTQuLjEwNWE3MWQ2OWQ2OGE4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTM2Myw2ICYjNDM7MzYzLDcgQEAgc3RydWN0IHZjcHVfc3ZtIHtcbiBcdGJvb2wgYXZpY19pcnFfd2luZG93O1xuIFx0Ym9vbCB4MmF2aWNfbXNyc19pbnRlcmNlcHRlZDtcbiBcdGJvb2wgbGJyX21zcnNfaW50ZXJjZXB0ZWQ7XG4mIzQzO1x0Ym9vbCBsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkO1xuIFxuIFx0LyogR3Vlc3QgR0lGIHZhbHVlLCB1c2VkIHdoZW4gdkdJRiBpcyBub3QgZW5hYmxlZCAqL1xuIFx0Ym9vbCBndWVzdF9naWY7XG5AQCAtNzgzLDcgJiM0Mzs3ODQsMTEgQEAgQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyhib29sLCB0ZXN0LCB0ZXN0KVxuIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlModm9pZCwgY2xlYXIsIF9fY2xlYXIpXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBzZXQsIF9fc2V0KVxuIFxuLSNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUyAofkRFQlVHQ1RMTVNSX0xCUilcbiYjNDM7I2RlZmluZSBERUJVR0NUTF9MQlJfUE1DX0ZSRUVaRV9CSVRTXHQoREVCVUdDVExNU1JfRlJFRVpFX0xCUlNfT05fUE1JIHxcdFxcXG4mIzQzO1x0XHRcdFx0XHQgREVCVUdDVExNU1JfRlJFRVpFX1BFUkZNT05fT05fUE1JKVxuJiM0MzsjZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFNcdCh+KERFQlVHQ1RMTVNSX0xCUiB8IERFQlVHQ1RMX0xCUl9QTUNfRlJFRVpFX0JJVFMpKVxuJiM0MzsjZGVmaW5lIERCR19FWFROX0NGR19SRVNFUlZFRF9CSVRTICh+REJHX0VYVE5fQ0ZHX0xCUlYyRU4pXG4mIzQzOyNkZWZpbmUgTEJSX1NFTEVDVF9SRVNFUlZFRF9CSVRTICh+R0VOTUFTS19VTEwoOCwgMCkpXG4gXG4gLyogc3ZtLmMgKi9cbiBleHRlcm4gYm9vbCBkdW1wX2ludmFsaWRfdm1jYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1fdXBkYXRlX2xicnYmIzM0OywKICAgICYjMzQ7c3ZtX2VuYWJsZV9sYnJ2JiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2FmdGVyX3NldF9jcHVpZCYjMzQ7LAogICAgJiMzNDtwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBTUQgTEJSIFYyIChMYXN0IEJyYW5jaCBSZWNvcmQgVmVyc2lvbiAyKSBpbiBLVk0uIEl0IG1vZGlmaWVzIFNWTSB0byBoYW5kbGUgbmV3IE1TUnMgKE1TUl9BTURfREJHX0VYVE5fQ0ZHLCBNU1JfQU1ENjRfTEJSX1NFTEVDVCwgTVNSX0FNRF9TQU1QX0JSX0ZST00pIGFuZCBDUFVJRCBmZWF0dXJlcyAoQU1EX0xCUl9WMiwgQU1EX0xCUl9QTUNfRlJFRVpFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSBBTUQgdmlydHVhbGl6YXRpb24gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MDMwYjNkYTk4MmIzNzg4ZTUwODY4YjMxYWIzYjJlZDIwMjJjNjljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMjYgMDc6NDA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvY29yZS5jIGIvYXJjaC94ODYvZXZlbnRzL2NvcmUuYwppbmRleCA0YjllMTA1MzA5YzZhOS4uNGFjYmNhMWE4OGExODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2NvcmUuYwpAQCAtMzEzOCw2ICYjNDM7MzEzOCw3IEBAIHZvaWQgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgKmNhcCkKIAljYXAtJmd0O2JpdF93aWR0aF9maXhlZAk9IGNhcC0mZ3Q7bnVtX2NvdW50ZXJzX2ZpeGVkID8geDg2X3BtdS5jbnR2YWxfYml0cyA6IDA7CiAJY2FwLSZndDtldmVudHNfbWFzawk9ICh1bnNpZ25lZCBpbnQpeDg2X3BtdS5ldmVudHNfbWFza2w7CiAJY2FwLSZndDtldmVudHNfbWFza19sZW4JPSB4ODZfcG11LmV2ZW50c19tYXNrX2xlbjsKJiM0MzsJY2FwLSZndDtudW1fYnJhbmNoZXNfbGJyCT0geDg2X3BtdS5sYnJfbnI7CiAJY2FwLSZndDtwZWJzX2VwdAkJPSB4ODZfcG11LnBlYnNfZXB0OwogCWNhcC0mZ3Q7bWVkaWF0ZWQJCT0gISEocG11LmNhcGFiaWxpdGllcyAmYW1wOyBQRVJGX1BNVV9DQVBfTUVESUFURURfVlBNVSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggMWViMTM2NzNlODg5ZjkuLmYxOGNmMDk4NmUxMmQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0zMDYsNiAmIzQzOzMwNiw3IEBAIHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgewogCWludAkJYml0X3dpZHRoX2ZpeGVkOwogCXVuc2lnbmVkIGludAlldmVudHNfbWFzazsKIAlpbnQJCWV2ZW50c19tYXNrX2xlbjsKJiM0MzsJaW50CQludW1fYnJhbmNoZXNfbGJyOwogCXVuc2lnbmVkIGludAlwZWJzX2VwdAk6MTsKIAl1bnNpZ25lZCBpbnQJbWVkaWF0ZWQJOjE7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCBhYTYzNDMxYmE5MmMzMS4uZjNiYzk3YmM2YWNhYjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCkBAIC0yNTMsNiAmIzQzOzI1Myw4IEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHsKICNkZWZpbmUgU1ZNX1RTQ19SQVRJT19NQVgJMHgwMDAwMDBmZmZmZmZmZmZmVUxMCiAjZGVmaW5lIFNWTV9UU0NfUkFUSU9fREVGQVVMVAkweDAxMDAwMDAwMDBVTEwKIAomIzQzOyNkZWZpbmUgU1ZNX0xCUl9WMl9TVEFDS19TSVpFIDE2CiYjNDM7CiAKIC8qIEFWSUMgKi8KICNkZWZpbmUgQVZJQ19MT0dJQ0FMX0lEX0VOVFJZX0dVRVNUX1BIWVNJQ0FMX0lEX01BU0sJKDB4RkZVTEwpCkBAIC0zNjgsOCAmIzQzOzM3MCwxNSBAQCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgewogCXU2NCBicl90bzsKIAl1NjQgbGFzdF9leGNwX2Zyb207CiAJdTY0IGxhc3RfZXhjcF90bzsKLQl1OCByZXNlcnZlZF8weDI5OFs3Ml07CiYjNDM7CXU2NCBkYmdfZXh0bl9jZmc7CiYjNDM7CXU4IHJlc2VydmVkXzB4MmEwWzY0XTsKIAl1NjQgc3BlY19jdHJsOwkJLyogR3Vlc3QgdmVyc2lvbiBvZiBTUEVDX0NUUkwgYXQgMHgyRTAgKi8KJiM0MzsJdTggcmVzZXJ2ZWRfMHgyZThbOTA0XTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXU2NCBsYnJfc3RhY2tfZnJvbTsKJiM0MzsJCXU2NCBsYnJfc3RhY2tfdG87CiYjNDM7CX0gX19wYWNrZWQgbGJyWzE2XTsKJiM0MzsJdTY0IGxicl9zZWxlY3Q7CiB9IF9fcGFja2VkOwogCiAvKiBTYXZlIGFyZWEgZGVmaW5pdGlvbiBmb3IgU0VWLUVTIGFuZCBTRVYtU05QIGd1ZXN0cyAqLwpAQCAtNTUyLDcgJiM0Mzs1NjEsNyBAQCBzdHJ1Y3Qgdm1jYiB7CiAJfTsKIH0gX19wYWNrZWQ7CiAKLSNkZWZpbmUgRVhQRUNURURfVk1DQl9TQVZFX0FSRUFfU0laRQkJNzQ0CiYjNDM7I2RlZmluZSBFWFBFQ1RFRF9WTUNCX1NBVkVfQVJFQV9TSVpFCQkxOTEyCiAjZGVmaW5lIEVYUEVDVEVEX0dIQ0JfU0FWRV9BUkVBX1NJWkUJCTEwMzIKICNkZWZpbmUgRVhQRUNURURfU0VWX0VTX1NBVkVfQVJFQV9TSVpFCQkxNjQ4CiAjZGVmaW5lIEVYUEVDVEVEX1ZNQ0JfQ09OVFJPTF9BUkVBX1NJWkUJCTEwMjQKQEAgLTU3Nyw3ICYjNDM7NTg2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpCiAJQlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHhkOCk7CiAJQlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHgxODApOwogCUJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MjQ4KTsKLQlCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI5OCk7CiYjNDM7CUJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MmEwKTsKJiM0MzsJQlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHgyZTgpOwogCiAJQlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVChzZXZfZXNfc2F2ZV9hcmVhLCAweGM4KTsKIAlCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHNldl9lc19zYXZlX2FyZWEsIDB4Y2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwppbmRleCAyNjk4ZmE0MmNkOTcxMS4uNTFiNjkxZjkxNDQyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jCkBAIC0xMjY2LDcgJiM0MzsxMjY2LDkgQEAgdm9pZCBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwcyh2b2lkKQogCSk7CiAKIAlrdm1fY3B1X2NhcF9pbml0KENQVUlEXzgwMDBfMDAyMl9FQVgsCi0JCUYoUEVSRk1PTl9WMiksCiYjNDM7CQlTQ0FUVEVSRURfRihQRVJGTU9OX1YyKSwKJiM0MzsJCVNDQVRURVJFRF9GKEFNRF9MQlJfVjIpLAomIzQzOwkJU0NBVFRFUkVEX0YoQU1EX0xCUl9QTUNfRlJFRVpFKSwKIAkpOwogCiAJaWYgKCFzdGF0aWNfY3B1X2hhc19idWcoWDg2X0JVR19OVUxMX1NFRykpCkBAIC0xODgzLDYgJiM0MzsxODg1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fZG9fY3B1aWRfZnVuYyhzdHJ1Y3Qga3ZtX2NwdWlkX2FycmF5ICphcnJheSwgdTMyIGZ1bmN0aW9uKQogCQljcHVpZF9lbnRyeV9vdmVycmlkZShlbnRyeSwgQ1BVSURfODAwMF8wMDIyX0VBWCk7CiAKIAkJZWJ4LnNwbGl0Lm51bV9jb3JlX3BtYyA9IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19ncDsKJiM0MzsKJiM0MzsJCWlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikpCiYjNDM7CQkJZWJ4LnNwbGl0Lmxicl92Ml9zdGFja19zeiA9CiYjNDM7CQkJCW1pbihrdm1fcG11X2NhcC5udW1fYnJhbmNoZXNfbGJyLCBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpOwomIzQzOwogCQllbnRyeS0mZ3Q7ZWJ4ID0gZWJ4LmZ1bGw7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oCmluZGV4IDY1N2Y1Zjc0M2VkOTc1Li45YTU4ZjkxZWIxNzNkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oCkBAIC03MCw3ICYjNDM7NzAsOSBAQAogI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMDdfRURYLCA4KQogCiAvKiBDUFVJRCBsZXZlbCAweDgwMDAwMDIyIChFQVgpICovCi0jZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9QRVJGTU9OX1YyCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAwKQomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjIJCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAwKQomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfVjIJCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAxKQomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRQlLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMikKIAogLyogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUNYKSAqLwogI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfVFNBX1NRX05PCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjFfRUNYLCAxKQpAQCAtMTQ2LDYgJiM0MzsxNDgsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBfX2ZlYXR1cmVfdHJhbnNsYXRlKGludCB4ODZfZmVhdHVyZSkKIAlLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFNHWF9FREVDQ1NTQSk7CiAJS1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShDT05TVEFOVF9UU0MpOwogCUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoUEVSRk1PTl9WMik7CiYjNDM7CUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQU1EX0xCUl9WMik7CiYjNDM7CUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQU1EX0xCUl9QTUNfRlJFRVpFKTsKIAlLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFJSU0JBX0NUUkwpOwogCUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQkhJX0NUUkwpOwogCUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoVFNBX1NRX05PKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IGVmNjlhNTFhYjI3Zjk4Li4zZWM5MWMxYzU4ZGNjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC03NDQsNiAmIzQzOzc0NCw0NyBAQCBzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc3ZtLSZndDtsYnJfbXNyc19pbnRlcmNlcHRlZCA9IGludGVyY2VwdDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHN2bV9sYnJ2Ml9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUodmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHN2bV9sYnJ2Ml9hY3RpdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiYjNDM7CXJldHVybiBzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIChzdm0tJmd0O3ZtY2ItJmd0O3NhdmUuZGJnX2V4dG5fY2ZnICZhbXA7IERCR19FWFROX0NGR19MQlJWMkVOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKJiM0MzsJYm9vbCBpbnRlcmNlcHQgPSAhc3ZtX2xicnYyX2FjdGl2ZSh2Y3B1KTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmNlcHQgPT0gc3ZtLSZndDtsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMzI7IGkmIzQzOyYjNDM7KQomIzQzOwkJc3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfQU1EX1NBTVBfQlJfRlJPTSAmIzQzOyBpLCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTsKJiM0MzsKJiM0MzsJc3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfQU1ENjRfTEJSX1NFTEVDVCwgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERCR19FWFROX0NGRyBzdGF5cyBwZXJtYW5lbnRseSBpbnRlcmNlcHRlZCBmb3Igbm9uLVNFVi1FUyBndWVzdHMgc28KJiM0MzsJICogS1ZNIGNhbiBvYnNlcnZlIExCUlYyRU4gYW5kIGxhemlseSB0b2dnbGUgVl9MQlIuICBTRVYtRVMmIzQzOyBndWVzdHMgbXVzdAomIzQzOwkgKiBkZWxlZ2F0ZSBMQlIgdmlydHVhbGl6YXRpb24gdG8gdGhlIHByb2Nlc3NvciAocGVyIHRoZSBBUE0pLCB3aGVyZQomIzQzOwkgKiBpbnRlcmNlcHRpbmcgTEJSIE1TUnMgY2FuIGJlIGZhdGFsLCBzbyB0b2dnbGUgaXQgd2l0aCB0aGUgcmVzdC4gIFNlZQomIzQzOwkgKiBjb21taXQgYjdlNGJlMGEyMjRmICgmIzM0O0tWTTogU0VWLUVTOiBEZWxlZ2F0ZSBMQlIgdmlydHVhbGl6YXRpb24gdG8gdGhlCiYjNDM7CSAqIHByb2Nlc3NvciYjMzQ7KS4KJiM0MzsJICovCiYjNDM7CWlmIChpc19zZXZfZXNfZ3Vlc3QodmNwdSkpCiYjNDM7CQlzdm1fc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9BTURfREJHX0VYVE5fQ0ZHLCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTsKJiM0MzsKJiM0MzsJc3ZtLSZndDtsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkID0gaW50ZXJjZXB0OwomIzQzO30KJiM0MzsKIHZvaWQgc3ZtX3ZjcHVfZnJlZV9tc3JwbSh2b2lkICptc3JwbSkKIHsKIAlfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKG1zcnBtKSwgZ2V0X29yZGVyKE1TUlBNX1NJWkUpKTsKQEAgLTc5OSw4ICYjNDM7ODQwLDEwIEBAIHN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN2bV9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9TWVNDQUxMX01BU0ssIE1TUl9UWVBFX1JXKTsKICNlbmRpZgogCi0JaWYgKGxicnYpCiYjNDM7CWlmIChsYnJ2KSB7CiAJCXN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpOwomIzQzOwkJc3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTsKJiM0MzsJfQogCiAJaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJQQikpCiAJCXN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0lBMzJfUFJFRF9DTUQsIE1TUl9UWVBFX1csCkBAIC04NjgsNiAmIzQzOzkxMSw3IEBAIHZvaWQgc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlfX3N2bV9lbmFibGVfbGJydih2Y3B1KTsKIAlzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTsKJiM0MzsJc3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTsKIH0KIAogc3RhdGljIHZvaWQgX19zdm1fZGlzYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTg4MCw5ICYjNDM7OTI0LDExIEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAlib29sIGN1cnJlbnRfZW5hYmxlX2xicnYgPSBzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wubWlzY19jdGwyICZhbXA7IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7CiYjNDM7CiAJYm9vbCBlbmFibGVfbGJydiA9IChzdm0tJmd0O3ZtY2ItJmd0O3NhdmUuZGJnY3RsICZhbXA7IERFQlVHQ1RMTVNSX0xCUikgfHwKIAkJCSAgICAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpICZhbXA7JmFtcDsKLQkJCSAgICAoc3ZtLSZndDtuZXN0ZWQuY3RsLm1pc2NfY3RsMiAmYW1wOyBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7CiYjNDM7CQkJICAgIChzdm0tJmd0O25lc3RlZC5jdGwubWlzY19jdGwyICZhbXA7IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIpKSB8fAomIzQzOwkJCSAgICBzdm1fbGJydjJfYWN0aXZlKHZjcHUpOwogCiAJaWYgKGVuYWJsZV9sYnJ2ICZhbXA7JmFtcDsgIWN1cnJlbnRfZW5hYmxlX2xicnYpCiAJCV9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpOwpAQCAtODk2LDYgJiM0Mzs5NDIsNyBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogZG8sIHNvIGFsd2F5cyByZWNhbGN1bGF0ZSB0aGUgaW50ZXJjZXB0cyBoZXJlLgogCSAqLwogCXN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpOwomIzQzOwlzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpOwogfQogCiB2b2lkIGRpc2FibGVfbm1pX3NpbmdsZXN0ZXAoc3RydWN0IHZjcHVfc3ZtICpzdm0pCkBAIC0xMzQxLDYgJiM0MzsxMzg4LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJc3ZtLSZndDt4MmF2aWNfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CiAJc3ZtLSZndDtsYnJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CiYjNDM7CXN2bS0mZ3Q7bGJydjJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CiAKIAlzdm0tJmd0O3ZtY2IwMS5wdHIgPSBwYWdlX2FkZHJlc3Modm1jYjAxX3BhZ2UpOwogCXN2bS0mZ3Q7dm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKQEAgLTI3ODcsNiAmIzQzOzI4MzUsMTkgQEAgc3RhdGljIHU2NCAqc3ZtX3ZtY2JfbGJyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1MzIgbXNyKQogCXJldHVybiAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5icl9mcm9tOwogfQogCiYjNDM7c3RhdGljIHU2NCAqc3ZtX3ZtY2JfbGJydjIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiBtc3IpCiYjNDM7ewomIzQzOwl1MzIgb2Zmc2V0ID0gbXNyIC0gTVNSX0FNRF9TQU1QX0JSX0ZST007CiYjNDM7CXUzMiBpZHggPSBvZmZzZXQgJmd0OyZndDsgMTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShpZHggJmd0Oz0gU1ZNX0xCUl9WMl9TVEFDS19TSVpFKSkKJiM0MzsJCXJldHVybiAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5sYnJbMF0ubGJyX3N0YWNrX2Zyb207CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmFtcDsgMSkKJiM0MzsJCXJldHVybiAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5sYnJbaWR4XS5sYnJfc3RhY2tfdG87CiYjNDM7CXJldHVybiAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5sYnJbaWR4XS5sYnJfc3RhY2tfZnJvbTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBzZXZfZXNfcHJldmVudF9tc3JfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgICAgICBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKQogewpAQCAtMjg4Miw2ICYjNDM7Mjk0MywyMSBAQCBzdGF0aWMgaW50IHN2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbykKIAljYXNlIE1TUl9JQTMyX0xBU1RJTlRUT0lQOgogCQltc3JfaW5mby0mZ3Q7ZGF0YSA9IGxicnYgPyAqc3ZtX3ZtY2JfbGJyKHN2bSwgbXNyX2luZm8tJmd0O2luZGV4KSA6IDA7CiAJCWJyZWFrOwomIzQzOwljYXNlIE1TUl9BTURfREJHX0VYVE5fQ0ZHOgomIzQzOwkJaWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKQomIzQzOwkJCXJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDsKJiM0MzsJCW1zcl9pbmZvLSZndDtkYXRhID0gc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ19leHRuX2NmZzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1TUl9BTUQ2NF9MQlJfU0VMRUNUOgomIzQzOwkJaWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKQomIzQzOwkJCXJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDsKJiM0MzsJCW1zcl9pbmZvLSZndDtkYXRhID0gc3ZtLSZndDt2bWNiLSZndDtzYXZlLmxicl9zZWxlY3Q7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNU1JfQU1EX1NBTVBfQlJfRlJPTSAuLi4gTVNSX0FNRF9TQU1QX0JSX0ZST00gJiM0MzsgMzE6CiYjNDM7CQlpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpCiYjNDM7CQkJcmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEOwomIzQzOwkJbXNyX2luZm8tJmd0O2RhdGEgPSAqc3ZtX3ZtY2JfbGJydjIoc3ZtLCBtc3JfaW5mby0mZ3Q7aW5kZXgpOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CiAJCW1zcl9pbmZvLSZndDtkYXRhID0gc3ZtLSZndDtuZXN0ZWQuaHNhdmVfbXNyOwogCQlicmVhazsKQEAgLTMxNjAsNiAmIzQzOzMyMzYsMTAgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKQogCQkJZGF0YSAmYW1wOz0gfkRFQlVHQ1RMTVNSX0JURjsKIAkJfQogCiYjNDM7CQlpZiAoKGRhdGEgJmFtcDsgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykgJmFtcDsmYW1wOwomIzQzOwkJICAgICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUpKQomIzQzOwkJCXJldHVybiAxOwomIzQzOwogCQlpZiAoZGF0YSAmYW1wOyBERUJVR0NUTF9SRVNFUlZFRF9CSVRTKQogCQkJcmV0dXJuIDE7CiAKQEAgLTMxODEsNiAmIzQzOzMyNjEsNDAgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKQogCQkqc3ZtX3ZtY2JfbGJyKHN2bSwgZWN4KSA9IGRhdGE7CiAJCXZtY2JfbWFya19kaXJ0eShzdm0tJmd0O3ZtY2IsIFZNQ0JfTEJSKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgTVNSX0FNRF9EQkdfRVhUTl9DRkc6CiYjNDM7CQlpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpCiYjNDM7CQkJcmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEOwomIzQzOwomIzQzOwkJaWYgKGRhdGEgJmFtcDsgREJHX0VYVE5fQ0ZHX1JFU0VSVkVEX0JJVFMpCiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CQlpZiAoc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ19leHRuX2NmZyA9PSBkYXRhKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ19leHRuX2NmZyA9IGRhdGE7CiYjNDM7CQl2bWNiX21hcmtfZGlydHkoc3ZtLSZndDt2bWNiLCBWTUNCX0xCUik7CiYjNDM7CQlzdm1fdXBkYXRlX2xicnYodmNwdSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNU1JfQU1ENjRfTEJSX1NFTEVDVDoKJiM0MzsJCWlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSkKJiM0MzsJCQlyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7CiYjNDM7CiYjNDM7CQlpZiAoZGF0YSAmYW1wOyBMQlJfU0VMRUNUX1JFU0VSVkVEX0JJVFMpCiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CQlpZiAoc3ZtLSZndDt2bWNiLSZndDtzYXZlLmxicl9zZWxlY3QgPT0gZGF0YSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXN2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5sYnJfc2VsZWN0ID0gZGF0YTsKJiM0MzsJCXZtY2JfbWFya19kaXJ0eShzdm0tJmd0O3ZtY2IsIFZNQ0JfTEJSKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1TUl9BTURfU0FNUF9CUl9GUk9NIC4uLiBNU1JfQU1EX1NBTVBfQlJfRlJPTSAmIzQzOyAzMToKJiM0MzsJCWlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSkKJiM0MzsJCQlyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7CiYjNDM7CiYjNDM7CQkqc3ZtX3ZtY2JfbGJydjIoc3ZtLCBlY3gpID0gZGF0YTsKJiM0MzsJCXZtY2JfbWFya19kaXJ0eShzdm0tJmd0O3ZtY2IsIFZNQ0JfTEJSKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgogCQkvKgogCQkgKiBPbGQga2VybmVscyBkaWQgbm90IHZhbGlkYXRlIHRoZSB2YWx1ZSB3cml0dGVuIHRvCkBAIC00NzEwLDYgJiM0Mzs0ODI0LDIwIEBAIHN0YXRpYyBib29sIHN2bV9oYXNfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGludCBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplbnRyeTsKJiM0MzsKJiM0MzsJZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTsKJiM0MzsJaWYgKCFlbnRyeSB8fCBlbnRyeS0mZ3Q7ZWF4ICZsdDsgMHg4MDAwMDAyMikKJiM0MzsJCWdvdG8gbm90X2ZvdW5kOwomIzQzOwllbnRyeSA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMjIpOwomIzQzOwlpZiAoZW50cnkpCiYjNDM7CQlyZXR1cm4gKGVudHJ5LSZndDtlYnggJmd0OyZndDsgNCkgJmFtcDsgMHgzZjsKJiM0Mztub3RfZm91bmQ6CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CkBAIC00NzM2LDYgJiM0Mzs0ODY0LDEwIEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKGd1ZXN0X2NwdWlkX2lzX2ludGVsX2NvbXBhdGlibGUodmNwdSkpCiAJCWd1ZXN0X2NwdV9jYXBfY2xlYXIodmNwdSwgWDg2X0ZFQVRVUkVfVl9WTVNBVkVfVk1MT0FEKTsKIAomIzQzOwlpZiAoZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikgJmFtcDsmYW1wOwomIzQzOwkgICAgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZSh2Y3B1KSAhPSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpCiYjNDM7CQlndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpOwomIzQzOwogCWlmIChpc19zZXZfZ3Vlc3QodmNwdSkpCiAJCXNldl92Y3B1X2FmdGVyX3NldF9jcHVpZChzdm0pOwogfQpAQCAtNTU4Miw2ICYjNDM7NTcxNCwxMCBAQCBzdGF0aWMgX19pbml0IHZvaWQgc3ZtX3NldF9jcHVfY2Fwcyh2b2lkKQogCQlpZiAoa3ZtX3BtdV9jYXAudmVyc2lvbiAhPSAyIHx8CiAJCSAgICAha3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX1BFUkZDVFJfQ09SRSkpCiAJCQlrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9QRVJGTU9OX1YyKTsKJiM0MzsKJiM0MzsJCWlmICghbGJydiB8fCAhZW5hYmxlX21lZGlhdGVkX3BtdSB8fAomIzQzOwkJICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpCiYjNDM7CQkJa3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7CiAJfQogCiAJLyogQ1BVSUQgMHg4MDAwMDAxRiAoU01FL1NFViBmZWF0dXJlcykgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCmluZGV4IDcxNmJlMjFmYmEzMzU0Li4xMDVhNzFkNjlkNjhhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC0zNjMsNiAmIzQzOzM2Myw3IEBAIHN0cnVjdCB2Y3B1X3N2bSB7CiAJYm9vbCBhdmljX2lycV93aW5kb3c7CiAJYm9vbCB4MmF2aWNfbXNyc19pbnRlcmNlcHRlZDsKIAlib29sIGxicl9tc3JzX2ludGVyY2VwdGVkOwomIzQzOwlib29sIGxicnYyX21zcnNfaW50ZXJjZXB0ZWQ7CiAKIAkvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovCiAJYm9vbCBndWVzdF9naWY7CkBAIC03ODMsNyAmIzQzOzc4NCwxMSBAQCBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKGJvb2wsIHRlc3QsIHRlc3QpCiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIGNsZWFyLCBfX2NsZWFyKQogQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBzZXQsIF9fc2V0KQogCi0jZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH5ERUJVR0NUTE1TUl9MQlIpCiYjNDM7I2RlZmluZSBERUJVR0NUTF9MQlJfUE1DX0ZSRUVaRV9CSVRTCShERUJVR0NUTE1TUl9GUkVFWkVfTEJSU19PTl9QTUkgfAlcCiYjNDM7CQkJCQkgREVCVUdDVExNU1JfRlJFRVpFX1BFUkZNT05fT05fUE1JKQomIzQzOyNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUwkofihERUJVR0NUTE1TUl9MQlIgfCBERUJVR0NUTF9MQlJfUE1DX0ZSRUVaRV9CSVRTKSkKJiM0MzsjZGVmaW5lIERCR19FWFROX0NGR19SRVNFUlZFRF9CSVRTICh+REJHX0VYVE5fQ0ZHX0xCUlYyRU4pCiYjNDM7I2RlZmluZSBMQlJfU0VMRUNUX1JFU0VSVkVEX0JJVFMgKH5HRU5NQVNLX1VMTCg4LCAwKSkKIAogLyogc3ZtLmMgKi8KIGV4dGVybiBib29sIGR1bXBfaW52YWxpZF92bWNiOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTgzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFNRCBMQlIgVjIgS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBBTUQgTEJSIFYyIHN1cHBvcnQgd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IGZvciBTVk0uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBjb3JlIGFyZWFzIG9mIHRoZSBoeXBlcnZpc29yIGFuZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLgoKSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBrZXkgZmlsZXM6IGBjb3JlLmNgLCBoZWFkZXJzIChgcGVyZl9ldmVudC5oYCwgYHN2bS5oYCwgYHJldmVyc2VfY3B1aWQuaGApLCBhbmQgY3J1Y2lhbCBLVk0gU1ZNIGNvbXBvbmVudHMgKGBjcHVpZC5jYCwgYHN2bS5jYCkuIFRoaXMgdGVsbHMgbWUgdGhlIGNoYW5nZSBpbnZvbHZlcyBib3RoIGZ1bmRhbWVudGFsIENQVUlEIGZlYXR1cmUgYWR2ZXJ0aXNlbWVudCBhbmQgdGhlIGludGVyY2VwdGlvbi9lbXVsYXRpb24gb2Ygc3BlY2lmaWMgTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKS4gU3BlY2lmaWNhbGx5LCBpdCBkZWFscyB3aXRoIE1TUnMgc3VjaCBhcyBgTVNSX0FNRF9EQkdfRVhUTl9DRkdgLCBgTVNSX0FNRDY0X0xCUl9TRUxFQ1RgLCBhbmQgYE1TUl9BTURfU0FNUF9CUl9GUk9NYCwgYWxsIG9mIHdoaWNoIGFyZSBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IGJyYW5jaCB0cmFjaW5nIGlzIHRoZSBmb2N1cyBoZXJlLiBUaGUgYWRkaXRpb24gb2YgQ1BVSUQgZmVhdHVyZXMgYEFNRF9MQlJfVjJgIGFuZCBgQU1EX0xCUl9QTUNfRlJFRVpFYCBpcyB0aGUgc3RhbmRhcmQgYXBwcm9hY2ggdG8gaW5kaWNhdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBndWVzdC4KCkRpZ2dpbmcgaW50byBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AgaXMgaW1wb3J0YW50IHRvIG1lLCBzbyBJ4oCZbSBnb2luZyB0byBmb2N1cyBteSBhbmFseXNpcyB0aGVyZS4gSSBjYW4gc2VlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBmZWF0dXJlLCBhbmQgTVNSIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBmb3IgdGhlc2UgbmV3IHJlZ2lzdGVycy4gVGhlIGZ1bmN0aW9ucyBhcmU6IGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCwgYHN2bV9sYnJ2Ml9zdXBwb3J0ZWRgLCBgc3ZtX2xicnYyX2FjdGl2ZWAsIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX2dldF9tc3JgLCBgc3ZtX3NldF9tc3JgLCBgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZWAsIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgLCBhbmQgYHN2bV9zZXRfY3B1X2NhcHNgLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGZ1bGx5IHN1cHBvcnRlZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gQ2xlYXJseSwgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9BTURgIGFyZSBtYW5kYXRvcnkuIFBlcmYgZXZlbnRzIHdvdWxkIGJlIHJlbGV2YW50IGhlcmUsIHNvIEkmIzM5O2xsIGFzc3VtZSBgQ09ORklHX1BFUkZfRVZFTlRTYCBpcyBhbHNvIG5lZWRlZCwgYnV0IGxldOKAmXMgY2hlY2suIEnigJltIGdvaW5nIHRvIHJ1biBhIGBncmVwcGVyYCBzZWFyY2ggZm9yICYjMzQ7QU1EX0xCUl9WMiYjMzQ7IG9yIHNpbWlsYXIgdGVybXMgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzIHRvIGJlIGNlcnRhaW4sIGFuZCB2ZXJpZnkgd2hldGhlciBhIHNwZWNpZmljIEtjb25maWcgb3B0aW9uIGhhcyBiZWVuIGFkZGVkIGZvciB0aGlzIGZlYXR1cmUuIFRoYXQgd2lsbCBiZSBteSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QU1EX0xCUl9WMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jPTQyMj1fX2luaXQgaW50IGFtZF9wbXVfbGJyX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTQyNS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6NDI2Olx0aWYgKHg4Nl9wbXUudmVyc2lvbiBcdTAwM2MgMiB8fCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYy00MjctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTg4LSNkZWZpbmUgWDg2X0ZFQVRVUkVfUkVQX0dPT0RcdFx0KCAzKjMyJiM0MzsxNikgLyogXCYjMzQ7cmVwX2dvb2RcJiMzNDsgUkVQIG1pY3JvY29kZSB3b3JrcyB3ZWxsICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oOjg5OiNkZWZpbmUgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMlx0XHQoIDMqMzImIzQzOzE3KSAvKiBcJiMzNDthbWRfbGJyX3YyXCYjMzQ7IEFNRCBMYXN0IEJyYW5jaCBSZWNvcmQgRXh0ZW5zaW9uIFZlcnNpb24gMiAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC05MC0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NMRUFSX0NQVV9CVUZcdCggMyozMiYjNDM7MTgpIC8qIENsZWFyIENQVSBidWZmZXJzIHVzaW5nIFZFUlcgKi9cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jLTY2LVx0eyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLFx0XHRDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jOjY3Olx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jLTY4LVx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUsXHRDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmM9ODM2PXZvaWQga3ZtX2luaXRpYWxpemVfY3B1X2NhcHModm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xMjY5LVx0XHRTQ0FUVEVSRURfRihQRVJGTU9OX1YyKSxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjEyNzA6XHRcdFNDQVRURVJFRF9GKEFNRF9MQlJfVjIpLFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTI3MS1cdFx0U0NBVFRFUkVEX0YoQU1EX0xCUl9QTUNfRlJFRVpFKSxcbi0tXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYz0xNDIwPXN0YXRpYyBpbmxpbmUgaW50IF9fZG9fY3B1aWRfZnVuYyhzdHJ1Y3Qga3ZtX2NwdWlkX2FycmF5ICphcnJheSwgdTMyIGZ1bmN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4ODgtXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxODg5Olx0XHRpZiAoa3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpKVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTg5MC1cdFx0XHRlYnguc3BsaXQubGJyX3YyX3N0YWNrX3N6ID1cbi0tXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTczLSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcdFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDApXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oOjc0OiNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfVjJcdFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDEpXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTc1LSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRVx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDIpXG4tLVxuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaD0xNDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgX19mZWF0dXJlX3RyYW5zbGF0ZShpbnQgeDg2X2ZlYXR1cmUpXG4tLVxuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaC0xNTAtXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFBFUkZNT05fVjIpO1xuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaDoxNTE6XHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEFNRF9MQlJfVjIpO1xuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaC0xNTItXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEFNRF9MQlJfUE1DX0ZSRUVaRSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz03NDc9c3RhdGljIGJvb2wgc3ZtX2xicnYyX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTc0OC17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjc0OTpcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNzUwLVx0ICAgICAgIGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00ODQxPXN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00ODY2LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0ODY3Olx0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00ODY4LVx0ICAgIGNwdWlkX3F1ZXJ5X2xicnYyX3N0YWNrX3NpemUodmNwdSkgIT0gU1ZNX0xCUl9WMl9TVEFDS19TSVpFKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0ODY5Olx0XHRndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00ODcwLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTY0MT1zdGF0aWMgX19pbml0IHZvaWQgc3ZtX3NldF9jcHVfY2Fwcyh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTcxOS1cdFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU3MjA6XHRcdFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU3MjEtXHR9XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC04OC0jZGVmaW5lIFg4Nl9GRUFUVVJFX1JFUF9HT09EXHRcdCggMyozMiYjNDM7MTYpIC8qIFwmIzM0O3JlcF9nb29kXCYjMzQ7IFJFUCBtaWNyb2NvZGUgd29ya3Mgd2VsbCAqL1xudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDo4OTojZGVmaW5lIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjJcdFx0KCAzKjMyJiM0MzsxNykgLyogXCYjMzQ7YW1kX2xicl92MlwmIzM0OyBBTUQgTGFzdCBCcmFuY2ggUmVjb3JkIEV4dGVuc2lvbiBWZXJzaW9uIDIgKi9cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtOTAtI2RlZmluZSBYODZfRkVBVFVSRV9DTEVBUl9DUFVfQlVGXHQoIDMqMzImIzQzOzE4KSAvKiBDbGVhciBDUFUgYnVmZmVycyB1c2luZyBWRVJXICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MzMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIEFNRCBMQlIgVjIgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbXBsZW1lbnRpbmcgTEJSIFYyIHN1cHBvcnQgZm9yIEFNRCBwcm9jZXNzb3JzIHdpdGhpbiBLVk0uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBtb2RpZmljYXRpb25zLCB3aGljaCwgYXMgZXhwZWN0ZWQsIGFyZSBoYXBwZW5pbmcgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYC4gSXQmIzM5O3MgYWxsIGFib3V0IGFkZGluZyB0aGUgTVNSIGludGVyY2VwdGlvbiBhbmQgaGFuZGxpbmcgbG9naWMgZm9yIHRoZSBuZXcgTVNSczogYE1TUl9BTURfREJHX0VYVE5fQ0ZHYCwgYE1TUl9BTUQ2NF9MQlJfU0VMRUNUYCwgYW5kIGBNU1JfQU1EX1NBTVBfQlJfRlJPTWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIHdpbGwgYmUuCgpJJiMzOTttIGluaXRpYWxseSBmb2N1c2luZyBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHNgLCBgc3ZtX2xicnYyX3N1cHBvcnRlZGAsIGBzdm1fbGJydjJfYWN0aXZlYCwgYHN2bV91cGRhdGVfbGJydmAsIGBzdm1fZ2V0X21zcmAsIGBzdm1fc2V0X21zcmAsIGBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplYCwgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGAsIGFuZCBgc3ZtX3NldF9jcHVfY2Fwc2AuCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCBhcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBUaGV5JiMzOTtyZSBwcmV0dHkgZ2VuZXJpYyBLVk0gaG90LXBhdGggZnVuY3Rpb25zIGJ1dCB0aGV5IGFyZSB0aGUgZW50cnlwb2ludHMgdG8gaGFuZGxlIHRoZSBuZXcgTVNScy4gSXTigJlzIHByZXR0eSBvYnZpb3VzIHRoZXkmIzM5O3JlIGdvaW5nIHRvIGJlIGltcG9ydGFudC4gV2FpdCwgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmIGEgYml0IG5vdy4gVGhvc2UgYXJlIHJlYWxseSBicm9hZCBmdW5jdGlvbnMgYW5kIGZ1enppbmcgdGhlbSBkaXJlY3RseSBjb3VsZCBiZSBhIGNoYWxsZW5nZS4gTWF5YmUgdGhlcmUgYXJlIG90aGVyLCBtb3JlIHRhcmdldGVkIGZ1bmN0aW9ucyBJIGNhbiBsZXZlcmFnZT8KCk9rYXksIGxldCBtZSBzZWUuIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCBpcyBzdGF0aWMsIHdoaWNoIG1pZ2h0IG1ha2UgaXQgaGFyZGVyIHRvIHRhcmdldCBkaXJlY3RseSwgdW5sZXNzIGl0JiMzOTtzIGlubGluZWQuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBhZGRlZCBvciBtb2RpZmllZC4gQWxyaWdodCwgSSBzZWUgYHN2bV92Y3B1X2ZyZWVfbXNycG1gIGlzIG1vZGlmaWVkLiBBbmQgSSBhbHNvIHNlZSBzb21lIHN0YXRpYyBmdW5jdGlvbnM6IGBzdm1fcmVjYWxjX21zcl9pbnRlcmNlcHRzYCwgYHN2bV92Y3B1X2NyZWF0ZWAsIGBzdm1fdm1jYl9sYnJgLCBgc3ZtX3ZtY2JfbGJydjJgLCBhbmQgYHNldl9lc19wcmV2ZW50X21zcl9hY2Nlc3NgLiBPa2F5LCBzbyBgc3ZtX2VuYWJsZV9sYnJ2YCwgYHN2bV91cGRhdGVfbGJydmAsIGFuZCBgZGlzYWJsZV9ubWlfc2luZ2xlc3RlcGAgYXJlIG5vbi1zdGF0aWMuCgpTb21ldGhpbmcgZG9lc24mIzM5O3QgZmVlbCByaWdodC4gYHN2bV9nZXRfbXNyYCBpcyBsaXN0ZWQgYXMgc3RhdGljPyBUaGF0JiMzOTtzIHVudXN1YWwuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGVuc3VyZSB0aGF0IGl0JiMzOTtzIGFjdHVhbGx5IHN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX2dldF9tc3ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yODU5PXN0YXRpYyBib29sIHN2bV9wYXRfYWNjZXNzZXNfZ3BhdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZnJvbV9ob3N0KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjg3Mi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mjg3MzpzdGF0aWMgaW50IHN2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjg3NC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NDU3PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ4NC1cdC5nZXRfZmVhdHVyZV9tc3IgPSBzdm1fZ2V0X2ZlYXR1cmVfbXNyLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDg1Olx0LmdldF9tc3IgPSBzdm1fZ2V0X21zcixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ4Ni1cdC5zZXRfbXNyID0gc3ZtX3NldF9tc3IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1TUiBBY2Nlc3MgaW4gdGhlIEFNRC1WIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBzdm1fZ2V0X21zcmAgYW5kIGBzdm1fc2V0X21zcmAgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIEkgc2VlIHRoYXQuIEJ1dCB0aGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHJlZ2lzdGVyZWQgaW4gYHN2bV94ODZfb3BzYCBtYWtlcyB0aGVtIGVudHJ5IHBvaW50cyBmb3IgTVNSIGFjY2Vzc2VzLCBlc3NlbnRpYWxseSB0aGUgcHVibGljIGludGVyZmFjZSwgZG9lc24mIzM5O3QgaXQ/IEhtbSwgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBsb2dpYyBpcyBjbGVhciwgaW5saW5lZCBmdW5jdGlvbnMgbGFjayBkaXN0aW5jdCBzeW1ib2xzLgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuIEJlY2F1c2UgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHRoYXQgYWN0dWFsbHkgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nICpmdWxseSogaW5saW5lZCwgcmlnaHQ/IFRha2luZyB0aGVpciBhZGRyZXNzIGdpdmVzIHRoZW0gYSBzeW1ib2wgYWRkcmVzcywgcmVnYXJkbGVzcy4gVGhhdCBjaGFuZ2VzIHRoZSBjYWxjdWx1cyBzb21ld2hhdC4gU3RpbGwsIHRoZXkgYXJlIHZlcnkgaG90IHBhdGhzIGluIHRoZSBjb2RlIHNvIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bC4KCkxldCBtZSBzaGlmdCBnZWFycyBhbmQgY29uc2lkZXIgYHN2bV91cGRhdGVfbGJydmAgYW5kIGBzdm1fZW5hYmxlX2xicnZgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bV91cGRhdGVfbGJydiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTc0NT1zdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgyNS1cdHZtY2JfbWFya19kaXJ0eSh2bWNiMDIsIFZNQ0JfTEJSKTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODI2Olx0c3ZtX3VwZGF0ZV9sYnJ2KFx1MDAyNnN2bS1cdTAwM2V2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI3LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTg1Mz1zdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk4Ny1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6OTg4Olx0LyogU1ZNX01JU0MyX0VOQUJMRV9WX0xCUiBpcyBjb250cm9sbGVkIGJ5IHN2bV91cGRhdGVfbGJydigpICovXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk4OS1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTEzMjI9dm9pZCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEzODYtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjEzODc6XHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEzODgtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz05MTc9c3RhdGljIHZvaWQgX19zdm1fZGlzYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTkyMi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTIzOnZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTI0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMwNTE9c3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1MC1cdFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cdTAwM2V2bWNiLCBWTUNCX0xCUik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMyNTE6XHRcdHN2bV91cGRhdGVfbGJydih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1Mi1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMjc1LVx0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzI3NjpcdFx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMjc3LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTgxMz12b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo4MTQ6dm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtODE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjM4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgTG9naWNhbCBCcmFuY2ggUmVjb3JkIFZpcnR1YWxpemF0aW9uIChMQlJWKSBVcGRhdGVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgc3ZtX3VwZGF0ZV9sYnJ2YC4gSXQmIzM5O3MgYSBzdHJvbmcgY29udGVuZGVyIGdpdmVuIHRoZSBuYW1lLiBCdXQgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBwb3NzaWJpbGl0aWVzIGFuZCBub3QganVtcCB0byBjb25jbHVzaW9ucy4gU28sIEkmIzM5O20gYWxzbyBwdXR0aW5nIGBzdm1fZW5hYmxlX2xicnZgIG9uIHRoZSBzaG9ydCBsaXN0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBpcyBtb3JlIHJlbGV2YW50IGFuZC9vciBjb21wbGVtZW50YXJ5LiBJJiMzOTtsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHN2bV9lbmFibGVfbGJydmAgZmlyc3QuIEkgd2FudCB0byBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGludGVyYWN0aW9uIHdpdGggcmVsYXRlZCBzdHJ1Y3R1cmVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nIG9mZiBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX2VuYWJsZV9sYnJ2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTA2NT1zdGF0aWMgaW50IF9fc2V2X2xhdW5jaF91cGRhdGVfdm1zYShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTExMTEtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTExMjpcdHN2bV9lbmFibGVfbGJydih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTExMy1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQ4MD1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlX3Ztc2Eoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTI4LVx0XHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjUyOTpcdFx0c3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTMwLVx0fVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9ODI3PXN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTA0LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo5MDU6c3RhdGljIHZvaWQgX19zdm1fZW5hYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MDYte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTA5LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo5MTA6dm9pZCBzdm1fZW5hYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MTEte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo5MTI6XHRfX3N2bV9lbmFibGVfbGJydih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTEzLVx0c3ZtX3JlY2FsY19sYnJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz05MjM9dm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTMzLVx0aWYgKGVuYWJsZV9sYnJ2IFx1MDAyNlx1MDAyNiAhY3VycmVudF9lbmFibGVfbGJydilcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTM0Olx0XHRfX3N2bV9lbmFibGVfbGJydih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTM1LVx0ZWxzZSBpZiAoIWVuYWJsZV9sYnJ2IFx1MDAyNlx1MDAyNiBjdXJyZW50X2VuYWJsZV9sYnJ2KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9ODEyPXZvaWQgc3ZtX3ZjcHVfZnJlZV9tc3JwbSh2b2lkICptc3JwbSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjgxMzp2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC04MTQtdm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyOTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHN2bV91cGRhdGVfbGJydmAgZnVuY3Rpb24sIHRyaWdnZXJlZCBieSB3cml0ZXMgdG8gYE1TUl9BTURfREJHX0VYVE5fQ0ZHYCB2aWEgYHN2bV9zZXRfbXNyYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGVudHJ5IHBvaW50IHRvIGZvY3VzIG9uLCBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpcywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGJyb2FkZXIgcGljdHVyZS4gV2hhdCBhYm91dCBgc3ZtX3NldF9tc3JgIGFuZCBgc3ZtX2dldF9tc3JgPyBUaGV5JiMzOTtyZSB0aGUgcHJpbWFyeSBoYW5kbGVycyBmb3IgYWxsIE1TUiBpbnRlcmFjdGlvbnMuIFRoZXkmIzM5O3ZlIGJlZW4gYWRhcHRlZCBmb3IgdGhlc2UgbmV3IGBNU1JfQU1EX0RCR19FWFROX0NGR2AsIGBNU1JfQU1ENjRfTEJSX1NFTEVDVGAsIGFuZCBgTVNSX0FNRF9TQU1QX0JSX0ZST01gIE1TUnMuCgpJIHdpbGwgYWRkIHRoZXNlIHRvIG15IGxpc3QuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBpbnZlc3RpZ2F0ZSBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgIHNpbmNlIHRoZXkgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgbmV3IE1TUnMuIEV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRocywgdGhleSYjMzk7cmUgdGhlIG9ubHkgcm91dGVzIHRvIHJlYWNoIHRoZSBuZXcgbG9naWMuCgpXYWl0LCBob2xkIG9uIGEgc2Vjb25kLiBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgICphcmUqIGV4dHJlbWVseSBob3QuIElzIHRoZXJlIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHRyYWNlIHRoaXMgY2hhbmdlPwoKSG1tLi4uIE1heWJlIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYD8gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG9mdGVuIG1lYW5zIGl0IGNvdWxkIGJlIGlubGluZWQuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBzdm1fdXBkYXRlX2xicnZgIGFuZCBgc3ZtX3JlY2FsY19tc3JfaW50ZXJjZXB0c2AuIEkgd2lsbCBjaGVjayBpZiBpdCYjMzk7cyBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgc3ZtX2xicnYyX3N1cHBvcnRlZGAgYW5kIGBzdm1fbGJydjJfYWN0aXZlYC4gVGhleSYjMzk7cmUgc3RhdGljLCBzaG9ydCwgYW5kIGxpa2VseSBpbmxpbmVkLCBzbyB0aGV5IHByb2JhYmx5IHdvbiYjMzk7dCBiZSBzaWduaWZpY2FudCB0byBteSByZXNlYXJjaC4KCk5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0LiBMZXQmIzM5O3MgbG9vayBhdCBgYXJjaC94ODYva3ZtL2NwdWlkLmNgLiBJIHNlZSBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgIGFuZCBgX19kb19jcHVpZF9mdW5jYCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXNlIGFyZW4mIzM5O3QgZXhwbGljaXRseSB0aWVkIHRvIExCUiBWMiwgYnV0IHRoZXkmIzM5O3ZlIGJlZW4gdG91Y2hlZCwgc28gdGhleSBuZWVkIGEgbG9vay4KCkZpbmFsbHksIEkmIzM5O2xsIHRha2UgYSBnbGFuY2UgYXQgYGFyY2gveDg2L2V2ZW50cy9jb3JlLmNgLiBJIG5vdGljZSBjaGFuZ2VzIGluIGBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlgLgoKVGhhdCYjMzk7cyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgSSYjMzk7dmUgc2VlbiBzbyBmYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvY29yZS5jPTMxMTE9dW5zaWduZWQgbG9uZyBwZXJmX2FyY2hfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxMTktXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjMxMjA6dm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTIxLXtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxNDQtfVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzozMTQ1OkVYUE9SVF9TWU1CT0xfRk9SX0tWTShwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkpO1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ2LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaD03NTk9c3RydWN0IHg4Nl9wbXVfbGJyIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgtNzY2LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oOjc2NzpleHRlcm4gdm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NjgtZXh0ZXJuIHU2NCBwZXJmX2dldF9od19ldmVudF9jb25maWcoaW50IGh3X2V2ZW50KTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50Lmg9NzcxPWV4dGVybiBpbnQgeDg2X3BlcmZfcmRwbWNfaW5kZXgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NzItI2Vsc2VcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaDo3NzM6c3RhdGljIGlubGluZSB2b2lkIHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5ICpjYXApXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgtNzc0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9MTMzPXZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0xNDctXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3BtdS5jOjE0ODpcdFx0cGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KFx1MDAyNmt2bV9ob3N0X3BtdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTQ5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk1MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFBNVSBDYXBhYmlsaXR5IENoZWNrKioKCk9rYXksIHNvIGBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlgIGlzIGV4cG9ydGVkIGZvciBLVk0g4oCTIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZywgZGVmaW5pdGVseS4gSG93ZXZlciwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5YC4gSG1tLCB0aGF0IGxpbWl0cyBpdHMgYXR0YWNrIHN1cmZhY2Ugc29tZXdoYXQsIGRvZXNuJiMzOTt0IGl0PyBTdGlsbCwgZnV6emluZyBpbml0aWFsaXphdGlvbiBjYW4gYmUgZnJ1aXRmdWwuIEJ1dCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGVsc2UgY2FuIHdlIGRpZyB1cD8gSSB3b25kZXIgaWYgYHN2bV9zZXRfY3B1X2NhcHNgIGlzIHdvcnRoIGEgbG9vay4gTWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhlcmUgdGhhdCB3ZSBjYW4gZXhwbG9pdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX3NldF9jcHVfY2FwcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTU2MDY9c3RhdGljIF9faW5pdCB2b2lkIHN2bV9hZGp1c3RfbW1pb19tYXNrKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NjQwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NjQxOnN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU2NDIte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTczNz1zdGF0aWMgX19pbml0IGludCBzdm1faGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU4ODctXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU4ODg6XHRzdm1fc2V0X2NwdV9jYXBzKCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU4ODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDEwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBDUFVJRCBIb29rIFBsYWNlbWVudCBmb3IgRnV6emluZyoqCgpIbW0sIHNvIGBzdm1fc2V0X2NwdV9jYXBzYCBpcyBiZWluZyBjYWxsZWQgZHVyaW5nIHRoZSBtb2R1bGUmIzM5O3MgaW5pdGlhbGl6YXRpb24gcGhhc2UuIFRoYXQmIzM5O3MgZXNzZW50aWFsbHkgdGllZCB0byB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2VzcywgcmlnaHQ/IFdoaWNoIG1lYW5zIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSB0cmlnZ2VyZWQgZHluYW1pY2FsbHksIGFuZCBjZXJ0YWlubHkgbm90IGR1cmluZyBhIGZ1enppbmcgY2FtcGFpZ24uIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBsaW1pdGF0aW9uLiBJZiBJJiMzOTttIHRyeWluZyB0byBmdXp6IENQVUlELXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLCBJIG5lZWQgc29tZXRoaW5nIHRoYXQmIzM5O3MgcmVhY2hhYmxlIHVuZGVyIG1vcmUgdmFyaWVkIGV4ZWN1dGlvbiBjb25kaXRpb25zLgoKTGV0IG1lIHBpdm90LiBMZXQmIzM5O3Mgc2hpZnQgb3VyIGZvY3VzIGFuZCBzZWUgaWYgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGAgcHJvdmlkZXMgYSBtb3JlIHZpYWJsZSBob29rLiBQZXJoYXBzIHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciBhIHZDUFUgaXMgaW5pdGlhbGl6ZWQgb3Igb24gYSBwZXItVk0gYmFzaXMsIG9wZW5pbmcgdXAgbW9yZSBpbnRlcmVzdGluZyBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bV92Y3B1X2FmdGVyX3NldF9jcHVpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ4Mjc9c3RhdGljIGludCBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ4NDAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQ4NDE6c3RhdGljIHZvaWQgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDg0Mi17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NDU3PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTU0NS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTU0NjpcdC52Y3B1X2FmdGVyX3NldF9jcHVpZCA9IHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZCxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTU0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgQU1EIEtWTSB2Q1BVcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBBTUQgS1ZNIHZDUFUgY29kZSwgYW5kIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgIHJlYWxseSBqdW1wcyBvdXQgYXQgbWUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSB2aWEgYEtWTV9TRVRfQ1BVSUQyYCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVXNlci1jb250cm9sbGVkIGlucHV0IGRpcmVjdGx5IGluZmx1ZW5jZXMgaXRzIGV4ZWN1dGlvbiwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzLgoKTmF0dXJhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgTWljcm9wcm9jZXNzb3IgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKS4gU28sIEkmIzM5O2xsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIGBzdm1fZ2V0X21zcmAgYW5kIGBzdm1fc2V0X21zcmAgaW4gdGhlIGZ1enppbmcgc2NvcGU7IHRoZXkgYXJlIHRoZSBtYWluIGVudHJ5cG9pbnRzIGZvciBpbnRlcmFjdGlvbnMgdGhlcmUuIEkgYWxzbyBzZWUgdGhhdCBgc3ZtX3VwZGF0ZV9sYnJ2YCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLiBUaGVuLCBvZiBjb3Vyc2UsIEkgbXVzdCBsb29rIGF0IGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgIHRvIHJvdW5kIHRoYXQgb3V0LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIE5hbWVseSwgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9BTURgLCBhbmQgYENPTkZJR19QRVJGX0VWRU5UU2AgYXJlIHRoZSBvYnZpb3VzIG9uZXMuIEJ1dCwgSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBtaWdodCBzdWJ0bHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGUgY29kZSBJJiMzOTttIHRhcmdldGluZy4gSSB3YW50IHRvIGJlIHRob3JvdWdoIGFuZCBtaW5pbWl6ZSB0aGUgcmlzayBvZiBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIGZvciBBTUQgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBTUQgcHJvY2Vzc29ycyBhcmUgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHRoaXMga2luZCBvZiBpbnZlc3RpZ2F0aW9uLCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHg4NiwgdGhlIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgaXMgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBmZWF0dXJlcyBzcGVjaWZpYyB0byBBTUQgcHJvY2Vzc29ycyB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEkgbmVlZCB0byBsb2NhdGUgdGhlIGBLVk1fQU1EYCBzeW1ib2wsIHdoaWNoIGxpa2VseSBjb250cm9scyB2YXJpb3VzIEFNRC1zcGVjaWZpYyBLVk0gZnVuY3Rpb25hbGl0aWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBLVk1fQU1EYCBpcywgYXMgZXhwZWN0ZWQsIHJlbGlhbnQgb24gYm90aCB0aGUgY29yZSBgS1ZNYCBtb2R1bGUgYW5kIGBDUFVfU1VQX0FNRGAuIFRoYXQgbWFrZXMgc2Vuc2U7IEFNRC1zcGVjaWZpYyB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyBkZWZpbml0ZWx5IG5lZWQgdGhlIGJhc2UgS1ZNIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgQ1BVIHN1cHBvcnQuCgpOb3csIGBLVk1gIGl0c2VsZiBpcyB3aGVyZSB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcgYW5kLCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGVzZSBkZXBlbmRlbmNpZXMgaW5zaWRlIGFuZCBvdXQuIEl0JiMzOTtzIGJ1aWx0IHVwb24gYSBjb21wcmVoZW5zaXZlIGZvdW5kYXRpb246IGBISUdIX1JFU19USU1FUlNgLCBgWDg2X0xPQ0FMX0FQSUNgLCBgUFJFRU1QVF9OT1RJRklFUlNgLCBgTU1VX05PVElGSUVSYCwgYW5kIGFsbCB0aGUgYEhBVkVfS1ZNXypgIGZlYXR1cmVzIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nLCBldmVudCBtYW5hZ2VtZW50LCBhbmQgcm91dGluZy4gVGhlIGluY2x1c2lvbiBvZiBgS1ZNX0FTWU5DX1BGYCwgaXRzIHN5bmMgY291bnRlcnBhcnQsIGFuZCB0aGUgZ2VuZXJpYyBkaXJ0eSBsb2cgZmVhdHVyZSBpbmRpY2F0ZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBhcmUgY3JpdGljYWwgY29tcG9uZW50cy4gQWRkaXRpb25hbGx5LCBgS1ZNX1ZGSU9gIHN1cHBvcnQgc2hvd3MgdGhhdCBkZXZpY2UgcGFzcy10aHJvdWdoIGlzIGZ1bGx5IGVuYWJsZWQsIGFuZCB0aGUgUE0gYW5kIHVzZXItcmV0dXJuIG5vdGlmaWNhdGlvbnMgZW5zdXJlIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGFyZSBjb25zaWRlcmVkLiBGaW5hbGx5LCBgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdgLCBgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVGAsIGFuZCBgS1ZNX1hGRVJfVE9fR1VFU1RfV09SS2Agc3VnZ2VzdCB0aGF0IGdlbmVyYWwgaGFyZHdhcmUgZW5hYmxlbWVudCBhbmQgQ1BVIGludGVyYWN0aW9ucyBhcmUgYWxzbyBhY2NvdW50ZWQgZm9yIHdpdGhpbiB0aGUgY29yZSBtb2R1bGVzLgoKR2VuZXJhbGx5LCBhIGJhc2Ugc2V0dXAgY29udGFpbmluZyBgS1ZNYCBhbmQgYEtWTV9BTURgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBtYW55IHR5cGljYWwgdmlydHVhbGl6YXRpb24gbmVlZHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBhbHNvIGNoZWNrIHRoZSBgUEVSRl9FVkVOVFNgIHNldHRpbmcgdG8gZ2V0IGEgZnVsbCBhbmQgY29tcGxldGUgdmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUkZfRVZFTlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9LY29uZmlnPTI9bWVudSBcJiMzNDtQZXJmb3JtYW5jZSBtb25pdG9yaW5nXCYjMzQ7XG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTExLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6MTI6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1JBUExcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwvQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTktXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyMDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yNy1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjI4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI5LVx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9BTURcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zNi1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjM3OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfVU5DT1JFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O0FNRCBVbmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDctXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0ODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX0JSU1xuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmluaXQvS2NvbmZpZz0yMTIxPW1lbnUgXCYjMzQ7S2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnNcJiMzNDtcbmluaXQvS2NvbmZpZy0yMTIyLVxuaW5pdC9LY29uZmlnOjIxMjM6Y29uZmlnIFBFUkZfRVZFTlRTXG5pbml0L0tjb25maWctMjEyNC1cdGJvb2wgXCYjMzQ7S2VybmVsIHBlcmZvcm1hbmNlIGV2ZW50cyBhbmQgY291bnRlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBQZXJmb3JtYW5jZSBFdmVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcGVyZm9ybWFuY2UgZXZlbnRzIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgaW5pdC9LY29uZmlnYCDigJMgSSBrbm93IHRoYXQmIzM5O3Mgb2Z0ZW4gdGhlIHJvb3QgbGV2ZWwgZm9yIHRoZXNlIGtpbmRzIG9mIGZlYXR1cmUgZmxhZ3MuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHRvcC1sZXZlbCBkZWZpbml0aW9uIG9mIGBQRVJGX0VWRU5UU2AgdGhlcmUuCgpOZXh0LCBzaW5jZSBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCBBTUQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIGRyaWxsIGRvd24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBpbiBgYXJjaC94ODYvZXZlbnRzL0tjb25maWdgLiBJJiMzOTttIHNwZWNpZmljYWxseSBodW50aW5nIGZvciBhbnkgQU1ELXJlbGF0ZWQgb3IgQU1ELXByZWZpeGVkIGNvbmZpZyBvcHRpb25zIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgd291bGQgYmUgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCBhbnkgY29uZGl0aW9uYWwgb3Igc3BlY2lhbGl6ZWQgc2V0dGluZ3MuIEkgZXhwZWN0IEkgbWlnaHQgZmluZCBzb21ldGhpbmcgdGhhdCB0aWVzIGludG8gdGhlIENQVSBtb2RlbCBvciBzcGVjaWZpYyBmZWF0dXJlcyBvZiBBTUQgcHJvY2Vzc29ycy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG1lbnUgXCYjMzQ7UGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wmIzM0O1xuICAgMzpcdFxuICAgNDpcdGNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcbiAgIDU6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsIHVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfSU5URUwgXHUwMDI2XHUwMDI2IFBDSVxuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIEluY2x1ZGUgc3VwcG9ydCBmb3IgSW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50cy4gVGhlc2UgYXJlXG4gIDEwOlx0XHQgIGF2YWlsYWJsZSBvbiBOZWhhbGVtRVggYW5kIG1vcmUgbW9kZXJuIHByb2Nlc3NvcnMuXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1JBUExcbiAgMTM6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsL0FNRCByYXBsIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgKENQVV9TVVBfSU5URUwgfHwgQ1BVX1NVUF9BTUQpIFx1MDAyNlx1MDAyNiBQQ0lcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBJbmNsdWRlIHN1cHBvcnQgZm9yIEludGVsIGFuZCBBTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHMgZm9yIHBvd2VyXG4gIDE4Olx0XHQgIG1vbml0b3Jpbmcgb24gbW9kZXJuIHByb2Nlc3NvcnMuXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX0NTVEFURVxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9JTlRFTCBcdTAwMjZcdTAwMjYgUENJXG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBJbnRlbCBjc3RhdGUgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciBwb3dlclxuICAyNjpcdFx0ICBtb25pdG9yaW5nIG9uIG1vZGVybiBwcm9jZXNzb3JzLlxuICAyNzpcdFxuICAyODpcdGNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcbiAgMjk6XHRcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtBTUQgUHJvY2Vzc29yIFBvd2VyIFJlcG9ydGluZyBNZWNoYW5pc21cJiMzNDtcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgUHJvdmlkZSBwb3dlciByZXBvcnRpbmcgbWVjaGFuaXNtIHN1cHBvcnQgZm9yIEFNRCBwcm9jZXNzb3JzLlxuICAzMzpcdFx0ICBDdXJyZW50bHksIGl0IGxldmVyYWdlcyBYODZfRkVBVFVSRV9BQ0NfUE9XRVJcbiAgMzQ6XHRcdCAgKENQVUlEIEZuODAwMF8wMDA3X0VEWFsxMl0pIGludGVyZmFjZSB0byBjYWxjdWxhdGUgdGhlXG4gIDM1Olx0XHQgIGF2ZXJhZ2UgcG93ZXIgY29uc3VtcHRpb24gb24gRmFtaWx5IDE1aCBwcm9jZXNzb3JzLlxuICAzNjpcdFxuICAzNzpcdGNvbmZpZyBQRVJGX0VWRU5UU19BTURfVU5DT1JFXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtBTUQgVW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuICAzOTpcdFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9BTURcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJbmNsdWRlIHN1cHBvcnQgZm9yIEFNRCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciB1c2Ugd2l0aFxuICA0MzpcdFx0ICBlLmcuLCBwZXJmIHN0YXQgLWUgYW1kX2wzLy4uLi8sYW1kX2RmLy4uLi8uXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA0NjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJiMzOTthbWQtdW5jb3JlJiMzOTsuXG4gIDQ3Olx0XG4gIDQ4Olx0Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9CUlNcbiAgNDk6XHRcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4gIDUwOlx0XHRib29sIFwmIzM0O0FNRCBaZW4zIEJyYW5jaCBTYW1wbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzA5CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDEzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIEFNRCBMQlIgVjIgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFzc2Vzc2luZyB0aGUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyBmb3IgdGhpcyBLVk0gcGF0Y2ggaW1wbGVtZW50aW5nIEFNRCBMQlIgVjIgc3VwcG9ydC4gRmlyc3QsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkOiBgS1ZNYCwgYEtWTV9BTURgLCBgUEVSRl9FVkVOVFNgLCBhbmQgYENQVV9TVVBfQU1EYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGluY2x1ZGUgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCwgYXMgdGhleSYjMzk7cmUgY2VudHJhbCB0byBhbnkgTVNSIGhhbmRsaW5nIGluIHRoZSBTVk0gY29kZS4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSBob3QgcGF0aHMuIEhvd2V2ZXIsIHRoZSBndWlkYW5jZSBpcyB0byBwcmlvcml0aXplIEFQSSBlbnRyeXBvaW50cyB0aGF0IGFyZW4mIzM5O3Qgb3Zlcmx5IGdlbmVyaWMgb3Igc3RhdGljIHRvIGF2b2lkIHNrZXdpbmcgdGhlIGZ1enppbmcgZGlzdHJpYnV0aW9uLiBXaGlsZSBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgIGFyZSBjcml0aWNhbCBmb3IgaGl0dGluZyB0aGUgbmV3IE1TUi1yZWxhdGVkIGNvZGUsIHRoZXkgY292ZXIgKmFsbCogTVNScywgYW5kIHRoYXQgbGV2ZWwgb2YgZ2VuZXJhbGl0eSBtaWdodCBub3QgYmUgaWRlYWwgZm9yIGZvY3VzZWQgZnV6emluZyBvbiB0aGlzIHBhdGNoJiMzOTtzIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuCgpBZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOgoKKiAgIGBzdm1fdXBkYXRlX2xicnZgOiBUaGlzIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgYSBub24tc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5IGludm9sdmVkIGluIHVwZGF0aW5nIExCUiB2aXJ0dWFsaXphdGlvbiBhbmQgaXMgbGlua2VkIHRvIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYC4KKiAgIGBzdm1fZW5hYmxlX2xicnZgOiBBbHNvIG5vbi1zdGF0aWMuIFRoaXMgc2VlbXMgaW1wb3J0YW50LCBhcyBpdCBlbmFibGVzIExCUiBWMiBmdW5jdGlvbmFsaXR5LCBhbmQgY2FsbHMgYHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHNgIGFuZCBgc3ZtX3JlY2FsY19sYnJfbXNyX2ludGVyY2VwdHNgLgoqICAgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGA6IFRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiBpbiBgc3ZtX3g4Nl9vcHNgLCB3aGljaCBpcyBub3QgaW5saW5lZCwgYW5kIGlzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIENQVUlEIHVwZGF0ZXMsIGFuZCBpbnRlcmFjdHMgd2l0aCBuZXcgZmVhdHVyZSBiaXRzLgoKU2luY2UgdGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIG5ldyBNU1JzIChgTVNSX0FNRF9EQkdfRVhUTl9DRkdgLCBgTVNSX0FNRDY0X0xCUl9TRUxFQ1RgLCBgTVNSX0FNRF9TQU1QX0JSX0ZST01gKSBhbmQgbmV3IENQVUlEIGZlYXR1cmVzIChgQU1EX0xCUl9WMmAsIGBBTURfTEJSX1BNQ19GUkVFWkVgKSwgdGhlc2UgZnVuY3Rpb25zIHJlcHJlc2VudCBnb29kIGVudHJ5IHBvaW50cyB0byBleGVyY2lzZSB0aGUgbmV3IGNvZGUgcGF0aHMuCgpJJiMzOTt2ZSBhbHNvIGRlY2lkZWQgdG8gaW5jbHVkZSBgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5YC4gSXQmIzM5O3MgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiBhbmQgaXMgY2FsbGVkIGR1cmluZyBLVk0gUE1VIGluaXRpYWxpemF0aW9uLiBJdCBpcyBub3Qgb24gdGhlIGhvdCBwYXRoLgoKSSYjMzk7dmUgY2hlY2tlZCBzb21lIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplYCwgYHN2bV9sYnJ2Ml9zdXBwb3J0ZWRgLCBhbmQgYHN2bV9sYnJ2Ml9hY3RpdmVgLiBUaGVzZSBhcmUgc3RhdGljIGFuZCBzbWFsbCwgc28gdGhleSYjMzk7cmUgcHJvYmFibHkgaW5saW5lZCBhbmQgbm90IGdvb2QgY2FuZGlkYXRlcy4KClNvLCB0aGUgZnV6emluZyBzdHJhdGVneSBpcyBkZWZpbmVkLiBJIHdpbGwgYmUgc3VyZSB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IHRoZSBuZXcgTEJSIFYyIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtDUFVfU1VQX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2bV91cGRhdGVfbGJydiYjMzQ7LAogICAgJiMzNDtzdm1fZW5hYmxlX2xicnYmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkJiMzNDssCiAgICAmIzM0O3BlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFNRCBMQlIgVjIgKExhc3QgQnJhbmNoIFJlY29yZCBWZXJzaW9uIDIpIGluIEtWTS4gSXQgbW9kaWZpZXMgU1ZNIHRvIGhhbmRsZSBuZXcgTVNScyAoTVNSX0FNRF9EQkdfRVhUTl9DRkcsIE1TUl9BTUQ2NF9MQlJfU0VMRUNULCBNU1JfQU1EX1NBTVBfQlJfRlJPTSkgYW5kIENQVUlEIGZlYXR1cmVzIChBTURfTEJSX1YyLCBBTURfTEJSX1BNQ19GUkVFWkUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIEFNRCB2aXJ0dWFsaXphdGlvbiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1fdXBkYXRlX2xicnYmIzM0OywKICAgICYjMzQ7c3ZtX2VuYWJsZV9sYnJ2JiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2FmdGVyX3NldF9jcHVpZCYjMzQ7LAogICAgJiMzNDtwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBTUQgTEJSIFYyIChMYXN0IEJyYW5jaCBSZWNvcmQgVmVyc2lvbiAyKSBpbiBLVk0uIEl0IG1vZGlmaWVzIFNWTSB0byBoYW5kbGUgbmV3IE1TUnMgKE1TUl9BTURfREJHX0VYVE5fQ0ZHLCBNU1JfQU1ENjRfTEJSX1NFTEVDVCwgTVNSX0FNRF9TQU1QX0JSX0ZST00pIGFuZCBDUFVJRCBmZWF0dXJlcyAoQU1EX0xCUl9WMiwgQU1EX0xCUl9QTUNfRlJFRVpFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSBBTUQgdmlydHVhbGl6YXRpb24gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDoxOS4zNTM4MzY2NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM1ODIyNjg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV91cGRhdGVfbGJydlwiLFxuICAgIFwic3ZtX2VuYWJsZV9sYnJ2XCIsXG4gICAgXCJzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRcIixcbiAgICBcInBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQU1EIExCUiBWMiAoTGFzdCBCcmFuY2ggUmVjb3JkIFZlcnNpb24gMikgaW4gS1ZNLiBJdCBtb2RpZmllcyBTVk0gdG8gaGFuZGxlIG5ldyBNU1JzIChNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9BTURfU0FNUF9CUl9GUk9NKSBhbmQgQ1BVSUQgZmVhdHVyZXMgKEFNRF9MQlJfVjIsIEFNRF9MQlJfUE1DX0ZSRUVaRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gQU1EIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDoxOS4zNTM4NDMwNTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzAxMzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQwMzBiM2RhOTgyYjM3ODhlNTA4NjhiMzFhYjNiMmVkMjAyMmM2OWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDc6NDA6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2NvcmUuYyBiL2FyY2gveDg2L2V2ZW50cy9jb3JlLmNcXG5pbmRleCA0YjllMTA1MzA5YzZhOS4uNGFjYmNhMWE4OGExODAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2NvcmUuY1xcbisrKyBiL2FyY2gveDg2L2V2ZW50cy9jb3JlLmNcXG5AQCAtMzEzOCw2ICszMTM4LDcgQEAgdm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKVxcbiBcXHRjYXAtXFx1MDAzZWJpdF93aWR0aF9maXhlZFxcdD0gY2FwLVxcdTAwM2VudW1fY291bnRlcnNfZml4ZWQgPyB4ODZfcG11LmNudHZhbF9iaXRzIDogMDtcXG4gXFx0Y2FwLVxcdTAwM2VldmVudHNfbWFza1xcdD0gKHVuc2lnbmVkIGludCl4ODZfcG11LmV2ZW50c19tYXNrbDtcXG4gXFx0Y2FwLVxcdTAwM2VldmVudHNfbWFza19sZW5cXHQ9IHg4Nl9wbXUuZXZlbnRzX21hc2tfbGVuO1xcbitcXHRjYXAtXFx1MDAzZW51bV9icmFuY2hlc19sYnJcXHQ9IHg4Nl9wbXUubGJyX25yO1xcbiBcXHRjYXAtXFx1MDAzZXBlYnNfZXB0XFx0XFx0PSB4ODZfcG11LnBlYnNfZXB0O1xcbiBcXHRjYXAtXFx1MDAzZW1lZGlhdGVkXFx0XFx0PSAhIShwbXUuY2FwYWJpbGl0aWVzIFxcdTAwMjYgUEVSRl9QTVVfQ0FQX01FRElBVEVEX1ZQTVUpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxcbmluZGV4IDFlYjEzNjczZTg4OWY5Li5mMThjZjA5ODZlMTJkMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcXG5AQCAtMzA2LDYgKzMwNiw3IEBAIHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkge1xcbiBcXHRpbnRcXHRcXHRiaXRfd2lkdGhfZml4ZWQ7XFxuIFxcdHVuc2lnbmVkIGludFxcdGV2ZW50c19tYXNrO1xcbiBcXHRpbnRcXHRcXHRldmVudHNfbWFza19sZW47XFxuK1xcdGludFxcdFxcdG51bV9icmFuY2hlc19sYnI7XFxuIFxcdHVuc2lnbmVkIGludFxcdHBlYnNfZXB0XFx0OjE7XFxuIFxcdHVuc2lnbmVkIGludFxcdG1lZGlhdGVkXFx0OjE7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5pbmRleCBhYTYzNDMxYmE5MmMzMS4uZjNiYzk3YmM2YWNhYjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxcbkBAIC0yNTMsNiArMjUzLDggQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEge1xcbiAjZGVmaW5lIFNWTV9UU0NfUkFUSU9fTUFYXFx0MHgwMDAwMDBmZmZmZmZmZmZmVUxMXFxuICNkZWZpbmUgU1ZNX1RTQ19SQVRJT19ERUZBVUxUXFx0MHgwMTAwMDAwMDAwVUxMXFxuIFxcbisjZGVmaW5lIFNWTV9MQlJfVjJfU1RBQ0tfU0laRSAxNlxcbitcXG4gXFxuIC8qIEFWSUMgKi9cXG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfR1VFU1RfUEhZU0lDQUxfSURfTUFTS1xcdCgweEZGVUxMKVxcbkBAIC0zNjgsOCArMzcwLDE1IEBAIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSB7XFxuIFxcdHU2NCBicl90bztcXG4gXFx0dTY0IGxhc3RfZXhjcF9mcm9tO1xcbiBcXHR1NjQgbGFzdF9leGNwX3RvO1xcbi1cXHR1OCByZXNlcnZlZF8weDI5OFs3Ml07XFxuK1xcdHU2NCBkYmdfZXh0bl9jZmc7XFxuK1xcdHU4IHJlc2VydmVkXzB4MmEwWzY0XTtcXG4gXFx0dTY0IHNwZWNfY3RybDtcXHRcXHQvKiBHdWVzdCB2ZXJzaW9uIG9mIFNQRUNfQ1RSTCBhdCAweDJFMCAqL1xcbitcXHR1OCByZXNlcnZlZF8weDJlOFs5MDRdO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHR1NjQgbGJyX3N0YWNrX2Zyb207XFxuK1xcdFxcdHU2NCBsYnJfc3RhY2tfdG87XFxuK1xcdH0gX19wYWNrZWQgbGJyWzE2XTtcXG4rXFx0dTY0IGxicl9zZWxlY3Q7XFxuIH0gX19wYWNrZWQ7XFxuIFxcbiAvKiBTYXZlIGFyZWEgZGVmaW5pdGlvbiBmb3IgU0VWLUVTIGFuZCBTRVYtU05QIGd1ZXN0cyAqL1xcbkBAIC01NTIsNyArNTYxLDcgQEAgc3RydWN0IHZtY2Ige1xcbiBcXHR9O1xcbiB9IF9fcGFja2VkO1xcbiBcXG4tI2RlZmluZSBFWFBFQ1RFRF9WTUNCX1NBVkVfQVJFQV9TSVpFXFx0XFx0NzQ0XFxuKyNkZWZpbmUgRVhQRUNURURfVk1DQl9TQVZFX0FSRUFfU0laRVxcdFxcdDE5MTJcXG4gI2RlZmluZSBFWFBFQ1RFRF9HSENCX1NBVkVfQVJFQV9TSVpFXFx0XFx0MTAzMlxcbiAjZGVmaW5lIEVYUEVDVEVEX1NFVl9FU19TQVZFX0FSRUFfU0laRVxcdFxcdDE2NDhcXG4gI2RlZmluZSBFWFBFQ1RFRF9WTUNCX0NPTlRST0xfQVJFQV9TSVpFXFx0XFx0MTAyNFxcbkBAIC01NzcsNyArNTg2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXFxuIFxcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4ZDgpO1xcbiBcXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDE4MCk7XFxuIFxcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MjQ4KTtcXG4tXFx0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHgyOTgpO1xcbitcXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDJhMCk7XFxuK1xcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MmU4KTtcXG4gXFxuIFxcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQoc2V2X2VzX3NhdmVfYXJlYSwgMHhjOCk7XFxuIFxcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQoc2V2X2VzX3NhdmVfYXJlYSwgMHhjYyk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG5pbmRleCAyNjk4ZmE0MmNkOTcxMS4uNTFiNjkxZjkxNDQyYmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbkBAIC0xMjY2LDcgKzEyNjYsOSBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXFxuIFxcdCk7XFxuIFxcbiBcXHRrdm1fY3B1X2NhcF9pbml0KENQVUlEXzgwMDBfMDAyMl9FQVgsXFxuLVxcdFxcdEYoUEVSRk1PTl9WMiksXFxuK1xcdFxcdFNDQVRURVJFRF9GKFBFUkZNT05fVjIpLFxcbitcXHRcXHRTQ0FUVEVSRURfRihBTURfTEJSX1YyKSxcXG4rXFx0XFx0U0NBVFRFUkVEX0YoQU1EX0xCUl9QTUNfRlJFRVpFKSxcXG4gXFx0KTtcXG4gXFxuIFxcdGlmICghc3RhdGljX2NwdV9oYXNfYnVnKFg4Nl9CVUdfTlVMTF9TRUcpKVxcbkBAIC0xODgzLDYgKzE4ODUsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXFxuIFxcdFxcdGNwdWlkX2VudHJ5X292ZXJyaWRlKGVudHJ5LCBDUFVJRF84MDAwXzAwMjJfRUFYKTtcXG4gXFxuIFxcdFxcdGVieC5zcGxpdC5udW1fY29yZV9wbWMgPSBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3A7XFxuK1xcbitcXHRcXHRpZiAoa3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpKVxcbitcXHRcXHRcXHRlYnguc3BsaXQubGJyX3YyX3N0YWNrX3N6ID1cXG4rXFx0XFx0XFx0XFx0bWluKGt2bV9wbXVfY2FwLm51bV9icmFuY2hlc19sYnIsIFNWTV9MQlJfVjJfU1RBQ0tfU0laRSk7XFxuK1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZWJ4ID0gZWJ4LmZ1bGw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXFxuaW5kZXggNjU3ZjVmNzQzZWQ5NzUuLjlhNThmOTFlYjE3M2QwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXFxuQEAgLTcwLDcgKzcwLDkgQEBcXG4gI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDXFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAwN19FRFgsIDgpXFxuIFxcbiAvKiBDUFVJRCBsZXZlbCAweDgwMDAwMDIyIChFQVgpICovXFxuLSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMClcXG4rI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMlxcdFxcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAwKVxcbisjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9BTURfTEJSX1YyXFx0XFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDEpXFxuKyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRVxcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAyKVxcbiBcXG4gLyogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUNYKSAqL1xcbiAjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9UU0FfU1FfTk9cXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIxX0VDWCwgMSlcXG5AQCAtMTQ2LDYgKzE0OCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIF9fZmVhdHVyZV90cmFuc2xhdGUoaW50IHg4Nl9mZWF0dXJlKVxcbiBcXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFNHWF9FREVDQ1NTQSk7XFxuIFxcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQ09OU1RBTlRfVFNDKTtcXG4gXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShQRVJGTU9OX1YyKTtcXG4rXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShBTURfTEJSX1YyKTtcXG4rXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShBTURfTEJSX1BNQ19GUkVFWkUpO1xcbiBcXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFJSU0JBX0NUUkwpO1xcbiBcXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEJISV9DVFJMKTtcXG4gXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShUU0FfU1FfTk8pO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li4zZWM5MWMxYzU4ZGNjNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC03NDQsNiArNzQ0LDQ3IEBAIHN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0c3ZtLVxcdTAwM2VsYnJfbXNyc19pbnRlcmNlcHRlZCA9IGludGVyY2VwdDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgc3ZtX2xicnYyX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBzdm1fbGJydjJfYWN0aXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4rXFx0cmV0dXJuIHN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuZGJnX2V4dG5fY2ZnIFxcdTAwMjYgREJHX0VYVE5fQ0ZHX0xCUlYyRU4pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4rXFx0Ym9vbCBpbnRlcmNlcHQgPSAhc3ZtX2xicnYyX2FjdGl2ZSh2Y3B1KTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoaW50ZXJjZXB0ID09IHN2bS1cXHUwMDNlbGJydjJfbXNyc19pbnRlcmNlcHRlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDMyOyBpKyspXFxuK1xcdFxcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRF9TQU1QX0JSX0ZST00gKyBpLCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcXG4rXFxuK1xcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogREJHX0VYVE5fQ0ZHIHN0YXlzIHBlcm1hbmVudGx5IGludGVyY2VwdGVkIGZvciBub24tU0VWLUVTIGd1ZXN0cyBzb1xcbitcXHQgKiBLVk0gY2FuIG9ic2VydmUgTEJSVjJFTiBhbmQgbGF6aWx5IHRvZ2dsZSBWX0xCUi4gIFNFVi1FUysgZ3Vlc3RzIG11c3RcXG4rXFx0ICogZGVsZWdhdGUgTEJSIHZpcnR1YWxpemF0aW9uIHRvIHRoZSBwcm9jZXNzb3IgKHBlciB0aGUgQVBNKSwgd2hlcmVcXG4rXFx0ICogaW50ZXJjZXB0aW5nIExCUiBNU1JzIGNhbiBiZSBmYXRhbCwgc28gdG9nZ2xlIGl0IHdpdGggdGhlIHJlc3QuICBTZWVcXG4rXFx0ICogY29tbWl0IGI3ZTRiZTBhMjI0ZiAoXFxcIktWTTogU0VWLUVTOiBEZWxlZ2F0ZSBMQlIgdmlydHVhbGl6YXRpb24gdG8gdGhlXFxuK1xcdCAqIHByb2Nlc3NvclxcXCIpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX3Nldl9lc19ndWVzdCh2Y3B1KSlcXG4rXFx0XFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7XFxuK1xcbitcXHRzdm0tXFx1MDAzZWxicnYyX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XFxuK31cXG4rXFxuIHZvaWQgc3ZtX3ZjcHVfZnJlZV9tc3JwbSh2b2lkICptc3JwbSlcXG4ge1xcbiBcXHRfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKG1zcnBtKSwgZ2V0X29yZGVyKE1TUlBNX1NJWkUpKTtcXG5AQCAtNzk5LDggKzg0MCwxMCBAQCBzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0c3ZtX2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX1NZU0NBTExfTUFTSywgTVNSX1RZUEVfUlcpO1xcbiAjZW5kaWZcXG4gXFxuLVxcdGlmIChsYnJ2KVxcbitcXHRpZiAobGJydikge1xcbiBcXHRcXHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcXG4rXFx0XFx0c3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJQQikpXFxuIFxcdFxcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0lBMzJfUFJFRF9DTUQsIE1TUl9UWVBFX1csXFxuQEAgLTg2OCw2ICs5MTEsNyBAQCB2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XFxuIFxcdHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbitcXHRzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX3N2bV9kaXNhYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC04ODAsOSArOTI0LDExIEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0Ym9vbCBjdXJyZW50X2VuYWJsZV9sYnJ2ID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLm1pc2NfY3RsMiBcXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XFxuK1xcbiBcXHRib29sIGVuYWJsZV9sYnJ2ID0gKHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5kYmdjdGwgXFx1MDAyNiBERUJVR0NUTE1TUl9MQlIpIHx8XFxuIFxcdFxcdFxcdCAgICAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcXHUwMDI2XFx1MDAyNiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKHN2bS1cXHUwMDNlbmVzdGVkLmN0bC5taXNjX2N0bDIgXFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7XFxuK1xcdFxcdFxcdCAgICAoc3ZtLVxcdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIpKSB8fFxcbitcXHRcXHRcXHQgICAgc3ZtX2xicnYyX2FjdGl2ZSh2Y3B1KTtcXG4gXFxuIFxcdGlmIChlbmFibGVfbGJydiBcXHUwMDI2XFx1MDAyNiAhY3VycmVudF9lbmFibGVfbGJydilcXG4gXFx0XFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XFxuQEAgLTg5Niw2ICs5NDIsNyBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqIGRvLCBzbyBhbHdheXMgcmVjYWxjdWxhdGUgdGhlIGludGVyY2VwdHMgaGVyZS5cXG4gXFx0ICovXFxuIFxcdHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbitcXHRzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbiB9XFxuIFxcbiB2b2lkIGRpc2FibGVfbm1pX3NpbmdsZXN0ZXAoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuQEAgLTEzNDEsNiArMTM4OCw3IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdHN2bS1cXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSB0cnVlO1xcbiBcXHRzdm0tXFx1MDAzZWxicl9tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcXG4rXFx0c3ZtLVxcdTAwM2VsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcXG4gXFxuIFxcdHN2bS1cXHUwMDNldm1jYjAxLnB0ciA9IHBhZ2VfYWRkcmVzcyh2bWNiMDFfcGFnZSk7XFxuIFxcdHN2bS1cXHUwMDNldm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5AQCAtMjc4Nyw2ICsyODM1LDE5IEBAIHN0YXRpYyB1NjQgKnN2bV92bWNiX2xicihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIG1zcilcXG4gXFx0cmV0dXJuIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuYnJfZnJvbTtcXG4gfVxcbiBcXG4rc3RhdGljIHU2NCAqc3ZtX3ZtY2JfbGJydjIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiBtc3IpXFxuK3tcXG4rXFx0dTMyIG9mZnNldCA9IG1zciAtIE1TUl9BTURfU0FNUF9CUl9GUk9NO1xcbitcXHR1MzIgaWR4ID0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIDE7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcXHUwMDNlPSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpKVxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5sYnJbMF0ubGJyX3N0YWNrX2Zyb207XFxuK1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwMjYgMSlcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUubGJyW2lkeF0ubGJyX3N0YWNrX3RvO1xcbitcXHRyZXR1cm4gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5sYnJbaWR4XS5sYnJfc3RhY2tfZnJvbTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgc2V2X2VzX3ByZXZlbnRfbXNyX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuIHtcXG5AQCAtMjg4Miw2ICsyOTQzLDIxIEBAIHN0YXRpYyBpbnQgc3ZtX2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiBcXHRjYXNlIE1TUl9JQTMyX0xBU1RJTlRUT0lQOlxcbiBcXHRcXHRtc3JfaW5mby1cXHUwMDNlZGF0YSA9IGxicnYgPyAqc3ZtX3ZtY2JfbGJyKHN2bSwgbXNyX2luZm8tXFx1MDAzZWluZGV4KSA6IDA7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1TUl9BTURfREJHX0VYVE5fQ0ZHOlxcbitcXHRcXHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXFxuK1xcdFxcdFxcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcXG4rXFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuZGJnX2V4dG5fY2ZnO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNU1JfQU1ENjRfTEJSX1NFTEVDVDpcXG4rXFx0XFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxcbitcXHRcXHRcXHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XFxuK1xcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2VzYXZlLmxicl9zZWxlY3Q7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1TUl9BTURfU0FNUF9CUl9GUk9NIC4uLiBNU1JfQU1EX1NBTVBfQlJfRlJPTSArIDMxOlxcbitcXHRcXHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXFxuK1xcdFxcdFxcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcXG4rXFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSAqc3ZtX3ZtY2JfbGJydjIoc3ZtLCBtc3JfaW5mby1cXHUwMDNlaW5kZXgpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBNU1JfVk1fSFNBVkVfUEE6XFxuIFxcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gc3ZtLVxcdTAwM2VuZXN0ZWQuaHNhdmVfbXNyO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMzE2MCw2ICszMjM2LDEwIEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcilcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+REVCVUdDVExNU1JfQlRGO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoKGRhdGEgXFx1MDAyNiBERUJVR0NUTF9MQlJfUE1DX0ZSRUVaRV9CSVRTKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSkpXFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAyNiBERUJVR0NUTF9SRVNFUlZFRF9CSVRTKVxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFxuQEAgLTMxODEsNiArMzI2MSw0MCBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpXFxuIFxcdFxcdCpzdm1fdm1jYl9sYnIoc3ZtLCBlY3gpID0gZGF0YTtcXG4gXFx0XFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cXHUwMDNldm1jYiwgVk1DQl9MQlIpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNU1JfQU1EX0RCR19FWFROX0NGRzpcXG4rXFx0XFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxcbitcXHRcXHRcXHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XFxuK1xcbitcXHRcXHRpZiAoZGF0YSBcXHUwMDI2IERCR19FWFROX0NGR19SRVNFUlZFRF9CSVRTKVxcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdFxcdGlmIChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuZGJnX2V4dG5fY2ZnID09IGRhdGEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9IGRhdGE7XFxuK1xcdFxcdHZtY2JfbWFya19kaXJ0eShzdm0tXFx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcXG4rXFx0XFx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNU1JfQU1ENjRfTEJSX1NFTEVDVDpcXG4rXFx0XFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxcbitcXHRcXHRcXHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XFxuK1xcbitcXHRcXHRpZiAoZGF0YSBcXHUwMDI2IExCUl9TRUxFQ1RfUkVTRVJWRURfQklUUylcXG4rXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRcXHRpZiAoc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2VzYXZlLmxicl9zZWxlY3QgPT0gZGF0YSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUubGJyX3NlbGVjdCA9IGRhdGE7XFxuK1xcdFxcdHZtY2JfbWFya19kaXJ0eShzdm0tXFx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTVNSX0FNRF9TQU1QX0JSX0ZST00gLi4uIE1TUl9BTURfU0FNUF9CUl9GUk9NICsgMzE6XFxuK1xcdFxcdGlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xcbitcXG4rXFx0XFx0KnN2bV92bWNiX2xicnYyKHN2bSwgZWN4KSA9IGRhdGE7XFxuK1xcdFxcdHZtY2JfbWFya19kaXJ0eShzdm0tXFx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTVNSX1ZNX0hTQVZFX1BBOlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBPbGQga2VybmVscyBkaWQgbm90IHZhbGlkYXRlIHRoZSB2YWx1ZSB3cml0dGVuIHRvXFxuQEAgLTQ3MTAsNiArNDgyNCwyMCBAQCBzdGF0aWMgYm9vbCBzdm1faGFzX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmVudHJ5O1xcbitcXG4rXFx0ZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcXG4rXFx0aWYgKCFlbnRyeSB8fCBlbnRyeS1cXHUwMDNlZWF4IFxcdTAwM2MgMHg4MDAwMDAyMilcXG4rXFx0XFx0Z290byBub3RfZm91bmQ7XFxuK1xcdGVudHJ5ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAyMik7XFxuK1xcdGlmIChlbnRyeSlcXG4rXFx0XFx0cmV0dXJuIChlbnRyeS1cXHUwMDNlZWJ4IFxcdTAwM2VcXHUwMDNlIDQpIFxcdTAwMjYgMHgzZjtcXG4rbm90X2ZvdW5kOlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG5AQCAtNDczNiw2ICs0ODY0LDEwIEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmIChndWVzdF9jcHVpZF9pc19pbnRlbF9jb21wYXRpYmxlKHZjcHUpKVxcbiBcXHRcXHRndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX1ZfVk1TQVZFX1ZNTE9BRCk7XFxuIFxcbitcXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNwdWlkX3F1ZXJ5X2xicnYyX3N0YWNrX3NpemUodmNwdSkgIT0gU1ZNX0xCUl9WMl9TVEFDS19TSVpFKVxcbitcXHRcXHRndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xcbitcXG4gXFx0aWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSlcXG4gXFx0XFx0c2V2X3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN2bSk7XFxuIH1cXG5AQCAtNTU4Miw2ICs1NzE0LDEwIEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXFxuIFxcdFxcdGlmIChrdm1fcG11X2NhcC52ZXJzaW9uICE9IDIgfHxcXG4gXFx0XFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFKSlcXG4gXFx0XFx0XFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMik7XFxuK1xcbitcXHRcXHRpZiAoIWxicnYgfHwgIWVuYWJsZV9tZWRpYXRlZF9wbXUgfHxcXG4rXFx0XFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXFxuK1xcdFxcdFxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDUFVJRCAweDgwMDAwMDFGIChTTUUvU0VWIGZlYXR1cmVzKSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li4xMDVhNzFkNjlkNjhhOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC0zNjMsNiArMzYzLDcgQEAgc3RydWN0IHZjcHVfc3ZtIHtcXG4gXFx0Ym9vbCBhdmljX2lycV93aW5kb3c7XFxuIFxcdGJvb2wgeDJhdmljX21zcnNfaW50ZXJjZXB0ZWQ7XFxuIFxcdGJvb2wgbGJyX21zcnNfaW50ZXJjZXB0ZWQ7XFxuK1xcdGJvb2wgbGJydjJfbXNyc19pbnRlcmNlcHRlZDtcXG4gXFxuIFxcdC8qIEd1ZXN0IEdJRiB2YWx1ZSwgdXNlZCB3aGVuIHZHSUYgaXMgbm90IGVuYWJsZWQgKi9cXG4gXFx0Ym9vbCBndWVzdF9naWY7XFxuQEAgLTc4Myw3ICs3ODQsMTEgQEAgQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyhib29sLCB0ZXN0LCB0ZXN0KVxcbiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIGNsZWFyLCBfX2NsZWFyKVxcbiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIHNldCwgX19zZXQpXFxuIFxcbi0jZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH5ERUJVR0NUTE1TUl9MQlIpXFxuKyNkZWZpbmUgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUU1xcdChERUJVR0NUTE1TUl9GUkVFWkVfTEJSU19PTl9QTUkgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IERFQlVHQ1RMTVNSX0ZSRUVaRV9QRVJGTU9OX09OX1BNSSlcXG4rI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTXFx0KH4oREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykpXFxuKyNkZWZpbmUgREJHX0VYVE5fQ0ZHX1JFU0VSVkVEX0JJVFMgKH5EQkdfRVhUTl9DRkdfTEJSVjJFTilcXG4rI2RlZmluZSBMQlJfU0VMRUNUX1JFU0VSVkVEX0JJVFMgKH5HRU5NQVNLX1VMTCg4LCAwKSlcXG4gXFxuIC8qIHN2bS5jICovXFxuIGV4dGVybiBib29sIGR1bXBfaW52YWxpZF92bWNiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDoxOS44OTc2MDEwODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODgxNDQ1NDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV91cGRhdGVfbGJydlwiLFxuICAgIFwic3ZtX2VuYWJsZV9sYnJ2XCIsXG4gICAgXCJzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRcIixcbiAgICBcInBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQU1EIExCUiBWMiAoTGFzdCBCcmFuY2ggUmVjb3JkIFZlcnNpb24gMikgaW4gS1ZNLiBJdCBtb2RpZmllcyBTVk0gdG8gaGFuZGxlIG5ldyBNU1JzIChNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9BTURfU0FNUF9CUl9GUk9NKSBhbmQgQ1BVSUQgZmVhdHVyZXMgKEFNRF9MQlJfVjIsIEFNRF9MQlJfUE1DX0ZSRUVaRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gQU1EIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MDMwYjNkYTk4MmIzNzg4ZTUwODY4YjMxYWIzYjJlZDIwMjJjNjljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMDc6NDA6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvY29yZS5jIGIvYXJjaC94ODYvZXZlbnRzL2NvcmUuY1xuaW5kZXggNGI5ZTEwNTMwOWM2YTkuLjRhY2JjYTFhODhhMTgwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2NvcmUuY1xuKysrIGIvYXJjaC94ODYvZXZlbnRzL2NvcmUuY1xuQEAgLTMxMzgsNiArMzEzOCw3IEBAIHZvaWQgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgKmNhcClcbiBcdGNhcC1cdTAwM2ViaXRfd2lkdGhfZml4ZWRcdD0gY2FwLVx1MDAzZW51bV9jb3VudGVyc19maXhlZCA/IHg4Nl9wbXUuY250dmFsX2JpdHMgOiAwO1xuIFx0Y2FwLVx1MDAzZWV2ZW50c19tYXNrXHQ9ICh1bnNpZ25lZCBpbnQpeDg2X3BtdS5ldmVudHNfbWFza2w7XG4gXHRjYXAtXHUwMDNlZXZlbnRzX21hc2tfbGVuXHQ9IHg4Nl9wbXUuZXZlbnRzX21hc2tfbGVuO1xuK1x0Y2FwLVx1MDAzZW51bV9icmFuY2hlc19sYnJcdD0geDg2X3BtdS5sYnJfbnI7XG4gXHRjYXAtXHUwMDNlcGVic19lcHRcdFx0PSB4ODZfcG11LnBlYnNfZXB0O1xuIFx0Y2FwLVx1MDAzZW1lZGlhdGVkXHRcdD0gISEocG11LmNhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9QTVVfQ0FQX01FRElBVEVEX1ZQTVUpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcbmluZGV4IDFlYjEzNjczZTg4OWY5Li5mMThjZjA5ODZlMTJkMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXG5AQCAtMzA2LDYgKzMwNiw3IEBAIHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkge1xuIFx0aW50XHRcdGJpdF93aWR0aF9maXhlZDtcbiBcdHVuc2lnbmVkIGludFx0ZXZlbnRzX21hc2s7XG4gXHRpbnRcdFx0ZXZlbnRzX21hc2tfbGVuO1xuK1x0aW50XHRcdG51bV9icmFuY2hlc19sYnI7XG4gXHR1bnNpZ25lZCBpbnRcdHBlYnNfZXB0XHQ6MTtcbiBcdHVuc2lnbmVkIGludFx0bWVkaWF0ZWRcdDoxO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMzEuLmYzYmM5N2JjNmFjYWIzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5AQCAtMjUzLDYgKzI1Myw4IEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcbiAjZGVmaW5lIFNWTV9UU0NfUkFUSU9fTUFYXHQweDAwMDAwMGZmZmZmZmZmZmZVTExcbiAjZGVmaW5lIFNWTV9UU0NfUkFUSU9fREVGQVVMVFx0MHgwMTAwMDAwMDAwVUxMXG4gXG4rI2RlZmluZSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUgMTZcbitcbiBcbiAvKiBBVklDICovXG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfR1VFU1RfUEhZU0lDQUxfSURfTUFTS1x0KDB4RkZVTEwpXG5AQCAtMzY4LDggKzM3MCwxNSBAQCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEge1xuIFx0dTY0IGJyX3RvO1xuIFx0dTY0IGxhc3RfZXhjcF9mcm9tO1xuIFx0dTY0IGxhc3RfZXhjcF90bztcbi1cdHU4IHJlc2VydmVkXzB4Mjk4WzcyXTtcbitcdHU2NCBkYmdfZXh0bl9jZmc7XG4rXHR1OCByZXNlcnZlZF8weDJhMFs2NF07XG4gXHR1NjQgc3BlY19jdHJsO1x0XHQvKiBHdWVzdCB2ZXJzaW9uIG9mIFNQRUNfQ1RSTCBhdCAweDJFMCAqL1xuK1x0dTggcmVzZXJ2ZWRfMHgyZThbOTA0XTtcbitcdHN0cnVjdCB7XG4rXHRcdHU2NCBsYnJfc3RhY2tfZnJvbTtcbitcdFx0dTY0IGxicl9zdGFja190bztcbitcdH0gX19wYWNrZWQgbGJyWzE2XTtcbitcdHU2NCBsYnJfc2VsZWN0O1xuIH0gX19wYWNrZWQ7XG4gXG4gLyogU2F2ZSBhcmVhIGRlZmluaXRpb24gZm9yIFNFVi1FUyBhbmQgU0VWLVNOUCBndWVzdHMgKi9cbkBAIC01NTIsNyArNTYxLDcgQEAgc3RydWN0IHZtY2Ige1xuIFx0fTtcbiB9IF9fcGFja2VkO1xuIFxuLSNkZWZpbmUgRVhQRUNURURfVk1DQl9TQVZFX0FSRUFfU0laRVx0XHQ3NDRcbisjZGVmaW5lIEVYUEVDVEVEX1ZNQ0JfU0FWRV9BUkVBX1NJWkVcdFx0MTkxMlxuICNkZWZpbmUgRVhQRUNURURfR0hDQl9TQVZFX0FSRUFfU0laRVx0XHQxMDMyXG4gI2RlZmluZSBFWFBFQ1RFRF9TRVZfRVNfU0FWRV9BUkVBX1NJWkVcdFx0MTY0OFxuICNkZWZpbmUgRVhQRUNURURfVk1DQl9DT05UUk9MX0FSRUFfU0laRVx0XHQxMDI0XG5AQCAtNTc3LDcgKzU4Niw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuIFx0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHhkOCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDE4MCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI0OCk7XG4tXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI5OCk7XG4rXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDJhMCk7XG4rXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDJlOCk7XG4gXG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHNldl9lc19zYXZlX2FyZWEsIDB4YzgpO1xuIFx0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVChzZXZfZXNfc2F2ZV9hcmVhLCAweGNjKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5pbmRleCAyNjk4ZmE0MmNkOTcxMS4uNTFiNjkxZjkxNDQyYmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC0xMjY2LDcgKzEyNjYsOSBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXG4gXHQpO1xuIFxuIFx0a3ZtX2NwdV9jYXBfaW5pdChDUFVJRF84MDAwXzAwMjJfRUFYLFxuLVx0XHRGKFBFUkZNT05fVjIpLFxuK1x0XHRTQ0FUVEVSRURfRihQRVJGTU9OX1YyKSxcbitcdFx0U0NBVFRFUkVEX0YoQU1EX0xCUl9WMiksXG4rXHRcdFNDQVRURVJFRF9GKEFNRF9MQlJfUE1DX0ZSRUVaRSksXG4gXHQpO1xuIFxuIFx0aWYgKCFzdGF0aWNfY3B1X2hhc19idWcoWDg2X0JVR19OVUxMX1NFRykpXG5AQCAtMTg4Myw2ICsxODg1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fZG9fY3B1aWRfZnVuYyhzdHJ1Y3Qga3ZtX2NwdWlkX2FycmF5ICphcnJheSwgdTMyIGZ1bmN0aW9uKVxuIFx0XHRjcHVpZF9lbnRyeV9vdmVycmlkZShlbnRyeSwgQ1BVSURfODAwMF8wMDIyX0VBWCk7XG4gXG4gXHRcdGVieC5zcGxpdC5udW1fY29yZV9wbWMgPSBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3A7XG4rXG4rXHRcdGlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikpXG4rXHRcdFx0ZWJ4LnNwbGl0Lmxicl92Ml9zdGFja19zeiA9XG4rXHRcdFx0XHRtaW4oa3ZtX3BtdV9jYXAubnVtX2JyYW5jaGVzX2xiciwgU1ZNX0xCUl9WMl9TVEFDS19TSVpFKTtcbitcbiBcdFx0ZW50cnktXHUwMDNlZWJ4ID0gZWJ4LmZ1bGw7XG4gXHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG5pbmRleCA2NTdmNWY3NDNlZDk3NS4uOWE1OGY5MWViMTczZDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG5AQCAtNzAsNyArNzAsOSBAQFxuICNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1x0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAwN19FRFgsIDgpXG4gXG4gLyogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMiAoRUFYKSAqL1xuLSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAwKVxuKyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcdFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDApXG4rI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMlx0XHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMSlcbisjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkVcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAyKVxuIFxuIC8qIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVDWCkgKi9cbiAjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9UU0FfU1FfTk9cdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjFfRUNYLCAxKVxuQEAgLTE0Niw2ICsxNDgsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBfX2ZlYXR1cmVfdHJhbnNsYXRlKGludCB4ODZfZmVhdHVyZSlcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoU0dYX0VERUNDU1NBKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQ09OU1RBTlRfVFNDKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoUEVSRk1PTl9WMik7XG4rXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEFNRF9MQlJfVjIpO1xuK1x0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShBTURfTEJSX1BNQ19GUkVFWkUpO1xuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShSUlNCQV9DVFJMKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQkhJX0NUUkwpO1xuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShUU0FfU1FfTk8pO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlZjY5YTUxYWIyN2Y5OC4uM2VjOTFjMWM1OGRjYzUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtNzQ0LDYgKzc0NCw0NyBAQCBzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm0tXHUwMDNlbGJyX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XG4gfVxuIFxuK3N0YXRpYyBib29sIHN2bV9sYnJ2Ml9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBzdm1fbGJydjJfYWN0aXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdHJldHVybiBzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIChzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyBcdTAwMjYgREJHX0VYVE5fQ0ZHX0xCUlYyRU4pO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdGJvb2wgaW50ZXJjZXB0ID0gIXN2bV9sYnJ2Ml9hY3RpdmUodmNwdSk7XG4rXHRpbnQgaTtcbitcbitcdGlmIChpbnRlcmNlcHQgPT0gc3ZtLVx1MDAzZWxicnYyX21zcnNfaW50ZXJjZXB0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDMyOyBpKyspXG4rXHRcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRF9TQU1QX0JSX0ZST00gKyBpLCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbitcbitcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuK1xuK1x0LypcbitcdCAqIERCR19FWFROX0NGRyBzdGF5cyBwZXJtYW5lbnRseSBpbnRlcmNlcHRlZCBmb3Igbm9uLVNFVi1FUyBndWVzdHMgc29cbitcdCAqIEtWTSBjYW4gb2JzZXJ2ZSBMQlJWMkVOIGFuZCBsYXppbHkgdG9nZ2xlIFZfTEJSLiAgU0VWLUVTKyBndWVzdHMgbXVzdFxuK1x0ICogZGVsZWdhdGUgTEJSIHZpcnR1YWxpemF0aW9uIHRvIHRoZSBwcm9jZXNzb3IgKHBlciB0aGUgQVBNKSwgd2hlcmVcbitcdCAqIGludGVyY2VwdGluZyBMQlIgTVNScyBjYW4gYmUgZmF0YWwsIHNvIHRvZ2dsZSBpdCB3aXRoIHRoZSByZXN0LiAgU2VlXG4rXHQgKiBjb21taXQgYjdlNGJlMGEyMjRmIChcIktWTTogU0VWLUVTOiBEZWxlZ2F0ZSBMQlIgdmlydHVhbGl6YXRpb24gdG8gdGhlXG4rXHQgKiBwcm9jZXNzb3JcIikuXG4rXHQgKi9cbitcdGlmIChpc19zZXZfZXNfZ3Vlc3QodmNwdSkpXG4rXHRcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRF9EQkdfRVhUTl9DRkcsIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuK1xuK1x0c3ZtLVx1MDAzZWxicnYyX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XG4rfVxuK1xuIHZvaWQgc3ZtX3ZjcHVfZnJlZV9tc3JwbSh2b2lkICptc3JwbSlcbiB7XG4gXHRfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKG1zcnBtKSwgZ2V0X29yZGVyKE1TUlBNX1NJWkUpKTtcbkBAIC03OTksOCArODQwLDEwIEBAIHN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3ZtX2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX1NZU0NBTExfTUFTSywgTVNSX1RZUEVfUlcpO1xuICNlbmRpZlxuIFxuLVx0aWYgKGxicnYpXG4rXHRpZiAobGJydikge1xuIFx0XHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbitcdFx0c3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbitcdH1cbiBcbiBcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0lCUEIpKVxuIFx0XHRzdm1fc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9JQTMyX1BSRURfQ01ELCBNU1JfVFlQRV9XLFxuQEAgLTg2OCw2ICs5MTEsNyBAQCB2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XG4gXHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbitcdHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fc3ZtX2Rpc2FibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtODgwLDkgKzkyNCwxMSBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRib29sIGN1cnJlbnRfZW5hYmxlX2xicnYgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcbitcbiBcdGJvb2wgZW5hYmxlX2xicnYgPSAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IERFQlVHQ1RMTVNSX0xCUikgfHxcbiBcdFx0XHQgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoc3ZtLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7XG4rXHRcdFx0ICAgIChzdm0tXHUwMDNlbmVzdGVkLmN0bC5taXNjX2N0bDIgXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIpKSB8fFxuK1x0XHRcdCAgICBzdm1fbGJydjJfYWN0aXZlKHZjcHUpO1xuIFxuIFx0aWYgKGVuYWJsZV9sYnJ2IFx1MDAyNlx1MDAyNiAhY3VycmVudF9lbmFibGVfbGJydilcbiBcdFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XG5AQCAtODk2LDYgKzk0Miw3IEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGRvLCBzbyBhbHdheXMgcmVjYWxjdWxhdGUgdGhlIGludGVyY2VwdHMgaGVyZS5cbiBcdCAqL1xuIFx0c3ZtX3JlY2FsY19sYnJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4rXHRzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xuIH1cbiBcbiB2b2lkIGRpc2FibGVfbm1pX3NpbmdsZXN0ZXAoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5AQCAtMTM0MSw2ICsxMzg4LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0c3ZtLVx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbiBcdHN2bS1cdTAwM2VsYnJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG4rXHRzdm0tXHUwMDNlbGJydjJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG4gXG4gXHRzdm0tXHUwMDNldm1jYjAxLnB0ciA9IHBhZ2VfYWRkcmVzcyh2bWNiMDFfcGFnZSk7XG4gXHRzdm0tXHUwMDNldm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5AQCAtMjc4Nyw2ICsyODM1LDE5IEBAIHN0YXRpYyB1NjQgKnN2bV92bWNiX2xicihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIG1zcilcbiBcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmJyX2Zyb207XG4gfVxuIFxuK3N0YXRpYyB1NjQgKnN2bV92bWNiX2xicnYyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1MzIgbXNyKVxuK3tcbitcdHUzMiBvZmZzZXQgPSBtc3IgLSBNU1JfQU1EX1NBTVBfQlJfRlJPTTtcbitcdHUzMiBpZHggPSBvZmZzZXQgXHUwMDNlXHUwMDNlIDE7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcdTAwM2U9IFNWTV9MQlJfVjJfU1RBQ0tfU0laRSkpXG4rXHRcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxiclswXS5sYnJfc3RhY2tfZnJvbTtcbitcbitcdGlmIChvZmZzZXQgXHUwMDI2IDEpXG4rXHRcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicltpZHhdLmxicl9zdGFja190bztcbitcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicltpZHhdLmxicl9zdGFja19mcm9tO1xuK31cbitcbiBzdGF0aWMgYm9vbCBzZXZfZXNfcHJldmVudF9tc3JfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4ge1xuQEAgLTI4ODIsNiArMjk0MywyMSBAQCBzdGF0aWMgaW50IHN2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiBcdGNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBsYnJ2ID8gKnN2bV92bWNiX2xicihzdm0sIG1zcl9pbmZvLVx1MDAzZWluZGV4KSA6IDA7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfQU1EX0RCR19FWFROX0NGRzpcbitcdFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxuK1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbitcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUuZGJnX2V4dG5fY2ZnO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTVNSX0FNRDY0X0xCUl9TRUxFQ1Q6XG4rXHRcdGlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSlcbitcdFx0XHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XG4rXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicl9zZWxlY3Q7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfQU1EX1NBTVBfQlJfRlJPTSAuLi4gTVNSX0FNRF9TQU1QX0JSX0ZST00gKyAzMTpcbitcdFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxuK1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbitcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9ICpzdm1fdm1jYl9sYnJ2Mihzdm0sIG1zcl9pbmZvLVx1MDAzZWluZGV4KTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE1TUl9WTV9IU0FWRV9QQTpcbiBcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9IHN2bS1cdTAwM2VuZXN0ZWQuaHNhdmVfbXNyO1xuIFx0XHRicmVhaztcbkBAIC0zMTYwLDYgKzMyMzYsMTAgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxuIFx0XHRcdGRhdGEgXHUwMDI2PSB+REVCVUdDVExNU1JfQlRGO1xuIFx0XHR9XG4gXG4rXHRcdGlmICgoZGF0YSBcdTAwMjYgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFKSlcbitcdFx0XHRyZXR1cm4gMTtcbitcbiBcdFx0aWYgKGRhdGEgXHUwMDI2IERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG5AQCAtMzE4MSw2ICszMjYxLDQwIEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcilcbiBcdFx0KnN2bV92bWNiX2xicihzdm0sIGVjeCkgPSBkYXRhO1xuIFx0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIE1TUl9BTURfREJHX0VYVE5fQ0ZHOlxuK1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4rXHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuK1xuK1x0XHRpZiAoZGF0YSBcdTAwMjYgREJHX0VYVE5fQ0ZHX1JFU0VSVkVEX0JJVFMpXG4rXHRcdFx0cmV0dXJuIDE7XG4rXG4rXHRcdGlmIChzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9PSBkYXRhKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9IGRhdGE7XG4rXHRcdHZtY2JfbWFya19kaXJ0eShzdm0tXHUwMDNldm1jYiwgVk1DQl9MQlIpO1xuK1x0XHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfQU1ENjRfTEJSX1NFTEVDVDpcbitcdFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxuK1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbitcbitcdFx0aWYgKGRhdGEgXHUwMDI2IExCUl9TRUxFQ1RfUkVTRVJWRURfQklUUylcbitcdFx0XHRyZXR1cm4gMTtcbitcbitcdFx0aWYgKHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUubGJyX3NlbGVjdCA9PSBkYXRhKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicl9zZWxlY3QgPSBkYXRhO1xuK1x0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1TUl9BTURfU0FNUF9CUl9GUk9NIC4uLiBNU1JfQU1EX1NBTVBfQlJfRlJPTSArIDMxOlxuK1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4rXHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuK1xuK1x0XHQqc3ZtX3ZtY2JfbGJydjIoc3ZtLCBlY3gpID0gZGF0YTtcbitcdFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cdTAwM2V2bWNiLCBWTUNCX0xCUik7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBNU1JfVk1fSFNBVkVfUEE6XG4gXHRcdC8qXG4gXHRcdCAqIE9sZCBrZXJuZWxzIGRpZCBub3QgdmFsaWRhdGUgdGhlIHZhbHVlIHdyaXR0ZW4gdG9cbkBAIC00NzEwLDYgKzQ4MjQsMjAgQEAgc3RhdGljIGJvb2wgc3ZtX2hhc19lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGludCBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZW50cnk7XG4rXG4rXHRlbnRyeSA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApO1xuK1x0aWYgKCFlbnRyeSB8fCBlbnRyeS1cdTAwM2VlYXggXHUwMDNjIDB4ODAwMDAwMjIpXG4rXHRcdGdvdG8gbm90X2ZvdW5kO1xuK1x0ZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDIyKTtcbitcdGlmIChlbnRyeSlcbitcdFx0cmV0dXJuIChlbnRyeS1cdTAwM2VlYnggXHUwMDNlXHUwMDNlIDQpIFx1MDAyNiAweDNmO1xuK25vdF9mb3VuZDpcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuQEAgLTQ3MzYsNiArNDg2NCwxMCBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKGd1ZXN0X2NwdWlkX2lzX2ludGVsX2NvbXBhdGlibGUodmNwdSkpXG4gXHRcdGd1ZXN0X2NwdV9jYXBfY2xlYXIodmNwdSwgWDg2X0ZFQVRVUkVfVl9WTVNBVkVfVk1MT0FEKTtcbiBcbitcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcdTAwMjZcdTAwMjZcbitcdCAgICBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHZjcHUpICE9IFNWTV9MQlJfVjJfU1RBQ0tfU0laRSlcbitcdFx0Z3Vlc3RfY3B1X2NhcF9jbGVhcih2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKTtcbitcbiBcdGlmIChpc19zZXZfZ3Vlc3QodmNwdSkpXG4gXHRcdHNldl92Y3B1X2FmdGVyX3NldF9jcHVpZChzdm0pO1xuIH1cbkBAIC01NTgyLDYgKzU3MTQsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHN2bV9zZXRfY3B1X2NhcHModm9pZClcbiBcdFx0aWYgKGt2bV9wbXVfY2FwLnZlcnNpb24gIT0gMiB8fFxuIFx0XHQgICAgIWt2bV9jcHVfY2FwX2hhcyhYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUpKVxuIFx0XHRcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIpO1xuK1xuK1x0XHRpZiAoIWxicnYgfHwgIWVuYWJsZV9tZWRpYXRlZF9wbXUgfHxcbitcdFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXG4rXHRcdFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7XG4gXHR9XG4gXG4gXHQvKiBDUFVJRCAweDgwMDAwMDFGIChTTUUvU0VWIGZlYXR1cmVzKSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA3MTZiZTIxZmJhMzM1NC4uMTA1YTcxZDY5ZDY4YTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtMzYzLDYgKzM2Myw3IEBAIHN0cnVjdCB2Y3B1X3N2bSB7XG4gXHRib29sIGF2aWNfaXJxX3dpbmRvdztcbiBcdGJvb2wgeDJhdmljX21zcnNfaW50ZXJjZXB0ZWQ7XG4gXHRib29sIGxicl9tc3JzX2ludGVyY2VwdGVkO1xuK1x0Ym9vbCBsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkO1xuIFxuIFx0LyogR3Vlc3QgR0lGIHZhbHVlLCB1c2VkIHdoZW4gdkdJRiBpcyBub3QgZW5hYmxlZCAqL1xuIFx0Ym9vbCBndWVzdF9naWY7XG5AQCAtNzgzLDcgKzc4NCwxMSBAQCBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKGJvb2wsIHRlc3QsIHRlc3QpXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBjbGVhciwgX19jbGVhcilcbiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIHNldCwgX19zZXQpXG4gXG4tI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+REVCVUdDVExNU1JfTEJSKVxuKyNkZWZpbmUgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUU1x0KERFQlVHQ1RMTVNSX0ZSRUVaRV9MQlJTX09OX1BNSSB8XHRcXFxuK1x0XHRcdFx0XHQgREVCVUdDVExNU1JfRlJFRVpFX1BFUkZNT05fT05fUE1JKVxuKyNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUU1x0KH4oREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykpXG4rI2RlZmluZSBEQkdfRVhUTl9DRkdfUkVTRVJWRURfQklUUyAofkRCR19FWFROX0NGR19MQlJWMkVOKVxuKyNkZWZpbmUgTEJSX1NFTEVDVF9SRVNFUlZFRF9CSVRTICh+R0VOTUFTS19VTEwoOCwgMCkpXG4gXG4gLyogc3ZtLmMgKi9cbiBleHRlcm4gYm9vbCBkdW1wX2ludmFsaWRfdm1jYjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQwOjE5Ljg5NzYwMjM0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzY5MDkxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQU1EIExCUiBWMiBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBBTUQgTEJSIFYyIHN1cHBvcnQgd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IGZvciBTVk0uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBjb3JlIGFyZWFzIG9mIHRoZSBoeXBlcnZpc29yIGFuZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLlxuXG5JbW1lZGlhdGVseSwgSSBzZWUgaXQncyBzcHJlYWQgYWNyb3NzIHNldmVyYWwga2V5IGZpbGVzOiBgY29yZS5jYCwgaGVhZGVycyAoYHBlcmZfZXZlbnQuaGAsIGBzdm0uaGAsIGByZXZlcnNlX2NwdWlkLmhgKSwgYW5kIGNydWNpYWwgS1ZNIFNWTSBjb21wb25lbnRzIChgY3B1aWQuY2AsIGBzdm0uY2ApLiBUaGlzIHRlbGxzIG1lIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYm90aCBmdW5kYW1lbnRhbCBDUFVJRCBmZWF0dXJlIGFkdmVydGlzZW1lbnQgYW5kIHRoZSBpbnRlcmNlcHRpb24vZW11bGF0aW9uIG9mIHNwZWNpZmljIE1vZGVsLVNwZWNpZmljIFJlZ2lzdGVycyAoTVNScykuIFNwZWNpZmljYWxseSwgaXQgZGVhbHMgd2l0aCBNU1JzIHN1Y2ggYXMgYE1TUl9BTURfREJHX0VYVE5fQ0ZHYCwgYE1TUl9BTUQ2NF9MQlJfU0VMRUNUYCwgYW5kIGBNU1JfQU1EX1NBTVBfQlJfRlJPTWAsIGFsbCBvZiB3aGljaCBhcmUgYSBnb29kIGluZGljYXRpb24gdGhhdCBicmFuY2ggdHJhY2luZyBpcyB0aGUgZm9jdXMgaGVyZS4gVGhlIGFkZGl0aW9uIG9mIENQVUlEIGZlYXR1cmVzIGBBTURfTEJSX1YyYCBhbmQgYEFNRF9MQlJfUE1DX0ZSRUVaRWAgaXMgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIHRvIGluZGljYXRpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSB0byB0aGUgZ3Vlc3QuXG5cbkRpZ2dpbmcgaW50byBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AgaXMgaW1wb3J0YW50IHRvIG1lLCBzbyBJ4oCZbSBnb2luZyB0byBmb2N1cyBteSBhbmFseXNpcyB0aGVyZS4gSSBjYW4gc2VlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBmZWF0dXJlLCBhbmQgTVNSIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBmb3IgdGhlc2UgbmV3IHJlZ2lzdGVycy4gVGhlIGZ1bmN0aW9ucyBhcmU6IGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCwgYHN2bV9sYnJ2Ml9zdXBwb3J0ZWRgLCBgc3ZtX2xicnYyX2FjdGl2ZWAsIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX2dldF9tc3JgLCBgc3ZtX3NldF9tc3JgLCBgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZWAsIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgLCBhbmQgYHN2bV9zZXRfY3B1X2NhcHNgLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGZ1bGx5IHN1cHBvcnRlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBDbGVhcmx5LCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfS1ZNX0FNRGAgYXJlIG1hbmRhdG9yeS4gUGVyZiBldmVudHMgd291bGQgYmUgcmVsZXZhbnQgaGVyZSwgc28gSSdsbCBhc3N1bWUgYENPTkZJR19QRVJGX0VWRU5UU2AgaXMgYWxzbyBuZWVkZWQsIGJ1dCBsZXTigJlzIGNoZWNrLiBJ4oCZbSBnb2luZyB0byBydW4gYSBgZ3JlcHBlcmAgc2VhcmNoIGZvciBcIkFNRF9MQlJfVjJcIiBvciBzaW1pbGFyIHRlcm1zIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcyB0byBiZSBjZXJ0YWluLCBhbmQgdmVyaWZ5IHdoZXRoZXIgYSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbiBoYXMgYmVlbiBhZGRlZCBmb3IgdGhpcyBmZWF0dXJlLiBUaGF0IHdpbGwgYmUgbXkgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTgzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDA6MjcuMjM0NTEzODMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDk2ODc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQU1EX0xCUl9WMlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jPTQyMj1fX2luaXQgaW50IGFtZF9wbXVfbGJyX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtNDI1LVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6NDI2OlxcdGlmICh4ODZfcG11LnZlcnNpb24gXFx1MDAzYyAyIHx8ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYy00MjctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC04OC0jZGVmaW5lIFg4Nl9GRUFUVVJFX1JFUF9HT09EXFx0XFx0KCAzKjMyKzE2KSAvKiBcXFwicmVwX2dvb2RcXFwiIFJFUCBtaWNyb2NvZGUgd29ya3Mgd2VsbCAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6ODk6I2RlZmluZSBYODZfRkVBVFVSRV9BTURfTEJSX1YyXFx0XFx0KCAzKjMyKzE3KSAvKiBcXFwiYW1kX2xicl92MlxcXCIgQU1EIExhc3QgQnJhbmNoIFJlY29yZCBFeHRlbnNpb24gVmVyc2lvbiAyICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC05MC0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NMRUFSX0NQVV9CVUZcXHQoIDMqMzIrMTgpIC8qIENsZWFyIENQVSBidWZmZXJzIHVzaW5nIFZFUlcgKi9cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYy02Ni1cXHR7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsXFx0XFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmM6Njc6XFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFxcdFxcdENQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSxcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jLTY4LVxcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLFxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jPTgzNj12b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xMjY5LVxcdFxcdFNDQVRURVJFRF9GKFBFUkZNT05fVjIpLFxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjEyNzA6XFx0XFx0U0NBVFRFUkVEX0YoQU1EX0xCUl9WMiksXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTI3MS1cXHRcXHRTQ0FUVEVSRURfRihBTURfTEJSX1BNQ19GUkVFWkUpLFxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM9MTQyMD1zdGF0aWMgaW5saW5lIGludCBfX2RvX2NwdWlkX2Z1bmMoc3RydWN0IGt2bV9jcHVpZF9hcnJheSAqYXJyYXksIHUzMiBmdW5jdGlvbilcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4ODgtXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTg4OTpcXHRcXHRpZiAoa3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpKVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4OTAtXFx0XFx0XFx0ZWJ4LnNwbGl0Lmxicl92Ml9zdGFja19zeiA9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTczLSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcXHRcXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMClcXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oOjc0OiNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfVjJcXHRcXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMSlcXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTc1LSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRVxcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaD0xNDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgX19mZWF0dXJlX3RyYW5zbGF0ZShpbnQgeDg2X2ZlYXR1cmUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTE1MC1cXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFBFUkZNT05fVjIpO1xcbmFyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmg6MTUxOlxcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQU1EX0xCUl9WMik7XFxuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaC0xNTItXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShBTURfTEJSX1BNQ19GUkVFWkUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz03NDc9c3RhdGljIGJvb2wgc3ZtX2xicnYyX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy03NDgte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NzQ5OlxcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNzUwLVxcdCAgICAgICBrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00ODQxPXN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ4NjYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0ODY3OlxcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDg2OC1cXHQgICAgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZSh2Y3B1KSAhPSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0ODY5OlxcdFxcdGd1ZXN0X2NwdV9jYXBfY2xlYXIodmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00ODcwLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NjQxPXN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU3MTktXFx0XFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NzIwOlxcdFxcdFxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTcyMS1cXHR9XFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTg4LSNkZWZpbmUgWDg2X0ZFQVRVUkVfUkVQX0dPT0RcXHRcXHQoIDMqMzIrMTYpIC8qIFxcXCJyZXBfZ29vZFxcXCIgUkVQIG1pY3JvY29kZSB3b3JrcyB3ZWxsICovXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDo4OTojZGVmaW5lIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjJcXHRcXHQoIDMqMzIrMTcpIC8qIFxcXCJhbWRfbGJyX3YyXFxcIiBBTUQgTGFzdCBCcmFuY2ggUmVjb3JkIEV4dGVuc2lvbiBWZXJzaW9uIDIgKi9cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTkwLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0xFQVJfQ1BVX0JVRlxcdCggMyozMisxOCkgLyogQ2xlYXIgQ1BVIGJ1ZmZlcnMgdXNpbmcgVkVSVyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDoyOS41ODQyMDY5MjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ0MTUzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoIGZvciBBTUQgTEJSIFYyIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGltcGxlbWVudGluZyBMQlIgVjIgc3VwcG9ydCBmb3IgQU1EIHByb2Nlc3NvcnMgd2l0aGluIEtWTS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMsIHdoaWNoLCBhcyBleHBlY3RlZCwgYXJlIGhhcHBlbmluZyB3aXRoaW4gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLiBJdCdzIGFsbCBhYm91dCBhZGRpbmcgdGhlIE1TUiBpbnRlcmNlcHRpb24gYW5kIGhhbmRsaW5nIGxvZ2ljIGZvciB0aGUgbmV3IE1TUnM6IGBNU1JfQU1EX0RCR19FWFROX0NGR2AsIGBNU1JfQU1ENjRfTEJSX1NFTEVDVGAsIGFuZCBgTVNSX0FNRF9TQU1QX0JSX0ZST01gLiBUaGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIHdpbGwgYmUuXG5cbkknbSBpbml0aWFsbHkgZm9jdXNpbmcgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCwgYHN2bV9sYnJ2Ml9zdXBwb3J0ZWRgLCBgc3ZtX2xicnYyX2FjdGl2ZWAsIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX2dldF9tc3JgLCBgc3ZtX3NldF9tc3JgLCBgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZWAsIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgLCBhbmQgYHN2bV9zZXRfY3B1X2NhcHNgLlxuXG5NeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCBhcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBUaGV5J3JlIHByZXR0eSBnZW5lcmljIEtWTSBob3QtcGF0aCBmdW5jdGlvbnMgYnV0IHRoZXkgYXJlIHRoZSBlbnRyeXBvaW50cyB0byBoYW5kbGUgdGhlIG5ldyBNU1JzLiBJdOKAmXMgcHJldHR5IG9idmlvdXMgdGhleSdyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQuIFdhaXQsIEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmIGEgYml0IG5vdy4gVGhvc2UgYXJlIHJlYWxseSBicm9hZCBmdW5jdGlvbnMgYW5kIGZ1enppbmcgdGhlbSBkaXJlY3RseSBjb3VsZCBiZSBhIGNoYWxsZW5nZS4gTWF5YmUgdGhlcmUgYXJlIG90aGVyLCBtb3JlIHRhcmdldGVkIGZ1bmN0aW9ucyBJIGNhbiBsZXZlcmFnZT9cblxuT2theSwgbGV0IG1lIHNlZS4gYHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHNgIGlzIHN0YXRpYywgd2hpY2ggbWlnaHQgbWFrZSBpdCBoYXJkZXIgdG8gdGFyZ2V0IGRpcmVjdGx5LCB1bmxlc3MgaXQncyBpbmxpbmVkLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWRkZWQgb3IgbW9kaWZpZWQuIEFscmlnaHQsIEkgc2VlIGBzdm1fdmNwdV9mcmVlX21zcnBtYCBpcyBtb2RpZmllZC4gQW5kIEkgYWxzbyBzZWUgc29tZSBzdGF0aWMgZnVuY3Rpb25zOiBgc3ZtX3JlY2FsY19tc3JfaW50ZXJjZXB0c2AsIGBzdm1fdmNwdV9jcmVhdGVgLCBgc3ZtX3ZtY2JfbGJyYCwgYHN2bV92bWNiX2xicnYyYCwgYW5kIGBzZXZfZXNfcHJldmVudF9tc3JfYWNjZXNzYC4gT2theSwgc28gYHN2bV9lbmFibGVfbGJydmAsIGBzdm1fdXBkYXRlX2xicnZgLCBhbmQgYGRpc2FibGVfbm1pX3NpbmdsZXN0ZXBgIGFyZSBub24tc3RhdGljLlxuXG5Tb21ldGhpbmcgZG9lc24ndCBmZWVsIHJpZ2h0LiBgc3ZtX2dldF9tc3JgIGlzIGxpc3RlZCBhcyBzdGF0aWM/IFRoYXQncyB1bnVzdWFsLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQ7IEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGVuc3VyZSB0aGF0IGl0J3MgYWN0dWFsbHkgc3RhdGljLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDozNi45MjgzNjI2ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzE1NDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdm1fZ2V0X21zclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI4NTk9c3RhdGljIGJvb2wgc3ZtX3BhdF9hY2Nlc3Nlc19ncGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcm9tX2hvc3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI4NzItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyODczOnN0YXRpYyBpbnQgc3ZtX2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjg3NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTU0NTc9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0ODQtXFx0LmdldF9mZWF0dXJlX21zciA9IHN2bV9nZXRfZmVhdHVyZV9tc3IsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDg1OlxcdC5nZXRfbXNyID0gc3ZtX2dldF9tc3IsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDg2LVxcdC5zZXRfbXNyID0gc3ZtX3NldF9tc3IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQwOjM5LjAwMTUyMjg0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5MDAwNDczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVNSIEFjY2VzcyBpbiB0aGUgQU1ELVYgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBJIHNlZSB0aGF0LiBCdXQgdGhlIGZhY3QgdGhhdCB0aGV5J3JlIHJlZ2lzdGVyZWQgaW4gYHN2bV94ODZfb3BzYCBtYWtlcyB0aGVtIGVudHJ5IHBvaW50cyBmb3IgTVNSIGFjY2Vzc2VzLCBlc3NlbnRpYWxseSB0aGUgcHVibGljIGludGVyZmFjZSwgZG9lc24ndCBpdD8gSG1tLCB0aGUgaW5zdHJ1Y3Rpb25zIG1lbnRpb24gcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGxvZ2ljIGlzIGNsZWFyLCBpbmxpbmVkIGZ1bmN0aW9ucyBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLiBCZWNhdXNlIGBzdm1fZ2V0X21zcmAgYW5kIGBzdm1fc2V0X21zcmAgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGF0IGFjdHVhbGx5IHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyAqZnVsbHkqIGlubGluZWQsIHJpZ2h0PyBUYWtpbmcgdGhlaXIgYWRkcmVzcyBnaXZlcyB0aGVtIGEgc3ltYm9sIGFkZHJlc3MsIHJlZ2FyZGxlc3MuIFRoYXQgY2hhbmdlcyB0aGUgY2FsY3VsdXMgc29tZXdoYXQuIFN0aWxsLCB0aGV5IGFyZSB2ZXJ5IGhvdCBwYXRocyBpbiB0aGUgY29kZSBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuXG5cbkxldCBtZSBzaGlmdCBnZWFycyBhbmQgY29uc2lkZXIgYHN2bV91cGRhdGVfbGJydmAgYW5kIGBzdm1fZW5hYmxlX2xicnZgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDo0My42OTE1MjkzNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NDUzODY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdm1fdXBkYXRlX2xicnZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03NDU9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgyNS1cXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0xCUik7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4MjY6XFx0c3ZtX3VwZGF0ZV9sYnJ2KFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9ODUzPXN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05ODctXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo5ODg6XFx0LyogU1ZNX01JU0MyX0VOQUJMRV9WX0xCUiBpcyBjb250cm9sbGVkIGJ5IHN2bV91cGRhdGVfbGJydigpICovXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05ODktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTEzMjI9dm9pZCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTM4Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjEzODc6XFx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTM4OC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9OTE3PXN0YXRpYyB2b2lkIF9fc3ZtX2Rpc2FibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTkyMi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjkyMzp2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MjQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMDUxPXN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1MC1cXHRcXHR2bWNiX21hcmtfZGlydHkoc3ZtLVxcdTAwM2V2bWNiLCBWTUNCX0xCUik7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMjUxOlxcdFxcdHN2bV91cGRhdGVfbGJydih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMyNTItXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMyNzUtXFx0XFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cXHUwMDNldm1jYiwgVk1DQl9MQlIpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzI3NjpcXHRcXHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMjc3LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD04MTM9dm9pZCBzdm1fZW5hYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjgxNDp2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtODE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDo0NS44NTYwNzM1NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkyMjQwNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBMb2dpY2FsIEJyYW5jaCBSZWNvcmQgVmlydHVhbGl6YXRpb24gKExCUlYpIFVwZGF0ZXMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgc3ZtX3VwZGF0ZV9sYnJ2YC4gSXQncyBhIHN0cm9uZyBjb250ZW5kZXIgZ2l2ZW4gdGhlIG5hbWUuIEJ1dCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMgYW5kIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBTbywgSSdtIGFsc28gcHV0dGluZyBgc3ZtX2VuYWJsZV9sYnJ2YCBvbiB0aGUgc2hvcnQgbGlzdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaXMgbW9yZSByZWxldmFudCBhbmQvb3IgY29tcGxlbWVudGFyeS4gSSdsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHN2bV9lbmFibGVfbGJydmAgZmlyc3QuIEkgd2FudCB0byBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGludGVyYWN0aW9uIHdpdGggcmVsYXRlZCBzdHJ1Y3R1cmVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nIG9mZiBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDo0OS4xNDgzMTY1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwODQwMjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdm1fZW5hYmxlX2xicnZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMDY1PXN0YXRpYyBpbnQgX19zZXZfbGF1bmNoX3VwZGF0ZV92bXNhKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMTExLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTExMjpcXHRzdm1fZW5hYmxlX2xicnYodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMTEzLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDgwPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGVfdm1zYShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjUyOC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1Mjk6XFx0XFx0c3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjUzMC1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTgyNz1zdGF0aWMgdm9pZCBzdm1fcmVjYWxjX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTA0LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTA1OnN0YXRpYyB2b2lkIF9fc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTkwNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTkwOS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjkxMDp2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MTEte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTEyOlxcdF9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTEzLVxcdHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz05MjM9dm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MzMtXFx0aWYgKGVuYWJsZV9sYnJ2IFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2VuYWJsZV9sYnJ2KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTM0OlxcdFxcdF9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTM1LVxcdGVsc2UgaWYgKCFlbmFibGVfbGJydiBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X2VuYWJsZV9sYnJ2KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD04MTI9dm9pZCBzdm1fdmNwdV9mcmVlX21zcnBtKHZvaWQgKm1zcnBtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjgxMzp2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtODE0LXZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQwOjUxLjA1NjcyODY4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc0NjI4Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc3ZtX3VwZGF0ZV9sYnJ2YCBmdW5jdGlvbiwgdHJpZ2dlcmVkIGJ5IHdyaXRlcyB0byBgTVNSX0FNRF9EQkdfRVhUTl9DRkdgIHZpYSBgc3ZtX3NldF9tc3JgLiBUaGF0J3MgYSBjbGVhciBlbnRyeSBwb2ludCB0byBmb2N1cyBvbiwgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgdGhpbmtpbmcgaXMsIGxldCdzIGxvb2sgYXQgdGhlIGJyb2FkZXIgcGljdHVyZS4gV2hhdCBhYm91dCBgc3ZtX3NldF9tc3JgIGFuZCBgc3ZtX2dldF9tc3JgPyBUaGV5J3JlIHRoZSBwcmltYXJ5IGhhbmRsZXJzIGZvciBhbGwgTVNSIGludGVyYWN0aW9ucy4gVGhleSd2ZSBiZWVuIGFkYXB0ZWQgZm9yIHRoZXNlIG5ldyBgTVNSX0FNRF9EQkdfRVhUTl9DRkdgLCBgTVNSX0FNRDY0X0xCUl9TRUxFQ1RgLCBhbmQgYE1TUl9BTURfU0FNUF9CUl9GUk9NYCBNU1JzLlxuXG5JIHdpbGwgYWRkIHRoZXNlIHRvIG15IGxpc3QuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBpbnZlc3RpZ2F0ZSBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgIHNpbmNlIHRoZXkgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgbmV3IE1TUnMuIEV2ZW4gdGhvdWdoIHRoZXkncmUgbGlrZWx5IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGhzLCB0aGV5J3JlIHRoZSBvbmx5IHJvdXRlcyB0byByZWFjaCB0aGUgbmV3IGxvZ2ljLlxuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLiBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgICphcmUqIGV4dHJlbWVseSBob3QuIElzIHRoZXJlIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHRyYWNlIHRoaXMgY2hhbmdlP1xuXG5IbW0uLi4gTWF5YmUgYHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHNgPyBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBvZnRlbiBtZWFucyBpdCBjb3VsZCBiZSBpbmxpbmVkLiBJdCdzIGNhbGxlZCBmcm9tIGBzdm1fdXBkYXRlX2xicnZgIGFuZCBgc3ZtX3JlY2FsY19tc3JfaW50ZXJjZXB0c2AuIEkgd2lsbCBjaGVjayBpZiBpdCdzIGJlZW4gaW5saW5lZCBieSB0aGUgY29tcGlsZXIuXG5cbkknbGwgcXVpY2tseSBjaGVjayBgc3ZtX2xicnYyX3N1cHBvcnRlZGAgYW5kIGBzdm1fbGJydjJfYWN0aXZlYC4gVGhleSdyZSBzdGF0aWMsIHNob3J0LCBhbmQgbGlrZWx5IGlubGluZWQsIHNvIHRoZXkgcHJvYmFibHkgd29uJ3QgYmUgc2lnbmlmaWNhbnQgdG8gbXkgcmVzZWFyY2guXG5cbk5vdywgbGV0J3MgYnJvYWRlbiB0aGUgc2NvcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGNvbnRleHQuIExldCdzIGxvb2sgYXQgYGFyY2gveDg2L2t2bS9jcHVpZC5jYC4gSSBzZWUgYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYCBhbmQgYF9fZG9fY3B1aWRfZnVuY2AgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGVzZSBhcmVuJ3QgZXhwbGljaXRseSB0aWVkIHRvIExCUiBWMiwgYnV0IHRoZXkndmUgYmVlbiB0b3VjaGVkLCBzbyB0aGV5IG5lZWQgYSBsb29rLlxuXG5GaW5hbGx5LCBJJ2xsIHRha2UgYSBnbGFuY2UgYXQgYGFyY2gveDg2L2V2ZW50cy9jb3JlLmNgLiBJIG5vdGljZSBjaGFuZ2VzIGluIGBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlgLlxuXG5UaGF0J3MgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIEkndmUgc2VlbiBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mjk1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQwOjU4LjYzMTM2MDQzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNjc0NzAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0zMTExPXVuc2lnbmVkIGxvbmcgcGVyZl9hcmNoX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxMTktXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzozMTIwOnZvaWQgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgKmNhcClcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxMjEte1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ0LX1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjMxNDU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eSk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ2LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oPTc1OT1zdHJ1Y3QgeDg2X3BtdV9sYnIge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oLTc2Ni1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50Lmg6NzY3OmV4dGVybiB2b2lkIHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5ICpjYXApO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NjgtZXh0ZXJuIHU2NCBwZXJmX2dldF9od19ldmVudF9jb25maWcoaW50IGh3X2V2ZW50KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaD03NzE9ZXh0ZXJuIGludCB4ODZfcGVyZl9yZHBtY19pbmRleChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NzItI2Vsc2VcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50Lmg6NzczOnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTEzMz12b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xNDctXFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ4OlxcdFxcdHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShcXHUwMDI2a3ZtX2hvc3RfcG11KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTQ5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MDAuNTU4MTEzMTg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzgyNjM1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgUE1VIENhcGFiaWxpdHkgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5YCBpcyBleHBvcnRlZCBmb3IgS1ZNIOKAkyB0aGF0J3MgaW50ZXJlc3RpbmcuIEEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZywgZGVmaW5pdGVseS4gSG93ZXZlciwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpdCdzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgLiBIbW0sIHRoYXQgbGltaXRzIGl0cyBhdHRhY2sgc3VyZmFjZSBzb21ld2hhdCwgZG9lc24ndCBpdD8gU3RpbGwsIGZ1enppbmcgaW5pdGlhbGl6YXRpb24gY2FuIGJlIGZydWl0ZnVsLiBCdXQgbGV0J3Mgc2VlLCB3aGF0IGVsc2UgY2FuIHdlIGRpZyB1cD8gSSB3b25kZXIgaWYgYHN2bV9zZXRfY3B1X2NhcHNgIGlzIHdvcnRoIGEgbG9vay4gTWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhlcmUgdGhhdCB3ZSBjYW4gZXhwbG9pdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MTowMy42OTYzNzkwN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MTA5NjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdm1fc2V0X2NwdV9jYXBzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTYwNj1zdGF0aWMgX19pbml0IHZvaWQgc3ZtX2FkanVzdF9tbWlvX21hc2sodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTY0MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU2NDE6c3RhdGljIF9faW5pdCB2b2lkIHN2bV9zZXRfY3B1X2NhcHModm9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU2NDIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NzM3PXN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01ODg3LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTg4ODpcXHRzdm1fc2V0X2NwdV9jYXBzKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01ODg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MTowNS42ODc0ODA3MDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDg5MjI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDUFVJRCBIb29rIFBsYWNlbWVudCBmb3IgRnV6emluZyoqXG5cbkhtbSwgc28gYHN2bV9zZXRfY3B1X2NhcHNgIGlzIGJlaW5nIGNhbGxlZCBkdXJpbmcgdGhlIG1vZHVsZSdzIGluaXRpYWxpemF0aW9uIHBoYXNlLiBUaGF0J3MgZXNzZW50aWFsbHkgdGllZCB0byB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2VzcywgcmlnaHQ/IFdoaWNoIG1lYW5zIGl0J3Mgbm90IGdvaW5nIHRvIGJlIHRyaWdnZXJlZCBkeW5hbWljYWxseSwgYW5kIGNlcnRhaW5seSBub3QgZHVyaW5nIGEgZnV6emluZyBjYW1wYWlnbi4gVGhhdCdzIGEgZGVmaW5pdGUgbGltaXRhdGlvbi4gSWYgSSdtIHRyeWluZyB0byBmdXp6IENQVUlELXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLCBJIG5lZWQgc29tZXRoaW5nIHRoYXQncyByZWFjaGFibGUgdW5kZXIgbW9yZSB2YXJpZWQgZXhlY3V0aW9uIGNvbmRpdGlvbnMuXG5cbkxldCBtZSBwaXZvdC4gTGV0J3Mgc2hpZnQgb3VyIGZvY3VzIGFuZCBzZWUgaWYgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGAgcHJvdmlkZXMgYSBtb3JlIHZpYWJsZSBob29rLiBQZXJoYXBzIHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciBhIHZDUFUgaXMgaW5pdGlhbGl6ZWQgb3Igb24gYSBwZXItVk0gYmFzaXMsIG9wZW5pbmcgdXAgbW9yZSBpbnRlcmVzdGluZyBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDEwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MDguOTMyMzc0NzA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI0NjcwMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ4Mjc9c3RhdGljIGludCBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDg0MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQ4NDE6c3RhdGljIHZvaWQgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ4NDIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NDU3PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NTQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTU0NjpcXHQudmNwdV9hZnRlcl9zZXRfY3B1aWQgPSBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NTQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MToxMS4xNTcwNDkzMjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MzI4MTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBBTUQgS1ZNIHZDUFVzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBBTUQgS1ZNIHZDUFUgY29kZSwgYW5kIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgIHJlYWxseSBqdW1wcyBvdXQgYXQgbWUuIFRoZSBmYWN0IHRoYXQgaXQncyB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlIHZpYSBgS1ZNX1NFVF9DUFVJRDJgIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBVc2VyLWNvbnRyb2xsZWQgaW5wdXQgZGlyZWN0bHkgaW5mbHVlbmNlcyBpdHMgZXhlY3V0aW9uLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGluaXRpYWwgZWZmb3J0cy5cblxuTmF0dXJhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgTWljcm9wcm9jZXNzb3IgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKS4gU28sIEknbGwgZGVmaW5pdGVseSBiZSBpbmNsdWRpbmcgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCBpbiB0aGUgZnV6emluZyBzY29wZTsgdGhleSBhcmUgdGhlIG1haW4gZW50cnlwb2ludHMgZm9yIGludGVyYWN0aW9ucyB0aGVyZS4gSSBhbHNvIHNlZSB0aGF0IGBzdm1fdXBkYXRlX2xicnZgIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuIFRoZW4sIG9mIGNvdXJzZSwgSSBtdXN0IGxvb2sgYXQgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGAgdG8gcm91bmQgdGhhdCBvdXQuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gTmFtZWx5LCBgQ09ORklHX0tWTWAsIGBDT05GSUdfS1ZNX0FNRGAsIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gQnV0LCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IHN1YnRseSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb2RlIEknbSB0YXJnZXRpbmcuIEkgd2FudCB0byBiZSB0aG9yb3VnaCBhbmQgbWluaW1pemUgdGhlIHJpc2sgb2YgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTQ1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQxOjE1LjQzMDMzMjU2OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODIxNTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQxOjE3LjM2ODU1Mzk3OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk5MDE3ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIGZvciBBTUQgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEFNRCBwcm9jZXNzb3JzIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgdGhpcyBraW5kIG9mIGludmVzdGlnYXRpb24sIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCB4ODYsIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGlzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGZlYXR1cmVzIHNwZWNpZmljIHRvIEFNRCBwcm9jZXNzb3JzIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIGxvY2F0ZSB0aGUgYEtWTV9BTURgIHN5bWJvbCwgd2hpY2ggbGlrZWx5IGNvbnRyb2xzIHZhcmlvdXMgQU1ELXNwZWNpZmljIEtWTSBmdW5jdGlvbmFsaXRpZXMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjE2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MjIuODY3NTc0MDU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MjIuODY3NjcwODc2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNjYwNzc4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgS1ZNX0FNRGAgaXMsIGFzIGV4cGVjdGVkLCByZWxpYW50IG9uIGJvdGggdGhlIGNvcmUgYEtWTWAgbW9kdWxlIGFuZCBgQ1BVX1NVUF9BTURgLiBUaGF0IG1ha2VzIHNlbnNlOyBBTUQtc3BlY2lmaWMgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgZGVmaW5pdGVseSBuZWVkIHRoZSBiYXNlIEtWTSBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIENQVSBzdXBwb3J0LlxuXG5Ob3csIGBLVk1gIGl0c2VsZiBpcyB3aGVyZSB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcgYW5kLCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGVzZSBkZXBlbmRlbmNpZXMgaW5zaWRlIGFuZCBvdXQuIEl0J3MgYnVpbHQgdXBvbiBhIGNvbXByZWhlbnNpdmUgZm91bmRhdGlvbjogYEhJR0hfUkVTX1RJTUVSU2AsIGBYODZfTE9DQUxfQVBJQ2AsIGBQUkVFTVBUX05PVElGSUVSU2AsIGBNTVVfTk9USUZJRVJgLCBhbmQgYWxsIHRoZSBgSEFWRV9LVk1fKmAgZmVhdHVyZXMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcsIGV2ZW50IG1hbmFnZW1lbnQsIGFuZCByb3V0aW5nLiBUaGUgaW5jbHVzaW9uIG9mIGBLVk1fQVNZTkNfUEZgLCBpdHMgc3luYyBjb3VudGVycGFydCwgYW5kIHRoZSBnZW5lcmljIGRpcnR5IGxvZyBmZWF0dXJlIGluZGljYXRlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGFyZSBjcml0aWNhbCBjb21wb25lbnRzLiBBZGRpdGlvbmFsbHksIGBLVk1fVkZJT2Agc3VwcG9ydCBzaG93cyB0aGF0IGRldmljZSBwYXNzLXRocm91Z2ggaXMgZnVsbHkgZW5hYmxlZCwgYW5kIHRoZSBQTSBhbmQgdXNlci1yZXR1cm4gbm90aWZpY2F0aW9ucyBlbnN1cmUgcG93ZXIgbWFuYWdlbWVudCBhbmQgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgYXJlIGNvbnNpZGVyZWQuIEZpbmFsbHksIGBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR2AsIGBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUYCwgYW5kIGBLVk1fWEZFUl9UT19HVUVTVF9XT1JLYCBzdWdnZXN0IHRoYXQgZ2VuZXJhbCBoYXJkd2FyZSBlbmFibGVtZW50IGFuZCBDUFUgaW50ZXJhY3Rpb25zIGFyZSBhbHNvIGFjY291bnRlZCBmb3Igd2l0aGluIHRoZSBjb3JlIG1vZHVsZXMuXG5cbkdlbmVyYWxseSwgYSBiYXNlIHNldHVwIGNvbnRhaW5pbmcgYEtWTWAgYW5kIGBLVk1fQU1EYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbWFueSB0eXBpY2FsIHZpcnR1YWxpemF0aW9uIG5lZWRzLiBIb3dldmVyLCBJIG5lZWQgdG8gYWxzbyBjaGVjayB0aGUgYFBFUkZfRVZFTlRTYCBzZXR0aW5nIHRvIGdldCBhIGZ1bGwgYW5kIGNvbXBsZXRlIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjAyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MjguOTMzNzUxOTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjYzNDc0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBFUkZfRVZFTlRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9LY29uZmlnPTI9bWVudSBcXFwiUGVyZm9ybWFuY2UgbW9uaXRvcmluZ1xcXCJcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1VOQ09SRVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkludGVsIHVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xMS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyMDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIkludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yNy1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX1BPV0VSXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMzYtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiQU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0ODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX0JSU1xcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4tLVxcbmluaXQvS2NvbmZpZz0yMTIxPW1lbnUgXFxcIktlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzXFxcIlxcbmluaXQvS2NvbmZpZy0yMTIyLVxcbmluaXQvS2NvbmZpZzoyMTIzOmNvbmZpZyBQRVJGX0VWRU5UU1xcbmluaXQvS2NvbmZpZy0yMTI0LVxcdGJvb2wgXFxcIktlcm5lbCBwZXJmb3JtYW5jZSBldmVudHMgYW5kIGNvdW50ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MTozMC44NjAxMDUxNzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMzMzMjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgUGVyZm9ybWFuY2UgRXZlbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBwZXJmb3JtYW5jZSBldmVudHMgYXJlIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBpbml0L0tjb25maWdgIOKAkyBJIGtub3cgdGhhdCdzIG9mdGVuIHRoZSByb290IGxldmVsIGZvciB0aGVzZSBraW5kcyBvZiBmZWF0dXJlIGZsYWdzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgZGVmaW5pdGlvbiBvZiBgUEVSRl9FVkVOVFNgIHRoZXJlLlxuXG5OZXh0LCBzaW5jZSBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IEFNRC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgSSdsbCBkcmlsbCBkb3duLiBJJ2xsIG5lZWQgdG8gbG9vayBpbiBgYXJjaC94ODYvZXZlbnRzL0tjb25maWdgLiBJJ20gc3BlY2lmaWNhbGx5IGh1bnRpbmcgZm9yIGFueSBBTUQtcmVsYXRlZCBvciBBTUQtcHJlZml4ZWQgY29uZmlnIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCB3b3VsZCBiZSB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIGFueSBjb25kaXRpb25hbCBvciBzcGVjaWFsaXplZCBzZXR0aW5ncy4gSSBleHBlY3QgSSBtaWdodCBmaW5kIHNvbWV0aGluZyB0aGF0IHRpZXMgaW50byB0aGUgQ1BVIG1vZGVsIG9yIHNwZWNpZmljIGZlYXR1cmVzIG9mIEFNRCBwcm9jZXNzb3JzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQxOjM0LjI2MzQzOTkxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG1lbnUgXFxcIlBlcmZvcm1hbmNlIG1vbml0b3JpbmdcXFwiXFxuICAgMzpcXHRcXG4gICA0OlxcdGNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcXG4gICA1OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0lOVEVMIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEluY2x1ZGUgc3VwcG9ydCBmb3IgSW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50cy4gVGhlc2UgYXJlXFxuICAxMDpcXHRcXHQgIGF2YWlsYWJsZSBvbiBOZWhhbGVtRVggYW5kIG1vcmUgbW9kZXJuIHByb2Nlc3NvcnMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9SQVBMXFxuICAxMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwvQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiAoQ1BVX1NVUF9JTlRFTCB8fCBDUFVfU1VQX0FNRCkgXFx1MDAyNlxcdTAwMjYgUENJXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBJbnRlbCBhbmQgQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciBwb3dlclxcbiAgMTg6XFx0XFx0ICBtb25pdG9yaW5nIG9uIG1vZGVybiBwcm9jZXNzb3JzLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9JTlRFTCBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBJbmNsdWRlIHN1cHBvcnQgZm9yIEludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHMgZm9yIHBvd2VyXFxuICAyNjpcXHRcXHQgIG1vbml0b3Jpbmcgb24gbW9kZXJuIHByb2Nlc3NvcnMuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcXG4gIDI5OlxcdFxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJBTUQgUHJvY2Vzc29yIFBvd2VyIFJlcG9ydGluZyBNZWNoYW5pc21cXFwiXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIFByb3ZpZGUgcG93ZXIgcmVwb3J0aW5nIG1lY2hhbmlzbSBzdXBwb3J0IGZvciBBTUQgcHJvY2Vzc29ycy5cXG4gIDMzOlxcdFxcdCAgQ3VycmVudGx5LCBpdCBsZXZlcmFnZXMgWDg2X0ZFQVRVUkVfQUNDX1BPV0VSXFxuICAzNDpcXHRcXHQgIChDUFVJRCBGbjgwMDBfMDAwN19FRFhbMTJdKSBpbnRlcmZhY2UgdG8gY2FsY3VsYXRlIHRoZVxcbiAgMzU6XFx0XFx0ICBhdmVyYWdlIHBvd2VyIGNvbnN1bXB0aW9uIG9uIEZhbWlseSAxNWggcHJvY2Vzc29ycy5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcXG4gIDM4OlxcdFxcdHRyaXN0YXRlIFxcXCJBTUQgVW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJbmNsdWRlIHN1cHBvcnQgZm9yIEFNRCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciB1c2Ugd2l0aFxcbiAgNDM6XFx0XFx0ICBlLmcuLCBwZXJmIHN0YXQgLWUgYW1kX2wzLy4uLi8sYW1kX2RmLy4uLi8uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA0NjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnYW1kLXVuY29yZScuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdGNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFxcdTAwMjZcXHUwMDI2IENQVV9TVVBfQU1EXFxuICA1MDpcXHRcXHRib29sIFxcXCJBTUQgWmVuMyBCcmFuY2ggU2FtcGxpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MzQuMjYzNTE0NTUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mzc1MTQ2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBBTUQgTEJSIFYyIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNzZXNzaW5nIHRoZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzIGZvciB0aGlzIEtWTSBwYXRjaCBpbXBsZW1lbnRpbmcgQU1EIExCUiBWMiBzdXBwb3J0LiBGaXJzdCwgSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZDogYEtWTWAsIGBLVk1fQU1EYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBDUFVfU1VQX0FNRGAuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaW5jbHVkZSBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgLCBhcyB0aGV5J3JlIGNlbnRyYWwgdG8gYW55IE1TUiBoYW5kbGluZyBpbiB0aGUgU1ZNIGNvZGUuIFRoZXkncmUgZGVmaW5pdGVseSBob3QgcGF0aHMuIEhvd2V2ZXIsIHRoZSBndWlkYW5jZSBpcyB0byBwcmlvcml0aXplIEFQSSBlbnRyeXBvaW50cyB0aGF0IGFyZW4ndCBvdmVybHkgZ2VuZXJpYyBvciBzdGF0aWMgdG8gYXZvaWQgc2tld2luZyB0aGUgZnV6emluZyBkaXN0cmlidXRpb24uIFdoaWxlIGBzdm1fZ2V0X21zcmAgYW5kIGBzdm1fc2V0X21zcmAgYXJlIGNyaXRpY2FsIGZvciBoaXR0aW5nIHRoZSBuZXcgTVNSLXJlbGF0ZWQgY29kZSwgdGhleSBjb3ZlciAqYWxsKiBNU1JzLCBhbmQgdGhhdCBsZXZlbCBvZiBnZW5lcmFsaXR5IG1pZ2h0IG5vdCBiZSBpZGVhbCBmb3IgZm9jdXNlZCBmdXp6aW5nIG9uIHRoaXMgcGF0Y2gncyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuXG5BZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6XG5cbiogICBgc3ZtX3VwZGF0ZV9sYnJ2YDogVGhpcyBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5IGludm9sdmVkIGluIHVwZGF0aW5nIExCUiB2aXJ0dWFsaXphdGlvbiBhbmQgaXMgbGlua2VkIHRvIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYC5cbiogICBgc3ZtX2VuYWJsZV9sYnJ2YDogQWxzbyBub24tc3RhdGljLiBUaGlzIHNlZW1zIGltcG9ydGFudCwgYXMgaXQgZW5hYmxlcyBMQlIgVjIgZnVuY3Rpb25hbGl0eSwgYW5kIGNhbGxzIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCBhbmQgYHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzYC5cbiogICBgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkYDogVGhpcyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGluIGBzdm1feDg2X29wc2AsIHdoaWNoIGlzIG5vdCBpbmxpbmVkLCBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQ1BVSUQgdXBkYXRlcywgYW5kIGludGVyYWN0cyB3aXRoIG5ldyBmZWF0dXJlIGJpdHMuXG5cblNpbmNlIHRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBuZXcgTVNScyAoYE1TUl9BTURfREJHX0VYVE5fQ0ZHYCwgYE1TUl9BTUQ2NF9MQlJfU0VMRUNUYCwgYE1TUl9BTURfU0FNUF9CUl9GUk9NYCkgYW5kIG5ldyBDUFVJRCBmZWF0dXJlcyAoYEFNRF9MQlJfVjJgLCBgQU1EX0xCUl9QTUNfRlJFRVpFYCksIHRoZXNlIGZ1bmN0aW9ucyByZXByZXNlbnQgZ29vZCBlbnRyeSBwb2ludHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBjb2RlIHBhdGhzLlxuXG5JJ3ZlIGFsc28gZGVjaWRlZCB0byBpbmNsdWRlIGBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlgLiBJdCdzIGEgbm9uLXN0YXRpYywgZXhwb3J0ZWQgZnVuY3Rpb24gYW5kIGlzIGNhbGxlZCBkdXJpbmcgS1ZNIFBNVSBpbml0aWFsaXphdGlvbi4gSXQgaXMgbm90IG9uIHRoZSBob3QgcGF0aC5cblxuSSd2ZSBjaGVja2VkIHNvbWUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGNwdWlkX3F1ZXJ5X2xicnYyX3N0YWNrX3NpemVgLCBgc3ZtX2xicnYyX3N1cHBvcnRlZGAsIGFuZCBgc3ZtX2xicnYyX2FjdGl2ZWAuIFRoZXNlIGFyZSBzdGF0aWMgYW5kIHNtYWxsLCBzbyB0aGV5J3JlIHByb2JhYmx5IGlubGluZWQgYW5kIG5vdCBnb29kIGNhbmRpZGF0ZXMuXG5cblNvLCB0aGUgZnV6emluZyBzdHJhdGVneSBpcyBkZWZpbmVkLiBJIHdpbGwgYmUgc3VyZSB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IHRoZSBuZXcgTEJSIFYyIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzA5LCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MTo0OC42Mzg2NjQwNjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM4Nzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQ1BVX1NVUF9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdm1fdXBkYXRlX2xicnZcIixcbiAgICBcInN2bV9lbmFibGVfbGJydlwiLFxuICAgIFwic3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkXCIsXG4gICAgXCJwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFNRCBMQlIgVjIgKExhc3QgQnJhbmNoIFJlY29yZCBWZXJzaW9uIDIpIGluIEtWTS4gSXQgbW9kaWZpZXMgU1ZNIHRvIGhhbmRsZSBuZXcgTVNScyAoTVNSX0FNRF9EQkdfRVhUTl9DRkcsIE1TUl9BTUQ2NF9MQlJfU0VMRUNULCBNU1JfQU1EX1NBTVBfQlJfRlJPTSkgYW5kIENQVUlEIGZlYXR1cmVzIChBTURfTEJSX1YyLCBBTURfTEJSX1BNQ19GUkVFWkUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIEFNRCB2aXJ0dWFsaXphdGlvbiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV91cGRhdGVfbGJydlwiLFxuICAgIFwic3ZtX2VuYWJsZV9sYnJ2XCIsXG4gICAgXCJzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRcIixcbiAgICBcInBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQU1EIExCUiBWMiAoTGFzdCBCcmFuY2ggUmVjb3JkIFZlcnNpb24gMikgaW4gS1ZNLiBJdCBtb2RpZmllcyBTVk0gdG8gaGFuZGxlIG5ldyBNU1JzIChNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9BTURfU0FNUF9CUl9GUk9NKSBhbmQgQ1BVSUQgZmVhdHVyZXMgKEFNRF9MQlJfVjIsIEFNRF9MQlJfUE1DX0ZSRUVaRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gQU1EIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhsm6h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 07:24:20 +0000 UTC FinishedAt: 2026-07-26 07:41:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "50406d35f5635e1cc523e61409d57e851b5f5df8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "PERF_EVENTS", "CPU_SUP_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "50406d35f5635e1cc523e61409d57e851b5f5df8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "PERF_EVENTS", "CPU_SUP_AMD" ], "series_id": "ba4e828e-e95c-4a58-9a87-12c96c2b49cf" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "svm_update_lbrv", "svm_enable_lbrv", "svm_vcpu_after_set_cpuid", "perf_get_x86_pmu_capability" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0NQVV9TVVBfQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZtX3VwZGF0ZV9sYnJ2JiMzNDssCiAgICAmIzM0O3N2bV9lbmFibGVfbGJydiYjMzQ7LAogICAgJiMzNDtzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQmIzM0OywKICAgICYjMzQ7cGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQU1EIExCUiBWMiAoTGFzdCBCcmFuY2ggUmVjb3JkIFZlcnNpb24gMikgaW4gS1ZNLiBJdCBtb2RpZmllcyBTVk0gdG8gaGFuZGxlIG5ldyBNU1JzIChNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9BTURfU0FNUF9CUl9GUk9NKSBhbmQgQ1BVSUQgZmVhdHVyZXMgKEFNRF9MQlJfVjIsIEFNRF9MQlJfUE1DX0ZSRUVaRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gQU1EIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDAzMGIzZGE5ODJiMzc4OGU1MDg2OGIzMWFiM2IyZWQyMDIyYzY5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA3OjQwOjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9jb3JlLmMgYi9hcmNoL3g4Ni9ldmVudHMvY29yZS5jXG5pbmRleCA0YjllMTA1MzA5YzZhOS4uNGFjYmNhMWE4OGExODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9ldmVudHMvY29yZS5jXG5AQCAtMzEzOCw2ICYjNDM7MzEzOCw3IEBAIHZvaWQgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgKmNhcClcbiBcdGNhcC1cdTAwM2ViaXRfd2lkdGhfZml4ZWRcdD0gY2FwLVx1MDAzZW51bV9jb3VudGVyc19maXhlZCA/IHg4Nl9wbXUuY250dmFsX2JpdHMgOiAwO1xuIFx0Y2FwLVx1MDAzZWV2ZW50c19tYXNrXHQ9ICh1bnNpZ25lZCBpbnQpeDg2X3BtdS5ldmVudHNfbWFza2w7XG4gXHRjYXAtXHUwMDNlZXZlbnRzX21hc2tfbGVuXHQ9IHg4Nl9wbXUuZXZlbnRzX21hc2tfbGVuO1xuJiM0MztcdGNhcC1cdTAwM2VudW1fYnJhbmNoZXNfbGJyXHQ9IHg4Nl9wbXUubGJyX25yO1xuIFx0Y2FwLVx1MDAzZXBlYnNfZXB0XHRcdD0geDg2X3BtdS5wZWJzX2VwdDtcbiBcdGNhcC1cdTAwM2VtZWRpYXRlZFx0XHQ9ICEhKHBtdS5jYXBhYmlsaXRpZXMgXHUwMDI2IFBFUkZfUE1VX0NBUF9NRURJQVRFRF9WUE1VKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXG5pbmRleCAxZWIxMzY3M2U4ODlmOS4uZjE4Y2YwOTg2ZTEyZDMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxuQEAgLTMwNiw2ICYjNDM7MzA2LDcgQEAgc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSB7XG4gXHRpbnRcdFx0Yml0X3dpZHRoX2ZpeGVkO1xuIFx0dW5zaWduZWQgaW50XHRldmVudHNfbWFzaztcbiBcdGludFx0XHRldmVudHNfbWFza19sZW47XG4mIzQzO1x0aW50XHRcdG51bV9icmFuY2hlc19sYnI7XG4gXHR1bnNpZ25lZCBpbnRcdHBlYnNfZXB0XHQ6MTtcbiBcdHVuc2lnbmVkIGludFx0bWVkaWF0ZWRcdDoxO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMzEuLmYzYmM5N2JjNmFjYWIzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5AQCAtMjUzLDYgJiM0MzsyNTMsOCBAQCBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7XG4gI2RlZmluZSBTVk1fVFNDX1JBVElPX01BWFx0MHgwMDAwMDBmZmZmZmZmZmZmVUxMXG4gI2RlZmluZSBTVk1fVFNDX1JBVElPX0RFRkFVTFRcdDB4MDEwMDAwMDAwMFVMTFxuIFxuJiM0MzsjZGVmaW5lIFNWTV9MQlJfVjJfU1RBQ0tfU0laRSAxNlxuJiM0MztcbiBcbiAvKiBBVklDICovXG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfR1VFU1RfUEhZU0lDQUxfSURfTUFTS1x0KDB4RkZVTEwpXG5AQCAtMzY4LDggJiM0MzszNzAsMTUgQEAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhIHtcbiBcdHU2NCBicl90bztcbiBcdHU2NCBsYXN0X2V4Y3BfZnJvbTtcbiBcdHU2NCBsYXN0X2V4Y3BfdG87XG4tXHR1OCByZXNlcnZlZF8weDI5OFs3Ml07XG4mIzQzO1x0dTY0IGRiZ19leHRuX2NmZztcbiYjNDM7XHR1OCByZXNlcnZlZF8weDJhMFs2NF07XG4gXHR1NjQgc3BlY19jdHJsO1x0XHQvKiBHdWVzdCB2ZXJzaW9uIG9mIFNQRUNfQ1RSTCBhdCAweDJFMCAqL1xuJiM0MztcdHU4IHJlc2VydmVkXzB4MmU4WzkwNF07XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHU2NCBsYnJfc3RhY2tfZnJvbTtcbiYjNDM7XHRcdHU2NCBsYnJfc3RhY2tfdG87XG4mIzQzO1x0fSBfX3BhY2tlZCBsYnJbMTZdO1xuJiM0MztcdHU2NCBsYnJfc2VsZWN0O1xuIH0gX19wYWNrZWQ7XG4gXG4gLyogU2F2ZSBhcmVhIGRlZmluaXRpb24gZm9yIFNFVi1FUyBhbmQgU0VWLVNOUCBndWVzdHMgKi9cbkBAIC01NTIsNyAmIzQzOzU2MSw3IEBAIHN0cnVjdCB2bWNiIHtcbiBcdH07XG4gfSBfX3BhY2tlZDtcbiBcbi0jZGVmaW5lIEVYUEVDVEVEX1ZNQ0JfU0FWRV9BUkVBX1NJWkVcdFx0NzQ0XG4mIzQzOyNkZWZpbmUgRVhQRUNURURfVk1DQl9TQVZFX0FSRUFfU0laRVx0XHQxOTEyXG4gI2RlZmluZSBFWFBFQ1RFRF9HSENCX1NBVkVfQVJFQV9TSVpFXHRcdDEwMzJcbiAjZGVmaW5lIEVYUEVDVEVEX1NFVl9FU19TQVZFX0FSRUFfU0laRVx0XHQxNjQ4XG4gI2RlZmluZSBFWFBFQ1RFRF9WTUNCX0NPTlRST0xfQVJFQV9TSVpFXHRcdDEwMjRcbkBAIC01NzcsNyAmIzQzOzU4Niw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuIFx0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHhkOCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDE4MCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI0OCk7XG4tXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI5OCk7XG4mIzQzO1x0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHgyYTApO1xuJiM0MztcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MmU4KTtcbiBcbiBcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQoc2V2X2VzX3NhdmVfYXJlYSwgMHhjOCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHNldl9lc19zYXZlX2FyZWEsIDB4Y2MpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IDI2OThmYTQyY2Q5NzExLi41MWI2OTFmOTE0NDJiYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuQEAgLTEyNjYsNyAmIzQzOzEyNjYsOSBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXG4gXHQpO1xuIFxuIFx0a3ZtX2NwdV9jYXBfaW5pdChDUFVJRF84MDAwXzAwMjJfRUFYLFxuLVx0XHRGKFBFUkZNT05fVjIpLFxuJiM0MztcdFx0U0NBVFRFUkVEX0YoUEVSRk1PTl9WMiksXG4mIzQzO1x0XHRTQ0FUVEVSRURfRihBTURfTEJSX1YyKSxcbiYjNDM7XHRcdFNDQVRURVJFRF9GKEFNRF9MQlJfUE1DX0ZSRUVaRSksXG4gXHQpO1xuIFxuIFx0aWYgKCFzdGF0aWNfY3B1X2hhc19idWcoWDg2X0JVR19OVUxMX1NFRykpXG5AQCAtMTg4Myw2ICYjNDM7MTg4NSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBfX2RvX2NwdWlkX2Z1bmMoc3RydWN0IGt2bV9jcHVpZF9hcnJheSAqYXJyYXksIHUzMiBmdW5jdGlvbilcbiBcdFx0Y3B1aWRfZW50cnlfb3ZlcnJpZGUoZW50cnksIENQVUlEXzgwMDBfMDAyMl9FQVgpO1xuIFxuIFx0XHRlYnguc3BsaXQubnVtX2NvcmVfcG1jID0ga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2dwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikpXG4mIzQzO1x0XHRcdGVieC5zcGxpdC5sYnJfdjJfc3RhY2tfc3ogPVxuJiM0MztcdFx0XHRcdG1pbihrdm1fcG11X2NhcC5udW1fYnJhbmNoZXNfbGJyLCBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpO1xuJiM0MztcbiBcdFx0ZW50cnktXHUwMDNlZWJ4ID0gZWJ4LmZ1bGw7XG4gXHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG5pbmRleCA2NTdmNWY3NDNlZDk3NS4uOWE1OGY5MWViMTczZDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG5AQCAtNzAsNyAmIzQzOzcwLDkgQEBcbiAjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMDdfRURYLCA4KVxuIFxuIC8qIENQVUlEIGxldmVsIDB4ODAwMDAwMjIgKEVBWCkgKi9cbi0jZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9QRVJGTU9OX1YyXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMClcbiYjNDM7I2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMlx0XHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMClcbiYjNDM7I2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMlx0XHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMSlcbiYjNDM7I2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMilcbiBcbiAvKiBDUFVJRCBsZXZlbCAweDgwMDAwMDIxIChFQ1gpICovXG4gI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfVFNBX1NRX05PXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIxX0VDWCwgMSlcbkBAIC0xNDYsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIF9fZmVhdHVyZV90cmFuc2xhdGUoaW50IHg4Nl9mZWF0dXJlKVxuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShTR1hfRURFQ0NTU0EpO1xuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShDT05TVEFOVF9UU0MpO1xuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShQRVJGTU9OX1YyKTtcbiYjNDM7XHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEFNRF9MQlJfVjIpO1xuJiM0MztcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQU1EX0xCUl9QTUNfRlJFRVpFKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoUlJTQkFfQ1RSTCk7XG4gXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEJISV9DVFJMKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoVFNBX1NRX05PKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggZWY2OWE1MWFiMjdmOTguLjNlYzkxYzFjNThkY2M1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTc0NCw2ICYjNDM7NzQ0LDQ3IEBAIHN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN2bS1cdTAwM2VsYnJfbXNyc19pbnRlcmNlcHRlZCA9IGludGVyY2VwdDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHN2bV9sYnJ2Ml9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBzdm1fbGJydjJfYWN0aXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuJiM0MztcdHJldHVybiBzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdfZXh0bl9jZmcgXHUwMDI2IERCR19FWFROX0NGR19MQlJWMkVOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiYjNDM7XHRib29sIGludGVyY2VwdCA9ICFzdm1fbGJydjJfYWN0aXZlKHZjcHUpO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJjZXB0ID09IHN2bS1cdTAwM2VsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzMjsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRzdm1fc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9BTURfU0FNUF9CUl9GUk9NICYjNDM7IGksIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuJiM0MztcbiYjNDM7XHRzdm1fc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9BTUQ2NF9MQlJfU0VMRUNULCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEQkdfRVhUTl9DRkcgc3RheXMgcGVybWFuZW50bHkgaW50ZXJjZXB0ZWQgZm9yIG5vbi1TRVYtRVMgZ3Vlc3RzIHNvXG4mIzQzO1x0ICogS1ZNIGNhbiBvYnNlcnZlIExCUlYyRU4gYW5kIGxhemlseSB0b2dnbGUgVl9MQlIuICBTRVYtRVMmIzQzOyBndWVzdHMgbXVzdFxuJiM0MztcdCAqIGRlbGVnYXRlIExCUiB2aXJ0dWFsaXphdGlvbiB0byB0aGUgcHJvY2Vzc29yIChwZXIgdGhlIEFQTSksIHdoZXJlXG4mIzQzO1x0ICogaW50ZXJjZXB0aW5nIExCUiBNU1JzIGNhbiBiZSBmYXRhbCwgc28gdG9nZ2xlIGl0IHdpdGggdGhlIHJlc3QuICBTZWVcbiYjNDM7XHQgKiBjb21taXQgYjdlNGJlMGEyMjRmIChcJiMzNDtLVk06IFNFVi1FUzogRGVsZWdhdGUgTEJSIHZpcnR1YWxpemF0aW9uIHRvIHRoZVxuJiM0MztcdCAqIHByb2Nlc3NvclwmIzM0OykuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX3Nldl9lc19ndWVzdCh2Y3B1KSlcbiYjNDM7XHRcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRF9EQkdfRVhUTl9DRkcsIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuJiM0MztcbiYjNDM7XHRzdm0tXHUwMDNlbGJydjJfbXNyc19pbnRlcmNlcHRlZCA9IGludGVyY2VwdDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHN2bV92Y3B1X2ZyZWVfbXNycG0odm9pZCAqbXNycG0pXG4ge1xuIFx0X19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShtc3JwbSksIGdldF9vcmRlcihNU1JQTV9TSVpFKSk7XG5AQCAtNzk5LDggJiM0Mzs4NDAsMTAgQEAgc3RhdGljIHZvaWQgc3ZtX3JlY2FsY19tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm1fZGlzYWJsZV9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfVFlQRV9SVyk7XG4gI2VuZGlmXG4gXG4tXHRpZiAobGJydilcbiYjNDM7XHRpZiAobGJydikge1xuIFx0XHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbiYjNDM7XHRcdHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJQQikpXG4gXHRcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0lBMzJfUFJFRF9DTUQsIE1TUl9UWVBFX1csXG5AQCAtODY4LDYgJiM0Mzs5MTEsNyBAQCB2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XG4gXHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbiYjNDM7XHRzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX3N2bV9kaXNhYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTg4MCw5ICYjNDM7OTI0LDExIEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdGJvb2wgY3VycmVudF9lbmFibGVfbGJydiA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSO1xuJiM0MztcbiBcdGJvb2wgZW5hYmxlX2xicnYgPSAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IERFQlVHQ1RMTVNSX0xCUikgfHxcbiBcdFx0XHQgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoc3ZtLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7XG4mIzQzO1x0XHRcdCAgICAoc3ZtLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSkgfHxcbiYjNDM7XHRcdFx0ICAgIHN2bV9sYnJ2Ml9hY3RpdmUodmNwdSk7XG4gXG4gXHRpZiAoZW5hYmxlX2xicnYgXHUwMDI2XHUwMDI2ICFjdXJyZW50X2VuYWJsZV9sYnJ2KVxuIFx0XHRfX3N2bV9lbmFibGVfbGJydih2Y3B1KTtcbkBAIC04OTYsNiAmIzQzOzk0Miw3IEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGRvLCBzbyBhbHdheXMgcmVjYWxjdWxhdGUgdGhlIGludGVyY2VwdHMgaGVyZS5cbiBcdCAqL1xuIFx0c3ZtX3JlY2FsY19sYnJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4mIzQzO1x0c3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbiB9XG4gXG4gdm9pZCBkaXNhYmxlX25taV9zaW5nbGVzdGVwKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuQEAgLTEzNDEsNiAmIzQzOzEzODgsNyBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRzdm0tXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSB0cnVlO1xuIFx0c3ZtLVx1MDAzZWxicl9tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbiYjNDM7XHRzdm0tXHUwMDNlbGJydjJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG4gXG4gXHRzdm0tXHUwMDNldm1jYjAxLnB0ciA9IHBhZ2VfYWRkcmVzcyh2bWNiMDFfcGFnZSk7XG4gXHRzdm0tXHUwMDNldm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5AQCAtMjc4Nyw2ICYjNDM7MjgzNSwxOSBAQCBzdGF0aWMgdTY0ICpzdm1fdm1jYl9sYnIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiBtc3IpXG4gXHRyZXR1cm4gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5icl9mcm9tO1xuIH1cbiBcbiYjNDM7c3RhdGljIHU2NCAqc3ZtX3ZtY2JfbGJydjIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiBtc3IpXG4mIzQzO3tcbiYjNDM7XHR1MzIgb2Zmc2V0ID0gbXNyIC0gTVNSX0FNRF9TQU1QX0JSX0ZST007XG4mIzQzO1x0dTMyIGlkeCA9IG9mZnNldCBcdTAwM2VcdTAwM2UgMTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShpZHggXHUwMDNlPSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUubGJyWzBdLmxicl9zdGFja19mcm9tO1xuJiM0MztcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAyNiAxKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUubGJyW2lkeF0ubGJyX3N0YWNrX3RvO1xuJiM0MztcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicltpZHhdLmxicl9zdGFja19mcm9tO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIHNldl9lc19wcmV2ZW50X21zcl9hY2Nlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiB7XG5AQCAtMjg4Miw2ICYjNDM7Mjk0MywyMSBAQCBzdGF0aWMgaW50IHN2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiBcdGNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBsYnJ2ID8gKnN2bV92bWNiX2xicihzdm0sIG1zcl9pbmZvLVx1MDAzZWluZGV4KSA6IDA7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRF9EQkdfRVhUTl9DRkc6XG4mIzQzO1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4mIzQzO1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbiYjNDM7XHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRDY0X0xCUl9TRUxFQ1Q6XG4mIzQzO1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4mIzQzO1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbiYjNDM7XHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicl9zZWxlY3Q7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1TUl9BTURfU0FNUF9CUl9GUk9NIC4uLiBNU1JfQU1EX1NBTVBfQlJfRlJPTSAmIzQzOyAzMTpcbiYjNDM7XHRcdGlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSlcbiYjNDM7XHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuJiM0MztcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9ICpzdm1fdm1jYl9sYnJ2Mihzdm0sIG1zcl9pbmZvLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBNU1JfVk1fSFNBVkVfUEE6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zcjtcbiBcdFx0YnJlYWs7XG5AQCAtMzE2MCw2ICYjNDM7MzIzNiwxMCBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpXG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5ERUJVR0NUTE1TUl9CVEY7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmICgoZGF0YSBcdTAwMjYgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSkpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcbiBcdFx0aWYgKGRhdGEgXHUwMDI2IERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG5AQCAtMzE4MSw2ICYjNDM7MzI2MSw0MCBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpXG4gXHRcdCpzdm1fdm1jYl9sYnIoc3ZtLCBlY3gpID0gZGF0YTtcbiBcdFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cdTAwM2V2bWNiLCBWTUNCX0xCUik7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRF9EQkdfRVhUTl9DRkc6XG4mIzQzO1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4mIzQzO1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZGF0YSBcdTAwMjYgREJHX0VYVE5fQ0ZHX1JFU0VSVkVEX0JJVFMpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9PSBkYXRhKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9IGRhdGE7XG4mIzQzO1x0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbiYjNDM7XHRcdHN2bV91cGRhdGVfbGJydih2Y3B1KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRDY0X0xCUl9TRUxFQ1Q6XG4mIzQzO1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4mIzQzO1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZGF0YSBcdTAwMjYgTEJSX1NFTEVDVF9SRVNFUlZFRF9CSVRTKVxuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5sYnJfc2VsZWN0ID09IGRhdGEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUubGJyX3NlbGVjdCA9IGRhdGE7XG4mIzQzO1x0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX0FNRF9TQU1QX0JSX0ZST00gLi4uIE1TUl9BTURfU0FNUF9CUl9GUk9NICYjNDM7IDMxOlxuJiM0MztcdFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxuJiM0MztcdFx0XHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XG4mIzQzO1xuJiM0MztcdFx0KnN2bV92bWNiX2xicnYyKHN2bSwgZWN4KSA9IGRhdGE7XG4mIzQzO1x0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBNU1JfVk1fSFNBVkVfUEE6XG4gXHRcdC8qXG4gXHRcdCAqIE9sZCBrZXJuZWxzIGRpZCBub3QgdmFsaWRhdGUgdGhlIHZhbHVlIHdyaXR0ZW4gdG9cbkBAIC00NzEwLDYgJiM0Mzs0ODI0LDIwIEBAIHN0YXRpYyBib29sIHN2bV9oYXNfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGNwdWlkX3F1ZXJ5X2xicnYyX3N0YWNrX3NpemUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmVudHJ5O1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApO1xuJiM0MztcdGlmICghZW50cnkgfHwgZW50cnktXHUwMDNlZWF4IFx1MDAzYyAweDgwMDAwMDIyKVxuJiM0MztcdFx0Z290byBub3RfZm91bmQ7XG4mIzQzO1x0ZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDIyKTtcbiYjNDM7XHRpZiAoZW50cnkpXG4mIzQzO1x0XHRyZXR1cm4gKGVudHJ5LVx1MDAzZWVieCBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDB4M2Y7XG4mIzQzO25vdF9mb3VuZDpcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuQEAgLTQ3MzYsNiAmIzQzOzQ4NjQsMTAgQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChndWVzdF9jcHVpZF9pc19pbnRlbF9jb21wYXRpYmxlKHZjcHUpKVxuIFx0XHRndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX1ZfVk1TQVZFX1ZNTE9BRCk7XG4gXG4mIzQzO1x0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHZjcHUpICE9IFNWTV9MQlJfVjJfU1RBQ0tfU0laRSlcbiYjNDM7XHRcdGd1ZXN0X2NwdV9jYXBfY2xlYXIodmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7XG4mIzQzO1xuIFx0aWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSlcbiBcdFx0c2V2X3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN2bSk7XG4gfVxuQEAgLTU1ODIsNiAmIzQzOzU3MTQsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHN2bV9zZXRfY3B1X2NhcHModm9pZClcbiBcdFx0aWYgKGt2bV9wbXVfY2FwLnZlcnNpb24gIT0gMiB8fFxuIFx0XHQgICAgIWt2bV9jcHVfY2FwX2hhcyhYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUpKVxuIFx0XHRcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbGJydiB8fCAhZW5hYmxlX21lZGlhdGVkX3BtdSB8fFxuJiM0MztcdFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXG4mIzQzO1x0XHRcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xuIFx0fVxuIFxuIFx0LyogQ1BVSUQgMHg4MDAwMDAxRiAoU01FL1NFViBmZWF0dXJlcykgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggNzE2YmUyMWZiYTMzNTQuLjEwNWE3MWQ2OWQ2OGE4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTM2Myw2ICYjNDM7MzYzLDcgQEAgc3RydWN0IHZjcHVfc3ZtIHtcbiBcdGJvb2wgYXZpY19pcnFfd2luZG93O1xuIFx0Ym9vbCB4MmF2aWNfbXNyc19pbnRlcmNlcHRlZDtcbiBcdGJvb2wgbGJyX21zcnNfaW50ZXJjZXB0ZWQ7XG4mIzQzO1x0Ym9vbCBsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkO1xuIFxuIFx0LyogR3Vlc3QgR0lGIHZhbHVlLCB1c2VkIHdoZW4gdkdJRiBpcyBub3QgZW5hYmxlZCAqL1xuIFx0Ym9vbCBndWVzdF9naWY7XG5AQCAtNzgzLDcgJiM0Mzs3ODQsMTEgQEAgQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyhib29sLCB0ZXN0LCB0ZXN0KVxuIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlModm9pZCwgY2xlYXIsIF9fY2xlYXIpXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBzZXQsIF9fc2V0KVxuIFxuLSNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUyAofkRFQlVHQ1RMTVNSX0xCUilcbiYjNDM7I2RlZmluZSBERUJVR0NUTF9MQlJfUE1DX0ZSRUVaRV9CSVRTXHQoREVCVUdDVExNU1JfRlJFRVpFX0xCUlNfT05fUE1JIHxcdFxcXG4mIzQzO1x0XHRcdFx0XHQgREVCVUdDVExNU1JfRlJFRVpFX1BFUkZNT05fT05fUE1JKVxuJiM0MzsjZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFNcdCh+KERFQlVHQ1RMTVNSX0xCUiB8IERFQlVHQ1RMX0xCUl9QTUNfRlJFRVpFX0JJVFMpKVxuJiM0MzsjZGVmaW5lIERCR19FWFROX0NGR19SRVNFUlZFRF9CSVRTICh+REJHX0VYVE5fQ0ZHX0xCUlYyRU4pXG4mIzQzOyNkZWZpbmUgTEJSX1NFTEVDVF9SRVNFUlZFRF9CSVRTICh+R0VOTUFTS19VTEwoOCwgMCkpXG4gXG4gLyogc3ZtLmMgKi9cbiBleHRlcm4gYm9vbCBkdW1wX2ludmFsaWRfdm1jYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1fdXBkYXRlX2xicnYmIzM0OywKICAgICYjMzQ7c3ZtX2VuYWJsZV9sYnJ2JiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2FmdGVyX3NldF9jcHVpZCYjMzQ7LAogICAgJiMzNDtwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBTUQgTEJSIFYyIChMYXN0IEJyYW5jaCBSZWNvcmQgVmVyc2lvbiAyKSBpbiBLVk0uIEl0IG1vZGlmaWVzIFNWTSB0byBoYW5kbGUgbmV3IE1TUnMgKE1TUl9BTURfREJHX0VYVE5fQ0ZHLCBNU1JfQU1ENjRfTEJSX1NFTEVDVCwgTVNSX0FNRF9TQU1QX0JSX0ZST00pIGFuZCBDUFVJRCBmZWF0dXJlcyAoQU1EX0xCUl9WMiwgQU1EX0xCUl9QTUNfRlJFRVpFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSBBTUQgdmlydHVhbGl6YXRpb24gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MDMwYjNkYTk4MmIzNzg4ZTUwODY4YjMxYWIzYjJlZDIwMjJjNjljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMjYgMDc6NDA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvY29yZS5jIGIvYXJjaC94ODYvZXZlbnRzL2NvcmUuYwppbmRleCA0YjllMTA1MzA5YzZhOS4uNGFjYmNhMWE4OGExODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2V2ZW50cy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvZXZlbnRzL2NvcmUuYwpAQCAtMzEzOCw2ICYjNDM7MzEzOCw3IEBAIHZvaWQgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgKmNhcCkKIAljYXAtJmd0O2JpdF93aWR0aF9maXhlZAk9IGNhcC0mZ3Q7bnVtX2NvdW50ZXJzX2ZpeGVkID8geDg2X3BtdS5jbnR2YWxfYml0cyA6IDA7CiAJY2FwLSZndDtldmVudHNfbWFzawk9ICh1bnNpZ25lZCBpbnQpeDg2X3BtdS5ldmVudHNfbWFza2w7CiAJY2FwLSZndDtldmVudHNfbWFza19sZW4JPSB4ODZfcG11LmV2ZW50c19tYXNrX2xlbjsKJiM0MzsJY2FwLSZndDtudW1fYnJhbmNoZXNfbGJyCT0geDg2X3BtdS5sYnJfbnI7CiAJY2FwLSZndDtwZWJzX2VwdAkJPSB4ODZfcG11LnBlYnNfZXB0OwogCWNhcC0mZ3Q7bWVkaWF0ZWQJCT0gISEocG11LmNhcGFiaWxpdGllcyAmYW1wOyBQRVJGX1BNVV9DQVBfTUVESUFURURfVlBNVSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggMWViMTM2NzNlODg5ZjkuLmYxOGNmMDk4NmUxMmQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0zMDYsNiAmIzQzOzMwNiw3IEBAIHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgewogCWludAkJYml0X3dpZHRoX2ZpeGVkOwogCXVuc2lnbmVkIGludAlldmVudHNfbWFzazsKIAlpbnQJCWV2ZW50c19tYXNrX2xlbjsKJiM0MzsJaW50CQludW1fYnJhbmNoZXNfbGJyOwogCXVuc2lnbmVkIGludAlwZWJzX2VwdAk6MTsKIAl1bnNpZ25lZCBpbnQJbWVkaWF0ZWQJOjE7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCBhYTYzNDMxYmE5MmMzMS4uZjNiYzk3YmM2YWNhYjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCkBAIC0yNTMsNiAmIzQzOzI1Myw4IEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHsKICNkZWZpbmUgU1ZNX1RTQ19SQVRJT19NQVgJMHgwMDAwMDBmZmZmZmZmZmZmVUxMCiAjZGVmaW5lIFNWTV9UU0NfUkFUSU9fREVGQVVMVAkweDAxMDAwMDAwMDBVTEwKIAomIzQzOyNkZWZpbmUgU1ZNX0xCUl9WMl9TVEFDS19TSVpFIDE2CiYjNDM7CiAKIC8qIEFWSUMgKi8KICNkZWZpbmUgQVZJQ19MT0dJQ0FMX0lEX0VOVFJZX0dVRVNUX1BIWVNJQ0FMX0lEX01BU0sJKDB4RkZVTEwpCkBAIC0zNjgsOCAmIzQzOzM3MCwxNSBAQCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgewogCXU2NCBicl90bzsKIAl1NjQgbGFzdF9leGNwX2Zyb207CiAJdTY0IGxhc3RfZXhjcF90bzsKLQl1OCByZXNlcnZlZF8weDI5OFs3Ml07CiYjNDM7CXU2NCBkYmdfZXh0bl9jZmc7CiYjNDM7CXU4IHJlc2VydmVkXzB4MmEwWzY0XTsKIAl1NjQgc3BlY19jdHJsOwkJLyogR3Vlc3QgdmVyc2lvbiBvZiBTUEVDX0NUUkwgYXQgMHgyRTAgKi8KJiM0MzsJdTggcmVzZXJ2ZWRfMHgyZThbOTA0XTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXU2NCBsYnJfc3RhY2tfZnJvbTsKJiM0MzsJCXU2NCBsYnJfc3RhY2tfdG87CiYjNDM7CX0gX19wYWNrZWQgbGJyWzE2XTsKJiM0MzsJdTY0IGxicl9zZWxlY3Q7CiB9IF9fcGFja2VkOwogCiAvKiBTYXZlIGFyZWEgZGVmaW5pdGlvbiBmb3IgU0VWLUVTIGFuZCBTRVYtU05QIGd1ZXN0cyAqLwpAQCAtNTUyLDcgJiM0Mzs1NjEsNyBAQCBzdHJ1Y3Qgdm1jYiB7CiAJfTsKIH0gX19wYWNrZWQ7CiAKLSNkZWZpbmUgRVhQRUNURURfVk1DQl9TQVZFX0FSRUFfU0laRQkJNzQ0CiYjNDM7I2RlZmluZSBFWFBFQ1RFRF9WTUNCX1NBVkVfQVJFQV9TSVpFCQkxOTEyCiAjZGVmaW5lIEVYUEVDVEVEX0dIQ0JfU0FWRV9BUkVBX1NJWkUJCTEwMzIKICNkZWZpbmUgRVhQRUNURURfU0VWX0VTX1NBVkVfQVJFQV9TSVpFCQkxNjQ4CiAjZGVmaW5lIEVYUEVDVEVEX1ZNQ0JfQ09OVFJPTF9BUkVBX1NJWkUJCTEwMjQKQEAgLTU3Nyw3ICYjNDM7NTg2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpCiAJQlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHhkOCk7CiAJQlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHgxODApOwogCUJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MjQ4KTsKLQlCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI5OCk7CiYjNDM7CUJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MmEwKTsKJiM0MzsJQlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHgyZTgpOwogCiAJQlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVChzZXZfZXNfc2F2ZV9hcmVhLCAweGM4KTsKIAlCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHNldl9lc19zYXZlX2FyZWEsIDB4Y2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwppbmRleCAyNjk4ZmE0MmNkOTcxMS4uNTFiNjkxZjkxNDQyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jCkBAIC0xMjY2LDcgJiM0MzsxMjY2LDkgQEAgdm9pZCBrdm1faW5pdGlhbGl6ZV9jcHVfY2Fwcyh2b2lkKQogCSk7CiAKIAlrdm1fY3B1X2NhcF9pbml0KENQVUlEXzgwMDBfMDAyMl9FQVgsCi0JCUYoUEVSRk1PTl9WMiksCiYjNDM7CQlTQ0FUVEVSRURfRihQRVJGTU9OX1YyKSwKJiM0MzsJCVNDQVRURVJFRF9GKEFNRF9MQlJfVjIpLAomIzQzOwkJU0NBVFRFUkVEX0YoQU1EX0xCUl9QTUNfRlJFRVpFKSwKIAkpOwogCiAJaWYgKCFzdGF0aWNfY3B1X2hhc19idWcoWDg2X0JVR19OVUxMX1NFRykpCkBAIC0xODgzLDYgJiM0MzsxODg1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fZG9fY3B1aWRfZnVuYyhzdHJ1Y3Qga3ZtX2NwdWlkX2FycmF5ICphcnJheSwgdTMyIGZ1bmN0aW9uKQogCQljcHVpZF9lbnRyeV9vdmVycmlkZShlbnRyeSwgQ1BVSURfODAwMF8wMDIyX0VBWCk7CiAKIAkJZWJ4LnNwbGl0Lm51bV9jb3JlX3BtYyA9IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19ncDsKJiM0MzsKJiM0MzsJCWlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikpCiYjNDM7CQkJZWJ4LnNwbGl0Lmxicl92Ml9zdGFja19zeiA9CiYjNDM7CQkJCW1pbihrdm1fcG11X2NhcC5udW1fYnJhbmNoZXNfbGJyLCBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpOwomIzQzOwogCQllbnRyeS0mZ3Q7ZWJ4ID0gZWJ4LmZ1bGw7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oCmluZGV4IDY1N2Y1Zjc0M2VkOTc1Li45YTU4ZjkxZWIxNzNkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oCkBAIC03MCw3ICYjNDM7NzAsOSBAQAogI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMDdfRURYLCA4KQogCiAvKiBDUFVJRCBsZXZlbCAweDgwMDAwMDIyIChFQVgpICovCi0jZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9QRVJGTU9OX1YyCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAwKQomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjIJCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAwKQomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfVjIJCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAxKQomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRQlLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMikKIAogLyogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUNYKSAqLwogI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfVFNBX1NRX05PCUtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjFfRUNYLCAxKQpAQCAtMTQ2LDYgJiM0MzsxNDgsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBfX2ZlYXR1cmVfdHJhbnNsYXRlKGludCB4ODZfZmVhdHVyZSkKIAlLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFNHWF9FREVDQ1NTQSk7CiAJS1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShDT05TVEFOVF9UU0MpOwogCUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoUEVSRk1PTl9WMik7CiYjNDM7CUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQU1EX0xCUl9WMik7CiYjNDM7CUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQU1EX0xCUl9QTUNfRlJFRVpFKTsKIAlLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFJSU0JBX0NUUkwpOwogCUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQkhJX0NUUkwpOwogCUtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoVFNBX1NRX05PKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IGVmNjlhNTFhYjI3Zjk4Li4zZWM5MWMxYzU4ZGNjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC03NDQsNiAmIzQzOzc0NCw0NyBAQCBzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc3ZtLSZndDtsYnJfbXNyc19pbnRlcmNlcHRlZCA9IGludGVyY2VwdDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHN2bV9sYnJ2Ml9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUodmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHN2bV9sYnJ2Ml9hY3RpdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiYjNDM7CXJldHVybiBzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIChzdm0tJmd0O3ZtY2ItJmd0O3NhdmUuZGJnX2V4dG5fY2ZnICZhbXA7IERCR19FWFROX0NGR19MQlJWMkVOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKJiM0MzsJYm9vbCBpbnRlcmNlcHQgPSAhc3ZtX2xicnYyX2FjdGl2ZSh2Y3B1KTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmNlcHQgPT0gc3ZtLSZndDtsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMzI7IGkmIzQzOyYjNDM7KQomIzQzOwkJc3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfQU1EX1NBTVBfQlJfRlJPTSAmIzQzOyBpLCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTsKJiM0MzsKJiM0MzsJc3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfQU1ENjRfTEJSX1NFTEVDVCwgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERCR19FWFROX0NGRyBzdGF5cyBwZXJtYW5lbnRseSBpbnRlcmNlcHRlZCBmb3Igbm9uLVNFVi1FUyBndWVzdHMgc28KJiM0MzsJICogS1ZNIGNhbiBvYnNlcnZlIExCUlYyRU4gYW5kIGxhemlseSB0b2dnbGUgVl9MQlIuICBTRVYtRVMmIzQzOyBndWVzdHMgbXVzdAomIzQzOwkgKiBkZWxlZ2F0ZSBMQlIgdmlydHVhbGl6YXRpb24gdG8gdGhlIHByb2Nlc3NvciAocGVyIHRoZSBBUE0pLCB3aGVyZQomIzQzOwkgKiBpbnRlcmNlcHRpbmcgTEJSIE1TUnMgY2FuIGJlIGZhdGFsLCBzbyB0b2dnbGUgaXQgd2l0aCB0aGUgcmVzdC4gIFNlZQomIzQzOwkgKiBjb21taXQgYjdlNGJlMGEyMjRmICgmIzM0O0tWTTogU0VWLUVTOiBEZWxlZ2F0ZSBMQlIgdmlydHVhbGl6YXRpb24gdG8gdGhlCiYjNDM7CSAqIHByb2Nlc3NvciYjMzQ7KS4KJiM0MzsJICovCiYjNDM7CWlmIChpc19zZXZfZXNfZ3Vlc3QodmNwdSkpCiYjNDM7CQlzdm1fc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9BTURfREJHX0VYVE5fQ0ZHLCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTsKJiM0MzsKJiM0MzsJc3ZtLSZndDtsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkID0gaW50ZXJjZXB0OwomIzQzO30KJiM0MzsKIHZvaWQgc3ZtX3ZjcHVfZnJlZV9tc3JwbSh2b2lkICptc3JwbSkKIHsKIAlfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKG1zcnBtKSwgZ2V0X29yZGVyKE1TUlBNX1NJWkUpKTsKQEAgLTc5OSw4ICYjNDM7ODQwLDEwIEBAIHN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN2bV9kaXNhYmxlX2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9TWVNDQUxMX01BU0ssIE1TUl9UWVBFX1JXKTsKICNlbmRpZgogCi0JaWYgKGxicnYpCiYjNDM7CWlmIChsYnJ2KSB7CiAJCXN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpOwomIzQzOwkJc3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTsKJiM0MzsJfQogCiAJaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJQQikpCiAJCXN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0lBMzJfUFJFRF9DTUQsIE1TUl9UWVBFX1csCkBAIC04NjgsNiAmIzQzOzkxMSw3IEBAIHZvaWQgc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlfX3N2bV9lbmFibGVfbGJydih2Y3B1KTsKIAlzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTsKJiM0MzsJc3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTsKIH0KIAogc3RhdGljIHZvaWQgX19zdm1fZGlzYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTg4MCw5ICYjNDM7OTI0LDExIEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAlib29sIGN1cnJlbnRfZW5hYmxlX2xicnYgPSBzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wubWlzY19jdGwyICZhbXA7IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7CiYjNDM7CiAJYm9vbCBlbmFibGVfbGJydiA9IChzdm0tJmd0O3ZtY2ItJmd0O3NhdmUuZGJnY3RsICZhbXA7IERFQlVHQ1RMTVNSX0xCUikgfHwKIAkJCSAgICAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpICZhbXA7JmFtcDsKLQkJCSAgICAoc3ZtLSZndDtuZXN0ZWQuY3RsLm1pc2NfY3RsMiAmYW1wOyBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7CiYjNDM7CQkJICAgIChzdm0tJmd0O25lc3RlZC5jdGwubWlzY19jdGwyICZhbXA7IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIpKSB8fAomIzQzOwkJCSAgICBzdm1fbGJydjJfYWN0aXZlKHZjcHUpOwogCiAJaWYgKGVuYWJsZV9sYnJ2ICZhbXA7JmFtcDsgIWN1cnJlbnRfZW5hYmxlX2xicnYpCiAJCV9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpOwpAQCAtODk2LDYgJiM0Mzs5NDIsNyBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogZG8sIHNvIGFsd2F5cyByZWNhbGN1bGF0ZSB0aGUgaW50ZXJjZXB0cyBoZXJlLgogCSAqLwogCXN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpOwomIzQzOwlzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpOwogfQogCiB2b2lkIGRpc2FibGVfbm1pX3NpbmdsZXN0ZXAoc3RydWN0IHZjcHVfc3ZtICpzdm0pCkBAIC0xMzQxLDYgJiM0MzsxMzg4LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJc3ZtLSZndDt4MmF2aWNfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CiAJc3ZtLSZndDtsYnJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CiYjNDM7CXN2bS0mZ3Q7bGJydjJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CiAKIAlzdm0tJmd0O3ZtY2IwMS5wdHIgPSBwYWdlX2FkZHJlc3Modm1jYjAxX3BhZ2UpOwogCXN2bS0mZ3Q7dm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKQEAgLTI3ODcsNiAmIzQzOzI4MzUsMTkgQEAgc3RhdGljIHU2NCAqc3ZtX3ZtY2JfbGJyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1MzIgbXNyKQogCXJldHVybiAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5icl9mcm9tOwogfQogCiYjNDM7c3RhdGljIHU2NCAqc3ZtX3ZtY2JfbGJydjIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiBtc3IpCiYjNDM7ewomIzQzOwl1MzIgb2Zmc2V0ID0gbXNyIC0gTVNSX0FNRF9TQU1QX0JSX0ZST007CiYjNDM7CXUzMiBpZHggPSBvZmZzZXQgJmd0OyZndDsgMTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShpZHggJmd0Oz0gU1ZNX0xCUl9WMl9TVEFDS19TSVpFKSkKJiM0MzsJCXJldHVybiAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5sYnJbMF0ubGJyX3N0YWNrX2Zyb207CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmFtcDsgMSkKJiM0MzsJCXJldHVybiAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5sYnJbaWR4XS5sYnJfc3RhY2tfdG87CiYjNDM7CXJldHVybiAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5sYnJbaWR4XS5sYnJfc3RhY2tfZnJvbTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBzZXZfZXNfcHJldmVudF9tc3JfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgICAgICBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKQogewpAQCAtMjg4Miw2ICYjNDM7Mjk0MywyMSBAQCBzdGF0aWMgaW50IHN2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbykKIAljYXNlIE1TUl9JQTMyX0xBU1RJTlRUT0lQOgogCQltc3JfaW5mby0mZ3Q7ZGF0YSA9IGxicnYgPyAqc3ZtX3ZtY2JfbGJyKHN2bSwgbXNyX2luZm8tJmd0O2luZGV4KSA6IDA7CiAJCWJyZWFrOwomIzQzOwljYXNlIE1TUl9BTURfREJHX0VYVE5fQ0ZHOgomIzQzOwkJaWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKQomIzQzOwkJCXJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDsKJiM0MzsJCW1zcl9pbmZvLSZndDtkYXRhID0gc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ19leHRuX2NmZzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1TUl9BTUQ2NF9MQlJfU0VMRUNUOgomIzQzOwkJaWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKQomIzQzOwkJCXJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDsKJiM0MzsJCW1zcl9pbmZvLSZndDtkYXRhID0gc3ZtLSZndDt2bWNiLSZndDtzYXZlLmxicl9zZWxlY3Q7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNU1JfQU1EX1NBTVBfQlJfRlJPTSAuLi4gTVNSX0FNRF9TQU1QX0JSX0ZST00gJiM0MzsgMzE6CiYjNDM7CQlpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpCiYjNDM7CQkJcmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEOwomIzQzOwkJbXNyX2luZm8tJmd0O2RhdGEgPSAqc3ZtX3ZtY2JfbGJydjIoc3ZtLCBtc3JfaW5mby0mZ3Q7aW5kZXgpOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CiAJCW1zcl9pbmZvLSZndDtkYXRhID0gc3ZtLSZndDtuZXN0ZWQuaHNhdmVfbXNyOwogCQlicmVhazsKQEAgLTMxNjAsNiAmIzQzOzMyMzYsMTAgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKQogCQkJZGF0YSAmYW1wOz0gfkRFQlVHQ1RMTVNSX0JURjsKIAkJfQogCiYjNDM7CQlpZiAoKGRhdGEgJmFtcDsgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykgJmFtcDsmYW1wOwomIzQzOwkJICAgICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUpKQomIzQzOwkJCXJldHVybiAxOwomIzQzOwogCQlpZiAoZGF0YSAmYW1wOyBERUJVR0NUTF9SRVNFUlZFRF9CSVRTKQogCQkJcmV0dXJuIDE7CiAKQEAgLTMxODEsNiAmIzQzOzMyNjEsNDAgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKQogCQkqc3ZtX3ZtY2JfbGJyKHN2bSwgZWN4KSA9IGRhdGE7CiAJCXZtY2JfbWFya19kaXJ0eShzdm0tJmd0O3ZtY2IsIFZNQ0JfTEJSKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgTVNSX0FNRF9EQkdfRVhUTl9DRkc6CiYjNDM7CQlpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpCiYjNDM7CQkJcmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEOwomIzQzOwomIzQzOwkJaWYgKGRhdGEgJmFtcDsgREJHX0VYVE5fQ0ZHX1JFU0VSVkVEX0JJVFMpCiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CQlpZiAoc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ19leHRuX2NmZyA9PSBkYXRhKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ19leHRuX2NmZyA9IGRhdGE7CiYjNDM7CQl2bWNiX21hcmtfZGlydHkoc3ZtLSZndDt2bWNiLCBWTUNCX0xCUik7CiYjNDM7CQlzdm1fdXBkYXRlX2xicnYodmNwdSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNU1JfQU1ENjRfTEJSX1NFTEVDVDoKJiM0MzsJCWlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSkKJiM0MzsJCQlyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7CiYjNDM7CiYjNDM7CQlpZiAoZGF0YSAmYW1wOyBMQlJfU0VMRUNUX1JFU0VSVkVEX0JJVFMpCiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CQlpZiAoc3ZtLSZndDt2bWNiLSZndDtzYXZlLmxicl9zZWxlY3QgPT0gZGF0YSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXN2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5sYnJfc2VsZWN0ID0gZGF0YTsKJiM0MzsJCXZtY2JfbWFya19kaXJ0eShzdm0tJmd0O3ZtY2IsIFZNQ0JfTEJSKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1TUl9BTURfU0FNUF9CUl9GUk9NIC4uLiBNU1JfQU1EX1NBTVBfQlJfRlJPTSAmIzQzOyAzMToKJiM0MzsJCWlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSkKJiM0MzsJCQlyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7CiYjNDM7CiYjNDM7CQkqc3ZtX3ZtY2JfbGJydjIoc3ZtLCBlY3gpID0gZGF0YTsKJiM0MzsJCXZtY2JfbWFya19kaXJ0eShzdm0tJmd0O3ZtY2IsIFZNQ0JfTEJSKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgogCQkvKgogCQkgKiBPbGQga2VybmVscyBkaWQgbm90IHZhbGlkYXRlIHRoZSB2YWx1ZSB3cml0dGVuIHRvCkBAIC00NzEwLDYgJiM0Mzs0ODI0LDIwIEBAIHN0YXRpYyBib29sIHN2bV9oYXNfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGludCBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplbnRyeTsKJiM0MzsKJiM0MzsJZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTsKJiM0MzsJaWYgKCFlbnRyeSB8fCBlbnRyeS0mZ3Q7ZWF4ICZsdDsgMHg4MDAwMDAyMikKJiM0MzsJCWdvdG8gbm90X2ZvdW5kOwomIzQzOwllbnRyeSA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMjIpOwomIzQzOwlpZiAoZW50cnkpCiYjNDM7CQlyZXR1cm4gKGVudHJ5LSZndDtlYnggJmd0OyZndDsgNCkgJmFtcDsgMHgzZjsKJiM0Mztub3RfZm91bmQ6CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CkBAIC00NzM2LDYgJiM0Mzs0ODY0LDEwIEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKGd1ZXN0X2NwdWlkX2lzX2ludGVsX2NvbXBhdGlibGUodmNwdSkpCiAJCWd1ZXN0X2NwdV9jYXBfY2xlYXIodmNwdSwgWDg2X0ZFQVRVUkVfVl9WTVNBVkVfVk1MT0FEKTsKIAomIzQzOwlpZiAoZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikgJmFtcDsmYW1wOwomIzQzOwkgICAgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZSh2Y3B1KSAhPSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpCiYjNDM7CQlndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpOwomIzQzOwogCWlmIChpc19zZXZfZ3Vlc3QodmNwdSkpCiAJCXNldl92Y3B1X2FmdGVyX3NldF9jcHVpZChzdm0pOwogfQpAQCAtNTU4Miw2ICYjNDM7NTcxNCwxMCBAQCBzdGF0aWMgX19pbml0IHZvaWQgc3ZtX3NldF9jcHVfY2Fwcyh2b2lkKQogCQlpZiAoa3ZtX3BtdV9jYXAudmVyc2lvbiAhPSAyIHx8CiAJCSAgICAha3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX1BFUkZDVFJfQ09SRSkpCiAJCQlrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9QRVJGTU9OX1YyKTsKJiM0MzsKJiM0MzsJCWlmICghbGJydiB8fCAhZW5hYmxlX21lZGlhdGVkX3BtdSB8fAomIzQzOwkJICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpCiYjNDM7CQkJa3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7CiAJfQogCiAJLyogQ1BVSUQgMHg4MDAwMDAxRiAoU01FL1NFViBmZWF0dXJlcykgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCmluZGV4IDcxNmJlMjFmYmEzMzU0Li4xMDVhNzFkNjlkNjhhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC0zNjMsNiAmIzQzOzM2Myw3IEBAIHN0cnVjdCB2Y3B1X3N2bSB7CiAJYm9vbCBhdmljX2lycV93aW5kb3c7CiAJYm9vbCB4MmF2aWNfbXNyc19pbnRlcmNlcHRlZDsKIAlib29sIGxicl9tc3JzX2ludGVyY2VwdGVkOwomIzQzOwlib29sIGxicnYyX21zcnNfaW50ZXJjZXB0ZWQ7CiAKIAkvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovCiAJYm9vbCBndWVzdF9naWY7CkBAIC03ODMsNyAmIzQzOzc4NCwxMSBAQCBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKGJvb2wsIHRlc3QsIHRlc3QpCiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIGNsZWFyLCBfX2NsZWFyKQogQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBzZXQsIF9fc2V0KQogCi0jZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH5ERUJVR0NUTE1TUl9MQlIpCiYjNDM7I2RlZmluZSBERUJVR0NUTF9MQlJfUE1DX0ZSRUVaRV9CSVRTCShERUJVR0NUTE1TUl9GUkVFWkVfTEJSU19PTl9QTUkgfAlcCiYjNDM7CQkJCQkgREVCVUdDVExNU1JfRlJFRVpFX1BFUkZNT05fT05fUE1JKQomIzQzOyNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUwkofihERUJVR0NUTE1TUl9MQlIgfCBERUJVR0NUTF9MQlJfUE1DX0ZSRUVaRV9CSVRTKSkKJiM0MzsjZGVmaW5lIERCR19FWFROX0NGR19SRVNFUlZFRF9CSVRTICh+REJHX0VYVE5fQ0ZHX0xCUlYyRU4pCiYjNDM7I2RlZmluZSBMQlJfU0VMRUNUX1JFU0VSVkVEX0JJVFMgKH5HRU5NQVNLX1VMTCg4LCAwKSkKIAogLyogc3ZtLmMgKi8KIGV4dGVybiBib29sIGR1bXBfaW52YWxpZF92bWNiOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTgzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFNRCBMQlIgVjIgS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBBTUQgTEJSIFYyIHN1cHBvcnQgd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IGZvciBTVk0uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBjb3JlIGFyZWFzIG9mIHRoZSBoeXBlcnZpc29yIGFuZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLgoKSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBrZXkgZmlsZXM6IGBjb3JlLmNgLCBoZWFkZXJzIChgcGVyZl9ldmVudC5oYCwgYHN2bS5oYCwgYHJldmVyc2VfY3B1aWQuaGApLCBhbmQgY3J1Y2lhbCBLVk0gU1ZNIGNvbXBvbmVudHMgKGBjcHVpZC5jYCwgYHN2bS5jYCkuIFRoaXMgdGVsbHMgbWUgdGhlIGNoYW5nZSBpbnZvbHZlcyBib3RoIGZ1bmRhbWVudGFsIENQVUlEIGZlYXR1cmUgYWR2ZXJ0aXNlbWVudCBhbmQgdGhlIGludGVyY2VwdGlvbi9lbXVsYXRpb24gb2Ygc3BlY2lmaWMgTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKS4gU3BlY2lmaWNhbGx5LCBpdCBkZWFscyB3aXRoIE1TUnMgc3VjaCBhcyBgTVNSX0FNRF9EQkdfRVhUTl9DRkdgLCBgTVNSX0FNRDY0X0xCUl9TRUxFQ1RgLCBhbmQgYE1TUl9BTURfU0FNUF9CUl9GUk9NYCwgYWxsIG9mIHdoaWNoIGFyZSBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IGJyYW5jaCB0cmFjaW5nIGlzIHRoZSBmb2N1cyBoZXJlLiBUaGUgYWRkaXRpb24gb2YgQ1BVSUQgZmVhdHVyZXMgYEFNRF9MQlJfVjJgIGFuZCBgQU1EX0xCUl9QTUNfRlJFRVpFYCBpcyB0aGUgc3RhbmRhcmQgYXBwcm9hY2ggdG8gaW5kaWNhdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBndWVzdC4KCkRpZ2dpbmcgaW50byBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AgaXMgaW1wb3J0YW50IHRvIG1lLCBzbyBJ4oCZbSBnb2luZyB0byBmb2N1cyBteSBhbmFseXNpcyB0aGVyZS4gSSBjYW4gc2VlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBmZWF0dXJlLCBhbmQgTVNSIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBmb3IgdGhlc2UgbmV3IHJlZ2lzdGVycy4gVGhlIGZ1bmN0aW9ucyBhcmU6IGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCwgYHN2bV9sYnJ2Ml9zdXBwb3J0ZWRgLCBgc3ZtX2xicnYyX2FjdGl2ZWAsIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX2dldF9tc3JgLCBgc3ZtX3NldF9tc3JgLCBgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZWAsIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgLCBhbmQgYHN2bV9zZXRfY3B1X2NhcHNgLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGZ1bGx5IHN1cHBvcnRlZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gQ2xlYXJseSwgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9BTURgIGFyZSBtYW5kYXRvcnkuIFBlcmYgZXZlbnRzIHdvdWxkIGJlIHJlbGV2YW50IGhlcmUsIHNvIEkmIzM5O2xsIGFzc3VtZSBgQ09ORklHX1BFUkZfRVZFTlRTYCBpcyBhbHNvIG5lZWRlZCwgYnV0IGxldOKAmXMgY2hlY2suIEnigJltIGdvaW5nIHRvIHJ1biBhIGBncmVwcGVyYCBzZWFyY2ggZm9yICYjMzQ7QU1EX0xCUl9WMiYjMzQ7IG9yIHNpbWlsYXIgdGVybXMgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzIHRvIGJlIGNlcnRhaW4sIGFuZCB2ZXJpZnkgd2hldGhlciBhIHNwZWNpZmljIEtjb25maWcgb3B0aW9uIGhhcyBiZWVuIGFkZGVkIGZvciB0aGlzIGZlYXR1cmUuIFRoYXQgd2lsbCBiZSBteSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QU1EX0xCUl9WMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jPTQyMj1fX2luaXQgaW50IGFtZF9wbXVfbGJyX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTQyNS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6NDI2Olx0aWYgKHg4Nl9wbXUudmVyc2lvbiBcdTAwM2MgMiB8fCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYy00MjctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTg4LSNkZWZpbmUgWDg2X0ZFQVRVUkVfUkVQX0dPT0RcdFx0KCAzKjMyJiM0MzsxNikgLyogXCYjMzQ7cmVwX2dvb2RcJiMzNDsgUkVQIG1pY3JvY29kZSB3b3JrcyB3ZWxsICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oOjg5OiNkZWZpbmUgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMlx0XHQoIDMqMzImIzQzOzE3KSAvKiBcJiMzNDthbWRfbGJyX3YyXCYjMzQ7IEFNRCBMYXN0IEJyYW5jaCBSZWNvcmQgRXh0ZW5zaW9uIFZlcnNpb24gMiAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC05MC0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NMRUFSX0NQVV9CVUZcdCggMyozMiYjNDM7MTgpIC8qIENsZWFyIENQVSBidWZmZXJzIHVzaW5nIFZFUlcgKi9cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jLTY2LVx0eyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLFx0XHRDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jOjY3Olx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jLTY4LVx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUsXHRDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmM9ODM2PXZvaWQga3ZtX2luaXRpYWxpemVfY3B1X2NhcHModm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xMjY5LVx0XHRTQ0FUVEVSRURfRihQRVJGTU9OX1YyKSxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjEyNzA6XHRcdFNDQVRURVJFRF9GKEFNRF9MQlJfVjIpLFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTI3MS1cdFx0U0NBVFRFUkVEX0YoQU1EX0xCUl9QTUNfRlJFRVpFKSxcbi0tXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYz0xNDIwPXN0YXRpYyBpbmxpbmUgaW50IF9fZG9fY3B1aWRfZnVuYyhzdHJ1Y3Qga3ZtX2NwdWlkX2FycmF5ICphcnJheSwgdTMyIGZ1bmN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4ODgtXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoxODg5Olx0XHRpZiAoa3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpKVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTg5MC1cdFx0XHRlYnguc3BsaXQubGJyX3YyX3N0YWNrX3N6ID1cbi0tXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTczLSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcdFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDApXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oOjc0OiNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfVjJcdFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDEpXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTc1LSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRVx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDIpXG4tLVxuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaD0xNDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgX19mZWF0dXJlX3RyYW5zbGF0ZShpbnQgeDg2X2ZlYXR1cmUpXG4tLVxuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaC0xNTAtXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFBFUkZNT05fVjIpO1xuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaDoxNTE6XHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEFNRF9MQlJfVjIpO1xuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaC0xNTItXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEFNRF9MQlJfUE1DX0ZSRUVaRSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz03NDc9c3RhdGljIGJvb2wgc3ZtX2xicnYyX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTc0OC17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjc0OTpcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNzUwLVx0ICAgICAgIGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00ODQxPXN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00ODY2LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0ODY3Olx0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00ODY4LVx0ICAgIGNwdWlkX3F1ZXJ5X2xicnYyX3N0YWNrX3NpemUodmNwdSkgIT0gU1ZNX0xCUl9WMl9TVEFDS19TSVpFKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0ODY5Olx0XHRndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00ODcwLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTY0MT1zdGF0aWMgX19pbml0IHZvaWQgc3ZtX3NldF9jcHVfY2Fwcyh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTcxOS1cdFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU3MjA6XHRcdFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU3MjEtXHR9XG4tLVxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC04OC0jZGVmaW5lIFg4Nl9GRUFUVVJFX1JFUF9HT09EXHRcdCggMyozMiYjNDM7MTYpIC8qIFwmIzM0O3JlcF9nb29kXCYjMzQ7IFJFUCBtaWNyb2NvZGUgd29ya3Mgd2VsbCAqL1xudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDo4OTojZGVmaW5lIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjJcdFx0KCAzKjMyJiM0MzsxNykgLyogXCYjMzQ7YW1kX2xicl92MlwmIzM0OyBBTUQgTGFzdCBCcmFuY2ggUmVjb3JkIEV4dGVuc2lvbiBWZXJzaW9uIDIgKi9cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtOTAtI2RlZmluZSBYODZfRkVBVFVSRV9DTEVBUl9DUFVfQlVGXHQoIDMqMzImIzQzOzE4KSAvKiBDbGVhciBDUFUgYnVmZmVycyB1c2luZyBWRVJXICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MzMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIEFNRCBMQlIgVjIgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbXBsZW1lbnRpbmcgTEJSIFYyIHN1cHBvcnQgZm9yIEFNRCBwcm9jZXNzb3JzIHdpdGhpbiBLVk0uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBtb2RpZmljYXRpb25zLCB3aGljaCwgYXMgZXhwZWN0ZWQsIGFyZSBoYXBwZW5pbmcgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYC4gSXQmIzM5O3MgYWxsIGFib3V0IGFkZGluZyB0aGUgTVNSIGludGVyY2VwdGlvbiBhbmQgaGFuZGxpbmcgbG9naWMgZm9yIHRoZSBuZXcgTVNSczogYE1TUl9BTURfREJHX0VYVE5fQ0ZHYCwgYE1TUl9BTUQ2NF9MQlJfU0VMRUNUYCwgYW5kIGBNU1JfQU1EX1NBTVBfQlJfRlJPTWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIHdpbGwgYmUuCgpJJiMzOTttIGluaXRpYWxseSBmb2N1c2luZyBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHNgLCBgc3ZtX2xicnYyX3N1cHBvcnRlZGAsIGBzdm1fbGJydjJfYWN0aXZlYCwgYHN2bV91cGRhdGVfbGJydmAsIGBzdm1fZ2V0X21zcmAsIGBzdm1fc2V0X21zcmAsIGBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplYCwgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGAsIGFuZCBgc3ZtX3NldF9jcHVfY2Fwc2AuCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCBhcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBUaGV5JiMzOTtyZSBwcmV0dHkgZ2VuZXJpYyBLVk0gaG90LXBhdGggZnVuY3Rpb25zIGJ1dCB0aGV5IGFyZSB0aGUgZW50cnlwb2ludHMgdG8gaGFuZGxlIHRoZSBuZXcgTVNScy4gSXTigJlzIHByZXR0eSBvYnZpb3VzIHRoZXkmIzM5O3JlIGdvaW5nIHRvIGJlIGltcG9ydGFudC4gV2FpdCwgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmIGEgYml0IG5vdy4gVGhvc2UgYXJlIHJlYWxseSBicm9hZCBmdW5jdGlvbnMgYW5kIGZ1enppbmcgdGhlbSBkaXJlY3RseSBjb3VsZCBiZSBhIGNoYWxsZW5nZS4gTWF5YmUgdGhlcmUgYXJlIG90aGVyLCBtb3JlIHRhcmdldGVkIGZ1bmN0aW9ucyBJIGNhbiBsZXZlcmFnZT8KCk9rYXksIGxldCBtZSBzZWUuIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCBpcyBzdGF0aWMsIHdoaWNoIG1pZ2h0IG1ha2UgaXQgaGFyZGVyIHRvIHRhcmdldCBkaXJlY3RseSwgdW5sZXNzIGl0JiMzOTtzIGlubGluZWQuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBhZGRlZCBvciBtb2RpZmllZC4gQWxyaWdodCwgSSBzZWUgYHN2bV92Y3B1X2ZyZWVfbXNycG1gIGlzIG1vZGlmaWVkLiBBbmQgSSBhbHNvIHNlZSBzb21lIHN0YXRpYyBmdW5jdGlvbnM6IGBzdm1fcmVjYWxjX21zcl9pbnRlcmNlcHRzYCwgYHN2bV92Y3B1X2NyZWF0ZWAsIGBzdm1fdm1jYl9sYnJgLCBgc3ZtX3ZtY2JfbGJydjJgLCBhbmQgYHNldl9lc19wcmV2ZW50X21zcl9hY2Nlc3NgLiBPa2F5LCBzbyBgc3ZtX2VuYWJsZV9sYnJ2YCwgYHN2bV91cGRhdGVfbGJydmAsIGFuZCBgZGlzYWJsZV9ubWlfc2luZ2xlc3RlcGAgYXJlIG5vbi1zdGF0aWMuCgpTb21ldGhpbmcgZG9lc24mIzM5O3QgZmVlbCByaWdodC4gYHN2bV9nZXRfbXNyYCBpcyBsaXN0ZWQgYXMgc3RhdGljPyBUaGF0JiMzOTtzIHVudXN1YWwuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGVuc3VyZSB0aGF0IGl0JiMzOTtzIGFjdHVhbGx5IHN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX2dldF9tc3ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yODU5PXN0YXRpYyBib29sIHN2bV9wYXRfYWNjZXNzZXNfZ3BhdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZnJvbV9ob3N0KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjg3Mi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mjg3MzpzdGF0aWMgaW50IHN2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjg3NC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NDU3PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ4NC1cdC5nZXRfZmVhdHVyZV9tc3IgPSBzdm1fZ2V0X2ZlYXR1cmVfbXNyLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDg1Olx0LmdldF9tc3IgPSBzdm1fZ2V0X21zcixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ4Ni1cdC5zZXRfbXNyID0gc3ZtX3NldF9tc3IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1TUiBBY2Nlc3MgaW4gdGhlIEFNRC1WIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBzdm1fZ2V0X21zcmAgYW5kIGBzdm1fc2V0X21zcmAgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIEkgc2VlIHRoYXQuIEJ1dCB0aGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHJlZ2lzdGVyZWQgaW4gYHN2bV94ODZfb3BzYCBtYWtlcyB0aGVtIGVudHJ5IHBvaW50cyBmb3IgTVNSIGFjY2Vzc2VzLCBlc3NlbnRpYWxseSB0aGUgcHVibGljIGludGVyZmFjZSwgZG9lc24mIzM5O3QgaXQ/IEhtbSwgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBsb2dpYyBpcyBjbGVhciwgaW5saW5lZCBmdW5jdGlvbnMgbGFjayBkaXN0aW5jdCBzeW1ib2xzLgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuIEJlY2F1c2UgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHRoYXQgYWN0dWFsbHkgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nICpmdWxseSogaW5saW5lZCwgcmlnaHQ/IFRha2luZyB0aGVpciBhZGRyZXNzIGdpdmVzIHRoZW0gYSBzeW1ib2wgYWRkcmVzcywgcmVnYXJkbGVzcy4gVGhhdCBjaGFuZ2VzIHRoZSBjYWxjdWx1cyBzb21ld2hhdC4gU3RpbGwsIHRoZXkgYXJlIHZlcnkgaG90IHBhdGhzIGluIHRoZSBjb2RlIHNvIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bC4KCkxldCBtZSBzaGlmdCBnZWFycyBhbmQgY29uc2lkZXIgYHN2bV91cGRhdGVfbGJydmAgYW5kIGBzdm1fZW5hYmxlX2xicnZgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bV91cGRhdGVfbGJydiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTc0NT1zdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgyNS1cdHZtY2JfbWFya19kaXJ0eSh2bWNiMDIsIFZNQ0JfTEJSKTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODI2Olx0c3ZtX3VwZGF0ZV9sYnJ2KFx1MDAyNnN2bS1cdTAwM2V2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI3LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTg1Mz1zdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk4Ny1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6OTg4Olx0LyogU1ZNX01JU0MyX0VOQUJMRV9WX0xCUiBpcyBjb250cm9sbGVkIGJ5IHN2bV91cGRhdGVfbGJydigpICovXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk4OS1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTEzMjI9dm9pZCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEzODYtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjEzODc6XHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEzODgtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz05MTc9c3RhdGljIHZvaWQgX19zdm1fZGlzYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTkyMi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTIzOnZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTI0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMwNTE9c3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1MC1cdFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cdTAwM2V2bWNiLCBWTUNCX0xCUik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMyNTE6XHRcdHN2bV91cGRhdGVfbGJydih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1Mi1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMjc1LVx0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzI3NjpcdFx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMjc3LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTgxMz12b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo4MTQ6dm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtODE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjM4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgTG9naWNhbCBCcmFuY2ggUmVjb3JkIFZpcnR1YWxpemF0aW9uIChMQlJWKSBVcGRhdGVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgc3ZtX3VwZGF0ZV9sYnJ2YC4gSXQmIzM5O3MgYSBzdHJvbmcgY29udGVuZGVyIGdpdmVuIHRoZSBuYW1lLiBCdXQgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBwb3NzaWJpbGl0aWVzIGFuZCBub3QganVtcCB0byBjb25jbHVzaW9ucy4gU28sIEkmIzM5O20gYWxzbyBwdXR0aW5nIGBzdm1fZW5hYmxlX2xicnZgIG9uIHRoZSBzaG9ydCBsaXN0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBpcyBtb3JlIHJlbGV2YW50IGFuZC9vciBjb21wbGVtZW50YXJ5LiBJJiMzOTtsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHN2bV9lbmFibGVfbGJydmAgZmlyc3QuIEkgd2FudCB0byBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGludGVyYWN0aW9uIHdpdGggcmVsYXRlZCBzdHJ1Y3R1cmVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nIG9mZiBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX2VuYWJsZV9sYnJ2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTA2NT1zdGF0aWMgaW50IF9fc2V2X2xhdW5jaF91cGRhdGVfdm1zYShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTExMTEtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTExMjpcdHN2bV9lbmFibGVfbGJydih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTExMy1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQ4MD1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlX3Ztc2Eoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTI4LVx0XHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjUyOTpcdFx0c3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTMwLVx0fVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9ODI3PXN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTA0LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo5MDU6c3RhdGljIHZvaWQgX19zdm1fZW5hYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MDYte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTA5LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo5MTA6dm9pZCBzdm1fZW5hYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MTEte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo5MTI6XHRfX3N2bV9lbmFibGVfbGJydih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTEzLVx0c3ZtX3JlY2FsY19sYnJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz05MjM9dm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTMzLVx0aWYgKGVuYWJsZV9sYnJ2IFx1MDAyNlx1MDAyNiAhY3VycmVudF9lbmFibGVfbGJydilcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTM0Olx0XHRfX3N2bV9lbmFibGVfbGJydih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTM1LVx0ZWxzZSBpZiAoIWVuYWJsZV9sYnJ2IFx1MDAyNlx1MDAyNiBjdXJyZW50X2VuYWJsZV9sYnJ2KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9ODEyPXZvaWQgc3ZtX3ZjcHVfZnJlZV9tc3JwbSh2b2lkICptc3JwbSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjgxMzp2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC04MTQtdm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyOTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHN2bV91cGRhdGVfbGJydmAgZnVuY3Rpb24sIHRyaWdnZXJlZCBieSB3cml0ZXMgdG8gYE1TUl9BTURfREJHX0VYVE5fQ0ZHYCB2aWEgYHN2bV9zZXRfbXNyYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGVudHJ5IHBvaW50IHRvIGZvY3VzIG9uLCBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpcywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGJyb2FkZXIgcGljdHVyZS4gV2hhdCBhYm91dCBgc3ZtX3NldF9tc3JgIGFuZCBgc3ZtX2dldF9tc3JgPyBUaGV5JiMzOTtyZSB0aGUgcHJpbWFyeSBoYW5kbGVycyBmb3IgYWxsIE1TUiBpbnRlcmFjdGlvbnMuIFRoZXkmIzM5O3ZlIGJlZW4gYWRhcHRlZCBmb3IgdGhlc2UgbmV3IGBNU1JfQU1EX0RCR19FWFROX0NGR2AsIGBNU1JfQU1ENjRfTEJSX1NFTEVDVGAsIGFuZCBgTVNSX0FNRF9TQU1QX0JSX0ZST01gIE1TUnMuCgpJIHdpbGwgYWRkIHRoZXNlIHRvIG15IGxpc3QuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBpbnZlc3RpZ2F0ZSBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgIHNpbmNlIHRoZXkgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgbmV3IE1TUnMuIEV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRocywgdGhleSYjMzk7cmUgdGhlIG9ubHkgcm91dGVzIHRvIHJlYWNoIHRoZSBuZXcgbG9naWMuCgpXYWl0LCBob2xkIG9uIGEgc2Vjb25kLiBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgICphcmUqIGV4dHJlbWVseSBob3QuIElzIHRoZXJlIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHRyYWNlIHRoaXMgY2hhbmdlPwoKSG1tLi4uIE1heWJlIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYD8gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG9mdGVuIG1lYW5zIGl0IGNvdWxkIGJlIGlubGluZWQuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBzdm1fdXBkYXRlX2xicnZgIGFuZCBgc3ZtX3JlY2FsY19tc3JfaW50ZXJjZXB0c2AuIEkgd2lsbCBjaGVjayBpZiBpdCYjMzk7cyBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgc3ZtX2xicnYyX3N1cHBvcnRlZGAgYW5kIGBzdm1fbGJydjJfYWN0aXZlYC4gVGhleSYjMzk7cmUgc3RhdGljLCBzaG9ydCwgYW5kIGxpa2VseSBpbmxpbmVkLCBzbyB0aGV5IHByb2JhYmx5IHdvbiYjMzk7dCBiZSBzaWduaWZpY2FudCB0byBteSByZXNlYXJjaC4KCk5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0LiBMZXQmIzM5O3MgbG9vayBhdCBgYXJjaC94ODYva3ZtL2NwdWlkLmNgLiBJIHNlZSBga3ZtX2luaXRpYWxpemVfY3B1X2NhcHNgIGFuZCBgX19kb19jcHVpZF9mdW5jYCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXNlIGFyZW4mIzM5O3QgZXhwbGljaXRseSB0aWVkIHRvIExCUiBWMiwgYnV0IHRoZXkmIzM5O3ZlIGJlZW4gdG91Y2hlZCwgc28gdGhleSBuZWVkIGEgbG9vay4KCkZpbmFsbHksIEkmIzM5O2xsIHRha2UgYSBnbGFuY2UgYXQgYGFyY2gveDg2L2V2ZW50cy9jb3JlLmNgLiBJIG5vdGljZSBjaGFuZ2VzIGluIGBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlgLgoKVGhhdCYjMzk7cyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgSSYjMzk7dmUgc2VlbiBzbyBmYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9ldmVudHMvY29yZS5jPTMxMTE9dW5zaWduZWQgbG9uZyBwZXJmX2FyY2hfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxMTktXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjMxMjA6dm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTIxLXtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxNDQtfVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzozMTQ1OkVYUE9SVF9TWU1CT0xfRk9SX0tWTShwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkpO1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ2LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaD03NTk9c3RydWN0IHg4Nl9wbXVfbGJyIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgtNzY2LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oOjc2NzpleHRlcm4gdm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NjgtZXh0ZXJuIHU2NCBwZXJmX2dldF9od19ldmVudF9jb25maWcoaW50IGh3X2V2ZW50KTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50Lmg9NzcxPWV4dGVybiBpbnQgeDg2X3BlcmZfcmRwbWNfaW5kZXgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NzItI2Vsc2VcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaDo3NzM6c3RhdGljIGlubGluZSB2b2lkIHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5ICpjYXApXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgtNzc0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmM9MTMzPXZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYy0xNDctXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3BtdS5jOjE0ODpcdFx0cGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KFx1MDAyNmt2bV9ob3N0X3BtdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTQ5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk1MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFBNVSBDYXBhYmlsaXR5IENoZWNrKioKCk9rYXksIHNvIGBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlgIGlzIGV4cG9ydGVkIGZvciBLVk0g4oCTIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZywgZGVmaW5pdGVseS4gSG93ZXZlciwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5YC4gSG1tLCB0aGF0IGxpbWl0cyBpdHMgYXR0YWNrIHN1cmZhY2Ugc29tZXdoYXQsIGRvZXNuJiMzOTt0IGl0PyBTdGlsbCwgZnV6emluZyBpbml0aWFsaXphdGlvbiBjYW4gYmUgZnJ1aXRmdWwuIEJ1dCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGVsc2UgY2FuIHdlIGRpZyB1cD8gSSB3b25kZXIgaWYgYHN2bV9zZXRfY3B1X2NhcHNgIGlzIHdvcnRoIGEgbG9vay4gTWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhlcmUgdGhhdCB3ZSBjYW4gZXhwbG9pdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX3NldF9jcHVfY2FwcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTU2MDY9c3RhdGljIF9faW5pdCB2b2lkIHN2bV9hZGp1c3RfbW1pb19tYXNrKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NjQwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NjQxOnN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU2NDIte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTczNz1zdGF0aWMgX19pbml0IGludCBzdm1faGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU4ODctXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU4ODg6XHRzdm1fc2V0X2NwdV9jYXBzKCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU4ODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDEwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBDUFVJRCBIb29rIFBsYWNlbWVudCBmb3IgRnV6emluZyoqCgpIbW0sIHNvIGBzdm1fc2V0X2NwdV9jYXBzYCBpcyBiZWluZyBjYWxsZWQgZHVyaW5nIHRoZSBtb2R1bGUmIzM5O3MgaW5pdGlhbGl6YXRpb24gcGhhc2UuIFRoYXQmIzM5O3MgZXNzZW50aWFsbHkgdGllZCB0byB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2VzcywgcmlnaHQ/IFdoaWNoIG1lYW5zIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSB0cmlnZ2VyZWQgZHluYW1pY2FsbHksIGFuZCBjZXJ0YWlubHkgbm90IGR1cmluZyBhIGZ1enppbmcgY2FtcGFpZ24uIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBsaW1pdGF0aW9uLiBJZiBJJiMzOTttIHRyeWluZyB0byBmdXp6IENQVUlELXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLCBJIG5lZWQgc29tZXRoaW5nIHRoYXQmIzM5O3MgcmVhY2hhYmxlIHVuZGVyIG1vcmUgdmFyaWVkIGV4ZWN1dGlvbiBjb25kaXRpb25zLgoKTGV0IG1lIHBpdm90LiBMZXQmIzM5O3Mgc2hpZnQgb3VyIGZvY3VzIGFuZCBzZWUgaWYgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGAgcHJvdmlkZXMgYSBtb3JlIHZpYWJsZSBob29rLiBQZXJoYXBzIHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciBhIHZDUFUgaXMgaW5pdGlhbGl6ZWQgb3Igb24gYSBwZXItVk0gYmFzaXMsIG9wZW5pbmcgdXAgbW9yZSBpbnRlcmVzdGluZyBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bV92Y3B1X2FmdGVyX3NldF9jcHVpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ4Mjc9c3RhdGljIGludCBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ4NDAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQ4NDE6c3RhdGljIHZvaWQgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDg0Mi17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NDU3PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTU0NS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTU0NjpcdC52Y3B1X2FmdGVyX3NldF9jcHVpZCA9IHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZCxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTU0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgQU1EIEtWTSB2Q1BVcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBBTUQgS1ZNIHZDUFUgY29kZSwgYW5kIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgIHJlYWxseSBqdW1wcyBvdXQgYXQgbWUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSB2aWEgYEtWTV9TRVRfQ1BVSUQyYCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVXNlci1jb250cm9sbGVkIGlucHV0IGRpcmVjdGx5IGluZmx1ZW5jZXMgaXRzIGV4ZWN1dGlvbiwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzLgoKTmF0dXJhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgTWljcm9wcm9jZXNzb3IgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKS4gU28sIEkmIzM5O2xsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIGBzdm1fZ2V0X21zcmAgYW5kIGBzdm1fc2V0X21zcmAgaW4gdGhlIGZ1enppbmcgc2NvcGU7IHRoZXkgYXJlIHRoZSBtYWluIGVudHJ5cG9pbnRzIGZvciBpbnRlcmFjdGlvbnMgdGhlcmUuIEkgYWxzbyBzZWUgdGhhdCBgc3ZtX3VwZGF0ZV9sYnJ2YCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLiBUaGVuLCBvZiBjb3Vyc2UsIEkgbXVzdCBsb29rIGF0IGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgIHRvIHJvdW5kIHRoYXQgb3V0LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIE5hbWVseSwgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9BTURgLCBhbmQgYENPTkZJR19QRVJGX0VWRU5UU2AgYXJlIHRoZSBvYnZpb3VzIG9uZXMuIEJ1dCwgSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBtaWdodCBzdWJ0bHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGUgY29kZSBJJiMzOTttIHRhcmdldGluZy4gSSB3YW50IHRvIGJlIHRob3JvdWdoIGFuZCBtaW5pbWl6ZSB0aGUgcmlzayBvZiBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIGZvciBBTUQgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBTUQgcHJvY2Vzc29ycyBhcmUgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHRoaXMga2luZCBvZiBpbnZlc3RpZ2F0aW9uLCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHg4NiwgdGhlIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgaXMgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBmZWF0dXJlcyBzcGVjaWZpYyB0byBBTUQgcHJvY2Vzc29ycyB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEkgbmVlZCB0byBsb2NhdGUgdGhlIGBLVk1fQU1EYCBzeW1ib2wsIHdoaWNoIGxpa2VseSBjb250cm9scyB2YXJpb3VzIEFNRC1zcGVjaWZpYyBLVk0gZnVuY3Rpb25hbGl0aWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBLVk1fQU1EYCBpcywgYXMgZXhwZWN0ZWQsIHJlbGlhbnQgb24gYm90aCB0aGUgY29yZSBgS1ZNYCBtb2R1bGUgYW5kIGBDUFVfU1VQX0FNRGAuIFRoYXQgbWFrZXMgc2Vuc2U7IEFNRC1zcGVjaWZpYyB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyBkZWZpbml0ZWx5IG5lZWQgdGhlIGJhc2UgS1ZNIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgQ1BVIHN1cHBvcnQuCgpOb3csIGBLVk1gIGl0c2VsZiBpcyB3aGVyZSB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcgYW5kLCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGVzZSBkZXBlbmRlbmNpZXMgaW5zaWRlIGFuZCBvdXQuIEl0JiMzOTtzIGJ1aWx0IHVwb24gYSBjb21wcmVoZW5zaXZlIGZvdW5kYXRpb246IGBISUdIX1JFU19USU1FUlNgLCBgWDg2X0xPQ0FMX0FQSUNgLCBgUFJFRU1QVF9OT1RJRklFUlNgLCBgTU1VX05PVElGSUVSYCwgYW5kIGFsbCB0aGUgYEhBVkVfS1ZNXypgIGZlYXR1cmVzIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nLCBldmVudCBtYW5hZ2VtZW50LCBhbmQgcm91dGluZy4gVGhlIGluY2x1c2lvbiBvZiBgS1ZNX0FTWU5DX1BGYCwgaXRzIHN5bmMgY291bnRlcnBhcnQsIGFuZCB0aGUgZ2VuZXJpYyBkaXJ0eSBsb2cgZmVhdHVyZSBpbmRpY2F0ZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBhcmUgY3JpdGljYWwgY29tcG9uZW50cy4gQWRkaXRpb25hbGx5LCBgS1ZNX1ZGSU9gIHN1cHBvcnQgc2hvd3MgdGhhdCBkZXZpY2UgcGFzcy10aHJvdWdoIGlzIGZ1bGx5IGVuYWJsZWQsIGFuZCB0aGUgUE0gYW5kIHVzZXItcmV0dXJuIG5vdGlmaWNhdGlvbnMgZW5zdXJlIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGFyZSBjb25zaWRlcmVkLiBGaW5hbGx5LCBgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdgLCBgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVGAsIGFuZCBgS1ZNX1hGRVJfVE9fR1VFU1RfV09SS2Agc3VnZ2VzdCB0aGF0IGdlbmVyYWwgaGFyZHdhcmUgZW5hYmxlbWVudCBhbmQgQ1BVIGludGVyYWN0aW9ucyBhcmUgYWxzbyBhY2NvdW50ZWQgZm9yIHdpdGhpbiB0aGUgY29yZSBtb2R1bGVzLgoKR2VuZXJhbGx5LCBhIGJhc2Ugc2V0dXAgY29udGFpbmluZyBgS1ZNYCBhbmQgYEtWTV9BTURgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBtYW55IHR5cGljYWwgdmlydHVhbGl6YXRpb24gbmVlZHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBhbHNvIGNoZWNrIHRoZSBgUEVSRl9FVkVOVFNgIHNldHRpbmcgdG8gZ2V0IGEgZnVsbCBhbmQgY29tcGxldGUgdmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUkZfRVZFTlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9LY29uZmlnPTI9bWVudSBcJiMzNDtQZXJmb3JtYW5jZSBtb25pdG9yaW5nXCYjMzQ7XG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTExLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6MTI6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1JBUExcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwvQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTktXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyMDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yNy1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjI4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI5LVx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9BTURcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zNi1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjM3OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfVU5DT1JFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O0FNRCBVbmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDctXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0ODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX0JSU1xuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmluaXQvS2NvbmZpZz0yMTIxPW1lbnUgXCYjMzQ7S2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnNcJiMzNDtcbmluaXQvS2NvbmZpZy0yMTIyLVxuaW5pdC9LY29uZmlnOjIxMjM6Y29uZmlnIFBFUkZfRVZFTlRTXG5pbml0L0tjb25maWctMjEyNC1cdGJvb2wgXCYjMzQ7S2VybmVsIHBlcmZvcm1hbmNlIGV2ZW50cyBhbmQgY291bnRlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBQZXJmb3JtYW5jZSBFdmVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcGVyZm9ybWFuY2UgZXZlbnRzIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgaW5pdC9LY29uZmlnYCDigJMgSSBrbm93IHRoYXQmIzM5O3Mgb2Z0ZW4gdGhlIHJvb3QgbGV2ZWwgZm9yIHRoZXNlIGtpbmRzIG9mIGZlYXR1cmUgZmxhZ3MuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHRvcC1sZXZlbCBkZWZpbml0aW9uIG9mIGBQRVJGX0VWRU5UU2AgdGhlcmUuCgpOZXh0LCBzaW5jZSBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCBBTUQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIGRyaWxsIGRvd24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBpbiBgYXJjaC94ODYvZXZlbnRzL0tjb25maWdgLiBJJiMzOTttIHNwZWNpZmljYWxseSBodW50aW5nIGZvciBhbnkgQU1ELXJlbGF0ZWQgb3IgQU1ELXByZWZpeGVkIGNvbmZpZyBvcHRpb25zIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgd291bGQgYmUgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCBhbnkgY29uZGl0aW9uYWwgb3Igc3BlY2lhbGl6ZWQgc2V0dGluZ3MuIEkgZXhwZWN0IEkgbWlnaHQgZmluZCBzb21ldGhpbmcgdGhhdCB0aWVzIGludG8gdGhlIENQVSBtb2RlbCBvciBzcGVjaWZpYyBmZWF0dXJlcyBvZiBBTUQgcHJvY2Vzc29ycy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG1lbnUgXCYjMzQ7UGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wmIzM0O1xuICAgMzpcdFxuICAgNDpcdGNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcbiAgIDU6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsIHVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfSU5URUwgXHUwMDI2XHUwMDI2IFBDSVxuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIEluY2x1ZGUgc3VwcG9ydCBmb3IgSW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50cy4gVGhlc2UgYXJlXG4gIDEwOlx0XHQgIGF2YWlsYWJsZSBvbiBOZWhhbGVtRVggYW5kIG1vcmUgbW9kZXJuIHByb2Nlc3NvcnMuXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1JBUExcbiAgMTM6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsL0FNRCByYXBsIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgKENQVV9TVVBfSU5URUwgfHwgQ1BVX1NVUF9BTUQpIFx1MDAyNlx1MDAyNiBQQ0lcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBJbmNsdWRlIHN1cHBvcnQgZm9yIEludGVsIGFuZCBBTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHMgZm9yIHBvd2VyXG4gIDE4Olx0XHQgIG1vbml0b3Jpbmcgb24gbW9kZXJuIHByb2Nlc3NvcnMuXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX0NTVEFURVxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9JTlRFTCBcdTAwMjZcdTAwMjYgUENJXG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBJbnRlbCBjc3RhdGUgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciBwb3dlclxuICAyNjpcdFx0ICBtb25pdG9yaW5nIG9uIG1vZGVybiBwcm9jZXNzb3JzLlxuICAyNzpcdFxuICAyODpcdGNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcbiAgMjk6XHRcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtBTUQgUHJvY2Vzc29yIFBvd2VyIFJlcG9ydGluZyBNZWNoYW5pc21cJiMzNDtcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgUHJvdmlkZSBwb3dlciByZXBvcnRpbmcgbWVjaGFuaXNtIHN1cHBvcnQgZm9yIEFNRCBwcm9jZXNzb3JzLlxuICAzMzpcdFx0ICBDdXJyZW50bHksIGl0IGxldmVyYWdlcyBYODZfRkVBVFVSRV9BQ0NfUE9XRVJcbiAgMzQ6XHRcdCAgKENQVUlEIEZuODAwMF8wMDA3X0VEWFsxMl0pIGludGVyZmFjZSB0byBjYWxjdWxhdGUgdGhlXG4gIDM1Olx0XHQgIGF2ZXJhZ2UgcG93ZXIgY29uc3VtcHRpb24gb24gRmFtaWx5IDE1aCBwcm9jZXNzb3JzLlxuICAzNjpcdFxuICAzNzpcdGNvbmZpZyBQRVJGX0VWRU5UU19BTURfVU5DT1JFXG4gIDM4Olx0XHR0cmlzdGF0ZSBcJiMzNDtBTUQgVW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuICAzOTpcdFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9BTURcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJbmNsdWRlIHN1cHBvcnQgZm9yIEFNRCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciB1c2Ugd2l0aFxuICA0MzpcdFx0ICBlLmcuLCBwZXJmIHN0YXQgLWUgYW1kX2wzLy4uLi8sYW1kX2RmLy4uLi8uXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA0NjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJiMzOTthbWQtdW5jb3JlJiMzOTsuXG4gIDQ3Olx0XG4gIDQ4Olx0Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9CUlNcbiAgNDk6XHRcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4gIDUwOlx0XHRib29sIFwmIzM0O0FNRCBaZW4zIEJyYW5jaCBTYW1wbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzA5CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDEzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIEFNRCBMQlIgVjIgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFzc2Vzc2luZyB0aGUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyBmb3IgdGhpcyBLVk0gcGF0Y2ggaW1wbGVtZW50aW5nIEFNRCBMQlIgVjIgc3VwcG9ydC4gRmlyc3QsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkOiBgS1ZNYCwgYEtWTV9BTURgLCBgUEVSRl9FVkVOVFNgLCBhbmQgYENQVV9TVVBfQU1EYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGluY2x1ZGUgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCwgYXMgdGhleSYjMzk7cmUgY2VudHJhbCB0byBhbnkgTVNSIGhhbmRsaW5nIGluIHRoZSBTVk0gY29kZS4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSBob3QgcGF0aHMuIEhvd2V2ZXIsIHRoZSBndWlkYW5jZSBpcyB0byBwcmlvcml0aXplIEFQSSBlbnRyeXBvaW50cyB0aGF0IGFyZW4mIzM5O3Qgb3Zlcmx5IGdlbmVyaWMgb3Igc3RhdGljIHRvIGF2b2lkIHNrZXdpbmcgdGhlIGZ1enppbmcgZGlzdHJpYnV0aW9uLiBXaGlsZSBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgIGFyZSBjcml0aWNhbCBmb3IgaGl0dGluZyB0aGUgbmV3IE1TUi1yZWxhdGVkIGNvZGUsIHRoZXkgY292ZXIgKmFsbCogTVNScywgYW5kIHRoYXQgbGV2ZWwgb2YgZ2VuZXJhbGl0eSBtaWdodCBub3QgYmUgaWRlYWwgZm9yIGZvY3VzZWQgZnV6emluZyBvbiB0aGlzIHBhdGNoJiMzOTtzIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuCgpBZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOgoKKiAgIGBzdm1fdXBkYXRlX2xicnZgOiBUaGlzIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgYSBub24tc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5IGludm9sdmVkIGluIHVwZGF0aW5nIExCUiB2aXJ0dWFsaXphdGlvbiBhbmQgaXMgbGlua2VkIHRvIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYC4KKiAgIGBzdm1fZW5hYmxlX2xicnZgOiBBbHNvIG5vbi1zdGF0aWMuIFRoaXMgc2VlbXMgaW1wb3J0YW50LCBhcyBpdCBlbmFibGVzIExCUiBWMiBmdW5jdGlvbmFsaXR5LCBhbmQgY2FsbHMgYHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHNgIGFuZCBgc3ZtX3JlY2FsY19sYnJfbXNyX2ludGVyY2VwdHNgLgoqICAgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGA6IFRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiBpbiBgc3ZtX3g4Nl9vcHNgLCB3aGljaCBpcyBub3QgaW5saW5lZCwgYW5kIGlzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIENQVUlEIHVwZGF0ZXMsIGFuZCBpbnRlcmFjdHMgd2l0aCBuZXcgZmVhdHVyZSBiaXRzLgoKU2luY2UgdGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIG5ldyBNU1JzIChgTVNSX0FNRF9EQkdfRVhUTl9DRkdgLCBgTVNSX0FNRDY0X0xCUl9TRUxFQ1RgLCBgTVNSX0FNRF9TQU1QX0JSX0ZST01gKSBhbmQgbmV3IENQVUlEIGZlYXR1cmVzIChgQU1EX0xCUl9WMmAsIGBBTURfTEJSX1BNQ19GUkVFWkVgKSwgdGhlc2UgZnVuY3Rpb25zIHJlcHJlc2VudCBnb29kIGVudHJ5IHBvaW50cyB0byBleGVyY2lzZSB0aGUgbmV3IGNvZGUgcGF0aHMuCgpJJiMzOTt2ZSBhbHNvIGRlY2lkZWQgdG8gaW5jbHVkZSBgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5YC4gSXQmIzM5O3MgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiBhbmQgaXMgY2FsbGVkIGR1cmluZyBLVk0gUE1VIGluaXRpYWxpemF0aW9uLiBJdCBpcyBub3Qgb24gdGhlIGhvdCBwYXRoLgoKSSYjMzk7dmUgY2hlY2tlZCBzb21lIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplYCwgYHN2bV9sYnJ2Ml9zdXBwb3J0ZWRgLCBhbmQgYHN2bV9sYnJ2Ml9hY3RpdmVgLiBUaGVzZSBhcmUgc3RhdGljIGFuZCBzbWFsbCwgc28gdGhleSYjMzk7cmUgcHJvYmFibHkgaW5saW5lZCBhbmQgbm90IGdvb2QgY2FuZGlkYXRlcy4KClNvLCB0aGUgZnV6emluZyBzdHJhdGVneSBpcyBkZWZpbmVkLiBJIHdpbGwgYmUgc3VyZSB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IHRoZSBuZXcgTEJSIFYyIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtDUFVfU1VQX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2bV91cGRhdGVfbGJydiYjMzQ7LAogICAgJiMzNDtzdm1fZW5hYmxlX2xicnYmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkJiMzNDssCiAgICAmIzM0O3BlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFNRCBMQlIgVjIgKExhc3QgQnJhbmNoIFJlY29yZCBWZXJzaW9uIDIpIGluIEtWTS4gSXQgbW9kaWZpZXMgU1ZNIHRvIGhhbmRsZSBuZXcgTVNScyAoTVNSX0FNRF9EQkdfRVhUTl9DRkcsIE1TUl9BTUQ2NF9MQlJfU0VMRUNULCBNU1JfQU1EX1NBTVBfQlJfRlJPTSkgYW5kIENQVUlEIGZlYXR1cmVzIChBTURfTEJSX1YyLCBBTURfTEJSX1BNQ19GUkVFWkUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIEFNRCB2aXJ0dWFsaXphdGlvbiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7Q1BVX1NVUF9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1fdXBkYXRlX2xicnYmIzM0OywKICAgICYjMzQ7c3ZtX2VuYWJsZV9sYnJ2JiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2FmdGVyX3NldF9jcHVpZCYjMzQ7LAogICAgJiMzNDtwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBBTUQgTEJSIFYyIChMYXN0IEJyYW5jaCBSZWNvcmQgVmVyc2lvbiAyKSBpbiBLVk0uIEl0IG1vZGlmaWVzIFNWTSB0byBoYW5kbGUgbmV3IE1TUnMgKE1TUl9BTURfREJHX0VYVE5fQ0ZHLCBNU1JfQU1ENjRfTEJSX1NFTEVDVCwgTVNSX0FNRF9TQU1QX0JSX0ZST00pIGFuZCBDUFVJRCBmZWF0dXJlcyAoQU1EX0xCUl9WMiwgQU1EX0xCUl9QTUNfRlJFRVpFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSBBTUQgdmlydHVhbGl6YXRpb24gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDoxOS4zNTM4MzY2NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM1ODIyNjg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV91cGRhdGVfbGJydlwiLFxuICAgIFwic3ZtX2VuYWJsZV9sYnJ2XCIsXG4gICAgXCJzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRcIixcbiAgICBcInBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQU1EIExCUiBWMiAoTGFzdCBCcmFuY2ggUmVjb3JkIFZlcnNpb24gMikgaW4gS1ZNLiBJdCBtb2RpZmllcyBTVk0gdG8gaGFuZGxlIG5ldyBNU1JzIChNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9BTURfU0FNUF9CUl9GUk9NKSBhbmQgQ1BVSUQgZmVhdHVyZXMgKEFNRF9MQlJfVjIsIEFNRF9MQlJfUE1DX0ZSRUVaRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gQU1EIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDoxOS4zNTM4NDMwNTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzAxMzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQwMzBiM2RhOTgyYjM3ODhlNTA4NjhiMzFhYjNiMmVkMjAyMmM2OWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDc6NDA6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2NvcmUuYyBiL2FyY2gveDg2L2V2ZW50cy9jb3JlLmNcXG5pbmRleCA0YjllMTA1MzA5YzZhOS4uNGFjYmNhMWE4OGExODAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2NvcmUuY1xcbisrKyBiL2FyY2gveDg2L2V2ZW50cy9jb3JlLmNcXG5AQCAtMzEzOCw2ICszMTM4LDcgQEAgdm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKVxcbiBcXHRjYXAtXFx1MDAzZWJpdF93aWR0aF9maXhlZFxcdD0gY2FwLVxcdTAwM2VudW1fY291bnRlcnNfZml4ZWQgPyB4ODZfcG11LmNudHZhbF9iaXRzIDogMDtcXG4gXFx0Y2FwLVxcdTAwM2VldmVudHNfbWFza1xcdD0gKHVuc2lnbmVkIGludCl4ODZfcG11LmV2ZW50c19tYXNrbDtcXG4gXFx0Y2FwLVxcdTAwM2VldmVudHNfbWFza19sZW5cXHQ9IHg4Nl9wbXUuZXZlbnRzX21hc2tfbGVuO1xcbitcXHRjYXAtXFx1MDAzZW51bV9icmFuY2hlc19sYnJcXHQ9IHg4Nl9wbXUubGJyX25yO1xcbiBcXHRjYXAtXFx1MDAzZXBlYnNfZXB0XFx0XFx0PSB4ODZfcG11LnBlYnNfZXB0O1xcbiBcXHRjYXAtXFx1MDAzZW1lZGlhdGVkXFx0XFx0PSAhIShwbXUuY2FwYWJpbGl0aWVzIFxcdTAwMjYgUEVSRl9QTVVfQ0FQX01FRElBVEVEX1ZQTVUpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxcbmluZGV4IDFlYjEzNjczZTg4OWY5Li5mMThjZjA5ODZlMTJkMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcXG5AQCAtMzA2LDYgKzMwNiw3IEBAIHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkge1xcbiBcXHRpbnRcXHRcXHRiaXRfd2lkdGhfZml4ZWQ7XFxuIFxcdHVuc2lnbmVkIGludFxcdGV2ZW50c19tYXNrO1xcbiBcXHRpbnRcXHRcXHRldmVudHNfbWFza19sZW47XFxuK1xcdGludFxcdFxcdG51bV9icmFuY2hlc19sYnI7XFxuIFxcdHVuc2lnbmVkIGludFxcdHBlYnNfZXB0XFx0OjE7XFxuIFxcdHVuc2lnbmVkIGludFxcdG1lZGlhdGVkXFx0OjE7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5pbmRleCBhYTYzNDMxYmE5MmMzMS4uZjNiYzk3YmM2YWNhYjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxcbkBAIC0yNTMsNiArMjUzLDggQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEge1xcbiAjZGVmaW5lIFNWTV9UU0NfUkFUSU9fTUFYXFx0MHgwMDAwMDBmZmZmZmZmZmZmVUxMXFxuICNkZWZpbmUgU1ZNX1RTQ19SQVRJT19ERUZBVUxUXFx0MHgwMTAwMDAwMDAwVUxMXFxuIFxcbisjZGVmaW5lIFNWTV9MQlJfVjJfU1RBQ0tfU0laRSAxNlxcbitcXG4gXFxuIC8qIEFWSUMgKi9cXG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfR1VFU1RfUEhZU0lDQUxfSURfTUFTS1xcdCgweEZGVUxMKVxcbkBAIC0zNjgsOCArMzcwLDE1IEBAIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSB7XFxuIFxcdHU2NCBicl90bztcXG4gXFx0dTY0IGxhc3RfZXhjcF9mcm9tO1xcbiBcXHR1NjQgbGFzdF9leGNwX3RvO1xcbi1cXHR1OCByZXNlcnZlZF8weDI5OFs3Ml07XFxuK1xcdHU2NCBkYmdfZXh0bl9jZmc7XFxuK1xcdHU4IHJlc2VydmVkXzB4MmEwWzY0XTtcXG4gXFx0dTY0IHNwZWNfY3RybDtcXHRcXHQvKiBHdWVzdCB2ZXJzaW9uIG9mIFNQRUNfQ1RSTCBhdCAweDJFMCAqL1xcbitcXHR1OCByZXNlcnZlZF8weDJlOFs5MDRdO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHR1NjQgbGJyX3N0YWNrX2Zyb207XFxuK1xcdFxcdHU2NCBsYnJfc3RhY2tfdG87XFxuK1xcdH0gX19wYWNrZWQgbGJyWzE2XTtcXG4rXFx0dTY0IGxicl9zZWxlY3Q7XFxuIH0gX19wYWNrZWQ7XFxuIFxcbiAvKiBTYXZlIGFyZWEgZGVmaW5pdGlvbiBmb3IgU0VWLUVTIGFuZCBTRVYtU05QIGd1ZXN0cyAqL1xcbkBAIC01NTIsNyArNTYxLDcgQEAgc3RydWN0IHZtY2Ige1xcbiBcXHR9O1xcbiB9IF9fcGFja2VkO1xcbiBcXG4tI2RlZmluZSBFWFBFQ1RFRF9WTUNCX1NBVkVfQVJFQV9TSVpFXFx0XFx0NzQ0XFxuKyNkZWZpbmUgRVhQRUNURURfVk1DQl9TQVZFX0FSRUFfU0laRVxcdFxcdDE5MTJcXG4gI2RlZmluZSBFWFBFQ1RFRF9HSENCX1NBVkVfQVJFQV9TSVpFXFx0XFx0MTAzMlxcbiAjZGVmaW5lIEVYUEVDVEVEX1NFVl9FU19TQVZFX0FSRUFfU0laRVxcdFxcdDE2NDhcXG4gI2RlZmluZSBFWFBFQ1RFRF9WTUNCX0NPTlRST0xfQVJFQV9TSVpFXFx0XFx0MTAyNFxcbkBAIC01NzcsNyArNTg2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXFxuIFxcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4ZDgpO1xcbiBcXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDE4MCk7XFxuIFxcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MjQ4KTtcXG4tXFx0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHgyOTgpO1xcbitcXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDJhMCk7XFxuK1xcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQodm1jYl9zYXZlX2FyZWEsIDB4MmU4KTtcXG4gXFxuIFxcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQoc2V2X2VzX3NhdmVfYXJlYSwgMHhjOCk7XFxuIFxcdEJVSUxEX0JVR19SRVNFUlZFRF9PRkZTRVQoc2V2X2VzX3NhdmVfYXJlYSwgMHhjYyk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG5pbmRleCAyNjk4ZmE0MmNkOTcxMS4uNTFiNjkxZjkxNDQyYmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbkBAIC0xMjY2LDcgKzEyNjYsOSBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXFxuIFxcdCk7XFxuIFxcbiBcXHRrdm1fY3B1X2NhcF9pbml0KENQVUlEXzgwMDBfMDAyMl9FQVgsXFxuLVxcdFxcdEYoUEVSRk1PTl9WMiksXFxuK1xcdFxcdFNDQVRURVJFRF9GKFBFUkZNT05fVjIpLFxcbitcXHRcXHRTQ0FUVEVSRURfRihBTURfTEJSX1YyKSxcXG4rXFx0XFx0U0NBVFRFUkVEX0YoQU1EX0xCUl9QTUNfRlJFRVpFKSxcXG4gXFx0KTtcXG4gXFxuIFxcdGlmICghc3RhdGljX2NwdV9oYXNfYnVnKFg4Nl9CVUdfTlVMTF9TRUcpKVxcbkBAIC0xODgzLDYgKzE4ODUsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXFxuIFxcdFxcdGNwdWlkX2VudHJ5X292ZXJyaWRlKGVudHJ5LCBDUFVJRF84MDAwXzAwMjJfRUFYKTtcXG4gXFxuIFxcdFxcdGVieC5zcGxpdC5udW1fY29yZV9wbWMgPSBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3A7XFxuK1xcbitcXHRcXHRpZiAoa3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpKVxcbitcXHRcXHRcXHRlYnguc3BsaXQubGJyX3YyX3N0YWNrX3N6ID1cXG4rXFx0XFx0XFx0XFx0bWluKGt2bV9wbXVfY2FwLm51bV9icmFuY2hlc19sYnIsIFNWTV9MQlJfVjJfU1RBQ0tfU0laRSk7XFxuK1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZWJ4ID0gZWJ4LmZ1bGw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXFxuaW5kZXggNjU3ZjVmNzQzZWQ5NzUuLjlhNThmOTFlYjE3M2QwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXFxuQEAgLTcwLDcgKzcwLDkgQEBcXG4gI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDXFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAwN19FRFgsIDgpXFxuIFxcbiAvKiBDUFVJRCBsZXZlbCAweDgwMDAwMDIyIChFQVgpICovXFxuLSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMClcXG4rI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMlxcdFxcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAwKVxcbisjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9BTURfTEJSX1YyXFx0XFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDEpXFxuKyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRVxcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAyKVxcbiBcXG4gLyogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUNYKSAqL1xcbiAjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9UU0FfU1FfTk9cXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIxX0VDWCwgMSlcXG5AQCAtMTQ2LDYgKzE0OCw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIF9fZmVhdHVyZV90cmFuc2xhdGUoaW50IHg4Nl9mZWF0dXJlKVxcbiBcXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFNHWF9FREVDQ1NTQSk7XFxuIFxcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQ09OU1RBTlRfVFNDKTtcXG4gXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShQRVJGTU9OX1YyKTtcXG4rXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShBTURfTEJSX1YyKTtcXG4rXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShBTURfTEJSX1BNQ19GUkVFWkUpO1xcbiBcXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFJSU0JBX0NUUkwpO1xcbiBcXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEJISV9DVFJMKTtcXG4gXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShUU0FfU1FfTk8pO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li4zZWM5MWMxYzU4ZGNjNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC03NDQsNiArNzQ0LDQ3IEBAIHN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0c3ZtLVxcdTAwM2VsYnJfbXNyc19pbnRlcmNlcHRlZCA9IGludGVyY2VwdDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgc3ZtX2xicnYyX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBzdm1fbGJydjJfYWN0aXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4rXFx0cmV0dXJuIHN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuZGJnX2V4dG5fY2ZnIFxcdTAwMjYgREJHX0VYVE5fQ0ZHX0xCUlYyRU4pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4rXFx0Ym9vbCBpbnRlcmNlcHQgPSAhc3ZtX2xicnYyX2FjdGl2ZSh2Y3B1KTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoaW50ZXJjZXB0ID09IHN2bS1cXHUwMDNlbGJydjJfbXNyc19pbnRlcmNlcHRlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDMyOyBpKyspXFxuK1xcdFxcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRF9TQU1QX0JSX0ZST00gKyBpLCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcXG4rXFxuK1xcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogREJHX0VYVE5fQ0ZHIHN0YXlzIHBlcm1hbmVudGx5IGludGVyY2VwdGVkIGZvciBub24tU0VWLUVTIGd1ZXN0cyBzb1xcbitcXHQgKiBLVk0gY2FuIG9ic2VydmUgTEJSVjJFTiBhbmQgbGF6aWx5IHRvZ2dsZSBWX0xCUi4gIFNFVi1FUysgZ3Vlc3RzIG11c3RcXG4rXFx0ICogZGVsZWdhdGUgTEJSIHZpcnR1YWxpemF0aW9uIHRvIHRoZSBwcm9jZXNzb3IgKHBlciB0aGUgQVBNKSwgd2hlcmVcXG4rXFx0ICogaW50ZXJjZXB0aW5nIExCUiBNU1JzIGNhbiBiZSBmYXRhbCwgc28gdG9nZ2xlIGl0IHdpdGggdGhlIHJlc3QuICBTZWVcXG4rXFx0ICogY29tbWl0IGI3ZTRiZTBhMjI0ZiAoXFxcIktWTTogU0VWLUVTOiBEZWxlZ2F0ZSBMQlIgdmlydHVhbGl6YXRpb24gdG8gdGhlXFxuK1xcdCAqIHByb2Nlc3NvclxcXCIpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX3Nldl9lc19ndWVzdCh2Y3B1KSlcXG4rXFx0XFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7XFxuK1xcbitcXHRzdm0tXFx1MDAzZWxicnYyX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XFxuK31cXG4rXFxuIHZvaWQgc3ZtX3ZjcHVfZnJlZV9tc3JwbSh2b2lkICptc3JwbSlcXG4ge1xcbiBcXHRfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKG1zcnBtKSwgZ2V0X29yZGVyKE1TUlBNX1NJWkUpKTtcXG5AQCAtNzk5LDggKzg0MCwxMCBAQCBzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0c3ZtX2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX1NZU0NBTExfTUFTSywgTVNSX1RZUEVfUlcpO1xcbiAjZW5kaWZcXG4gXFxuLVxcdGlmIChsYnJ2KVxcbitcXHRpZiAobGJydikge1xcbiBcXHRcXHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcXG4rXFx0XFx0c3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJQQikpXFxuIFxcdFxcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0lBMzJfUFJFRF9DTUQsIE1TUl9UWVBFX1csXFxuQEAgLTg2OCw2ICs5MTEsNyBAQCB2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XFxuIFxcdHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbitcXHRzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX3N2bV9kaXNhYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC04ODAsOSArOTI0LDExIEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0Ym9vbCBjdXJyZW50X2VuYWJsZV9sYnJ2ID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLm1pc2NfY3RsMiBcXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XFxuK1xcbiBcXHRib29sIGVuYWJsZV9sYnJ2ID0gKHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5kYmdjdGwgXFx1MDAyNiBERUJVR0NUTE1TUl9MQlIpIHx8XFxuIFxcdFxcdFxcdCAgICAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcXHUwMDI2XFx1MDAyNiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKHN2bS1cXHUwMDNlbmVzdGVkLmN0bC5taXNjX2N0bDIgXFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7XFxuK1xcdFxcdFxcdCAgICAoc3ZtLVxcdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIpKSB8fFxcbitcXHRcXHRcXHQgICAgc3ZtX2xicnYyX2FjdGl2ZSh2Y3B1KTtcXG4gXFxuIFxcdGlmIChlbmFibGVfbGJydiBcXHUwMDI2XFx1MDAyNiAhY3VycmVudF9lbmFibGVfbGJydilcXG4gXFx0XFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XFxuQEAgLTg5Niw2ICs5NDIsNyBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqIGRvLCBzbyBhbHdheXMgcmVjYWxjdWxhdGUgdGhlIGludGVyY2VwdHMgaGVyZS5cXG4gXFx0ICovXFxuIFxcdHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbitcXHRzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbiB9XFxuIFxcbiB2b2lkIGRpc2FibGVfbm1pX3NpbmdsZXN0ZXAoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuQEAgLTEzNDEsNiArMTM4OCw3IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdHN2bS1cXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSB0cnVlO1xcbiBcXHRzdm0tXFx1MDAzZWxicl9tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcXG4rXFx0c3ZtLVxcdTAwM2VsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcXG4gXFxuIFxcdHN2bS1cXHUwMDNldm1jYjAxLnB0ciA9IHBhZ2VfYWRkcmVzcyh2bWNiMDFfcGFnZSk7XFxuIFxcdHN2bS1cXHUwMDNldm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5AQCAtMjc4Nyw2ICsyODM1LDE5IEBAIHN0YXRpYyB1NjQgKnN2bV92bWNiX2xicihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIG1zcilcXG4gXFx0cmV0dXJuIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuYnJfZnJvbTtcXG4gfVxcbiBcXG4rc3RhdGljIHU2NCAqc3ZtX3ZtY2JfbGJydjIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiBtc3IpXFxuK3tcXG4rXFx0dTMyIG9mZnNldCA9IG1zciAtIE1TUl9BTURfU0FNUF9CUl9GUk9NO1xcbitcXHR1MzIgaWR4ID0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIDE7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcXHUwMDNlPSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpKVxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5sYnJbMF0ubGJyX3N0YWNrX2Zyb207XFxuK1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwMjYgMSlcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUubGJyW2lkeF0ubGJyX3N0YWNrX3RvO1xcbitcXHRyZXR1cm4gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5sYnJbaWR4XS5sYnJfc3RhY2tfZnJvbTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgc2V2X2VzX3ByZXZlbnRfbXNyX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuIHtcXG5AQCAtMjg4Miw2ICsyOTQzLDIxIEBAIHN0YXRpYyBpbnQgc3ZtX2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiBcXHRjYXNlIE1TUl9JQTMyX0xBU1RJTlRUT0lQOlxcbiBcXHRcXHRtc3JfaW5mby1cXHUwMDNlZGF0YSA9IGxicnYgPyAqc3ZtX3ZtY2JfbGJyKHN2bSwgbXNyX2luZm8tXFx1MDAzZWluZGV4KSA6IDA7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1TUl9BTURfREJHX0VYVE5fQ0ZHOlxcbitcXHRcXHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXFxuK1xcdFxcdFxcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcXG4rXFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuZGJnX2V4dG5fY2ZnO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNU1JfQU1ENjRfTEJSX1NFTEVDVDpcXG4rXFx0XFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxcbitcXHRcXHRcXHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XFxuK1xcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2VzYXZlLmxicl9zZWxlY3Q7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1TUl9BTURfU0FNUF9CUl9GUk9NIC4uLiBNU1JfQU1EX1NBTVBfQlJfRlJPTSArIDMxOlxcbitcXHRcXHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXFxuK1xcdFxcdFxcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcXG4rXFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSAqc3ZtX3ZtY2JfbGJydjIoc3ZtLCBtc3JfaW5mby1cXHUwMDNlaW5kZXgpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBNU1JfVk1fSFNBVkVfUEE6XFxuIFxcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gc3ZtLVxcdTAwM2VuZXN0ZWQuaHNhdmVfbXNyO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMzE2MCw2ICszMjM2LDEwIEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcilcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+REVCVUdDVExNU1JfQlRGO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoKGRhdGEgXFx1MDAyNiBERUJVR0NUTF9MQlJfUE1DX0ZSRUVaRV9CSVRTKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSkpXFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAyNiBERUJVR0NUTF9SRVNFUlZFRF9CSVRTKVxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFxuQEAgLTMxODEsNiArMzI2MSw0MCBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpXFxuIFxcdFxcdCpzdm1fdm1jYl9sYnIoc3ZtLCBlY3gpID0gZGF0YTtcXG4gXFx0XFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cXHUwMDNldm1jYiwgVk1DQl9MQlIpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNU1JfQU1EX0RCR19FWFROX0NGRzpcXG4rXFx0XFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxcbitcXHRcXHRcXHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XFxuK1xcbitcXHRcXHRpZiAoZGF0YSBcXHUwMDI2IERCR19FWFROX0NGR19SRVNFUlZFRF9CSVRTKVxcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdFxcdGlmIChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuZGJnX2V4dG5fY2ZnID09IGRhdGEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9IGRhdGE7XFxuK1xcdFxcdHZtY2JfbWFya19kaXJ0eShzdm0tXFx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcXG4rXFx0XFx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNU1JfQU1ENjRfTEJSX1NFTEVDVDpcXG4rXFx0XFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxcbitcXHRcXHRcXHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XFxuK1xcbitcXHRcXHRpZiAoZGF0YSBcXHUwMDI2IExCUl9TRUxFQ1RfUkVTRVJWRURfQklUUylcXG4rXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRcXHRpZiAoc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2VzYXZlLmxicl9zZWxlY3QgPT0gZGF0YSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUubGJyX3NlbGVjdCA9IGRhdGE7XFxuK1xcdFxcdHZtY2JfbWFya19kaXJ0eShzdm0tXFx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTVNSX0FNRF9TQU1QX0JSX0ZST00gLi4uIE1TUl9BTURfU0FNUF9CUl9GUk9NICsgMzE6XFxuK1xcdFxcdGlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xcbitcXG4rXFx0XFx0KnN2bV92bWNiX2xicnYyKHN2bSwgZWN4KSA9IGRhdGE7XFxuK1xcdFxcdHZtY2JfbWFya19kaXJ0eShzdm0tXFx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTVNSX1ZNX0hTQVZFX1BBOlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBPbGQga2VybmVscyBkaWQgbm90IHZhbGlkYXRlIHRoZSB2YWx1ZSB3cml0dGVuIHRvXFxuQEAgLTQ3MTAsNiArNDgyNCwyMCBAQCBzdGF0aWMgYm9vbCBzdm1faGFzX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmVudHJ5O1xcbitcXG4rXFx0ZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcXG4rXFx0aWYgKCFlbnRyeSB8fCBlbnRyeS1cXHUwMDNlZWF4IFxcdTAwM2MgMHg4MDAwMDAyMilcXG4rXFx0XFx0Z290byBub3RfZm91bmQ7XFxuK1xcdGVudHJ5ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAyMik7XFxuK1xcdGlmIChlbnRyeSlcXG4rXFx0XFx0cmV0dXJuIChlbnRyeS1cXHUwMDNlZWJ4IFxcdTAwM2VcXHUwMDNlIDQpIFxcdTAwMjYgMHgzZjtcXG4rbm90X2ZvdW5kOlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG5AQCAtNDczNiw2ICs0ODY0LDEwIEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmIChndWVzdF9jcHVpZF9pc19pbnRlbF9jb21wYXRpYmxlKHZjcHUpKVxcbiBcXHRcXHRndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX1ZfVk1TQVZFX1ZNTE9BRCk7XFxuIFxcbitcXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNwdWlkX3F1ZXJ5X2xicnYyX3N0YWNrX3NpemUodmNwdSkgIT0gU1ZNX0xCUl9WMl9TVEFDS19TSVpFKVxcbitcXHRcXHRndWVzdF9jcHVfY2FwX2NsZWFyKHZjcHUsIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xcbitcXG4gXFx0aWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSlcXG4gXFx0XFx0c2V2X3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN2bSk7XFxuIH1cXG5AQCAtNTU4Miw2ICs1NzE0LDEwIEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXFxuIFxcdFxcdGlmIChrdm1fcG11X2NhcC52ZXJzaW9uICE9IDIgfHxcXG4gXFx0XFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFKSlcXG4gXFx0XFx0XFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMik7XFxuK1xcbitcXHRcXHRpZiAoIWxicnYgfHwgIWVuYWJsZV9tZWRpYXRlZF9wbXUgfHxcXG4rXFx0XFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXFxuK1xcdFxcdFxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDUFVJRCAweDgwMDAwMDFGIChTTUUvU0VWIGZlYXR1cmVzKSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li4xMDVhNzFkNjlkNjhhOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC0zNjMsNiArMzYzLDcgQEAgc3RydWN0IHZjcHVfc3ZtIHtcXG4gXFx0Ym9vbCBhdmljX2lycV93aW5kb3c7XFxuIFxcdGJvb2wgeDJhdmljX21zcnNfaW50ZXJjZXB0ZWQ7XFxuIFxcdGJvb2wgbGJyX21zcnNfaW50ZXJjZXB0ZWQ7XFxuK1xcdGJvb2wgbGJydjJfbXNyc19pbnRlcmNlcHRlZDtcXG4gXFxuIFxcdC8qIEd1ZXN0IEdJRiB2YWx1ZSwgdXNlZCB3aGVuIHZHSUYgaXMgbm90IGVuYWJsZWQgKi9cXG4gXFx0Ym9vbCBndWVzdF9naWY7XFxuQEAgLTc4Myw3ICs3ODQsMTEgQEAgQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyhib29sLCB0ZXN0LCB0ZXN0KVxcbiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIGNsZWFyLCBfX2NsZWFyKVxcbiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIHNldCwgX19zZXQpXFxuIFxcbi0jZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH5ERUJVR0NUTE1TUl9MQlIpXFxuKyNkZWZpbmUgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUU1xcdChERUJVR0NUTE1TUl9GUkVFWkVfTEJSU19PTl9QTUkgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IERFQlVHQ1RMTVNSX0ZSRUVaRV9QRVJGTU9OX09OX1BNSSlcXG4rI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTXFx0KH4oREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykpXFxuKyNkZWZpbmUgREJHX0VYVE5fQ0ZHX1JFU0VSVkVEX0JJVFMgKH5EQkdfRVhUTl9DRkdfTEJSVjJFTilcXG4rI2RlZmluZSBMQlJfU0VMRUNUX1JFU0VSVkVEX0JJVFMgKH5HRU5NQVNLX1VMTCg4LCAwKSlcXG4gXFxuIC8qIHN2bS5jICovXFxuIGV4dGVybiBib29sIGR1bXBfaW52YWxpZF92bWNiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDoxOS44OTc2MDEwODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODgxNDQ1NDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV91cGRhdGVfbGJydlwiLFxuICAgIFwic3ZtX2VuYWJsZV9sYnJ2XCIsXG4gICAgXCJzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRcIixcbiAgICBcInBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQU1EIExCUiBWMiAoTGFzdCBCcmFuY2ggUmVjb3JkIFZlcnNpb24gMikgaW4gS1ZNLiBJdCBtb2RpZmllcyBTVk0gdG8gaGFuZGxlIG5ldyBNU1JzIChNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9BTURfU0FNUF9CUl9GUk9NKSBhbmQgQ1BVSUQgZmVhdHVyZXMgKEFNRF9MQlJfVjIsIEFNRF9MQlJfUE1DX0ZSRUVaRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gQU1EIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MDMwYjNkYTk4MmIzNzg4ZTUwODY4YjMxYWIzYjJlZDIwMjJjNjljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMDc6NDA6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvY29yZS5jIGIvYXJjaC94ODYvZXZlbnRzL2NvcmUuY1xuaW5kZXggNGI5ZTEwNTMwOWM2YTkuLjRhY2JjYTFhODhhMTgwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2NvcmUuY1xuKysrIGIvYXJjaC94ODYvZXZlbnRzL2NvcmUuY1xuQEAgLTMxMzgsNiArMzEzOCw3IEBAIHZvaWQgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgKmNhcClcbiBcdGNhcC1cdTAwM2ViaXRfd2lkdGhfZml4ZWRcdD0gY2FwLVx1MDAzZW51bV9jb3VudGVyc19maXhlZCA/IHg4Nl9wbXUuY250dmFsX2JpdHMgOiAwO1xuIFx0Y2FwLVx1MDAzZWV2ZW50c19tYXNrXHQ9ICh1bnNpZ25lZCBpbnQpeDg2X3BtdS5ldmVudHNfbWFza2w7XG4gXHRjYXAtXHUwMDNlZXZlbnRzX21hc2tfbGVuXHQ9IHg4Nl9wbXUuZXZlbnRzX21hc2tfbGVuO1xuK1x0Y2FwLVx1MDAzZW51bV9icmFuY2hlc19sYnJcdD0geDg2X3BtdS5sYnJfbnI7XG4gXHRjYXAtXHUwMDNlcGVic19lcHRcdFx0PSB4ODZfcG11LnBlYnNfZXB0O1xuIFx0Y2FwLVx1MDAzZW1lZGlhdGVkXHRcdD0gISEocG11LmNhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9QTVVfQ0FQX01FRElBVEVEX1ZQTVUpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcbmluZGV4IDFlYjEzNjczZTg4OWY5Li5mMThjZjA5ODZlMTJkMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXG5AQCAtMzA2LDYgKzMwNiw3IEBAIHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkge1xuIFx0aW50XHRcdGJpdF93aWR0aF9maXhlZDtcbiBcdHVuc2lnbmVkIGludFx0ZXZlbnRzX21hc2s7XG4gXHRpbnRcdFx0ZXZlbnRzX21hc2tfbGVuO1xuK1x0aW50XHRcdG51bV9icmFuY2hlc19sYnI7XG4gXHR1bnNpZ25lZCBpbnRcdHBlYnNfZXB0XHQ6MTtcbiBcdHVuc2lnbmVkIGludFx0bWVkaWF0ZWRcdDoxO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMzEuLmYzYmM5N2JjNmFjYWIzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5AQCAtMjUzLDYgKzI1Myw4IEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcbiAjZGVmaW5lIFNWTV9UU0NfUkFUSU9fTUFYXHQweDAwMDAwMGZmZmZmZmZmZmZVTExcbiAjZGVmaW5lIFNWTV9UU0NfUkFUSU9fREVGQVVMVFx0MHgwMTAwMDAwMDAwVUxMXG4gXG4rI2RlZmluZSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUgMTZcbitcbiBcbiAvKiBBVklDICovXG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfR1VFU1RfUEhZU0lDQUxfSURfTUFTS1x0KDB4RkZVTEwpXG5AQCAtMzY4LDggKzM3MCwxNSBAQCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEge1xuIFx0dTY0IGJyX3RvO1xuIFx0dTY0IGxhc3RfZXhjcF9mcm9tO1xuIFx0dTY0IGxhc3RfZXhjcF90bztcbi1cdHU4IHJlc2VydmVkXzB4Mjk4WzcyXTtcbitcdHU2NCBkYmdfZXh0bl9jZmc7XG4rXHR1OCByZXNlcnZlZF8weDJhMFs2NF07XG4gXHR1NjQgc3BlY19jdHJsO1x0XHQvKiBHdWVzdCB2ZXJzaW9uIG9mIFNQRUNfQ1RSTCBhdCAweDJFMCAqL1xuK1x0dTggcmVzZXJ2ZWRfMHgyZThbOTA0XTtcbitcdHN0cnVjdCB7XG4rXHRcdHU2NCBsYnJfc3RhY2tfZnJvbTtcbitcdFx0dTY0IGxicl9zdGFja190bztcbitcdH0gX19wYWNrZWQgbGJyWzE2XTtcbitcdHU2NCBsYnJfc2VsZWN0O1xuIH0gX19wYWNrZWQ7XG4gXG4gLyogU2F2ZSBhcmVhIGRlZmluaXRpb24gZm9yIFNFVi1FUyBhbmQgU0VWLVNOUCBndWVzdHMgKi9cbkBAIC01NTIsNyArNTYxLDcgQEAgc3RydWN0IHZtY2Ige1xuIFx0fTtcbiB9IF9fcGFja2VkO1xuIFxuLSNkZWZpbmUgRVhQRUNURURfVk1DQl9TQVZFX0FSRUFfU0laRVx0XHQ3NDRcbisjZGVmaW5lIEVYUEVDVEVEX1ZNQ0JfU0FWRV9BUkVBX1NJWkVcdFx0MTkxMlxuICNkZWZpbmUgRVhQRUNURURfR0hDQl9TQVZFX0FSRUFfU0laRVx0XHQxMDMyXG4gI2RlZmluZSBFWFBFQ1RFRF9TRVZfRVNfU0FWRV9BUkVBX1NJWkVcdFx0MTY0OFxuICNkZWZpbmUgRVhQRUNURURfVk1DQl9DT05UUk9MX0FSRUFfU0laRVx0XHQxMDI0XG5AQCAtNTc3LDcgKzU4Niw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuIFx0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVCh2bWNiX3NhdmVfYXJlYSwgMHhkOCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDE4MCk7XG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI0OCk7XG4tXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDI5OCk7XG4rXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDJhMCk7XG4rXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHZtY2Jfc2F2ZV9hcmVhLCAweDJlOCk7XG4gXG4gXHRCVUlMRF9CVUdfUkVTRVJWRURfT0ZGU0VUKHNldl9lc19zYXZlX2FyZWEsIDB4YzgpO1xuIFx0QlVJTERfQlVHX1JFU0VSVkVEX09GRlNFVChzZXZfZXNfc2F2ZV9hcmVhLCAweGNjKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5pbmRleCAyNjk4ZmE0MmNkOTcxMS4uNTFiNjkxZjkxNDQyYmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC0xMjY2LDcgKzEyNjYsOSBAQCB2b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXG4gXHQpO1xuIFxuIFx0a3ZtX2NwdV9jYXBfaW5pdChDUFVJRF84MDAwXzAwMjJfRUFYLFxuLVx0XHRGKFBFUkZNT05fVjIpLFxuK1x0XHRTQ0FUVEVSRURfRihQRVJGTU9OX1YyKSxcbitcdFx0U0NBVFRFUkVEX0YoQU1EX0xCUl9WMiksXG4rXHRcdFNDQVRURVJFRF9GKEFNRF9MQlJfUE1DX0ZSRUVaRSksXG4gXHQpO1xuIFxuIFx0aWYgKCFzdGF0aWNfY3B1X2hhc19idWcoWDg2X0JVR19OVUxMX1NFRykpXG5AQCAtMTg4Myw2ICsxODg1LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fZG9fY3B1aWRfZnVuYyhzdHJ1Y3Qga3ZtX2NwdWlkX2FycmF5ICphcnJheSwgdTMyIGZ1bmN0aW9uKVxuIFx0XHRjcHVpZF9lbnRyeV9vdmVycmlkZShlbnRyeSwgQ1BVSURfODAwMF8wMDIyX0VBWCk7XG4gXG4gXHRcdGVieC5zcGxpdC5udW1fY29yZV9wbWMgPSBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZ3A7XG4rXG4rXHRcdGlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikpXG4rXHRcdFx0ZWJ4LnNwbGl0Lmxicl92Ml9zdGFja19zeiA9XG4rXHRcdFx0XHRtaW4oa3ZtX3BtdV9jYXAubnVtX2JyYW5jaGVzX2xiciwgU1ZNX0xCUl9WMl9TVEFDS19TSVpFKTtcbitcbiBcdFx0ZW50cnktXHUwMDNlZWJ4ID0gZWJ4LmZ1bGw7XG4gXHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG5pbmRleCA2NTdmNWY3NDNlZDk3NS4uOWE1OGY5MWViMTczZDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oXG5AQCAtNzAsNyArNzAsOSBAQFxuICNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1x0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAwN19FRFgsIDgpXG4gXG4gLyogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMiAoRUFYKSAqL1xuLSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAwKVxuKyNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcdFx0S1ZNX1g4Nl9GRUFUVVJFKENQVUlEXzgwMDBfMDAyMl9FQVgsIDApXG4rI2RlZmluZSBLVk1fWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMlx0XHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMSlcbisjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkVcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAyKVxuIFxuIC8qIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVDWCkgKi9cbiAjZGVmaW5lIEtWTV9YODZfRkVBVFVSRV9UU0FfU1FfTk9cdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjFfRUNYLCAxKVxuQEAgLTE0Niw2ICsxNDgsOCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBfX2ZlYXR1cmVfdHJhbnNsYXRlKGludCB4ODZfZmVhdHVyZSlcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoU0dYX0VERUNDU1NBKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQ09OU1RBTlRfVFNDKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoUEVSRk1PTl9WMik7XG4rXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKEFNRF9MQlJfVjIpO1xuK1x0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShBTURfTEJSX1BNQ19GUkVFWkUpO1xuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShSUlNCQV9DVFJMKTtcbiBcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQkhJX0NUUkwpO1xuIFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShUU0FfU1FfTk8pO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlZjY5YTUxYWIyN2Y5OC4uM2VjOTFjMWM1OGRjYzUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtNzQ0LDYgKzc0NCw0NyBAQCBzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm0tXHUwMDNlbGJyX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XG4gfVxuIFxuK3N0YXRpYyBib29sIHN2bV9sYnJ2Ml9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBzdm1fbGJydjJfYWN0aXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdHJldHVybiBzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIChzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyBcdTAwMjYgREJHX0VYVE5fQ0ZHX0xCUlYyRU4pO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdGJvb2wgaW50ZXJjZXB0ID0gIXN2bV9sYnJ2Ml9hY3RpdmUodmNwdSk7XG4rXHRpbnQgaTtcbitcbitcdGlmIChpbnRlcmNlcHQgPT0gc3ZtLVx1MDAzZWxicnYyX21zcnNfaW50ZXJjZXB0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDMyOyBpKyspXG4rXHRcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRF9TQU1QX0JSX0ZST00gKyBpLCBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbitcbitcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuK1xuK1x0LypcbitcdCAqIERCR19FWFROX0NGRyBzdGF5cyBwZXJtYW5lbnRseSBpbnRlcmNlcHRlZCBmb3Igbm9uLVNFVi1FUyBndWVzdHMgc29cbitcdCAqIEtWTSBjYW4gb2JzZXJ2ZSBMQlJWMkVOIGFuZCBsYXppbHkgdG9nZ2xlIFZfTEJSLiAgU0VWLUVTKyBndWVzdHMgbXVzdFxuK1x0ICogZGVsZWdhdGUgTEJSIHZpcnR1YWxpemF0aW9uIHRvIHRoZSBwcm9jZXNzb3IgKHBlciB0aGUgQVBNKSwgd2hlcmVcbitcdCAqIGludGVyY2VwdGluZyBMQlIgTVNScyBjYW4gYmUgZmF0YWwsIHNvIHRvZ2dsZSBpdCB3aXRoIHRoZSByZXN0LiAgU2VlXG4rXHQgKiBjb21taXQgYjdlNGJlMGEyMjRmIChcIktWTTogU0VWLUVTOiBEZWxlZ2F0ZSBMQlIgdmlydHVhbGl6YXRpb24gdG8gdGhlXG4rXHQgKiBwcm9jZXNzb3JcIikuXG4rXHQgKi9cbitcdGlmIChpc19zZXZfZXNfZ3Vlc3QodmNwdSkpXG4rXHRcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX0FNRF9EQkdfRVhUTl9DRkcsIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuK1xuK1x0c3ZtLVx1MDAzZWxicnYyX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XG4rfVxuK1xuIHZvaWQgc3ZtX3ZjcHVfZnJlZV9tc3JwbSh2b2lkICptc3JwbSlcbiB7XG4gXHRfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKG1zcnBtKSwgZ2V0X29yZGVyKE1TUlBNX1NJWkUpKTtcbkBAIC03OTksOCArODQwLDEwIEBAIHN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3ZtX2Rpc2FibGVfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX1NZU0NBTExfTUFTSywgTVNSX1RZUEVfUlcpO1xuICNlbmRpZlxuIFxuLVx0aWYgKGxicnYpXG4rXHRpZiAobGJydikge1xuIFx0XHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbitcdFx0c3ZtX3JlY2FsY19sYnJ2Ml9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbitcdH1cbiBcbiBcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0lCUEIpKVxuIFx0XHRzdm1fc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9JQTMyX1BSRURfQ01ELCBNU1JfVFlQRV9XLFxuQEAgLTg2OCw2ICs5MTEsNyBAQCB2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XG4gXHRzdm1fcmVjYWxjX2xicl9tc3JfaW50ZXJjZXB0cyh2Y3B1KTtcbitcdHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fc3ZtX2Rpc2FibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtODgwLDkgKzkyNCwxMSBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRib29sIGN1cnJlbnRfZW5hYmxlX2xicnYgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcbitcbiBcdGJvb2wgZW5hYmxlX2xicnYgPSAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IERFQlVHQ1RMTVNSX0xCUikgfHxcbiBcdFx0XHQgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoc3ZtLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7XG4rXHRcdFx0ICAgIChzdm0tXHUwMDNlbmVzdGVkLmN0bC5taXNjX2N0bDIgXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIpKSB8fFxuK1x0XHRcdCAgICBzdm1fbGJydjJfYWN0aXZlKHZjcHUpO1xuIFxuIFx0aWYgKGVuYWJsZV9sYnJ2IFx1MDAyNlx1MDAyNiAhY3VycmVudF9lbmFibGVfbGJydilcbiBcdFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XG5AQCAtODk2LDYgKzk0Miw3IEBAIHZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGRvLCBzbyBhbHdheXMgcmVjYWxjdWxhdGUgdGhlIGludGVyY2VwdHMgaGVyZS5cbiBcdCAqL1xuIFx0c3ZtX3JlY2FsY19sYnJfbXNyX2ludGVyY2VwdHModmNwdSk7XG4rXHRzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xuIH1cbiBcbiB2b2lkIGRpc2FibGVfbm1pX3NpbmdsZXN0ZXAoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5AQCAtMTM0MSw2ICsxMzg4LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0c3ZtLVx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbiBcdHN2bS1cdTAwM2VsYnJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG4rXHRzdm0tXHUwMDNlbGJydjJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG4gXG4gXHRzdm0tXHUwMDNldm1jYjAxLnB0ciA9IHBhZ2VfYWRkcmVzcyh2bWNiMDFfcGFnZSk7XG4gXHRzdm0tXHUwMDNldm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5AQCAtMjc4Nyw2ICsyODM1LDE5IEBAIHN0YXRpYyB1NjQgKnN2bV92bWNiX2xicihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIG1zcilcbiBcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmJyX2Zyb207XG4gfVxuIFxuK3N0YXRpYyB1NjQgKnN2bV92bWNiX2xicnYyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1MzIgbXNyKVxuK3tcbitcdHUzMiBvZmZzZXQgPSBtc3IgLSBNU1JfQU1EX1NBTVBfQlJfRlJPTTtcbitcdHUzMiBpZHggPSBvZmZzZXQgXHUwMDNlXHUwMDNlIDE7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcdTAwM2U9IFNWTV9MQlJfVjJfU1RBQ0tfU0laRSkpXG4rXHRcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxiclswXS5sYnJfc3RhY2tfZnJvbTtcbitcbitcdGlmIChvZmZzZXQgXHUwMDI2IDEpXG4rXHRcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicltpZHhdLmxicl9zdGFja190bztcbitcdHJldHVybiBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicltpZHhdLmxicl9zdGFja19mcm9tO1xuK31cbitcbiBzdGF0aWMgYm9vbCBzZXZfZXNfcHJldmVudF9tc3JfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4ge1xuQEAgLTI4ODIsNiArMjk0MywyMSBAQCBzdGF0aWMgaW50IHN2bV9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiBcdGNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBsYnJ2ID8gKnN2bV92bWNiX2xicihzdm0sIG1zcl9pbmZvLVx1MDAzZWluZGV4KSA6IDA7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfQU1EX0RCR19FWFROX0NGRzpcbitcdFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxuK1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbitcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUuZGJnX2V4dG5fY2ZnO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTVNSX0FNRDY0X0xCUl9TRUxFQ1Q6XG4rXHRcdGlmICghc3ZtX2xicnYyX3N1cHBvcnRlZCh2Y3B1KSlcbitcdFx0XHRyZXR1cm4gS1ZNX01TUl9SRVRfVU5TVVBQT1JURUQ7XG4rXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicl9zZWxlY3Q7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfQU1EX1NBTVBfQlJfRlJPTSAuLi4gTVNSX0FNRF9TQU1QX0JSX0ZST00gKyAzMTpcbitcdFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxuK1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbitcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9ICpzdm1fdm1jYl9sYnJ2Mihzdm0sIG1zcl9pbmZvLVx1MDAzZWluZGV4KTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE1TUl9WTV9IU0FWRV9QQTpcbiBcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9IHN2bS1cdTAwM2VuZXN0ZWQuaHNhdmVfbXNyO1xuIFx0XHRicmVhaztcbkBAIC0zMTYwLDYgKzMyMzYsMTAgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxuIFx0XHRcdGRhdGEgXHUwMDI2PSB+REVCVUdDVExNU1JfQlRGO1xuIFx0XHR9XG4gXG4rXHRcdGlmICgoZGF0YSBcdTAwMjYgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFKSlcbitcdFx0XHRyZXR1cm4gMTtcbitcbiBcdFx0aWYgKGRhdGEgXHUwMDI2IERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMpXG4gXHRcdFx0cmV0dXJuIDE7XG4gXG5AQCAtMzE4MSw2ICszMjYxLDQwIEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcilcbiBcdFx0KnN2bV92bWNiX2xicihzdm0sIGVjeCkgPSBkYXRhO1xuIFx0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIE1TUl9BTURfREJHX0VYVE5fQ0ZHOlxuK1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4rXHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuK1xuK1x0XHRpZiAoZGF0YSBcdTAwMjYgREJHX0VYVE5fQ0ZHX1JFU0VSVkVEX0JJVFMpXG4rXHRcdFx0cmV0dXJuIDE7XG4rXG4rXHRcdGlmIChzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9PSBkYXRhKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmRiZ19leHRuX2NmZyA9IGRhdGE7XG4rXHRcdHZtY2JfbWFya19kaXJ0eShzdm0tXHUwMDNldm1jYiwgVk1DQl9MQlIpO1xuK1x0XHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfQU1ENjRfTEJSX1NFTEVDVDpcbitcdFx0aWYgKCFzdm1fbGJydjJfc3VwcG9ydGVkKHZjcHUpKVxuK1x0XHRcdHJldHVybiBLVk1fTVNSX1JFVF9VTlNVUFBPUlRFRDtcbitcbitcdFx0aWYgKGRhdGEgXHUwMDI2IExCUl9TRUxFQ1RfUkVTRVJWRURfQklUUylcbitcdFx0XHRyZXR1cm4gMTtcbitcbitcdFx0aWYgKHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUubGJyX3NlbGVjdCA9PSBkYXRhKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLmxicl9zZWxlY3QgPSBkYXRhO1xuK1x0XHR2bWNiX21hcmtfZGlydHkoc3ZtLVx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1TUl9BTURfU0FNUF9CUl9GUk9NIC4uLiBNU1JfQU1EX1NBTVBfQlJfRlJPTSArIDMxOlxuK1x0XHRpZiAoIXN2bV9sYnJ2Ml9zdXBwb3J0ZWQodmNwdSkpXG4rXHRcdFx0cmV0dXJuIEtWTV9NU1JfUkVUX1VOU1VQUE9SVEVEO1xuK1xuK1x0XHQqc3ZtX3ZtY2JfbGJydjIoc3ZtLCBlY3gpID0gZGF0YTtcbitcdFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cdTAwM2V2bWNiLCBWTUNCX0xCUik7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBNU1JfVk1fSFNBVkVfUEE6XG4gXHRcdC8qXG4gXHRcdCAqIE9sZCBrZXJuZWxzIGRpZCBub3QgdmFsaWRhdGUgdGhlIHZhbHVlIHdyaXR0ZW4gdG9cbkBAIC00NzEwLDYgKzQ4MjQsMjAgQEAgc3RhdGljIGJvb2wgc3ZtX2hhc19lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGludCBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZW50cnk7XG4rXG4rXHRlbnRyeSA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApO1xuK1x0aWYgKCFlbnRyeSB8fCBlbnRyeS1cdTAwM2VlYXggXHUwMDNjIDB4ODAwMDAwMjIpXG4rXHRcdGdvdG8gbm90X2ZvdW5kO1xuK1x0ZW50cnkgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDIyKTtcbitcdGlmIChlbnRyeSlcbitcdFx0cmV0dXJuIChlbnRyeS1cdTAwM2VlYnggXHUwMDNlXHUwMDNlIDQpIFx1MDAyNiAweDNmO1xuK25vdF9mb3VuZDpcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuQEAgLTQ3MzYsNiArNDg2NCwxMCBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKGd1ZXN0X2NwdWlkX2lzX2ludGVsX2NvbXBhdGlibGUodmNwdSkpXG4gXHRcdGd1ZXN0X2NwdV9jYXBfY2xlYXIodmNwdSwgWDg2X0ZFQVRVUkVfVl9WTVNBVkVfVk1MT0FEKTtcbiBcbitcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcdTAwMjZcdTAwMjZcbitcdCAgICBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHZjcHUpICE9IFNWTV9MQlJfVjJfU1RBQ0tfU0laRSlcbitcdFx0Z3Vlc3RfY3B1X2NhcF9jbGVhcih2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKTtcbitcbiBcdGlmIChpc19zZXZfZ3Vlc3QodmNwdSkpXG4gXHRcdHNldl92Y3B1X2FmdGVyX3NldF9jcHVpZChzdm0pO1xuIH1cbkBAIC01NTgyLDYgKzU3MTQsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHN2bV9zZXRfY3B1X2NhcHModm9pZClcbiBcdFx0aWYgKGt2bV9wbXVfY2FwLnZlcnNpb24gIT0gMiB8fFxuIFx0XHQgICAgIWt2bV9jcHVfY2FwX2hhcyhYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUpKVxuIFx0XHRcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIpO1xuK1xuK1x0XHRpZiAoIWxicnYgfHwgIWVuYWJsZV9tZWRpYXRlZF9wbXUgfHxcbitcdFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXG4rXHRcdFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7XG4gXHR9XG4gXG4gXHQvKiBDUFVJRCAweDgwMDAwMDFGIChTTUUvU0VWIGZlYXR1cmVzKSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA3MTZiZTIxZmJhMzM1NC4uMTA1YTcxZDY5ZDY4YTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtMzYzLDYgKzM2Myw3IEBAIHN0cnVjdCB2Y3B1X3N2bSB7XG4gXHRib29sIGF2aWNfaXJxX3dpbmRvdztcbiBcdGJvb2wgeDJhdmljX21zcnNfaW50ZXJjZXB0ZWQ7XG4gXHRib29sIGxicl9tc3JzX2ludGVyY2VwdGVkO1xuK1x0Ym9vbCBsYnJ2Ml9tc3JzX2ludGVyY2VwdGVkO1xuIFxuIFx0LyogR3Vlc3QgR0lGIHZhbHVlLCB1c2VkIHdoZW4gdkdJRiBpcyBub3QgZW5hYmxlZCAqL1xuIFx0Ym9vbCBndWVzdF9naWY7XG5AQCAtNzgzLDcgKzc4NCwxMSBAQCBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKGJvb2wsIHRlc3QsIHRlc3QpXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBjbGVhciwgX19jbGVhcilcbiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIHNldCwgX19zZXQpXG4gXG4tI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+REVCVUdDVExNU1JfTEJSKVxuKyNkZWZpbmUgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUU1x0KERFQlVHQ1RMTVNSX0ZSRUVaRV9MQlJTX09OX1BNSSB8XHRcXFxuK1x0XHRcdFx0XHQgREVCVUdDVExNU1JfRlJFRVpFX1BFUkZNT05fT05fUE1JKVxuKyNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUU1x0KH4oREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExfTEJSX1BNQ19GUkVFWkVfQklUUykpXG4rI2RlZmluZSBEQkdfRVhUTl9DRkdfUkVTRVJWRURfQklUUyAofkRCR19FWFROX0NGR19MQlJWMkVOKVxuKyNkZWZpbmUgTEJSX1NFTEVDVF9SRVNFUlZFRF9CSVRTICh+R0VOTUFTS19VTEwoOCwgMCkpXG4gXG4gLyogc3ZtLmMgKi9cbiBleHRlcm4gYm9vbCBkdW1wX2ludmFsaWRfdm1jYjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQwOjE5Ljg5NzYwMjM0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzY5MDkxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQU1EIExCUiBWMiBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBBTUQgTEJSIFYyIHN1cHBvcnQgd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IGZvciBTVk0uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBjb3JlIGFyZWFzIG9mIHRoZSBoeXBlcnZpc29yIGFuZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLlxuXG5JbW1lZGlhdGVseSwgSSBzZWUgaXQncyBzcHJlYWQgYWNyb3NzIHNldmVyYWwga2V5IGZpbGVzOiBgY29yZS5jYCwgaGVhZGVycyAoYHBlcmZfZXZlbnQuaGAsIGBzdm0uaGAsIGByZXZlcnNlX2NwdWlkLmhgKSwgYW5kIGNydWNpYWwgS1ZNIFNWTSBjb21wb25lbnRzIChgY3B1aWQuY2AsIGBzdm0uY2ApLiBUaGlzIHRlbGxzIG1lIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYm90aCBmdW5kYW1lbnRhbCBDUFVJRCBmZWF0dXJlIGFkdmVydGlzZW1lbnQgYW5kIHRoZSBpbnRlcmNlcHRpb24vZW11bGF0aW9uIG9mIHNwZWNpZmljIE1vZGVsLVNwZWNpZmljIFJlZ2lzdGVycyAoTVNScykuIFNwZWNpZmljYWxseSwgaXQgZGVhbHMgd2l0aCBNU1JzIHN1Y2ggYXMgYE1TUl9BTURfREJHX0VYVE5fQ0ZHYCwgYE1TUl9BTUQ2NF9MQlJfU0VMRUNUYCwgYW5kIGBNU1JfQU1EX1NBTVBfQlJfRlJPTWAsIGFsbCBvZiB3aGljaCBhcmUgYSBnb29kIGluZGljYXRpb24gdGhhdCBicmFuY2ggdHJhY2luZyBpcyB0aGUgZm9jdXMgaGVyZS4gVGhlIGFkZGl0aW9uIG9mIENQVUlEIGZlYXR1cmVzIGBBTURfTEJSX1YyYCBhbmQgYEFNRF9MQlJfUE1DX0ZSRUVaRWAgaXMgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIHRvIGluZGljYXRpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSB0byB0aGUgZ3Vlc3QuXG5cbkRpZ2dpbmcgaW50byBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AgaXMgaW1wb3J0YW50IHRvIG1lLCBzbyBJ4oCZbSBnb2luZyB0byBmb2N1cyBteSBhbmFseXNpcyB0aGVyZS4gSSBjYW4gc2VlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBmZWF0dXJlLCBhbmQgTVNSIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBmb3IgdGhlc2UgbmV3IHJlZ2lzdGVycy4gVGhlIGZ1bmN0aW9ucyBhcmU6IGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCwgYHN2bV9sYnJ2Ml9zdXBwb3J0ZWRgLCBgc3ZtX2xicnYyX2FjdGl2ZWAsIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX2dldF9tc3JgLCBgc3ZtX3NldF9tc3JgLCBgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZWAsIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgLCBhbmQgYHN2bV9zZXRfY3B1X2NhcHNgLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGZ1bGx5IHN1cHBvcnRlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBDbGVhcmx5LCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfS1ZNX0FNRGAgYXJlIG1hbmRhdG9yeS4gUGVyZiBldmVudHMgd291bGQgYmUgcmVsZXZhbnQgaGVyZSwgc28gSSdsbCBhc3N1bWUgYENPTkZJR19QRVJGX0VWRU5UU2AgaXMgYWxzbyBuZWVkZWQsIGJ1dCBsZXTigJlzIGNoZWNrLiBJ4oCZbSBnb2luZyB0byBydW4gYSBgZ3JlcHBlcmAgc2VhcmNoIGZvciBcIkFNRF9MQlJfVjJcIiBvciBzaW1pbGFyIHRlcm1zIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcyB0byBiZSBjZXJ0YWluLCBhbmQgdmVyaWZ5IHdoZXRoZXIgYSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbiBoYXMgYmVlbiBhZGRlZCBmb3IgdGhpcyBmZWF0dXJlLiBUaGF0IHdpbGwgYmUgbXkgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTgzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDA6MjcuMjM0NTEzODMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDk2ODc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQU1EX0xCUl9WMlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jPTQyMj1fX2luaXQgaW50IGFtZF9wbXVfbGJyX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtNDI1LVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6NDI2OlxcdGlmICh4ODZfcG11LnZlcnNpb24gXFx1MDAzYyAyIHx8ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMikpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYy00MjctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC04OC0jZGVmaW5lIFg4Nl9GRUFUVVJFX1JFUF9HT09EXFx0XFx0KCAzKjMyKzE2KSAvKiBcXFwicmVwX2dvb2RcXFwiIFJFUCBtaWNyb2NvZGUgd29ya3Mgd2VsbCAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6ODk6I2RlZmluZSBYODZfRkVBVFVSRV9BTURfTEJSX1YyXFx0XFx0KCAzKjMyKzE3KSAvKiBcXFwiYW1kX2xicl92MlxcXCIgQU1EIExhc3QgQnJhbmNoIFJlY29yZCBFeHRlbnNpb24gVmVyc2lvbiAyICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC05MC0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NMRUFSX0NQVV9CVUZcXHQoIDMqMzIrMTgpIC8qIENsZWFyIENQVSBidWZmZXJzIHVzaW5nIFZFUlcgKi9cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYy02Ni1cXHR7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsXFx0XFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmM6Njc6XFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFxcdFxcdENQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSxcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jLTY4LVxcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLFxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jPTgzNj12b2lkIGt2bV9pbml0aWFsaXplX2NwdV9jYXBzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xMjY5LVxcdFxcdFNDQVRURVJFRF9GKFBFUkZNT05fVjIpLFxcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjEyNzA6XFx0XFx0U0NBVFRFUkVEX0YoQU1EX0xCUl9WMiksXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTI3MS1cXHRcXHRTQ0FUVEVSRURfRihBTURfTEJSX1BNQ19GUkVFWkUpLFxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM9MTQyMD1zdGF0aWMgaW5saW5lIGludCBfX2RvX2NwdWlkX2Z1bmMoc3RydWN0IGt2bV9jcHVpZF9hcnJheSAqYXJyYXksIHUzMiBmdW5jdGlvbilcXG4tLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4ODgtXFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTg4OTpcXHRcXHRpZiAoa3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpKVxcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTE4OTAtXFx0XFx0XFx0ZWJ4LnNwbGl0Lmxicl92Ml9zdGFja19zeiA9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTczLSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX1BFUkZNT05fVjJcXHRcXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMClcXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oOjc0OiNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfVjJcXHRcXHRLVk1fWDg2X0ZFQVRVUkUoQ1BVSURfODAwMF8wMDIyX0VBWCwgMSlcXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTc1LSNkZWZpbmUgS1ZNX1g4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRVxcdEtWTV9YODZfRkVBVFVSRShDUFVJRF84MDAwXzAwMjJfRUFYLCAyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaD0xNDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgX19mZWF0dXJlX3RyYW5zbGF0ZShpbnQgeDg2X2ZlYXR1cmUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmV2ZXJzZV9jcHVpZC5oLTE1MC1cXHRLVk1fWDg2X1RSQU5TTEFURV9GRUFUVVJFKFBFUkZNT05fVjIpO1xcbmFyY2gveDg2L2t2bS9yZXZlcnNlX2NwdWlkLmg6MTUxOlxcdEtWTV9YODZfVFJBTlNMQVRFX0ZFQVRVUkUoQU1EX0xCUl9WMik7XFxuYXJjaC94ODYva3ZtL3JldmVyc2VfY3B1aWQuaC0xNTItXFx0S1ZNX1g4Nl9UUkFOU0xBVEVfRkVBVFVSRShBTURfTEJSX1BNQ19GUkVFWkUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz03NDc9c3RhdGljIGJvb2wgc3ZtX2xicnYyX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy03NDgte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NzQ5OlxcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNzUwLVxcdCAgICAgICBrdm1fdmNwdV9oYXNfbWVkaWF0ZWRfcG11KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00ODQxPXN0YXRpYyB2b2lkIHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ4NjYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0ODY3OlxcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9BTURfTEJSX1YyKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDg2OC1cXHQgICAgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZSh2Y3B1KSAhPSBTVk1fTEJSX1YyX1NUQUNLX1NJWkUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0ODY5OlxcdFxcdGd1ZXN0X2NwdV9jYXBfY2xlYXIodmNwdSwgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMik7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00ODcwLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NjQxPXN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU3MTktXFx0XFx0ICAgICFrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NzIwOlxcdFxcdFxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTcyMS1cXHR9XFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTg4LSNkZWZpbmUgWDg2X0ZFQVRVUkVfUkVQX0dPT0RcXHRcXHQoIDMqMzIrMTYpIC8qIFxcXCJyZXBfZ29vZFxcXCIgUkVQIG1pY3JvY29kZSB3b3JrcyB3ZWxsICovXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDo4OTojZGVmaW5lIFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjJcXHRcXHQoIDMqMzIrMTcpIC8qIFxcXCJhbWRfbGJyX3YyXFxcIiBBTUQgTGFzdCBCcmFuY2ggUmVjb3JkIEV4dGVuc2lvbiBWZXJzaW9uIDIgKi9cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTkwLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0xFQVJfQ1BVX0JVRlxcdCggMyozMisxOCkgLyogQ2xlYXIgQ1BVIGJ1ZmZlcnMgdXNpbmcgVkVSVyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDoyOS41ODQyMDY5MjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ0MTUzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoIGZvciBBTUQgTEJSIFYyIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGltcGxlbWVudGluZyBMQlIgVjIgc3VwcG9ydCBmb3IgQU1EIHByb2Nlc3NvcnMgd2l0aGluIEtWTS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMsIHdoaWNoLCBhcyBleHBlY3RlZCwgYXJlIGhhcHBlbmluZyB3aXRoaW4gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLiBJdCdzIGFsbCBhYm91dCBhZGRpbmcgdGhlIE1TUiBpbnRlcmNlcHRpb24gYW5kIGhhbmRsaW5nIGxvZ2ljIGZvciB0aGUgbmV3IE1TUnM6IGBNU1JfQU1EX0RCR19FWFROX0NGR2AsIGBNU1JfQU1ENjRfTEJSX1NFTEVDVGAsIGFuZCBgTVNSX0FNRF9TQU1QX0JSX0ZST01gLiBUaGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIHdpbGwgYmUuXG5cbkknbSBpbml0aWFsbHkgZm9jdXNpbmcgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCwgYHN2bV9sYnJ2Ml9zdXBwb3J0ZWRgLCBgc3ZtX2xicnYyX2FjdGl2ZWAsIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX2dldF9tc3JgLCBgc3ZtX3NldF9tc3JgLCBgY3B1aWRfcXVlcnlfbGJydjJfc3RhY2tfc2l6ZWAsIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgLCBhbmQgYHN2bV9zZXRfY3B1X2NhcHNgLlxuXG5NeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCBhcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBUaGV5J3JlIHByZXR0eSBnZW5lcmljIEtWTSBob3QtcGF0aCBmdW5jdGlvbnMgYnV0IHRoZXkgYXJlIHRoZSBlbnRyeXBvaW50cyB0byBoYW5kbGUgdGhlIG5ldyBNU1JzLiBJdOKAmXMgcHJldHR5IG9idmlvdXMgdGhleSdyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQuIFdhaXQsIEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmIGEgYml0IG5vdy4gVGhvc2UgYXJlIHJlYWxseSBicm9hZCBmdW5jdGlvbnMgYW5kIGZ1enppbmcgdGhlbSBkaXJlY3RseSBjb3VsZCBiZSBhIGNoYWxsZW5nZS4gTWF5YmUgdGhlcmUgYXJlIG90aGVyLCBtb3JlIHRhcmdldGVkIGZ1bmN0aW9ucyBJIGNhbiBsZXZlcmFnZT9cblxuT2theSwgbGV0IG1lIHNlZS4gYHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHNgIGlzIHN0YXRpYywgd2hpY2ggbWlnaHQgbWFrZSBpdCBoYXJkZXIgdG8gdGFyZ2V0IGRpcmVjdGx5LCB1bmxlc3MgaXQncyBpbmxpbmVkLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWRkZWQgb3IgbW9kaWZpZWQuIEFscmlnaHQsIEkgc2VlIGBzdm1fdmNwdV9mcmVlX21zcnBtYCBpcyBtb2RpZmllZC4gQW5kIEkgYWxzbyBzZWUgc29tZSBzdGF0aWMgZnVuY3Rpb25zOiBgc3ZtX3JlY2FsY19tc3JfaW50ZXJjZXB0c2AsIGBzdm1fdmNwdV9jcmVhdGVgLCBgc3ZtX3ZtY2JfbGJyYCwgYHN2bV92bWNiX2xicnYyYCwgYW5kIGBzZXZfZXNfcHJldmVudF9tc3JfYWNjZXNzYC4gT2theSwgc28gYHN2bV9lbmFibGVfbGJydmAsIGBzdm1fdXBkYXRlX2xicnZgLCBhbmQgYGRpc2FibGVfbm1pX3NpbmdsZXN0ZXBgIGFyZSBub24tc3RhdGljLlxuXG5Tb21ldGhpbmcgZG9lc24ndCBmZWVsIHJpZ2h0LiBgc3ZtX2dldF9tc3JgIGlzIGxpc3RlZCBhcyBzdGF0aWM/IFRoYXQncyB1bnVzdWFsLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQ7IEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGVuc3VyZSB0aGF0IGl0J3MgYWN0dWFsbHkgc3RhdGljLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDozNi45MjgzNjI2ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzE1NDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdm1fZ2V0X21zclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI4NTk9c3RhdGljIGJvb2wgc3ZtX3BhdF9hY2Nlc3Nlc19ncGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcm9tX2hvc3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI4NzItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyODczOnN0YXRpYyBpbnQgc3ZtX2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjg3NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTU0NTc9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0ODQtXFx0LmdldF9mZWF0dXJlX21zciA9IHN2bV9nZXRfZmVhdHVyZV9tc3IsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDg1OlxcdC5nZXRfbXNyID0gc3ZtX2dldF9tc3IsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDg2LVxcdC5zZXRfbXNyID0gc3ZtX3NldF9tc3IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQwOjM5LjAwMTUyMjg0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5MDAwNDczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVNSIEFjY2VzcyBpbiB0aGUgQU1ELVYgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBJIHNlZSB0aGF0LiBCdXQgdGhlIGZhY3QgdGhhdCB0aGV5J3JlIHJlZ2lzdGVyZWQgaW4gYHN2bV94ODZfb3BzYCBtYWtlcyB0aGVtIGVudHJ5IHBvaW50cyBmb3IgTVNSIGFjY2Vzc2VzLCBlc3NlbnRpYWxseSB0aGUgcHVibGljIGludGVyZmFjZSwgZG9lc24ndCBpdD8gSG1tLCB0aGUgaW5zdHJ1Y3Rpb25zIG1lbnRpb24gcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGxvZ2ljIGlzIGNsZWFyLCBpbmxpbmVkIGZ1bmN0aW9ucyBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLiBCZWNhdXNlIGBzdm1fZ2V0X21zcmAgYW5kIGBzdm1fc2V0X21zcmAgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGF0IGFjdHVhbGx5IHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyAqZnVsbHkqIGlubGluZWQsIHJpZ2h0PyBUYWtpbmcgdGhlaXIgYWRkcmVzcyBnaXZlcyB0aGVtIGEgc3ltYm9sIGFkZHJlc3MsIHJlZ2FyZGxlc3MuIFRoYXQgY2hhbmdlcyB0aGUgY2FsY3VsdXMgc29tZXdoYXQuIFN0aWxsLCB0aGV5IGFyZSB2ZXJ5IGhvdCBwYXRocyBpbiB0aGUgY29kZSBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuXG5cbkxldCBtZSBzaGlmdCBnZWFycyBhbmQgY29uc2lkZXIgYHN2bV91cGRhdGVfbGJydmAgYW5kIGBzdm1fZW5hYmxlX2xicnZgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDo0My42OTE1MjkzNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NDUzODY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdm1fdXBkYXRlX2xicnZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03NDU9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgyNS1cXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0xCUik7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4MjY6XFx0c3ZtX3VwZGF0ZV9sYnJ2KFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9ODUzPXN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05ODctXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo5ODg6XFx0LyogU1ZNX01JU0MyX0VOQUJMRV9WX0xCUiBpcyBjb250cm9sbGVkIGJ5IHN2bV91cGRhdGVfbGJydigpICovXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05ODktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTEzMjI9dm9pZCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTM4Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjEzODc6XFx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTM4OC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9OTE3PXN0YXRpYyB2b2lkIF9fc3ZtX2Rpc2FibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTkyMi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjkyMzp2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MjQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMDUxPXN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1MC1cXHRcXHR2bWNiX21hcmtfZGlydHkoc3ZtLVxcdTAwM2V2bWNiLCBWTUNCX0xCUik7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMjUxOlxcdFxcdHN2bV91cGRhdGVfbGJydih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMyNTItXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMyNzUtXFx0XFx0dm1jYl9tYXJrX2RpcnR5KHN2bS1cXHUwMDNldm1jYiwgVk1DQl9MQlIpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzI3NjpcXHRcXHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMjc3LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD04MTM9dm9pZCBzdm1fZW5hYmxlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjgxNDp2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtODE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDo0NS44NTYwNzM1NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkyMjQwNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBMb2dpY2FsIEJyYW5jaCBSZWNvcmQgVmlydHVhbGl6YXRpb24gKExCUlYpIFVwZGF0ZXMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgc3ZtX3VwZGF0ZV9sYnJ2YC4gSXQncyBhIHN0cm9uZyBjb250ZW5kZXIgZ2l2ZW4gdGhlIG5hbWUuIEJ1dCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMgYW5kIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBTbywgSSdtIGFsc28gcHV0dGluZyBgc3ZtX2VuYWJsZV9sYnJ2YCBvbiB0aGUgc2hvcnQgbGlzdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaXMgbW9yZSByZWxldmFudCBhbmQvb3IgY29tcGxlbWVudGFyeS4gSSdsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHN2bV9lbmFibGVfbGJydmAgZmlyc3QuIEkgd2FudCB0byBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGludGVyYWN0aW9uIHdpdGggcmVsYXRlZCBzdHJ1Y3R1cmVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nIG9mZiBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MDo0OS4xNDgzMTY1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwODQwMjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdm1fZW5hYmxlX2xicnZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMDY1PXN0YXRpYyBpbnQgX19zZXZfbGF1bmNoX3VwZGF0ZV92bXNhKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMTExLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTExMjpcXHRzdm1fZW5hYmxlX2xicnYodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMTEzLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDgwPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGVfdm1zYShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjUyOC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1Mjk6XFx0XFx0c3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjUzMC1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTgyNz1zdGF0aWMgdm9pZCBzdm1fcmVjYWxjX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTA0LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTA1OnN0YXRpYyB2b2lkIF9fc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTkwNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTkwOS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjkxMDp2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MTEte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTEyOlxcdF9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTEzLVxcdHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz05MjM9dm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy05MzMtXFx0aWYgKGVuYWJsZV9sYnJ2IFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2VuYWJsZV9sYnJ2KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6OTM0OlxcdFxcdF9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtOTM1LVxcdGVsc2UgaWYgKCFlbmFibGVfbGJydiBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X2VuYWJsZV9sYnJ2KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD04MTI9dm9pZCBzdm1fdmNwdV9mcmVlX21zcnBtKHZvaWQgKm1zcnBtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjgxMzp2b2lkIHN2bV9lbmFibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtODE0LXZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQwOjUxLjA1NjcyODY4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc0NjI4Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc3ZtX3VwZGF0ZV9sYnJ2YCBmdW5jdGlvbiwgdHJpZ2dlcmVkIGJ5IHdyaXRlcyB0byBgTVNSX0FNRF9EQkdfRVhUTl9DRkdgIHZpYSBgc3ZtX3NldF9tc3JgLiBUaGF0J3MgYSBjbGVhciBlbnRyeSBwb2ludCB0byBmb2N1cyBvbiwgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgdGhpbmtpbmcgaXMsIGxldCdzIGxvb2sgYXQgdGhlIGJyb2FkZXIgcGljdHVyZS4gV2hhdCBhYm91dCBgc3ZtX3NldF9tc3JgIGFuZCBgc3ZtX2dldF9tc3JgPyBUaGV5J3JlIHRoZSBwcmltYXJ5IGhhbmRsZXJzIGZvciBhbGwgTVNSIGludGVyYWN0aW9ucy4gVGhleSd2ZSBiZWVuIGFkYXB0ZWQgZm9yIHRoZXNlIG5ldyBgTVNSX0FNRF9EQkdfRVhUTl9DRkdgLCBgTVNSX0FNRDY0X0xCUl9TRUxFQ1RgLCBhbmQgYE1TUl9BTURfU0FNUF9CUl9GUk9NYCBNU1JzLlxuXG5JIHdpbGwgYWRkIHRoZXNlIHRvIG15IGxpc3QuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBpbnZlc3RpZ2F0ZSBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgIHNpbmNlIHRoZXkgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgbmV3IE1TUnMuIEV2ZW4gdGhvdWdoIHRoZXkncmUgbGlrZWx5IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGhzLCB0aGV5J3JlIHRoZSBvbmx5IHJvdXRlcyB0byByZWFjaCB0aGUgbmV3IGxvZ2ljLlxuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLiBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgICphcmUqIGV4dHJlbWVseSBob3QuIElzIHRoZXJlIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHRyYWNlIHRoaXMgY2hhbmdlP1xuXG5IbW0uLi4gTWF5YmUgYHN2bV9yZWNhbGNfbGJydjJfbXNyX2ludGVyY2VwdHNgPyBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBvZnRlbiBtZWFucyBpdCBjb3VsZCBiZSBpbmxpbmVkLiBJdCdzIGNhbGxlZCBmcm9tIGBzdm1fdXBkYXRlX2xicnZgIGFuZCBgc3ZtX3JlY2FsY19tc3JfaW50ZXJjZXB0c2AuIEkgd2lsbCBjaGVjayBpZiBpdCdzIGJlZW4gaW5saW5lZCBieSB0aGUgY29tcGlsZXIuXG5cbkknbGwgcXVpY2tseSBjaGVjayBgc3ZtX2xicnYyX3N1cHBvcnRlZGAgYW5kIGBzdm1fbGJydjJfYWN0aXZlYC4gVGhleSdyZSBzdGF0aWMsIHNob3J0LCBhbmQgbGlrZWx5IGlubGluZWQsIHNvIHRoZXkgcHJvYmFibHkgd29uJ3QgYmUgc2lnbmlmaWNhbnQgdG8gbXkgcmVzZWFyY2guXG5cbk5vdywgbGV0J3MgYnJvYWRlbiB0aGUgc2NvcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGNvbnRleHQuIExldCdzIGxvb2sgYXQgYGFyY2gveDg2L2t2bS9jcHVpZC5jYC4gSSBzZWUgYGt2bV9pbml0aWFsaXplX2NwdV9jYXBzYCBhbmQgYF9fZG9fY3B1aWRfZnVuY2AgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGVzZSBhcmVuJ3QgZXhwbGljaXRseSB0aWVkIHRvIExCUiBWMiwgYnV0IHRoZXkndmUgYmVlbiB0b3VjaGVkLCBzbyB0aGV5IG5lZWQgYSBsb29rLlxuXG5GaW5hbGx5LCBJJ2xsIHRha2UgYSBnbGFuY2UgYXQgYGFyY2gveDg2L2V2ZW50cy9jb3JlLmNgLiBJIG5vdGljZSBjaGFuZ2VzIGluIGBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlgLlxuXG5UaGF0J3MgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIEkndmUgc2VlbiBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mjk1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQwOjU4LjYzMTM2MDQzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNjc0NzAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0zMTExPXVuc2lnbmVkIGxvbmcgcGVyZl9hcmNoX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxMTktXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzozMTIwOnZvaWQgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCB4ODZfcG11X2NhcGFiaWxpdHkgKmNhcClcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxMjEte1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ0LX1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjMxNDU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eSk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ2LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oPTc1OT1zdHJ1Y3QgeDg2X3BtdV9sYnIge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oLTc2Ni1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50Lmg6NzY3OmV4dGVybiB2b2lkIHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5ICpjYXApO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NjgtZXh0ZXJuIHU2NCBwZXJmX2dldF9od19ldmVudF9jb25maWcoaW50IGh3X2V2ZW50KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaD03NzE9ZXh0ZXJuIGludCB4ODZfcGVyZl9yZHBtY19pbmRleChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NzItI2Vsc2VcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50Lmg6NzczOnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaC03NzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jPTEzMz12b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xNDctXFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTQ4OlxcdFxcdHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShcXHUwMDI2a3ZtX2hvc3RfcG11KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTQ5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MDAuNTU4MTEzMTg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzgyNjM1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgUE1VIENhcGFiaWxpdHkgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBgcGVyZl9nZXRfeDg2X3BtdV9jYXBhYmlsaXR5YCBpcyBleHBvcnRlZCBmb3IgS1ZNIOKAkyB0aGF0J3MgaW50ZXJlc3RpbmcuIEEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZywgZGVmaW5pdGVseS4gSG93ZXZlciwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpdCdzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgLiBIbW0sIHRoYXQgbGltaXRzIGl0cyBhdHRhY2sgc3VyZmFjZSBzb21ld2hhdCwgZG9lc24ndCBpdD8gU3RpbGwsIGZ1enppbmcgaW5pdGlhbGl6YXRpb24gY2FuIGJlIGZydWl0ZnVsLiBCdXQgbGV0J3Mgc2VlLCB3aGF0IGVsc2UgY2FuIHdlIGRpZyB1cD8gSSB3b25kZXIgaWYgYHN2bV9zZXRfY3B1X2NhcHNgIGlzIHdvcnRoIGEgbG9vay4gTWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhlcmUgdGhhdCB3ZSBjYW4gZXhwbG9pdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MTowMy42OTYzNzkwN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MTA5NjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdm1fc2V0X2NwdV9jYXBzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTYwNj1zdGF0aWMgX19pbml0IHZvaWQgc3ZtX2FkanVzdF9tbWlvX21hc2sodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTY0MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU2NDE6c3RhdGljIF9faW5pdCB2b2lkIHN2bV9zZXRfY3B1X2NhcHModm9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU2NDIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NzM3PXN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01ODg3LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTg4ODpcXHRzdm1fc2V0X2NwdV9jYXBzKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01ODg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MTowNS42ODc0ODA3MDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDg5MjI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDUFVJRCBIb29rIFBsYWNlbWVudCBmb3IgRnV6emluZyoqXG5cbkhtbSwgc28gYHN2bV9zZXRfY3B1X2NhcHNgIGlzIGJlaW5nIGNhbGxlZCBkdXJpbmcgdGhlIG1vZHVsZSdzIGluaXRpYWxpemF0aW9uIHBoYXNlLiBUaGF0J3MgZXNzZW50aWFsbHkgdGllZCB0byB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2VzcywgcmlnaHQ/IFdoaWNoIG1lYW5zIGl0J3Mgbm90IGdvaW5nIHRvIGJlIHRyaWdnZXJlZCBkeW5hbWljYWxseSwgYW5kIGNlcnRhaW5seSBub3QgZHVyaW5nIGEgZnV6emluZyBjYW1wYWlnbi4gVGhhdCdzIGEgZGVmaW5pdGUgbGltaXRhdGlvbi4gSWYgSSdtIHRyeWluZyB0byBmdXp6IENQVUlELXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLCBJIG5lZWQgc29tZXRoaW5nIHRoYXQncyByZWFjaGFibGUgdW5kZXIgbW9yZSB2YXJpZWQgZXhlY3V0aW9uIGNvbmRpdGlvbnMuXG5cbkxldCBtZSBwaXZvdC4gTGV0J3Mgc2hpZnQgb3VyIGZvY3VzIGFuZCBzZWUgaWYgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGAgcHJvdmlkZXMgYSBtb3JlIHZpYWJsZSBob29rLiBQZXJoYXBzIHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciBhIHZDUFUgaXMgaW5pdGlhbGl6ZWQgb3Igb24gYSBwZXItVk0gYmFzaXMsIG9wZW5pbmcgdXAgbW9yZSBpbnRlcmVzdGluZyBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDEwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MDguOTMyMzc0NzA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI0NjcwMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ4Mjc9c3RhdGljIGludCBjcHVpZF9xdWVyeV9sYnJ2Ml9zdGFja19zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDg0MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQ4NDE6c3RhdGljIHZvaWQgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ4NDIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NDU3PXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NTQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTU0NjpcXHQudmNwdV9hZnRlcl9zZXRfY3B1aWQgPSBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWQsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NTQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MToxMS4xNTcwNDkzMjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MzI4MTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBBTUQgS1ZNIHZDUFVzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBBTUQgS1ZNIHZDUFUgY29kZSwgYW5kIGBzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRgIHJlYWxseSBqdW1wcyBvdXQgYXQgbWUuIFRoZSBmYWN0IHRoYXQgaXQncyB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlIHZpYSBgS1ZNX1NFVF9DUFVJRDJgIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBVc2VyLWNvbnRyb2xsZWQgaW5wdXQgZGlyZWN0bHkgaW5mbHVlbmNlcyBpdHMgZXhlY3V0aW9uLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGluaXRpYWwgZWZmb3J0cy5cblxuTmF0dXJhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgTWljcm9wcm9jZXNzb3IgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKS4gU28sIEknbGwgZGVmaW5pdGVseSBiZSBpbmNsdWRpbmcgYHN2bV9nZXRfbXNyYCBhbmQgYHN2bV9zZXRfbXNyYCBpbiB0aGUgZnV6emluZyBzY29wZTsgdGhleSBhcmUgdGhlIG1haW4gZW50cnlwb2ludHMgZm9yIGludGVyYWN0aW9ucyB0aGVyZS4gSSBhbHNvIHNlZSB0aGF0IGBzdm1fdXBkYXRlX2xicnZgIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuIFRoZW4sIG9mIGNvdXJzZSwgSSBtdXN0IGxvb2sgYXQgYHN2bV92Y3B1X2FmdGVyX3NldF9jcHVpZGAgdG8gcm91bmQgdGhhdCBvdXQuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gTmFtZWx5LCBgQ09ORklHX0tWTWAsIGBDT05GSUdfS1ZNX0FNRGAsIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gQnV0LCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IHN1YnRseSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb2RlIEknbSB0YXJnZXRpbmcuIEkgd2FudCB0byBiZSB0aG9yb3VnaCBhbmQgbWluaW1pemUgdGhlIHJpc2sgb2YgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTQ1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQxOjE1LjQzMDMzMjU2OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODIxNTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQxOjE3LjM2ODU1Mzk3OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk5MDE3ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIGZvciBBTUQgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEFNRCBwcm9jZXNzb3JzIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgdGhpcyBraW5kIG9mIGludmVzdGlnYXRpb24sIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCB4ODYsIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGlzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGZlYXR1cmVzIHNwZWNpZmljIHRvIEFNRCBwcm9jZXNzb3JzIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIGxvY2F0ZSB0aGUgYEtWTV9BTURgIHN5bWJvbCwgd2hpY2ggbGlrZWx5IGNvbnRyb2xzIHZhcmlvdXMgQU1ELXNwZWNpZmljIEtWTSBmdW5jdGlvbmFsaXRpZXMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjE2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MjIuODY3NTc0MDU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MjIuODY3NjcwODc2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNjYwNzc4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgS1ZNX0FNRGAgaXMsIGFzIGV4cGVjdGVkLCByZWxpYW50IG9uIGJvdGggdGhlIGNvcmUgYEtWTWAgbW9kdWxlIGFuZCBgQ1BVX1NVUF9BTURgLiBUaGF0IG1ha2VzIHNlbnNlOyBBTUQtc3BlY2lmaWMgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgZGVmaW5pdGVseSBuZWVkIHRoZSBiYXNlIEtWTSBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIENQVSBzdXBwb3J0LlxuXG5Ob3csIGBLVk1gIGl0c2VsZiBpcyB3aGVyZSB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcgYW5kLCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGVzZSBkZXBlbmRlbmNpZXMgaW5zaWRlIGFuZCBvdXQuIEl0J3MgYnVpbHQgdXBvbiBhIGNvbXByZWhlbnNpdmUgZm91bmRhdGlvbjogYEhJR0hfUkVTX1RJTUVSU2AsIGBYODZfTE9DQUxfQVBJQ2AsIGBQUkVFTVBUX05PVElGSUVSU2AsIGBNTVVfTk9USUZJRVJgLCBhbmQgYWxsIHRoZSBgSEFWRV9LVk1fKmAgZmVhdHVyZXMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcsIGV2ZW50IG1hbmFnZW1lbnQsIGFuZCByb3V0aW5nLiBUaGUgaW5jbHVzaW9uIG9mIGBLVk1fQVNZTkNfUEZgLCBpdHMgc3luYyBjb3VudGVycGFydCwgYW5kIHRoZSBnZW5lcmljIGRpcnR5IGxvZyBmZWF0dXJlIGluZGljYXRlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGFyZSBjcml0aWNhbCBjb21wb25lbnRzLiBBZGRpdGlvbmFsbHksIGBLVk1fVkZJT2Agc3VwcG9ydCBzaG93cyB0aGF0IGRldmljZSBwYXNzLXRocm91Z2ggaXMgZnVsbHkgZW5hYmxlZCwgYW5kIHRoZSBQTSBhbmQgdXNlci1yZXR1cm4gbm90aWZpY2F0aW9ucyBlbnN1cmUgcG93ZXIgbWFuYWdlbWVudCBhbmQgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgYXJlIGNvbnNpZGVyZWQuIEZpbmFsbHksIGBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR2AsIGBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUYCwgYW5kIGBLVk1fWEZFUl9UT19HVUVTVF9XT1JLYCBzdWdnZXN0IHRoYXQgZ2VuZXJhbCBoYXJkd2FyZSBlbmFibGVtZW50IGFuZCBDUFUgaW50ZXJhY3Rpb25zIGFyZSBhbHNvIGFjY291bnRlZCBmb3Igd2l0aGluIHRoZSBjb3JlIG1vZHVsZXMuXG5cbkdlbmVyYWxseSwgYSBiYXNlIHNldHVwIGNvbnRhaW5pbmcgYEtWTWAgYW5kIGBLVk1fQU1EYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbWFueSB0eXBpY2FsIHZpcnR1YWxpemF0aW9uIG5lZWRzLiBIb3dldmVyLCBJIG5lZWQgdG8gYWxzbyBjaGVjayB0aGUgYFBFUkZfRVZFTlRTYCBzZXR0aW5nIHRvIGdldCBhIGZ1bGwgYW5kIGNvbXBsZXRlIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjAyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MjguOTMzNzUxOTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjYzNDc0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBFUkZfRVZFTlRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9LY29uZmlnPTI9bWVudSBcXFwiUGVyZm9ybWFuY2UgbW9uaXRvcmluZ1xcXCJcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1VOQ09SRVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkludGVsIHVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xMS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyMDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIkludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yNy1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX1BPV0VSXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMzYtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiQU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0ODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX0JSU1xcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4tLVxcbmluaXQvS2NvbmZpZz0yMTIxPW1lbnUgXFxcIktlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzXFxcIlxcbmluaXQvS2NvbmZpZy0yMTIyLVxcbmluaXQvS2NvbmZpZzoyMTIzOmNvbmZpZyBQRVJGX0VWRU5UU1xcbmluaXQvS2NvbmZpZy0yMTI0LVxcdGJvb2wgXFxcIktlcm5lbCBwZXJmb3JtYW5jZSBldmVudHMgYW5kIGNvdW50ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MTozMC44NjAxMDUxNzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMzMzMjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgUGVyZm9ybWFuY2UgRXZlbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBwZXJmb3JtYW5jZSBldmVudHMgYXJlIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBpbml0L0tjb25maWdgIOKAkyBJIGtub3cgdGhhdCdzIG9mdGVuIHRoZSByb290IGxldmVsIGZvciB0aGVzZSBraW5kcyBvZiBmZWF0dXJlIGZsYWdzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgZGVmaW5pdGlvbiBvZiBgUEVSRl9FVkVOVFNgIHRoZXJlLlxuXG5OZXh0LCBzaW5jZSBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IEFNRC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgSSdsbCBkcmlsbCBkb3duLiBJJ2xsIG5lZWQgdG8gbG9vayBpbiBgYXJjaC94ODYvZXZlbnRzL0tjb25maWdgLiBJJ20gc3BlY2lmaWNhbGx5IGh1bnRpbmcgZm9yIGFueSBBTUQtcmVsYXRlZCBvciBBTUQtcHJlZml4ZWQgY29uZmlnIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCB3b3VsZCBiZSB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIGFueSBjb25kaXRpb25hbCBvciBzcGVjaWFsaXplZCBzZXR0aW5ncy4gSSBleHBlY3QgSSBtaWdodCBmaW5kIHNvbWV0aGluZyB0aGF0IHRpZXMgaW50byB0aGUgQ1BVIG1vZGVsIG9yIHNwZWNpZmljIGZlYXR1cmVzIG9mIEFNRCBwcm9jZXNzb3JzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjQxOjM0LjI2MzQzOTkxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9ldmVudHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG1lbnUgXFxcIlBlcmZvcm1hbmNlIG1vbml0b3JpbmdcXFwiXFxuICAgMzpcXHRcXG4gICA0OlxcdGNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcXG4gICA1OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0lOVEVMIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEluY2x1ZGUgc3VwcG9ydCBmb3IgSW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50cy4gVGhlc2UgYXJlXFxuICAxMDpcXHRcXHQgIGF2YWlsYWJsZSBvbiBOZWhhbGVtRVggYW5kIG1vcmUgbW9kZXJuIHByb2Nlc3NvcnMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9SQVBMXFxuICAxMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwvQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiAoQ1BVX1NVUF9JTlRFTCB8fCBDUFVfU1VQX0FNRCkgXFx1MDAyNlxcdTAwMjYgUENJXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBJbnRlbCBhbmQgQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciBwb3dlclxcbiAgMTg6XFx0XFx0ICBtb25pdG9yaW5nIG9uIG1vZGVybiBwcm9jZXNzb3JzLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9JTlRFTCBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBJbmNsdWRlIHN1cHBvcnQgZm9yIEludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHMgZm9yIHBvd2VyXFxuICAyNjpcXHRcXHQgIG1vbml0b3Jpbmcgb24gbW9kZXJuIHByb2Nlc3NvcnMuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcXG4gIDI5OlxcdFxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJBTUQgUHJvY2Vzc29yIFBvd2VyIFJlcG9ydGluZyBNZWNoYW5pc21cXFwiXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIFByb3ZpZGUgcG93ZXIgcmVwb3J0aW5nIG1lY2hhbmlzbSBzdXBwb3J0IGZvciBBTUQgcHJvY2Vzc29ycy5cXG4gIDMzOlxcdFxcdCAgQ3VycmVudGx5LCBpdCBsZXZlcmFnZXMgWDg2X0ZFQVRVUkVfQUNDX1BPV0VSXFxuICAzNDpcXHRcXHQgIChDUFVJRCBGbjgwMDBfMDAwN19FRFhbMTJdKSBpbnRlcmZhY2UgdG8gY2FsY3VsYXRlIHRoZVxcbiAgMzU6XFx0XFx0ICBhdmVyYWdlIHBvd2VyIGNvbnN1bXB0aW9uIG9uIEZhbWlseSAxNWggcHJvY2Vzc29ycy5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcXG4gIDM4OlxcdFxcdHRyaXN0YXRlIFxcXCJBTUQgVW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJbmNsdWRlIHN1cHBvcnQgZm9yIEFNRCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzIGZvciB1c2Ugd2l0aFxcbiAgNDM6XFx0XFx0ICBlLmcuLCBwZXJmIHN0YXQgLWUgYW1kX2wzLy4uLi8sYW1kX2RmLy4uLi8uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA0NjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnYW1kLXVuY29yZScuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdGNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFxcdTAwMjZcXHUwMDI2IENQVV9TVVBfQU1EXFxuICA1MDpcXHRcXHRib29sIFxcXCJBTUQgWmVuMyBCcmFuY2ggU2FtcGxpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6NDE6MzQuMjYzNTE0NTUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mzc1MTQ2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBBTUQgTEJSIFYyIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNzZXNzaW5nIHRoZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzIGZvciB0aGlzIEtWTSBwYXRjaCBpbXBsZW1lbnRpbmcgQU1EIExCUiBWMiBzdXBwb3J0LiBGaXJzdCwgSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZDogYEtWTWAsIGBLVk1fQU1EYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBDUFVfU1VQX0FNRGAuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaW5jbHVkZSBgc3ZtX2dldF9tc3JgIGFuZCBgc3ZtX3NldF9tc3JgLCBhcyB0aGV5J3JlIGNlbnRyYWwgdG8gYW55IE1TUiBoYW5kbGluZyBpbiB0aGUgU1ZNIGNvZGUuIFRoZXkncmUgZGVmaW5pdGVseSBob3QgcGF0aHMuIEhvd2V2ZXIsIHRoZSBndWlkYW5jZSBpcyB0byBwcmlvcml0aXplIEFQSSBlbnRyeXBvaW50cyB0aGF0IGFyZW4ndCBvdmVybHkgZ2VuZXJpYyBvciBzdGF0aWMgdG8gYXZvaWQgc2tld2luZyB0aGUgZnV6emluZyBkaXN0cmlidXRpb24uIFdoaWxlIGBzdm1fZ2V0X21zcmAgYW5kIGBzdm1fc2V0X21zcmAgYXJlIGNyaXRpY2FsIGZvciBoaXR0aW5nIHRoZSBuZXcgTVNSLXJlbGF0ZWQgY29kZSwgdGhleSBjb3ZlciAqYWxsKiBNU1JzLCBhbmQgdGhhdCBsZXZlbCBvZiBnZW5lcmFsaXR5IG1pZ2h0IG5vdCBiZSBpZGVhbCBmb3IgZm9jdXNlZCBmdXp6aW5nIG9uIHRoaXMgcGF0Y2gncyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuXG5BZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6XG5cbiogICBgc3ZtX3VwZGF0ZV9sYnJ2YDogVGhpcyBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5IGludm9sdmVkIGluIHVwZGF0aW5nIExCUiB2aXJ0dWFsaXphdGlvbiBhbmQgaXMgbGlua2VkIHRvIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYC5cbiogICBgc3ZtX2VuYWJsZV9sYnJ2YDogQWxzbyBub24tc3RhdGljLiBUaGlzIHNlZW1zIGltcG9ydGFudCwgYXMgaXQgZW5hYmxlcyBMQlIgVjIgZnVuY3Rpb25hbGl0eSwgYW5kIGNhbGxzIGBzdm1fcmVjYWxjX2xicnYyX21zcl9pbnRlcmNlcHRzYCBhbmQgYHN2bV9yZWNhbGNfbGJyX21zcl9pbnRlcmNlcHRzYC5cbiogICBgc3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkYDogVGhpcyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGluIGBzdm1feDg2X29wc2AsIHdoaWNoIGlzIG5vdCBpbmxpbmVkLCBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQ1BVSUQgdXBkYXRlcywgYW5kIGludGVyYWN0cyB3aXRoIG5ldyBmZWF0dXJlIGJpdHMuXG5cblNpbmNlIHRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBuZXcgTVNScyAoYE1TUl9BTURfREJHX0VYVE5fQ0ZHYCwgYE1TUl9BTUQ2NF9MQlJfU0VMRUNUYCwgYE1TUl9BTURfU0FNUF9CUl9GUk9NYCkgYW5kIG5ldyBDUFVJRCBmZWF0dXJlcyAoYEFNRF9MQlJfVjJgLCBgQU1EX0xCUl9QTUNfRlJFRVpFYCksIHRoZXNlIGZ1bmN0aW9ucyByZXByZXNlbnQgZ29vZCBlbnRyeSBwb2ludHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBjb2RlIHBhdGhzLlxuXG5JJ3ZlIGFsc28gZGVjaWRlZCB0byBpbmNsdWRlIGBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlgLiBJdCdzIGEgbm9uLXN0YXRpYywgZXhwb3J0ZWQgZnVuY3Rpb24gYW5kIGlzIGNhbGxlZCBkdXJpbmcgS1ZNIFBNVSBpbml0aWFsaXphdGlvbi4gSXQgaXMgbm90IG9uIHRoZSBob3QgcGF0aC5cblxuSSd2ZSBjaGVja2VkIHNvbWUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGNwdWlkX3F1ZXJ5X2xicnYyX3N0YWNrX3NpemVgLCBgc3ZtX2xicnYyX3N1cHBvcnRlZGAsIGFuZCBgc3ZtX2xicnYyX2FjdGl2ZWAuIFRoZXNlIGFyZSBzdGF0aWMgYW5kIHNtYWxsLCBzbyB0aGV5J3JlIHByb2JhYmx5IGlubGluZWQgYW5kIG5vdCBnb29kIGNhbmRpZGF0ZXMuXG5cblNvLCB0aGUgZnV6emluZyBzdHJhdGVneSBpcyBkZWZpbmVkLiBJIHdpbGwgYmUgc3VyZSB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IHRoZSBuZXcgTEJSIFYyIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzA5LCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzo0MTo0OC42Mzg2NjQwNjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM4Nzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQ1BVX1NVUF9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdm1fdXBkYXRlX2xicnZcIixcbiAgICBcInN2bV9lbmFibGVfbGJydlwiLFxuICAgIFwic3ZtX3ZjcHVfYWZ0ZXJfc2V0X2NwdWlkXCIsXG4gICAgXCJwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEFNRCBMQlIgVjIgKExhc3QgQnJhbmNoIFJlY29yZCBWZXJzaW9uIDIpIGluIEtWTS4gSXQgbW9kaWZpZXMgU1ZNIHRvIGhhbmRsZSBuZXcgTVNScyAoTVNSX0FNRF9EQkdfRVhUTl9DRkcsIE1TUl9BTUQ2NF9MQlJfU0VMRUNULCBNU1JfQU1EX1NBTVBfQlJfRlJPTSkgYW5kIENQVUlEIGZlYXR1cmVzIChBTURfTEJSX1YyLCBBTURfTEJSX1BNQ19GUkVFWkUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIEFNRCB2aXJ0dWFsaXphdGlvbiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJDUFVfU1VQX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV91cGRhdGVfbGJydlwiLFxuICAgIFwic3ZtX2VuYWJsZV9sYnJ2XCIsXG4gICAgXCJzdm1fdmNwdV9hZnRlcl9zZXRfY3B1aWRcIixcbiAgICBcInBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQU1EIExCUiBWMiAoTGFzdCBCcmFuY2ggUmVjb3JkIFZlcnNpb24gMikgaW4gS1ZNLiBJdCBtb2RpZmllcyBTVk0gdG8gaGFuZGxlIG5ldyBNU1JzIChNU1JfQU1EX0RCR19FWFROX0NGRywgTVNSX0FNRDY0X0xCUl9TRUxFQ1QsIE1TUl9BTURfU0FNUF9CUl9GUk9NKSBhbmQgQ1BVSUQgZmVhdHVyZXMgKEFNRF9MQlJfVjIsIEFNRF9MQlJfUE1DX0ZSRUVaRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gQU1EIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhsm6h[1] Phase: Succeeded StartedAt: 2026-07-26 07:42:23 +0000 UTC FinishedAt: 2026-07-26 07:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 07:42:23 +0000 UTC FinishedAt: 2026-07-26 07:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2] Phase: Succeeded StartedAt: 2026-07-26 07:42:23 +0000 UTC FinishedAt: 2026-07-26 12:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 07:42:23 +0000 UTC FinishedAt: 2026-07-26 12:07:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 07:42:23 +0000 UTC FinishedAt: 2026-07-26 07:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 07:42:23 +0000 UTC FinishedAt: 2026-07-26 07:42:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowhsm6h/series-workflowhsm6h-convert-artifact-658183825/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 07:42:33 +0000 UTC FinishedAt: 2026-07-26 08:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 07:42:33 +0000 UTC FinishedAt: 2026-07-26 08:14: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:*9d00c3ef-9afa-4496-9147-eaff0d5b0be1,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-workflowhsm6h/series-workflowhsm6h-convert-artifact-658183825/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": "92fbb9dc-8c32-4659-ad27-6db76a4164c4", "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-workflowhsm6h/series-workflowhsm6h-build-action-879556671/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 07:42:33 +0000 UTC FinishedAt: 2026-07-26 08:13:43 +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:*9d00c3ef-9afa-4496-9147-eaff0d5b0be1,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-workflowhsm6h/series-workflowhsm6h-convert-artifact-658183825/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": "92fbb9dc-8c32-4659-ad27-6db76a4164c4", "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-workflowhsm6h/series-workflowhsm6h-build-action-879556671/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 08:14:04 +0000 UTC FinishedAt: 2026-07-26 08:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 08:14:04 +0000 UTC FinishedAt: 2026-07-26 08:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 08:14:04 +0000 UTC FinishedAt: 2026-07-26 08:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 08:14:04 +0000 UTC FinishedAt: 2026-07-26 08:14:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowhsm6h/series-workflowhsm6h-convert-artifact-3634998372/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 08:14:39 +0000 UTC FinishedAt: 2026-07-26 08:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 08:14:39 +0000 UTC FinishedAt: 2026-07-26 08:16:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*92fbb9dc-8c32-4659-ad27-6db76a4164c4,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-workflowhsm6h/series-workflowhsm6h-build-action-879556671/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-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 08:16:54 +0000 UTC FinishedAt: 2026-07-26 08:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 08:16:54 +0000 UTC FinishedAt: 2026-07-26 08:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 08:16:54 +0000 UTC FinishedAt: 2026-07-26 09:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 08:16:54 +0000 UTC FinishedAt: 2026-07-26 09:02:48 +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:*9d00c3ef-9afa-4496-9147-eaff0d5b0be1,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-workflowhsm6h/series-workflowhsm6h-convert-artifact-3634998372/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": "9dc656ea-c673-42e6-91bd-f7bd31529fc1", "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-workflowhsm6h/series-workflowhsm6h-build-action-3081221616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 08:16:54 +0000 UTC FinishedAt: 2026-07-26 09:02:38 +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:*9d00c3ef-9afa-4496-9147-eaff0d5b0be1,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-workflowhsm6h/series-workflowhsm6h-convert-artifact-3634998372/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": "9dc656ea-c673-42e6-91bd-f7bd31529fc1", "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-workflowhsm6h/series-workflowhsm6h-build-action-3081221616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 09:02:48 +0000 UTC FinishedAt: 2026-07-26 09:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 09:02:48 +0000 UTC FinishedAt: 2026-07-26 09:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 09:02:48 +0000 UTC FinishedAt: 2026-07-26 09:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 09:02:48 +0000 UTC FinishedAt: 2026-07-26 09:04:48 +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:*9dc656ea-c673-42e6-91bd-f7bd31529fc1,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-workflowhsm6h/series-workflowhsm6h-build-action-3081221616/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-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 09:04:58 +0000 UTC FinishedAt: 2026-07-26 12:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 09:04:58 +0000 UTC FinishedAt: 2026-07-26 12:07:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"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:*92fbb9dc-8c32-4659-ad27-6db76a4164c4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9dc656ea-c673-42e6-91bd-f7bd31529fc1,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-workflowhsm6h/series-workflowhsm6h-build-action-879556671/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-workflowhsm6h/series-workflowhsm6h-build-action-3081221616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 09:04:58 +0000 UTC FinishedAt: 2026-07-26 09:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 09:04:58 +0000 UTC FinishedAt: 2026-07-26 09:05: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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"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-workflowhsm6h/series-workflowhsm6h-convert-artifact-2153942509/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 09:04:58 +0000 UTC FinishedAt: 2026-07-26 09:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 09:04:58 +0000 UTC FinishedAt: 2026-07-26 09:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 09:04:58 +0000 UTC FinishedAt: 2026-07-26 09:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 09:05:08 +0000 UTC FinishedAt: 2026-07-26 12:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhsm6h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","svm_enable_lbrv","svm_vcpu_after_set_cpuid","perf_get_x86_pmu_capability"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","PERF_EVENTS","CPU_SUP_AMD"],"series_id":"ba4e828e-e95c-4a58-9a87-12c96c2b49cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 09:05:08 +0000 UTC FinishedAt: 2026-07-26 12:07:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*92fbb9dc-8c32-4659-ad27-6db76a4164c4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9dc656ea-c673-42e6-91bd-f7bd31529fc1,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-workflowhsm6h/series-workflowhsm6h-build-action-879556671/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-workflowhsm6h/series-workflowhsm6h-build-action-3081221616/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-workflowhsm6h/series-workflowhsm6h-convert-artifact-2153942509/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,}