Name: series-workflows8qhb Phase: Succeeded StartedAt: 2026-06-19 16:05:34 +0000 UTC FinishedAt: 2026-06-19 17:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[0] Phase: Succeeded StartedAt: 2026-06-19 16:05:34 +0000 UTC FinishedAt: 2026-06-19 16:16:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[0].run-triage Phase: Succeeded StartedAt: 2026-06-19 16:05:34 +0000 UTC FinishedAt: 2026-06-19 16:16:12 +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": "f14a0c9e03e4c2e21f86d5104157e672b6449e17", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f14a0c9e03e4c2e21f86d5104157e672b6449e17", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "c145a0e8-2b36-487a-addd-15034d4cf9ea" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "dat_peek_cmma", "dat_get_cmma", "gmap_set_cmma_all_dirty", "gmap_helper_try_set_pte_unused", "kvm_s390_get_cmma_bits", "kvm_s390_vm_set_migration" ], "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+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9wZWVrX2NtbWEmIzM0OywKICAgICYjMzQ7ZGF0X2dldF9jbW1hJiMzNDssCiAgICAmIzM0O2dtYXBfc2V0X2NtbWFfYWxsX2RpcnR5JiMzNDssCiAgICAmIzM0O2dtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9nZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHMzOTAgTU1VIGFuZCBnbWFwIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIGlzc3VlcyB3aXRoIENNTUEgKENoYW5uZWwgTWVhc3VyZW1lbnQgTWVtb3J5IEFjY2VzcykgZGlydHkgcGFnZSB0cmFja2luZyBkdXJpbmcgVk0gbWlncmF0aW9uLCBhbmQgcGFnZSB0YWJsZSB1bnVzZWQgYml0IGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gY29kZSBvbiBzMzkwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjdjZDQ3ZWViMjUxYTdiNmFkMDJhNjYyYzU3ZjRjODNjYzgzMzYyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDE5IDE2OjEyOjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCAyYzZjZWU4MjQxZTA0NC4uNDc0MGM3NTY0OWViYjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtOTgwLDYgJiM0Mzs5ODAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4ge1xuJiM0MztcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuJiM0MztcdFx0cHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xuIFx0V1JJVEVfT05DRSgqcHRlcCwgcHRlKTtcbiB9XG4gXG5AQCAtMTMzMiw4ICYjNDM7MTMzNCw2IEBAIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7XG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgbnIpXG4ge1xuLVx0aWYgKHB0ZV9wcmVzZW50KGVudHJ5KSlcbi1cdFx0ZW50cnkgPSBjbGVhcl9wdGVfYml0KGVudHJ5LCBfX3BncHJvdChfUEFHRV9VTlVTRUQpKTtcbiBcdHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIGVudHJ5LCBucik7XG4gXHRmb3IgKDs7KSB7XG4gXHRcdHNldF9wdGUocHRlcCwgZW50cnkpO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5pbmRleCBhNGZlNjY0ZjY1ZWUxNS4uNWYxOTYwZWM5ODJkMDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5AQCAtMTIwOSw3ICYjNDM7MTIwOSw3IEBAIGludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpXG4gXHRpbnQgcmM7XG4gXG4gXHRyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICYjNDM7ICpjb3VudCwgYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19ERUZBVUxULCBcdTAwMjZzdGF0ZSk7XG4tXHQqY291bnQgPSBzdGF0ZS5lbmQgLSBzdGFydDtcbiYjNDM7XHQqY291bnQgPSBzdGF0ZS5lbmQgXHUwMDNlPSBzdGFydCA/IHN0YXRlLmVuZCAtIHN0YXJ0IDogMDtcbiBcdC8qIFJldHVybiBzdWNjZXNzIGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSB3YXMgc2F2ZWQsIG90aGVyd2lzZSBhbiBlcnJvci4gKi9cbiBcdHJldHVybiAocmMgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgKmNvdW50IFx1MDAzZSAwKSA/IDAgOiByYztcbiB9XG5AQCAtMTI1Myw2ICYjNDM7MTI1Myw5IEBAIGludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsXG4gXHR9O1xuIFxuIFx0X2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuJiM0MztcdC8qIElmIG5vIGRpcnR5IHBhZ2VzIHdlcmUgZm91bmQsIHdyYXAgYXJvdW5kIGFuZCBjb250aW51ZSBzZWFyY2hpbmcgKi9cbiYjNDM7XHRpZiAoKnN0YXJ0IFx1MDAyNlx1MDAyNiBzdGF0ZS5zdGFydCA9PSAtMSlcbiYjNDM7XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoMCwgKnN0YXJ0LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuIFxuIFx0aWYgKHN0YXRlLnN0YXJ0ID09IC0xKSB7XG4gXHRcdCpjb3VudCA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggMWQyODlmOGZhM2IyMDkuLjRhYTYyYzlhNDhkZTY5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMzI3LDcgJiM0MzszMjcsNyBAQCBzdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdFxuIFx0XHRuZXcuaC5pID0gMTtcbiBcdFx0bmV3LnMuZmMxLnkgPSAwO1xuIFx0XHRuZXcucy5mYzEucHJlZml4X25vdGlmID0gMDtcbi1cdFx0aWYgKG5ldy5zLmZjMS5kIHx8ICFuZXcuaC5wKVxuJiM0MztcdFx0aWYgKChuZXcucy5mYzEuZCB8fCAhbmV3LmgucCkgXHUwMDI2XHUwMDI2ICFuZXcucy5mYzEucylcbiBcdFx0XHRmb2xpb19zZXRfZGlydHkocGh5c190b19mb2xpbyhjcnN0ZV9vcmlnaW5fbGFyZ2UoY3JzdGUpKSk7XG4gXHRcdG5ldy5zLmZjMS5kID0gMDtcbiBcdFx0bmV3LmgucCA9IDE7XG5AQCAtMTA3Niw3ICYjNDM7MTA3NiwxNiBAQCBpbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZlxuIFxuIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4ge1xuLVx0X19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCBcdTAwMjZwZ3N0ZV9vZihwdGVwKS1cdTAwM2V2YWwpO1xuJiM0MztcdHVuaW9uIHBnc3RlIHBnc3RlO1xuJiM0MztcbiYjNDM7XHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuJiM0MztcdC8qIEF2b2lkIGRvdWJsZS1jb3VudGluZyB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBoYXBwZW4gKi9cbiYjNDM7XHRpZiAoIXBnc3RlLmNtbWFfZCkge1xuJiM0MztcdFx0cGdzdGUuY21tYV9kID0gMTtcbiYjNDM7XHRcdGF0b21pYzY0X2luYyh3YWxrLVx1MDAzZXByaXYpO1xuJiM0MztcdH1cbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XG4gXHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gXHRcdHJldHVybiBuZXh0O1xuIFx0cmV0dXJuIDA7XG5AQCAtMTA5MCw3ICYjNDM7MTA5OSw4IEBAIHZvaWQgZ21hcF9zZXRfY21tYV9hbGxfZGlydHkoc3RydWN0IGdtYXAgKmdtYXApXG4gXHRkbyB7XG4gXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNmdtYXAtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuIFx0XHRcdGdmbiA9IF9kYXRfd2Fsa19nZm5fcmFuZ2UoZ2ZuLCBhc2NlX2VuZChnbWFwLVx1MDAzZWFzY2UpLCBnbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcyxcbi1cdFx0XHRcdFx0XHQgIERBVF9XQUxLX0lHTl9IT0xFUywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgREFUX1dBTEtfSUdOX0hPTEVTLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNmdtYXAtXHUwMDNla3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fSB3aGlsZSAoZ2ZuKTtcbiB9XG5AQCAtMTI2Myw3ICYjNDM7MTI3Myw3IEBAIHN0YXRpYyBpbnQgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqL1xuIFx0c21wX3JtYigpO1xuIFxuLVx0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXHUwMDNla3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS5kdCAmIzQzOyAxLCBmYWxzZSk7XG4mIzQzO1x0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXHUwMDNla3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS50bCAmIzQzOyAxLCBmYWxzZSk7XG4gXHRpZiAocmMgXHUwMDNlIDApXG4gXHRcdHJjID0gLUVGQVVMVDtcbiBcdGlmICghcmMpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCBmZmIyMGE2NGQzMjhmMy4uOTA3ZDJjYTk5NTFkYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTExOTEsNyAmIzQzOzExOTEsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbi1cdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcbiBcdGludCBia3Q7XG4gXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cbkBAIC0xMjA4LDEyICYjNDM7MTIwNywxMCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm1fZm9yX2VhY2hfbWVtc2xvdChtcywgYmt0LCBzbG90cykge1xuIFx0XHRpZiAoIW1zLVx1MDAzZWRpcnR5X2JpdG1hcClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0cmFtX3BhZ2VzICYjNDM7PSBtcy1cdTAwM2VucGFnZXM7XG4gXHR9XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuIFx0LyogbWFyayBhbGwgdGhlIHBhZ2VzIGFzIGRpcnR5ICovXG4gXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbi1cdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCByYW1fcGFnZXMpO1xuLVx0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuIFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5pbmRleCA0NDdlYzdlZDQyM2RjNC4uOWJjNmZkMDJmZjc3NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0zNjYsNyAmIzQzOzM2Niw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Nza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRpZiAocmMgXHUwMDNlIDEpXG4gXHRcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4tXHRcdFx0a3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4mIzQzO1x0XHRcdHJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4mIzQzO1x0XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKHJjIFx1MDAzYyAwKVxuQEAgLTExMjIsNyAmIzQzOzExMjQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wZm1mKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRpZiAocmMgXHUwMDNlIDEpXG4gXHRcdFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcbiBcdFx0XHRpZiAocmMgPT0gLUVOT01FTSkge1xuLVx0XHRcdFx0a3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4mIzQzO1x0XHRcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbiYjNDM7XHRcdFx0XHRpZiAocmMpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHJjIFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xuaW5kZXggZWUzZjM3YWY4YWVlNGEuLjRiZjdjOTAxMmZlYjZhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbkBAIC0xODEsNyAmIzQzOzE4MSw4IEBAIHZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChwdGVwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19hdG9taWM2NF9vcihfUEFHRV9VTlVTRUQsIChsb25nICopcHRlcCk7XG4mIzQzO1x0aWYgKHB0ZV9wcmVzZW50KCpwdGVwKSlcbiYjNDM7XHRcdF9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApO1xuIFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbmluZGV4IGUzOWE3MjRmZTg2MGUzLi4wNGYzNGI3ZWMxMjc5YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuQEAgLTM5LDExICYjNDM7MzksMTQgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXG4gXHRcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXG4mIzQzO1x0XHRcJiMzNDtcdHhnciAxLDFcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7XHRsbGlsZiAxLCVbc3RhcnRfZ2ZuXVxcblwmIzM0O1xuIFx0XHQvKiBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZ2ZuICovXG4gXHRcdFwmIzM0O1x0c2xsZyAxLDEsMTIoMClcXG5cJiMzNDtcbiBcdFx0Lyogc2V0IHRoZSBmaXJzdCBwYWdlIGluIFRFU1RfREFUQSBtZW1zbG90IHRvIFNUQUJMRSAqL1xuIFx0XHRcJiMzNDtcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1x0YWdmaSAxLDB4MTAwMDAwXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cJiMzNDtcbiBcdFx0LyogaHlwZXJjYWxsICovXG4gXHRcdFwmIzM0O1x0ZGlhZyAwLDAsMHg1MDFcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7MDpcdGogMGJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfcGVla19jbW1hJiMzNDssCiAgICAmIzM0O2RhdF9nZXRfY21tYSYjMzQ7LAogICAgJiMzNDtnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eSYjMzQ7LAogICAgJiMzNDtnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBzMzkwIE1NVSBhbmQgZ21hcCBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBpc3N1ZXMgd2l0aCBDTU1BIChDaGFubmVsIE1lYXN1cmVtZW50IE1lbW9yeSBBY2Nlc3MpIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZHVyaW5nIFZNIG1pZ3JhdGlvbiwgYW5kIHBhZ2UgdGFibGUgdW51c2VkIGJpdCBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGNvZGUgb24gczM5MC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjdjZDQ3ZWViMjUxYTdiNmFkMDJhNjYyYzU3ZjRjODNjYzgzMzYyMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDE5IDE2OjEyOjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMmM2Y2VlODI0MWUwNDQuLjQ3NDBjNzU2NDllYmI1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTk4MCw2ICYjNDM7OTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKJiM0MzsJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCiYjNDM7CQlwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7CiAJV1JJVEVfT05DRSgqcHRlcCwgcHRlKTsKIH0KIApAQCAtMTMzMiw4ICYjNDM7MTMzNCw2IEBAIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IG5yKQogewotCWlmIChwdGVfcHJlc2VudChlbnRyeSkpCi0JCWVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7CiAJcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgZW50cnksIG5yKTsKIAlmb3IgKDs7KSB7CiAJCXNldF9wdGUocHRlcCwgZW50cnkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKaW5kZXggYTRmZTY2NGY2NWVlMTUuLjVmMTk2MGVjOTgyZDA0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKQEAgLTEyMDksNyAmIzQzOzEyMDksNyBAQCBpbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKQogCWludCByYzsKIAogCXJjID0gX2RhdF93YWxrX2dmbl9yYW5nZShzdGFydCwgc3RhcnQgJiM0MzsgKmNvdW50LCBhc2NlLCAmYW1wO29wcywgREFUX1dBTEtfREVGQVVMVCwgJmFtcDtzdGF0ZSk7Ci0JKmNvdW50ID0gc3RhdGUuZW5kIC0gc3RhcnQ7CiYjNDM7CSpjb3VudCA9IHN0YXRlLmVuZCAmZ3Q7PSBzdGFydCA/IHN0YXRlLmVuZCAtIHN0YXJ0IDogMDsKIAkvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovCiAJcmV0dXJuIChyYyA9PSAtRUZBVUxUICZhbXA7JmFtcDsgKmNvdW50ICZndDsgMCkgPyAwIDogcmM7CiB9CkBAIC0xMjUzLDYgJiM0MzsxMjUzLDkgQEAgaW50IGRhdF9nZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90ICpzdGFydCwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcywKIAl9OwogCiAJX2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCAmYW1wO29wcywgREFUX1dBTEtfSUdOX0hPTEVTLCAmYW1wO3N0YXRlKTsKJiM0MzsJLyogSWYgbm8gZGlydHkgcGFnZXMgd2VyZSBmb3VuZCwgd3JhcCBhcm91bmQgYW5kIGNvbnRpbnVlIHNlYXJjaGluZyAqLwomIzQzOwlpZiAoKnN0YXJ0ICZhbXA7JmFtcDsgc3RhdGUuc3RhcnQgPT0gLTEpCiYjNDM7CQlfZGF0X3dhbGtfZ2ZuX3JhbmdlKDAsICpzdGFydCwgYXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgJmFtcDtzdGF0ZSk7CiAKIAlpZiAoc3RhdGUuc3RhcnQgPT0gLTEpIHsKIAkJKmNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZ21hcC5jIGIvYXJjaC9zMzkwL2t2bS9nbWFwLmMKaW5kZXggMWQyODlmOGZhM2IyMDkuLjRhYTYyYzlhNDhkZTY5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2dtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2dtYXAuYwpAQCAtMzI3LDcgJiM0MzszMjcsNyBAQCBzdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdAogCQluZXcuaC5pID0gMTsKIAkJbmV3LnMuZmMxLnkgPSAwOwogCQluZXcucy5mYzEucHJlZml4X25vdGlmID0gMDsKLQkJaWYgKG5ldy5zLmZjMS5kIHx8ICFuZXcuaC5wKQomIzQzOwkJaWYgKChuZXcucy5mYzEuZCB8fCAhbmV3LmgucCkgJmFtcDsmYW1wOyAhbmV3LnMuZmMxLnMpCiAJCQlmb2xpb19zZXRfZGlydHkocGh5c190b19mb2xpbyhjcnN0ZV9vcmlnaW5fbGFyZ2UoY3JzdGUpKSk7CiAJCW5ldy5zLmZjMS5kID0gMDsKIAkJbmV3LmgucCA9IDE7CkBAIC0xMDc2LDcgJiM0MzsxMDc2LDE2IEBAIGludCBnbWFwX3Byb3RlY3Rfcm1hcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLCBnZm5fdCBwX2dmCiAKIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspCiB7Ci0JX19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCAmYW1wO3Bnc3RlX29mKHB0ZXApLSZndDt2YWwpOwomIzQzOwl1bmlvbiBwZ3N0ZSBwZ3N0ZTsKJiM0MzsKJiM0MzsJcGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKJiM0MzsJLyogQXZvaWQgZG91YmxlLWNvdW50aW5nIHdoZW4gY29uY3VycmVudCB1cGRhdGVzIGhhcHBlbiAqLwomIzQzOwlpZiAoIXBnc3RlLmNtbWFfZCkgewomIzQzOwkJcGdzdGUuY21tYV9kID0gMTsKJiM0MzsJCWF0b21pYzY0X2luYyh3YWxrLSZndDtwcml2KTsKJiM0MzsJfQomIzQzOwlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKJiM0MzsKIAlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCXJldHVybiBuZXh0OwogCXJldHVybiAwOwpAQCAtMTA5MCw3ICYjNDM7MTA5OSw4IEBAIHZvaWQgZ21hcF9zZXRfY21tYV9hbGxfZGlydHkoc3RydWN0IGdtYXAgKmdtYXApCiAJZG8gewogCQlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO2dtYXAtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCiAJCQlnZm4gPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKGdmbiwgYXNjZV9lbmQoZ21hcC0mZ3Q7YXNjZSksIGdtYXAtJmd0O2FzY2UsICZhbXA7b3BzLAotCQkJCQkJICBEQVRfV0FMS19JR05fSE9MRVMsIE5VTEwpOwomIzQzOwkJCQkJCSAgREFUX1dBTEtfSUdOX0hPTEVTLAomIzQzOwkJCQkJCSAgJmFtcDtnbWFwLSZndDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcyk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0gd2hpbGUgKGdmbik7CiB9CkBAIC0xMjYzLDcgJiM0MzsxMjczLDcgQEAgc3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWEKIAkvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqLwogCXNtcF9ybWIoKTsKIAotCXJjID0ga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2VzKHNnLSZndDtrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLmR0ICYjNDM7IDEsIGZhbHNlKTsKJiM0MzsJcmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctJmd0O2t2bSwgY29udGV4dC5mLCBhc2NlLnJzdG8sIGFzY2UudGwgJiM0MzsgMSwgZmFsc2UpOwogCWlmIChyYyAmZ3Q7IDApCiAJCXJjID0gLUVGQVVMVDsKIAlpZiAoIXJjKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IGZmYjIwYTY0ZDMyOGYzLi45MDdkMmNhOTk1MWRhYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMTE5MSw3ICYjNDM7MTE5MSw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptczsKIAlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90czsKLQl1bnNpZ25lZCBsb25nIHJhbV9wYWdlcyA9IDA7CiAJaW50IGJrdDsKIAogCS8qIG1pZ3JhdGlvbiBtb2RlIGFscmVhZHkgZW5hYmxlZCAqLwpAQCAtMTIwOCwxMiAmIzQzOzEyMDcsMTAgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKQogCWt2bV9mb3JfZWFjaF9tZW1zbG90KG1zLCBia3QsIHNsb3RzKSB7CiAJCWlmICghbXMtJmd0O2RpcnR5X2JpdG1hcCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyYW1fcGFnZXMgJiM0Mzs9IG1zLSZndDtucGFnZXM7CiAJfQomIzQzOwlrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgPSAxOwogCS8qIG1hcmsgYWxsIHRoZSBwYWdlcyBhcyBkaXJ0eSAqLwogCWdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KGt2bS0mZ3Q7YXJjaC5nbWFwKTsKLQlhdG9taWM2NF9zZXQoJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcywgcmFtX3BhZ2VzKTsKLQlrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgPSAxOwogCWt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUQVJUX01JR1JBVElPTik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IDQ0N2VjN2VkNDIzZGM0Li45YmM2ZmQwMmZmNzc3MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKQEAgLTM2Niw3ICYjNDM7MzY2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCWlmIChyYyAmZ3Q7IDEpCiAJCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKIAkJaWYgKHJjID09IC1FTk9NRU0pIHsKLQkJCWt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LSZndDthcmNoLm1jKTsKJiM0MzsJCQlyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LSZndDthcmNoLm1jKTsKJiM0MzsJCQlpZiAocmMpCiYjNDM7CQkJCXJldHVybiByYzsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChyYyAmbHQ7IDApCkBAIC0xMTIyLDcgJiM0MzsxMTI0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcGZtZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQlpZiAocmMgJmd0OyAxKQogCQkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpOwogCQkJaWYgKHJjID09IC1FTk9NRU0pIHsKLQkJCQlrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS0mZ3Q7YXJjaC5tYyk7CiYjNDM7CQkJCXJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtJmd0O2FyY2gubWMpOwomIzQzOwkJCQlpZiAocmMpCiYjNDM7CQkJCQlyZXR1cm4gcmM7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAocmMgJmx0OyAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jCmluZGV4IGVlM2YzN2FmOGFlZTRhLi40YmY3YzkwMTJmZWI2YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYwpAQCAtMTgxLDcgJiM0MzsxODEsOCBAQCB2b2lkIGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiAJaWYgKElTX0VSUl9PUl9OVUxMKHB0ZXApKQogCQlyZXR1cm47CiAKLQlfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTsKJiM0MzsJaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkKJiM0MzsJCV9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApOwogCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jCmluZGV4IGUzOWE3MjRmZTg2MGUzLi4wNGYzNGI3ZWMxMjc5YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKQEAgLTM5LDExICYjNDM7MzksMTQgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZCkKIHsKIAlhc20gdm9sYXRpbGUoCiAJCS8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovCiYjNDM7CQkmIzM0Owl4Z3IgMSwxXG4mIzM0OwogCQkmIzM0OwlsbGlsZiAxLCVbc3RhcnRfZ2ZuXVxuJiMzNDsKIAkJLyogY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGdmbiAqLwogCQkmIzM0OwlzbGxnIDEsMSwxMigwKVxuJiMzNDsKIAkJLyogc2V0IHRoZSBmaXJzdCBwYWdlIGluIFRFU1RfREFUQSBtZW1zbG90IHRvIFNUQUJMRSAqLwogCQkmIzM0OwkuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXG4mIzM0OwomIzQzOwkJJiMzNDsJYWdmaSAxLDB4MTAwMDAwXG4mIzM0OwomIzQzOwkJJiMzNDsJLmluc24gcnJmLDB4YjlhYjAwMDAsMiwxLDEsMFxuJiMzNDsKIAkJLyogaHlwZXJjYWxsICovCiAJCSYjMzQ7CWRpYWcgMCwwLDB4NTAxXG4mIzM0OwogCQkmIzM0OzA6CWogMGImIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgczM5MCBLVk0gUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGZvY3VzZWQgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgS1ZNLXJlbGF0ZWQgY29kZS4gSSBzZWUgYSBmZXcga2V5IGFyZWFzIGJlaW5nIHRvdWNoZWQ6IHBhZ2UgdGFibGVzLCB0aGUgS1ZNIER5bmFtaWMgQWRkcmVzcyBUcmFuc2xhdGlvbiAoREFUKSwgdGhlIGdtYXAgY29tcG9uZW50LCBhbmQgdGhlIEtWTSBzMzkwIG1vZHVsZSBpdHNlbGYuCgpGaXJzdCwgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHN0cmVhbWxpbmluZyB0aGUgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgIGZ1bmN0aW9ucywgcmVtb3Zpbmcgc29tZSByZWR1bmRhbnQgbG9naWMgcmVnYXJkaW5nIHRoZSBgX1BBR0VfVU5VU0VEYCBiaXQuIFRoZSBgc2V0X3B0ZWAgZnVuY3Rpb24gbm93IGhhbmRsZXMgdGhlIGNsZWFyaW5nIG9mIHRoaXMgYml0IGlmIHRoZSBQVEUgaXMgcHJlc2VudCwgYW5kIHRoaXMgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbi4gTm90aGluZyBtYWpvciwgYnV0IGEgZ29vZCBjbGVhbnVwLgoKVGhlIGBkYXQuY2AgZmlsZSBzaG93cyBhIGNvdXBsZSBvZiBmaXhlcy4gSW4gYGRhdF9wZWVrX2NtbWFgLCB0aGV5JiMzOTtyZSBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgZGlydHkgcGFnZSBjb3VudCBjYWxjdWxhdGlvbnMuIFRoZSBgZGF0X2dldF9jbW1hYCBmdW5jdGlvbiBub3cgaGFuZGxlcyB3cmFwLWFyb3VuZCBtb3JlIGdyYWNlZnVsbHkuCgpUaGUgYGdtYXAuY2AgbW9kaWZpY2F0aW9ucyBzZWVtIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcuIFRoZXkmIzM5O3ZlIGFkZGVkIGEgY29uZGl0aW9uIHRvIGBmb2xpb19zZXRfZGlydHlgIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMsIEkgdGhpbmsuIFRoZW4sIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgaXMgdXNpbmcgbG9ja2luZyBwcmltaXRpdmVzIChgcGdzdGVfZ2V0X2xvY2tgIGFuZCBgcGdzdGVfc2V0X3VubG9ja2ApIHRvIHByZXZlbnQgZG91YmxlLWNvdW50aW5nIG9mIHRoZSBgY21tYV9kYCBiaXQuIFNtYXJ0OyBjb25jdXJyZW5jeSBidWdzIGFyZSBuYXN0eS4gVGhleSYjMzk7cmUgYWxzbyBwYXNzaW5nIHRoZSBgY21tYV9kaXJ0eV9wYWdlc2AgY291bnRlciB0byBgX2RhdF93YWxrX2dmbl9yYW5nZWAsIHByb2JhYmx5IHRvIGVuc3VyZSB0aGUgcGFnZSBjb3VudCBpcyB1cGRhdGVkIGNvcnJlY3RseS4gIEFuZCBmaW5hbGx5LCBhIHNtYWxsIGNoYW5nZSB0byBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCwgY2hhbmdpbmcgYGFzY2UuZHQgJiM0MzsgMWAgdG8gYGFzY2UudGwgJiM0MzsgMWAuCgpJbiBga3ZtLXMzOTAuY2AsIHRoZXkmIzM5O3ZlIHJlbW92ZWQgc29tZSByZWR1bmRhbnQgYHJhbV9wYWdlc2AgY2FsY3VsYXRpb24uIEl0IG5vdyByZWxpZXMgb24gdGhlIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgZnVuY3Rpb25hbGl0eSB0byBrZWVwIHRyYWNrIG9mIGRpcnR5IHBhZ2VzLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHNpbXBsaWZpY2F0aW9uLgoKYHByaXYuY2AgaGFzIHNvbWUgdHdlYWtzIHRvIGhhbmRsZSByZXR1cm4gdmFsdWVzIGZyb20gYGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cGAgd2hpY2ggbG9va3MgbGlrZSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZy4KCmBnbWFwX2hlbHBlcnMuY2AgaW5jbHVkZXMgYSBjaGVjayBmb3IgYHB0ZV9wcmVzZW50KCpwdGVwKWAgYmVmb3JlIHNldHRpbmcgYF9QQUdFX1VOVVNFRGAuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4KCkZpbmFsbHksIHdlIGhhdmUgYSBtb2RpZmljYXRpb24gdG8gYSBzZWxmLXRlc3QgaW4gYGNtbWFfdGVzdC5jYC4gIEFsd2F5cyBnb29kIHRvIHNlZSB0aG9zZSBnZXR0aW5nIHVwZGF0ZWQuCgpTbywgb3ZlcmFsbCwgdGhpcyBzZXJpZXMgaXMgZm9jdXNpbmcgb24gZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgYW5kIGJ1ZyBmaXhlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgS1ZNJiMzOTtzIE1NVSBhbmQgZ21hcCBsb2dpYyB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgS1ZNIGNvZGUgYW5kIG1vZGlmaWVzIHNvbWUgY3JpdGljYWwgTU1VIGFuZCBnbWFwIGxvZ2ljLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcgYW5kIHRlc3RpbmcuIFN5emthbGxlciBzdXBwb3J0cyBzMzkweCwgc28gZnV6emluZyB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBwbGFuLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLCBvZiBjb3Vyc2UuIFRpbWUgdG8gbG9vayBhdCB0aGUgYEtjb25maWdgIGZvciB0aGF0IG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ1LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZpbGVzOiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgIGFuZCBgYXJjaC9zMzkwL2t2bS9nbWFwLmNgLiBUaGVzZSBmaWxlcyBhcmUgbGlrZWx5IHdoZXJlIGFueSBzMzkwLXNwZWNpZmljIEtWTSBjb25maWd1cmF0aW9uIG9yIGhhbmRsaW5nIGlzIGRlZmluZWQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzIHRoYXQgSSBtYXkgaGF2ZSBvdmVybG9va2VkLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIHN5c3RlbSwgYW5kIHRoZXNlIGZpbGVzIGFyZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgYmUgY29uZmlkZW50IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZ21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODQ0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBwcml2LmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AuIEl0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgdHJhcHBpbmcgYW5kIGVtdWxhdGluZyB0aG9zZSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyByZXNpZGVzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBpbnN0cnVjdGlvbiBhY2Nlc3MsIG1hbmFnaW5nIHRoZSBndWVzdCYjMzk7cyBzdGF0ZSBjaGFuZ2VzLCBhbmQgaW50ZXJmYWNpbmcgd2l0aCB0aGUgaHlwZXJ2aXNvciB3aGVuIG5lY2Vzc2FyeS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGluZ3MgbGlrZSB0aGUgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIHRoZSBzcGVjaWZpYyBoYW5kbGVycyBmb3IgZWFjaCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpbnN0cnVjdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0byBlbnN1cmUgcHJvcGVyIGd1ZXN0IGlzb2xhdGlvbi4gVGhpcyBmaWxlIHNob3VsZCBiZSBhIGtleSBwYXJ0IGluIHRoZSB3aG9sZSBLVk0gczM5MCBzeXN0ZW0uIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSYjMzk7cyBwcml2aWxlZ2VkIGluc3RydWN0aW9ucywgZ2l2ZW4gdGhlaXIgc3BlY2lmaWMgcXVpcmtzLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGNsZXZlciB0cmlja3MgdG8ga2VlcCBwZXJmb3JtYW5jZSB1cCwgd2hpbGUgbWFpbnRhaW5pbmcgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9NTQwPXN0YXRpYyBpbnQgaGFuZGxlX2lvX2luc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU2OC1cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjU2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfVkZJT19BUClcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU3MC1ib29sIGt2bV9zMzkwX2lzX2dwYV9pbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzUKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBDaGFuZ2VzIGluIHRoZSBTMzkwIEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBDT05GSUdfS1ZNYCDigJMgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBiZSBjb25jZXJuZWQgd2l0aC4gQnV0IHRoZSBhY3R1YWwgY29kZSBtb2RpZmljYXRpb25zIGFyZSBuZXN0ZWQgd2l0aGluIGBhcmNoL3MzOTAva3ZtL2AgYW5kIGBhcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNgLiBKdXN0IGNvbmZpcm1pbmcgdGhhdCBgQ09ORklHX0tWTWAgaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbGwgcmVsZXZhbnQgYWRqdXN0bWVudHMuIFNlZW1zIHNvLgoKTm93LCBsZXQmIzM5O3MgaG9uZSBpbiBvbiBzb21lIHNwZWNpZmljIHN5bWJvbHMgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHkuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlOiBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAsIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgaW1wb3J0YW50IGFyZWFzLgoKRmlyc3QsIEkgbmVlZCB0byBrbm93IGlmIHRoZXNlIGFyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIEkgc2VlIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCBhbmQgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCBhcmUgc3RhdGljLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIGNvbmZpcm0gYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCBpcyBleHBvcnRlZCwgdGhhdCBjb3VsZCBiZSBzaWduaWZpY2FudC4gTGV0IG1lIGdvIGNoZWNrIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z21hcF9zZXRfY21tYV9hbGxfZGlydHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYz0xMDc3PXN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTA5My1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwOTQ6dm9pZCBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShzdHJ1Y3QgZ21hcCAqZ21hcClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEwOTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQyCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCoqCgpBbHJpZ2h0LCB0aGUgY29yZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTS9zMzkwIHN1YnN5c3RlbSBoYW5kbGVzIHRoZSBpbml0aWF0aW9uIG9mIGEgVk0gbWlncmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBtaWdyYXRpb24gcHJvY2Vzcy4gSXMgdGhpcyB0aGUgZW50cnkgcG9pbnQsIG9yIGlzIGl0IGEgc3Vic2VxdWVudCBzdGFnZT8gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgYWNjZXB0LCBhbmQgd2hhdCBkb2VzIGl0ICpkbyogd2l0aCB0aGVtPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZDsgdGhpcyBpcyBjcml0aWNhbCBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IHdoZXJlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIFZNIHN0YXRlIG5lZWRzIGNhcmVmdWwgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzOiBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgVk0mIzM5O3MgZ3Vlc3Qgc3RhdGUsIHRoZSBtaWdyYXRpb24gc3RydWN0dXJlcywgb3IgcGVyaGFwcyBzb21lIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2l0aCB0aGUgZGVzdGluYXRpb24gaG9zdD8gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciBhcmVhcyB3aGVyZSB0aGUgbWlncmF0aW9uIHByb2Nlc3MgbWlnaHQgYmxvY2sgb3IgYmVjb21lIGEgYm90dGxlbmVjay4gT25jZSBJIHVuZGVyc3RhbmQgdGhlICp3aGF0KiBvZiB0aGUgZnVuY3Rpb24sIEkmIzM5O2xsIG5lZWQgdG8gbW92ZSBvbnRvIHRoZSAqd2h5KiwgdHJhY2luZyBjYWxscyBpbnRvIG90aGVyIGZ1bmN0aW9ucywgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93LCBhbmQgZmlndXJpbmcgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzIHJlbGF0ZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgS1ZNIGltcGxlbWVudGF0aW9uLiBJbiB0aGUgZW5kLCBJIG5lZWQgdG8gaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGlvbiBwaXBlbGluZSwgYW5kIGhvdyBpdHMgY29ycmVjdCBiZWhhdmlvciBlbnN1cmVzIGEgc21vb3RoIGFuZCBjb25zaXN0ZW50IG1pZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTc3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTg5LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExOTA6c3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExOTEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjE5LSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMgYW5kXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTIyMDogKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24uXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMS0gKi9cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIzMz1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjQwLVx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI0MTpcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI0Mi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqQW5hbHl6aW5nIHMzOTAgS1ZNIE1pZ3JhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgc3RhdGljIG5hdHVyZSBvZiBhIGZldyBrZXkgY29tcG9uZW50czogYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBoYW5kbGVfc3NrZWAsIGFuZCBgaGFuZGxlX3BmbWZgLiBUaGVpciBzdGF0aWMgZGVzaWduYXRpb24gaXMgc2lnbmlmaWNhbnQ7IGl0IHJlc3RyaWN0cyB0aGVpciBzY29wZSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUsIHdoaWNoIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgd2hlbiBJJiMzOTttIGRlYnVnZ2luZyBvciB0cmFjaW5nIGFueSBtaWdyYXRpb24tcmVsYXRlZCBpc3N1ZXMuIEkgYWxzbyBub3RlIHRoYXQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGJyb2FkZXIgdXNlLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBpdCYjMzk7cyBhIGNyaXRpY2FsIHV0aWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbWlnaHQgcmVseSBvbiBpdC4gTXkgbmV4dCBzdGVwPyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGFyY2gvczM5MC9rdm0vZGF0LmNgIHRvIGV4YW1pbmUgYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYCwgYXMgdGhleSBhcmUgY3JpdGljYWwgY29tcG9uZW50cyBmb3IgREFUIG9wZXJhdGlvbnMgYW5kIGl0IGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGNvbnRleHQgb2YgdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZGF0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9kYXQuYz0xMTY5PXN0cnVjdCBkYXRfZ2V0X2NtbWFfc3RhdGUge1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3Ni1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE3NzpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE4OS1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MDpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE5OC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5OTppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjAwLXtcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMS1cdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0ge1xuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjAyOlx0XHQucHRlX2VudHJ5ID0gX19kYXRfcGVla19jbW1hX3B0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMzpcdFx0LnBtZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNDpcdFx0LnB1ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNTpcdFx0LnA0ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNjpcdFx0LnBnZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwNy1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4OTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBhbmQgUG90ZW50aWFsIFZpc2liaWxpdHkgb2YgRGF0YSBBY2Nlc3MgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZGF0X3BlZWtfY21tYWAuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vdCBzdGF0aWMsIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBhbnRlbm5hLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYWNjZXNzaWJpbGl0eSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gaG93IGl0IGludGVyYWN0cyB3aXRoIGl0cyBkYXRhLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBkYXRfZ2V0X2NtbWFgIC0gdGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF0X2dldF9jbW1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9kYXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2RhdC5jPTExNTk9bG9uZyBkYXRfcmVzZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE2OC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE2OTpzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHtcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3MC1cdGdmbl90IHN0YXJ0O1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9MTE3Nz1zdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTc5Olx0c3RydWN0IGRhdF9nZXRfY21tYV9zdGF0ZSAqc3RhdGUgPSB3YWxrLVx1MDAzZXByaXY7XG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExODAtXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTExOTA9c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkxLXtcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MjpcdHN0cnVjdCBkYXRfZ2V0X2NtbWFfc3RhdGUgKnN0YXRlID0gd2Fsay1cdTAwM2Vwcml2O1xuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkzLVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9MTE5OT1pbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwNy1cdH07XG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDg6XHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHN0YXRlID0geyAudmFsdWVzID0gdmFsdWVzLCB9O1xuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjA5LVx0aW50IHJjO1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIxNi1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIxNzpzdGF0aWMgbG9uZyBfX2RhdF9nZXRfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIxOC17XG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMTk6XHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlICpzdGF0ZSA9IHdhbGstXHUwMDNlcHJpdjtcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIyMC1cdHVuaW9uIHBnc3RlIHBnc3RlO1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTI0NC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTI0NTppbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyNDYte1xuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjQ3Olx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBfX2RhdF9nZXRfY21tYV9wdGUsIH07XG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyNDg6XHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHN0YXRlID0ge1xuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjQ5LVx0XHQucmVtYWluaW5nID0gcmVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAwMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlLgoKKipBbmFseXppbmcgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGZ1bmN0aW9ucywgYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYC4gVGhlIGtleSB0aGluZyB0byByZW1lbWJlciBpcyB0aGF0IHRoZXkmIzM5O3JlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGNoYW5nZXMgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlaXIgc2NvcGUgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgZWxzZSB0aGVzZSBjb3VsZCBiZSBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQgZnJvbS4gSXQgc3VnZ2VzdHMgYSBtb3JlIGdsb2JhbCBzY29wZSB0aGFuIHNvbWV0aGluZyBpbnRlcm5hbCB0byBhIHBhcnRpY3VsYXIgbW9kdWxlLiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoZSBkYXRhIGlzIGJlaW5nIHBhc3NlZCBhbmQgbW9kaWZpZWQgYWNyb3NzIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzLiBXaXRoIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBub24tc3RhdGljLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHNpZGUgZWZmZWN0cyBhbmQgaWYgdGhleSBtaWdodCBiZSBjYWxsZWQgaW4gdW5leHBlY3RlZCBwbGFjZXMuIE9rYXksIGxldCYjMzk7cyB0dXJuIG15IGF0dGVudGlvbiBub3cgdG8gdGhlIGZ1bmN0aW9uIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLiBNeSBuZXh0IGxpbmUgb2YgaW5xdWlyeSBoYXMgdG8gYmUgYWJvdXQgaG93IHRoYXQgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggb3IgdXNlcyBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYz0xMTkxPXN0YXRpYyBzdHJ1Y3QgZ21hcCAqZ21hcF9maW5kX3NoYWRvdyhzdHJ1Y3QgZ21hcCAqcGFyZW50LCB1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMDQtI2RlZmluZSBDUlNUX1RBQkxFX1BBR0VTIChfQ1JTVF9UQUJMRV9TSVpFIC8gUEFHRV9TSVpFKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIwNTpzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsIHtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMDYtXHR1bnNpZ25lZCBsb25nIHNlcTtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjA5LVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIxMDpzdGF0aWMgaW5saW5lIGludCBfX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIxMTpcdFx0XHRcdFx0XHRzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsICpjb250ZXh0KVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIxMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI0Mi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNDM6c3RhdGljIGlubGluZSBpbnQgX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI0NDpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgKmNvbnRleHQpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjQ1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjU2LVx0XHRcdHJldHVybiByYztcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNTc6XHRcdHJjID0gX19nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIHNnLCBjb250ZXh0KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNTgtXHRcdHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjYzLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI2NDpzdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI2NS17XG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjY2Olx0c3RydWN0IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCBjb250ZXh0ID0ge307XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjY3LVx0dW5pb24gYXNjZSBhc2NlID0gc2ctXHUwMDNlZ3Vlc3RfYXNjZTtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjc5LVx0aWYgKCFyYylcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyODA6XHRcdHJjID0gX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChtYywgc2csIFx1MDAyNmNvbnRleHQpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI4MS1cdGlmIChyYylcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMzA0PXN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlbnQsXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM1NC1cdC8qIFByb3RlY3Qgd2hpbGUgaW5zZXJ0aW5nLCBwcm90ZWN0cyBhZ2FpbnN0IGludmFsaWRhdGlvbiByYWNlcy4gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEzNTU6XHRyYyA9IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChtYywgbmV3KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNTYtXHRpZiAocmMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyOTAKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHMzOTAgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgczM5MCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGNoYW5nZXMuIEZpcnN0IG9ic2VydmF0aW9uOiBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZS4gSG93ZXZlciwgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgIGFyZSAqZXhwb3J0ZWQqLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCB0YXJnZXRzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgLCBhcmUgZGVmaW5lZC4gQWgsIHRoZXkmIzM5O3JlIGlubGluZSBmdW5jdGlvbnMuIFRoaXMgZ2l2ZXMgbWUgYSBiZXR0ZXIgZmVlbCBmb3IgaG93IHRoZXkgbWlnaHQgYmUgdXNlZCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gdG91Y2ggYm90aCBLVk0gYW5kIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgb24gczM5MC4gR2l2ZW4gdGhhdCBjb21iaW5hdGlvbiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGFuZCBhIGZ1enppbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGV4cG9ydGVkIHN5bWJvbHM6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gVGhleSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzLgoKTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiB0aGUgY29kZWJhc2UgdGhhdCBtaWdodCBiZSByZWxldmFudD8gTGV0JiMzOTtzIGNoZWNrIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIHF1aWNrbHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgcmVsZXZhbnQsIHNpbmNlIG1pZ3JhdGlvbiBjYW4gaW52b2x2ZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIyMj1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIzMi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjMzOnN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIzNC1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTk3OD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTk5NS1cdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjE5OTY6XHRcdHJldCA9IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oa3ZtLCBhdHRyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xOTk3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEtWTSBzMzkwIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBzbyBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50IGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdoZW4gd2UmIzM5O3JlIHNldHRpbmcgYXR0cmlidXRlcyBmb3IgdGhlIHZpcnR1YWwgbWFjaGluZSBvbiBzMzkwLiBUbyBkbyB0aGF0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBoYW5kbGVycyBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucy4KCkxldCBtZSBjaGVjayBgYXJjaC9zMzkwL2t2bS9wcml2LmNgLiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIGltcGxlbWVudGF0aW9ucyBmb3IgaGFuZGxpbmcgc2Vuc2l0aXZlIGluc3RydWN0aW9ucyBvciBldmVudHMgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEkgc3BlY2lmaWNhbGx5IHdhbnQgdG8gdmVyaWZ5IHRoZSBleGlzdGVuY2UgYW5kIGJlaGF2aW9yIG9mIGhhbmRsZXJzIGZvciBTZWN1cmUgU2VydmljZSBLZXkgRW5hYmxlbWVudCAoYGhhbmRsZV9zc2tlYCkgYW5kIFBhZ2UgRmF1bHQgTWVhc3VyZW1lbnQgRmFjaWxpdHkgKGBoYW5kbGVfcGZtZmApLiBUaGVzZSBhcmUgY3JpdGljYWwgZnVuY3Rpb25hbGl0aWVzIG9uIHMzOTAgYW5kIGFyZSBsaWtlbHkgbWFuYWdlZCBhdCB0aGlzIGxldmVsLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgYXR0cmlidXRlIHNldHRpbmcgaW50ZXJhY3RzIHdpdGggdGhlc2UgaGFuZGxlcnMgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3Nza2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYz0yODk9c3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzIyLSNkZWZpbmUgU1NLRV9NQiAweDFcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjMyMzpzdGF0aWMgaW50IGhhbmRsZV9zc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTMyNC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9OTU4PWludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MC1cdGNhc2UgMHgyYjpcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjk4MTpcdFx0cmV0dXJuIGhhbmRsZV9zc2tlKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTgyLVx0Y2FzZSAweDJjOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCMiBJbnN0cnVjdGlvbiBIYW5kbGVyKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBga3ZtX3MzOTBfaGFuZGxlX2IyYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5IGVudHJ5IHBvaW50LCB0aGUgc3RhcnRpbmcgbGluZSBmb3IgcHJvY2Vzc2luZyBhIEIyIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgS1ZNL3MzOTAgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHRoZSBwb2ludCB3aGVyZSB0aGUgaHlwZXJ2aXNvciBpbnRlcmNlcHRzIGFuZCBiZWdpbnMgdG8gaW50ZXJwcmV0IGFuZCBlbXVsYXRlIGEgQjIgaW5zdHJ1Y3Rpb24gZW5jb3VudGVyZWQgYnkgdGhlIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0uIEl0JiMzOTtzIHRoZSBiZWdpbm5pbmcgb2YgYSBjb21wbGV4IGRhbmNlIGJldHdlZW4gaGFyZHdhcmUgYW5kIHNvZnR3YXJlLCB3aGVyZSB3ZSYjMzk7cmUgYWltaW5nIHRvIGZhaXRoZnVsbHkgZXhlY3V0ZSB0aGlzIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGh5cGVydmlzb3Igd29ya3MgaW4gdHJhbnNsYXRpbmcgZ3Vlc3QgaW5zdHJ1Y3Rpb25zIHRvIGhvc3QgYWN0aXZpdHkuIEZyb20gaGVyZSwgYWxsIHNvcnRzIG9mIHRoaW5ncyBjYW4gaGFwcGVuLCBhbmQgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIHRvIHRyb3VibGVzaG9vdCwgYW5hbHl6ZSwgb3IgaW1wcm92ZSB0aGUgaGFuZGxpbmcgb2YgdGhpcyBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9wZm1mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9MTAxNj1zdGF0aWMgaW50IGhhbmRsZV9lcHN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMDQ0LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTA0NTpzdGF0aWMgaW50IGhhbmRsZV9wZm1mKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEwNDYte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyODI9aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5My1cdGNhc2UgMHhhZjpcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTQ6XHRcdHJldHVybiBoYW5kbGVfcGZtZih2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTUtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgczM5MHggS1ZNIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGBrdm1fczM5MF9oYW5kbGVfYjlgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aC4gVGhhdCYjMzk7cyBvdXIganVtcGluZy1vZmYgcG9pbnQuIE5vdywgdG8gbmFycm93IHRoaW5ncyBkb3duLCBJJiMzOTttIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIHNwZWNpZmljIHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgZGF0YSBhZGRyZXNzIHRyYW5zbGF0aW9uIChEQVQpIG1lY2hhbmlzbSBhbmQgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LiBJJiMzOTt2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0OiBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYCwgYGt2bV9zMzkwX2hhbmRsZV9iMmAsIGFuZCwgb2YgY291cnNlLCBga3ZtX3MzOTBfaGFuZGxlX2I5YCBpdHNlbGYsIGFuZCBhbHNvIGBrdm1fczM5MF92bV9zZXRfYXR0cmAuCgpIb3dldmVyLCBvbiBzZWNvbmQgdGhvdWdodCwgYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBrdm1fczM5MF9oYW5kbGVfYjlgIGFyZSAqdmVyeSogZ2VuZXJpYy4gVGhleSBoYW5kbGUgYSB3aWRlIHJhbmdlIG9mIGluc3RydWN0aW9ucywgc28gdGhleSYjMzk7cmUgcHJvYmFibHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gbmFycm93IGRvd24gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucywgbGlrZSB0aGUgREFUIGFuZCBQVEUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCBzZWVtIGxpa2UgYSBtdWNoIGJldHRlciB0YXJnZXQgZm9yIGluaXRpYWwgaW52ZXN0aWdhdGlvbi4KClNvLCBJJiMzOTtsbCByZXZpc2UgbXkgc3RyYXRlZ3kgYW5kIGZvY3VzIG9uIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gQmVmb3JlIEkgZGVsdmUgZnVydGhlciwgdGhvdWdoLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhvc2UgYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIHN5bWJvbHMsIG9yIGlmIHRoZXkmIzM5O3JlIHNpbXBseSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEtWTSBtb2R1bGUuIFRoYXQgd2lsbCBpbXBhY3QgaG93IGVhc2lseSBJIGNhbiBhbmFseXplIHRoZWlyIGNyb3NzLXJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcm9sZSBpbiB0aGUgb3ZlcmFsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2RhdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBEYXRhIE11dGFiaWxpdHkgaW4gUmVsYXRpb24gdG8gRXhwb3J0ZWQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyB0aGUgZGF0YSBpbiBxdWVzdGlvbiBpc24mIzM5O3QgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4dGVybmFsIGFjY2VzcywgYnV0IGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYCBlaXRoZXIuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGltcGx5aW5nIHBvdGVudGlhbCBmb3IgbW9kaWZpY2F0aW9uIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBzY29wZSwgd2hpY2ggY291bGQgYmUgcHJvYmxlbWF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBub24tc3RhdGljIGJ1dCBub24tZXhwb3J0ZWQgc3RhdHVzLgoKTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCBmdW5jdGlvbi4gVGhpcyBmZWVscyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGludmVzdGlnYXRpbmcgaG93IGFuZCB3aGVyZSB0aGlzIGRhdGEgbWlnaHQgYmUgbW9kaWZpZWQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiwgaXRzIGNhbGwgc2l0ZXMsIGFuZCBlc3BlY2lhbGx5IGl0cyBhY2Nlc3MgcGF0dGVybnMuIElzIGl0IGNoYW5naW5nIHRoZSBkYXRhIGRpcmVjdGx5PyBJcyBpdCBpbmRpcmVjdCB2aWEgcG9pbnRlcnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBuZWVkIGZ1cnRoZXIgc2NydXRpbnk/IFVsdGltYXRlbHksIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gdGhpcyBub24tZXhwb3J0ZWQsIGJ1dCBub3Qtc3RhdGljIHZhcmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIHdoYXQgd2VyZSB3ZSBqdXN0IGxvb2tpbmcgYXQ/IFJpZ2h0LCB0aGUgZXhwb3J0IHN5bWJvbHMuIEkgcmVtZW1iZXIgc2VlaW5nIGBFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQpYCBpbiB0aGF0IGRpZmYsIHNvIHRoYXQgb25lICppcyogZXhwb3J0ZWQuIEdvb2QsIGdvb2QuIEJ1dCBJIGFsc28gc2F3IHNvbWV0aGluZyBlbHNlIHdhcyAqbm90KiBleHBvcnRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKKipDaGVja2luZyBFeHBvcnRlZCBTeW1ib2xzKioKCkkgbmVlZCB0byBjb25maXJtIGlmIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGZ1bmN0aW9uLCBzbyBJIHNob3VsZCBiZSBzdXJlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGFuZCBjaGVjayB0aGUgZXhwb3J0IHN5bWJvbHMgdG8gbWFrZSBzdXJlLiBJJiMzOTtsbCBoYXZlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBgRVhQT1JUX1NZTUJPTGAgb3IgYEVYUE9SVF9TWU1CT0xfR1BMYCBkZWZpbml0aW9uIGZvciBpdC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB2aXNpYmxlIGV4dGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMwODc9dm9pZCBrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqYXBtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTIyLX1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTIzOkVYUE9SVF9TWU1CT0xfR1BMKGt2bV9hcmNoX2NyeXB0b19zZXRfbWFza3MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMjQtXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMzc9dm9pZCBrdm1fYXJjaF9jcnlwdG9fY2xlYXJfbWFza3Moc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTUwLX1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTUxOkVYUE9SVF9TWU1CT0xfR1BMKGt2bV9hcmNoX2NyeXB0b19jbGVhcl9tYXNrcyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSBmdW5jdGlvbnMgSSBoYXZlIGluIG1pbmQgYXJlbiYjMzk7dCBleHBsaWNpdGx5ICpleHBvcnRlZCosIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGJsb2NrIHRoZWlyIHVzZWZ1bG5lc3MgYXMgZm9jdXMgc3ltYm9scy4gSW4gZmFjdCwgdGhpbmtpbmcgYWJvdXQgaXQsIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgYXJlIGFjdHVhbGx5IHF1aXRlIGdvb2QgY2FuZGlkYXRlcyBmb3IgdGhhdCByb2xlLiBUaGVpciBiZWhhdmlvciBpcyBjb3JlIHRvIHRoZSBhcmVhIG9mIGludGVyZXN0LiBBbmQsIGV4dGVuZGluZyB0aGF0IHRob3VnaHQsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgYWxzbyBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlLiBPaCwgYW5kIEkgc2hvdWxkbiYjMzk7dCBmb3JnZXQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIFRoYXQgb25lIGNvdWxkIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dCB0b28uCgpOb3csIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyBwYXRoLCBJIHNob3VsZCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nLiBMZXQgbWUgY2hlY2suLi4ganVzdCBgQ09ORklHX0tWTWAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVsZXZhbnQgb25lLgoKV2FpdC4uLiBpcyBqdXN0IGBDT05GSUdfS1ZNYCAqc3VmZmljaWVudCo/IEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IEkgbWlnaHQgYmUgbWlzc2luZyBzb21ldGhpbmcgdGhlcmUuIEJlc3QgdG8gZG91YmxlLWNoZWNrLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMgSSYjMzk7bSBub3QgYWNjb3VudGluZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkdNQVAgQ29uZmlndXJhdGlvbjogQSBRdWljayBDaGVjayoqCgpIbW0sIEkgbmVlZCB0byBsb29rIGludG8gdGhpcy4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHNldCBvZiBwYXJhbWV0ZXJzLCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBmb3IgR01BUD8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaW4gdGVybXMgb2YgaXRzIGJlaGF2aW9yIG9yIGl0cyBpbml0aWFsIHNldHVwLiBJJiMzOTttIG9wZXJhdGluZyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0IGV4aXN0cywgY29uc2lkZXJpbmcgaG93IGNvbXBsZXggdGhlIHN5c3RlbSBpcy4gQmV0dGVyIHRvIGRvdWJsZS1jaGVjayBub3cgdGhhbiBydW4gaW50byBpc3N1ZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtHTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIFMzOTAgQXJjaGl0ZWN0dXJlJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50IE1ha2VmaWxlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGxvb2tpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSBTMzkwIGFyY2hpdGVjdHVyZT8gVGhlIGxvZ2ljYWwgZmlyc3QgbW92ZSwgZXNwZWNpYWxseSB3aXRoIG15IGV4cGVyaWVuY2UsIGlzIHRvIGRpZyBpbnRvIHRoZSBgYXJjaC9zMzkwL21tL01ha2VmaWxlYC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIG9yY2hlc3RyYXRpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBzb3VyY2UgZmlsZXMgZm9yIHRoaXMgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRpcmVjdGl2ZXMgZm9yIG9iamVjdCBmaWxlcywgaW5jbHVkZSBwYXRocywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9uIGZsYWdzLiBIb3BlZnVsbHkgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgZGVmaW5lcyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGNvcmUgTU0gY29tcG9uZW50cy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfUEZBVUxUKVx0XHQmIzQzOz0gcGZhdWx0Lm9cbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xNC1cbmFyY2gvczM5MC9tbS9NYWtlZmlsZToxNTpvYmotJChzdWJzdCBtLHksJChDT05GSUdfS1ZNKSlcdCYjNDM7PSBnbWFwX2hlbHBlcnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyBgZ21hcF9oZWxwZXJzLm9gIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCDigJMgc2VlbXMgbGlrZSBgQ09ORklHX0tWTWAgaXMgdGhlIG9ubHkgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgaGVyZS4KCkxldCYjMzk7cyBzZWUsIHRoZSBzeXN0ZW0gaGFzIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBhcyBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZzoKCiogICBgZGF0X3BlZWtfY21tYWAKKiAgIGBkYXRfZ2V0X2NtbWFgCiogICBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgCiogICBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYAoqICAgYGt2bV9zMzkwX2hhbmRsZV9iMmAKKiAgIGBrdm1fczM5MF9oYW5kbGVfYjlgCgpIbW0sIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YC4uLiB0aG9zZSBhcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHJpZ2h0PyBUaGV5IG1pZ2h0IGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHVuZGVyIHNwZWNpZmljIHdvcmtsb2Fkcywgc28gdGhleSBjb3VsZCBiZSBob3QgcGF0aHMgaWYgY2VydGFpbiBpbnN0cnVjdGlvbnMgYXJlIGZyZXF1ZW50bHkgZXhlY3V0ZWQgYnkgdGhlIGd1ZXN0LiBCdXQsIHRoZXkmIzM5O3JlIHRpZWQgdG8gKnZlcnkqIHNwZWNpZmljIGluc3RydWN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBsZWFuIHRvd2FyZHMgdXNpbmcgdGhlIGBkYXRfKmAgYW5kIGBnbWFwXypgIHN5bWJvbHMgYmVjYXVzZSB0aGV5IHNlZW0gbW9yZSBnZW5lcmFsLgoKSSB0aGluayB3ZSBjYW4gbmFycm93IHRoaXMgZG93bi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGgganVzdCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIFRoZW4sIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgYXMgd2VsbCwgYmVjYXVzZSBpdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLiBUaGF0IHNvdW5kcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgYSBnb29kIGNob2ljZS4gQWggeWVzLCBpdCBoYW5kbGVzIGFsbCB0aGUgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RscyBmb3IgdGhlIFZNLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCB3b3J0aCB0aGUgZWZmb3J0IHRvIGNoZWNrLgoKRmluYWxseSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgIGFyZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLi4uanVzdCB0byBzZWUgaG93IGJyb2FkIHRoZSBhdHRhY2sgc3VyZmFjZSBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZGF0LmM9MTE2OT1zdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzYtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNzc6c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTc4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExODktXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExOTA6c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTgtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExOTk6aW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcylcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMC17XG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDEtXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHtcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMjpcdFx0LnB0ZV9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9wdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDM6XHRcdC5wbWRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDQ6XHRcdC5wdWRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDU6XHRcdC5wNGRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDY6XHRcdC5wZ2RfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDctXHR9O1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0Lmg9NTUxPWxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydF9nZm4pO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTI6aW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcyk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1My1pbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMjI1PXN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyNTctXHRcdGlmIChwZWVrKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIyNTg6XHRcdFx0cmV0ID0gZGF0X3BlZWtfY21tYShhcmdzLVx1MDAzZXN0YXJ0X2dmbiwga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBcdTAwMjZhcmdzLVx1MDAzZWNvdW50LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyNTktXHRcdFx0XHRcdCAgICB2YWx1ZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc2MQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgQ01NQSBCaXQgUmV0cmlldmFsIGluIEtWTS9zMzkwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgc2VlIGl0IGNhbGxzIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAuICBUaGF0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmZXRjaGluZyB0aGUgQ3VycmVudCBNYWNoaW5lIE1lbW9yeSBBZGRyZXNzIChDTU1BKSBiaXRzLCBvciBhdCBsZWFzdCBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJldHJpZXZhbCBwcm9jZXNzLiBTbywgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGJpdCBmZXRjaGluZyBpcyBvcmNoZXN0cmF0ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGZsb3cgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2dldF9jbW1hX2JpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIxNTU9c3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyMjQtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjIyNTpzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyMjYtXHRcdFx0XHQgIHN0cnVjdCBrdm1fczM5MF9jbW1hX2xvZyAqYXJncylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mjg2Mz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzMtXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5MzQ6XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNS1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MzMKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBmdW5jdGlvbiBjYWxscyBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuICBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AgZmVlbHMgbGlrZSBhIGdvb2Qga2V5IHN5bWJvbCB0byBmb2N1cyBvbi4gTGV0IG1lIHF1aWNrbHkgc3VtbWFyaXplIHRoZSByZWxhdGVkIGZ1bmN0aW9uIG5hbWVzIEkmIzM5O3ZlIHB1bGxlZCBvdXQ6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AsIGFuZCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYW5kIGdpdmVuIHRoYXQgS1ZNIGlzIGVuYWJsZWQsIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtb2RpZnlpbmcgdGhlIHMzOTAgTU1VIGFuZCBnbWFwIGltcGxlbWVudGF0aW9uLiBUaGUgcHJpbWFyeSBnb2FsIHNlZW1zIHRvIGJlIHJlc29sdmluZyBpc3N1ZXMgd2l0aCBDTU1BIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZHVyaW5nIFZNIG1pZ3JhdGlvbiBhbmQgaG93IHRoZSB1bnVzZWQgYml0IGlzIGhhbmRsZWQgaW4gdGhlIHBhZ2UgdGFibGUuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcyBpbXBhY3RpbmcgcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuCgpKdXN0IHRvIGNvbmZpcm0sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuIFl1cCwgSSBzYXcgaXQgaW4gYGt2bS1zMzkwLmNgLiBBbHNvLCBjb25maXJtaW5nIGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYCBpcyBhbHNvIHRoZSByaWdodCBmdW5jdGlvbiBuYW1lLiBPa2F5LCBJIHRoaW5rIHRoYXQmIzM5O3Mgc3VmZmljaWVudCBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfcGVla19jbW1hJiMzNDssCiAgICAmIzM0O2RhdF9nZXRfY21tYSYjMzQ7LAogICAgJiMzNDtnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eSYjMzQ7LAogICAgJiMzNDtnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBzMzkwIE1NVSBhbmQgZ21hcCBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBpc3N1ZXMgd2l0aCBDTU1BIChDaGFubmVsIE1lYXN1cmVtZW50IE1lbW9yeSBBY2Nlc3MpIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZHVyaW5nIFZNIG1pZ3JhdGlvbiwgYW5kIHBhZ2UgdGFibGUgdW51c2VkIGJpdCBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGNvZGUgb24gczM5MC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICAgJiMzNDtkYXRfZ2V0X2NtbWEmIzM0OywKICAgICYjMzQ7Z21hcF9zZXRfY21tYV9hbGxfZGlydHkmIzM0OywKICAgICYjMzQ7Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2dldF9jbW1hX2JpdHMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgaXNzdWVzIHdpdGggQ01NQSAoQ2hhbm5lbCBNZWFzdXJlbWVudCBNZW1vcnkgQWNjZXNzKSBkaXJ0eSBwYWdlIHRyYWNraW5nIGR1cmluZyBWTSBtaWdyYXRpb24sIGFuZCBwYWdlIHRhYmxlIHVudXNlZCBiaXQgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMjozNC4yMDUyMDg4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDA4NTk0OTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5XCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIixcbiAgICBcImt2bV9zMzkwX2dldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgaXNzdWVzIHdpdGggQ01NQSAoQ2hhbm5lbCBNZWFzdXJlbWVudCBNZW1vcnkgQWNjZXNzKSBkaXJ0eSBwYWdlIHRyYWNraW5nIGR1cmluZyBWTSBtaWdyYXRpb24sIGFuZCBwYWdlIHRhYmxlIHVudXNlZCBiaXQgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEyOjM0LjIwNTIxNjQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU3NTk5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyN2NkNDdlZWIyNTFhN2I2YWQwMmE2NjJjNTdmNGM4M2NjODMzNjIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDE5IDE2OjEyOjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggMmM2Y2VlODI0MWUwNDQuLjQ3NDBjNzU2NDllYmI1IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTk4MCw2ICs5ODAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcXG4ge1xcbitcXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcXG4rXFx0XFx0cHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xcbiBcXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xcbiB9XFxuIFxcbkBAIC0xMzMyLDggKzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpO1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgbnIpXFxuIHtcXG4tXFx0aWYgKHB0ZV9wcmVzZW50KGVudHJ5KSlcXG4tXFx0XFx0ZW50cnkgPSBjbGVhcl9wdGVfYml0KGVudHJ5LCBfX3BncHJvdChfUEFHRV9VTlVTRUQpKTtcXG4gXFx0cGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgZW50cnksIG5yKTtcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHRzZXRfcHRlKHB0ZXAsIGVudHJ5KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcXG5pbmRleCBhNGZlNjY0ZjY1ZWUxNS4uNWYxOTYwZWM5ODJkMDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcXG5AQCAtMTIwOSw3ICsxMjA5LDcgQEAgaW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcylcXG4gXFx0aW50IHJjO1xcbiBcXG4gXFx0cmMgPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKHN0YXJ0LCBzdGFydCArICpjb3VudCwgYXNjZSwgXFx1MDAyNm9wcywgREFUX1dBTEtfREVGQVVMVCwgXFx1MDAyNnN0YXRlKTtcXG4tXFx0KmNvdW50ID0gc3RhdGUuZW5kIC0gc3RhcnQ7XFxuK1xcdCpjb3VudCA9IHN0YXRlLmVuZCBcXHUwMDNlPSBzdGFydCA/IHN0YXRlLmVuZCAtIHN0YXJ0IDogMDtcXG4gXFx0LyogUmV0dXJuIHN1Y2Nlc3MgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIHdhcyBzYXZlZCwgb3RoZXJ3aXNlIGFuIGVycm9yLiAqL1xcbiBcXHRyZXR1cm4gKHJjID09IC1FRkFVTFQgXFx1MDAyNlxcdTAwMjYgKmNvdW50IFxcdTAwM2UgMCkgPyAwIDogcmM7XFxuIH1cXG5AQCAtMTI1Myw2ICsxMjUzLDkgQEAgaW50IGRhdF9nZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90ICpzdGFydCwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcyxcXG4gXFx0fTtcXG4gXFxuIFxcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoKnN0YXJ0LCBhc2NlX2VuZChhc2NlKSwgYXNjZSwgXFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLCBcXHUwMDI2c3RhdGUpO1xcbitcXHQvKiBJZiBubyBkaXJ0eSBwYWdlcyB3ZXJlIGZvdW5kLCB3cmFwIGFyb3VuZCBhbmQgY29udGludWUgc2VhcmNoaW5nICovXFxuK1xcdGlmICgqc3RhcnQgXFx1MDAyNlxcdTAwMjYgc3RhdGUuc3RhcnQgPT0gLTEpXFxuK1xcdFxcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoMCwgKnN0YXJ0LCBhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsIFxcdTAwMjZzdGF0ZSk7XFxuIFxcbiBcXHRpZiAoc3RhdGUuc3RhcnQgPT0gLTEpIHtcXG4gXFx0XFx0KmNvdW50ID0gMDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xcbmluZGV4IDFkMjg5ZjhmYTNiMjA5Li40YWE2MmM5YTQ4ZGU2OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2dtYXAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXFxuQEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdFxcbiBcXHRcXHRuZXcuaC5pID0gMTtcXG4gXFx0XFx0bmV3LnMuZmMxLnkgPSAwO1xcbiBcXHRcXHRuZXcucy5mYzEucHJlZml4X25vdGlmID0gMDtcXG4tXFx0XFx0aWYgKG5ldy5zLmZjMS5kIHx8ICFuZXcuaC5wKVxcbitcXHRcXHRpZiAoKG5ldy5zLmZjMS5kIHx8ICFuZXcuaC5wKSBcXHUwMDI2XFx1MDAyNiAhbmV3LnMuZmMxLnMpXFxuIFxcdFxcdFxcdGZvbGlvX3NldF9kaXJ0eShwaHlzX3RvX2ZvbGlvKGNyc3RlX29yaWdpbl9sYXJnZShjcnN0ZSkpKTtcXG4gXFx0XFx0bmV3LnMuZmMxLmQgPSAwO1xcbiBcXHRcXHRuZXcuaC5wID0gMTtcXG5AQCAtMTA3Niw3ICsxMDc2LDE2IEBAIGludCBnbWFwX3Byb3RlY3Rfcm1hcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLCBnZm5fdCBwX2dmXFxuIFxcbiBzdGF0aWMgbG9uZyBfX3NldF9jbW1hX2RpcnR5X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbiB7XFxuLVxcdF9fYXRvbWljNjRfb3IoUEdTVEVfQ01NQV9EX0JJVCwgXFx1MDAyNnBnc3RlX29mKHB0ZXApLVxcdTAwM2V2YWwpO1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4rXFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdC8qIEF2b2lkIGRvdWJsZS1jb3VudGluZyB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBoYXBwZW4gKi9cXG4rXFx0aWYgKCFwZ3N0ZS5jbW1hX2QpIHtcXG4rXFx0XFx0cGdzdGUuY21tYV9kID0gMTtcXG4rXFx0XFx0YXRvbWljNjRfaW5jKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHR9XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXG4gXFx0aWYgKG5lZWRfcmVzY2hlZCgpKVxcbiBcXHRcXHRyZXR1cm4gbmV4dDtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTEwOTAsNyArMTA5OSw4IEBAIHZvaWQgZ21hcF9zZXRfY21tYV9hbGxfZGlydHkoc3RydWN0IGdtYXAgKmdtYXApXFxuIFxcdGRvIHtcXG4gXFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNmdtYXAtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuIFxcdFxcdFxcdGdmbiA9IF9kYXRfd2Fsa19nZm5fcmFuZ2UoZ2ZuLCBhc2NlX2VuZChnbWFwLVxcdTAwM2Vhc2NlKSwgZ21hcC1cXHUwMDNlYXNjZSwgXFx1MDAyNm9wcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBEQVRfV0FMS19JR05fSE9MRVMsIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgIERBVF9XQUxLX0lHTl9IT0xFUyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Z21hcC1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fSB3aGlsZSAoZ2ZuKTtcXG4gfVxcbkBAIC0xMjYzLDcgKzEyNzMsNyBAQCBzdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYVxcbiBcXHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqL1xcbiBcXHRzbXBfcm1iKCk7XFxuIFxcbi1cXHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cXHUwMDNla3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS5kdCArIDEsIGZhbHNlKTtcXG4rXFx0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXFx1MDAzZWt2bSwgY29udGV4dC5mLCBhc2NlLnJzdG8sIGFzY2UudGwgKyAxLCBmYWxzZSk7XFxuIFxcdGlmIChyYyBcXHUwMDNlIDApXFxuIFxcdFxcdHJjID0gLUVGQVVMVDtcXG4gXFx0aWYgKCFyYylcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuaW5kZXggZmZiMjBhNjRkMzI4ZjMuLjkwN2QyY2E5OTUxZGFiIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbkBAIC0xMTkxLDcgKzExOTEsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XFxuIFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzO1xcbi1cXHR1bnNpZ25lZCBsb25nIHJhbV9wYWdlcyA9IDA7XFxuIFxcdGludCBia3Q7XFxuIFxcbiBcXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cXG5AQCAtMTIwOCwxMiArMTIwNywxMCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdGt2bV9mb3JfZWFjaF9tZW1zbG90KG1zLCBia3QsIHNsb3RzKSB7XFxuIFxcdFxcdGlmICghbXMtXFx1MDAzZWRpcnR5X2JpdG1hcClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdHJhbV9wYWdlcyArPSBtcy1cXHUwMDNlbnBhZ2VzO1xcbiBcXHR9XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSA9IDE7XFxuIFxcdC8qIG1hcmsgYWxsIHRoZSBwYWdlcyBhcyBkaXJ0eSAqL1xcbiBcXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdGF0b21pYzY0X3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMsIHJhbV9wYWdlcyk7XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSA9IDE7XFxuIFxcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUQVJUX01JR1JBVElPTik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG5pbmRleCA0NDdlYzdlZDQyM2RjNC4uOWJjNmZkMDJmZjc3NzAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbkBAIC0zNjYsNyArMzY2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdGlmIChyYyBcXHUwMDNlIDEpXFxuIFxcdFxcdFxcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpO1xcbiBcXHRcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbi1cXHRcXHRcXHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuK1xcdFxcdFxcdHJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXFx1MDAzZWFyY2gubWMpO1xcbitcXHRcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByYztcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG5AQCAtMTEyMiw3ICsxMTI0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcGZtZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdGlmIChyYyBcXHUwMDNlIDEpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xcbiBcXHRcXHRcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbi1cXHRcXHRcXHRcXHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuK1xcdFxcdFxcdFxcdHJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXFx1MDAzZWFyY2gubWMpO1xcbitcXHRcXHRcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiByYztcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXFxuaW5kZXggZWUzZjM3YWY4YWVlNGEuLjRiZjdjOTAxMmZlYjZhIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xcbisrKyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xcbkBAIC0xODEsNyArMTgxLDggQEAgdm9pZCBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxcbiBcXHRpZiAoSVNfRVJSX09SX05VTEwocHRlcCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdF9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApO1xcbitcXHRpZiAocHRlX3ByZXNlbnQoKnB0ZXApKVxcbitcXHRcXHRfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTtcXG4gXFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG5pbmRleCBlMzlhNzI0ZmU4NjBlMy4uMDRmMzRiN2VjMTI3OWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xcbkBAIC0zOSwxMSArMzksMTQgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUoXFxuIFxcdFxcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXFxuK1xcdFxcdFxcXCJcXHR4Z3IgMSwxXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCJcXHRsbGlsZiAxLCVbc3RhcnRfZ2ZuXVxcXFxuXFxcIlxcbiBcXHRcXHQvKiBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZ2ZuICovXFxuIFxcdFxcdFxcXCJcXHRzbGxnIDEsMSwxMigwKVxcXFxuXFxcIlxcbiBcXHRcXHQvKiBzZXQgdGhlIGZpcnN0IHBhZ2UgaW4gVEVTVF9EQVRBIG1lbXNsb3QgdG8gU1RBQkxFICovXFxuIFxcdFxcdFxcXCJcXHQuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXHRhZ2ZpIDEsMHgxMDAwMDBcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXFxcblxcXCJcXG4gXFx0XFx0LyogaHlwZXJjYWxsICovXFxuIFxcdFxcdFxcXCJcXHRkaWFnIDAsMCwweDUwMVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiMDpcXHRqIDBiXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMjozNC44OTE4MDE2OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTM5OTMyNjc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5XCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIixcbiAgICBcImt2bV9zMzkwX2dldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgaXNzdWVzIHdpdGggQ01NQSAoQ2hhbm5lbCBNZWFzdXJlbWVudCBNZW1vcnkgQWNjZXNzKSBkaXJ0eSBwYWdlIHRyYWNraW5nIGR1cmluZyBWTSBtaWdyYXRpb24sIGFuZCBwYWdlIHRhYmxlIHVudXNlZCBiaXQgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjdjZDQ3ZWViMjUxYTdiNmFkMDJhNjYyYzU3ZjRjODNjYzgzMzYyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDE5IDE2OjEyOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDJjNmNlZTgyNDFlMDQ0Li40NzQwYzc1NjQ5ZWJiNSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC05ODAsNiArOTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZClcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbitcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuK1x0XHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xuIH1cbiBcbkBAIC0xMzMyLDggKzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IG5yKVxuIHtcbi1cdGlmIChwdGVfcHJlc2VudChlbnRyeSkpXG4tXHRcdGVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfcHRlKHB0ZXAsIGVudHJ5KTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggYTRmZTY2NGY2NWVlMTUuLjVmMTk2MGVjOTgyZDA0IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTEyMDksNyArMTIwOSw3IEBAIGludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpXG4gXHRpbnQgcmM7XG4gXG4gXHRyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgKmNvdW50LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0RFRkFVTFQsIFx1MDAyNnN0YXRlKTtcbi1cdCpjb3VudCA9IHN0YXRlLmVuZCAtIHN0YXJ0O1xuK1x0KmNvdW50ID0gc3RhdGUuZW5kIFx1MDAzZT0gc3RhcnQgPyBzdGF0ZS5lbmQgLSBzdGFydCA6IDA7XG4gXHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovXG4gXHRyZXR1cm4gKHJjID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICpjb3VudCBcdTAwM2UgMCkgPyAwIDogcmM7XG4gfVxuQEAgLTEyNTMsNiArMTI1Myw5IEBAIGludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsXG4gXHR9O1xuIFxuIFx0X2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuK1x0LyogSWYgbm8gZGlydHkgcGFnZXMgd2VyZSBmb3VuZCwgd3JhcCBhcm91bmQgYW5kIGNvbnRpbnVlIHNlYXJjaGluZyAqL1xuK1x0aWYgKCpzdGFydCBcdTAwMjZcdTAwMjYgc3RhdGUuc3RhcnQgPT0gLTEpXG4rXHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoMCwgKnN0YXJ0LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuIFxuIFx0aWYgKHN0YXRlLnN0YXJ0ID09IC0xKSB7XG4gXHRcdCpjb3VudCA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggMWQyODlmOGZhM2IyMDkuLjRhYTYyYzlhNDhkZTY5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBsb25nIGdtYXBfY2xlYXJfeW91bmdfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0XG4gXHRcdG5ldy5oLmkgPSAxO1xuIFx0XHRuZXcucy5mYzEueSA9IDA7XG4gXHRcdG5ldy5zLmZjMS5wcmVmaXhfbm90aWYgPSAwO1xuLVx0XHRpZiAobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApXG4rXHRcdGlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApIFx1MDAyNlx1MDAyNiAhbmV3LnMuZmMxLnMpXG4gXHRcdFx0Zm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpO1xuIFx0XHRuZXcucy5mYzEuZCA9IDA7XG4gXHRcdG5ldy5oLnAgPSAxO1xuQEAgLTEwNzYsNyArMTA3NiwxNiBAQCBpbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZlxuIFxuIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4ge1xuLVx0X19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCBcdTAwMjZwZ3N0ZV9vZihwdGVwKS1cdTAwM2V2YWwpO1xuK1x0dW5pb24gcGdzdGUgcGdzdGU7XG4rXG4rXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuK1x0LyogQXZvaWQgZG91YmxlLWNvdW50aW5nIHdoZW4gY29uY3VycmVudCB1cGRhdGVzIGhhcHBlbiAqL1xuK1x0aWYgKCFwZ3N0ZS5jbW1hX2QpIHtcbitcdFx0cGdzdGUuY21tYV9kID0gMTtcbitcdFx0YXRvbWljNjRfaW5jKHdhbGstXHUwMDNlcHJpdik7XG4rXHR9XG4rXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbitcbiBcdGlmIChuZWVkX3Jlc2NoZWQoKSlcbiBcdFx0cmV0dXJuIG5leHQ7XG4gXHRyZXR1cm4gMDtcbkBAIC0xMDkwLDcgKzEwOTksOCBAQCB2b2lkIGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KHN0cnVjdCBnbWFwICpnbWFwKVxuIFx0ZG8ge1xuIFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZnbWFwLVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiBcdFx0XHRnZm4gPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKGdmbiwgYXNjZV9lbmQoZ21hcC1cdTAwM2Vhc2NlKSwgZ21hcC1cdTAwM2Vhc2NlLCBcdTAwMjZvcHMsXG4tXHRcdFx0XHRcdFx0ICBEQVRfV0FMS19JR05fSE9MRVMsIE5VTEwpO1xuK1x0XHRcdFx0XHRcdCAgREFUX1dBTEtfSUdOX0hPTEVTLFxuK1x0XHRcdFx0XHRcdCAgXHUwMDI2Z21hcC1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9IHdoaWxlIChnZm4pO1xuIH1cbkBAIC0xMjYzLDcgKzEyNzMsNyBAQCBzdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJjID0ga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2VzKHNnLVx1MDAzZWt2bSwgY29udGV4dC5mLCBhc2NlLnJzdG8sIGFzY2UuZHQgKyAxLCBmYWxzZSk7XG4rXHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLnRsICsgMSwgZmFsc2UpO1xuIFx0aWYgKHJjIFx1MDAzZSAwKVxuIFx0XHRyYyA9IC1FRkFVTFQ7XG4gXHRpZiAoIXJjKVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggZmZiMjBhNjRkMzI4ZjMuLjkwN2QyY2E5OTUxZGFiIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC0xMTkxLDcgKzExOTEsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbi1cdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcbiBcdGludCBia3Q7XG4gXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cbkBAIC0xMjA4LDEyICsxMjA3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGt2bV9mb3JfZWFjaF9tZW1zbG90KG1zLCBia3QsIHNsb3RzKSB7XG4gXHRcdGlmICghbXMtXHUwMDNlZGlydHlfYml0bWFwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRyYW1fcGFnZXMgKz0gbXMtXHUwMDNlbnBhZ2VzO1xuIFx0fVxuK1x0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuIFx0LyogbWFyayBhbGwgdGhlIHBhZ2VzIGFzIGRpcnR5ICovXG4gXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbi1cdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCByYW1fcGFnZXMpO1xuLVx0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuIFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5pbmRleCA0NDdlYzdlZDQyM2RjNC4uOWJjNmZkMDJmZjc3NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0zNjYsNyArMzY2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGlmIChyYyBcdTAwM2UgMSlcbiBcdFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTtcbiBcdFx0aWYgKHJjID09IC1FTk9NRU0pIHtcbi1cdFx0XHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbitcdFx0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuK1x0XHRcdGlmIChyYylcbitcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAocmMgXHUwMDNjIDApXG5AQCAtMTEyMiw3ICsxMTI0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcGZtZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0aWYgKHJjIFx1MDAzZSAxKVxuIFx0XHRcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XG4gXHRcdFx0aWYgKHJjID09IC1FTk9NRU0pIHtcbi1cdFx0XHRcdGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuK1x0XHRcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbitcdFx0XHRcdGlmIChyYylcbitcdFx0XHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChyYyBcdTAwM2MgMClcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMgYi9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbmluZGV4IGVlM2YzN2FmOGFlZTRhLi40YmY3YzkwMTJmZWI2YSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xuKysrIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXG5AQCAtMTgxLDcgKzE4MSw4IEBAIHZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChwdGVwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19hdG9taWM2NF9vcihfUEFHRV9VTlVTRUQsIChsb25nICopcHRlcCk7XG4rXHRpZiAocHRlX3ByZXNlbnQoKnB0ZXApKVxuK1x0XHRfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTtcbiBcdHB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5pbmRleCBlMzlhNzI0ZmU4NjBlMy4uMDRmMzRiN2VjMTI3OWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbkBAIC0zOSwxMSArMzksMTQgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXG4gXHRcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXG4rXHRcdFwiXHR4Z3IgMSwxXFxuXCJcbiBcdFx0XCJcdGxsaWxmIDEsJVtzdGFydF9nZm5dXFxuXCJcbiBcdFx0LyogY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGdmbiAqL1xuIFx0XHRcIlx0c2xsZyAxLDEsMTIoMClcXG5cIlxuIFx0XHQvKiBzZXQgdGhlIGZpcnN0IHBhZ2UgaW4gVEVTVF9EQVRBIG1lbXNsb3QgdG8gU1RBQkxFICovXG4gXHRcdFwiXHQuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXFxuXCJcbitcdFx0XCJcdGFnZmkgMSwweDEwMDAwMFxcblwiXG4rXHRcdFwiXHQuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXFxuXCJcbiBcdFx0LyogaHlwZXJjYWxsICovXG4gXHRcdFwiXHRkaWFnIDAsMCwweDUwMVxcblwiXG4gXHRcdFwiMDpcdGogMGJcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6MzQuODkxODAzMzY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NTE0OTcwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzMzkwIEtWTSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGZvY3VzZWQgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgS1ZNLXJlbGF0ZWQgY29kZS4gSSBzZWUgYSBmZXcga2V5IGFyZWFzIGJlaW5nIHRvdWNoZWQ6IHBhZ2UgdGFibGVzLCB0aGUgS1ZNIER5bmFtaWMgQWRkcmVzcyBUcmFuc2xhdGlvbiAoREFUKSwgdGhlIGdtYXAgY29tcG9uZW50LCBhbmQgdGhlIEtWTSBzMzkwIG1vZHVsZSBpdHNlbGYuXG5cbkZpcnN0LCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaGAsIGl0IGxvb2tzIGxpa2UgdGhleSdyZSBzdHJlYW1saW5pbmcgdGhlIGBzZXRfcHRlYCBhbmQgYHNldF9wdGVzYCBmdW5jdGlvbnMsIHJlbW92aW5nIHNvbWUgcmVkdW5kYW50IGxvZ2ljIHJlZ2FyZGluZyB0aGUgYF9QQUdFX1VOVVNFRGAgYml0LiBUaGUgYHNldF9wdGVgIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIHRoZSBjbGVhcmluZyBvZiB0aGlzIGJpdCBpZiB0aGUgUFRFIGlzIHByZXNlbnQsIGFuZCB0aGlzIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb24uIE5vdGhpbmcgbWFqb3IsIGJ1dCBhIGdvb2QgY2xlYW51cC5cblxuVGhlIGBkYXQuY2AgZmlsZSBzaG93cyBhIGNvdXBsZSBvZiBmaXhlcy4gSW4gYGRhdF9wZWVrX2NtbWFgLCB0aGV5J3JlIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyBkaXJ0eSBwYWdlIGNvdW50IGNhbGN1bGF0aW9ucy4gVGhlIGBkYXRfZ2V0X2NtbWFgIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIHdyYXAtYXJvdW5kIG1vcmUgZ3JhY2VmdWxseS5cblxuVGhlIGBnbWFwLmNgIG1vZGlmaWNhdGlvbnMgc2VlbSBhIGJpdCBtb3JlIGludGVyZXN0aW5nLiBUaGV5J3ZlIGFkZGVkIGEgY29uZGl0aW9uIHRvIGBmb2xpb19zZXRfZGlydHlgIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMsIEkgdGhpbmsuIFRoZW4sIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgaXMgdXNpbmcgbG9ja2luZyBwcmltaXRpdmVzIChgcGdzdGVfZ2V0X2xvY2tgIGFuZCBgcGdzdGVfc2V0X3VubG9ja2ApIHRvIHByZXZlbnQgZG91YmxlLWNvdW50aW5nIG9mIHRoZSBgY21tYV9kYCBiaXQuIFNtYXJ0OyBjb25jdXJyZW5jeSBidWdzIGFyZSBuYXN0eS4gVGhleSdyZSBhbHNvIHBhc3NpbmcgdGhlIGBjbW1hX2RpcnR5X3BhZ2VzYCBjb3VudGVyIHRvIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCwgcHJvYmFibHkgdG8gZW5zdXJlIHRoZSBwYWdlIGNvdW50IGlzIHVwZGF0ZWQgY29ycmVjdGx5LiAgQW5kIGZpbmFsbHksIGEgc21hbGwgY2hhbmdlIHRvIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBjaGFuZ2luZyBgYXNjZS5kdCArIDFgIHRvIGBhc2NlLnRsICsgMWAuXG5cbkluIGBrdm0tczM5MC5jYCwgdGhleSd2ZSByZW1vdmVkIHNvbWUgcmVkdW5kYW50IGByYW1fcGFnZXNgIGNhbGN1bGF0aW9uLiBJdCBub3cgcmVsaWVzIG9uIHRoZSBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgIGZ1bmN0aW9uYWxpdHkgdG8ga2VlcCB0cmFjayBvZiBkaXJ0eSBwYWdlcy4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzaW1wbGlmaWNhdGlvbi5cblxuYHByaXYuY2AgaGFzIHNvbWUgdHdlYWtzIHRvIGhhbmRsZSByZXR1cm4gdmFsdWVzIGZyb20gYGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cGAgd2hpY2ggbG9va3MgbGlrZSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZy5cblxuYGdtYXBfaGVscGVycy5jYCBpbmNsdWRlcyBhIGNoZWNrIGZvciBgcHRlX3ByZXNlbnQoKnB0ZXApYCBiZWZvcmUgc2V0dGluZyBgX1BBR0VfVU5VU0VEYC4gVGhpcyBpcyBnb29kIHByYWN0aWNlLlxuXG5GaW5hbGx5LCB3ZSBoYXZlIGEgbW9kaWZpY2F0aW9uIHRvIGEgc2VsZi10ZXN0IGluIGBjbW1hX3Rlc3QuY2AuICBBbHdheXMgZ29vZCB0byBzZWUgdGhvc2UgZ2V0dGluZyB1cGRhdGVkLlxuXG5Tbywgb3ZlcmFsbCwgdGhpcyBzZXJpZXMgaXMgZm9jdXNpbmcgb24gZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgYW5kIGJ1ZyBmaXhlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgS1ZNJ3MgTU1VIGFuZCBnbWFwIGxvZ2ljIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyBLVk0gY29kZSBhbmQgbW9kaWZpZXMgc29tZSBjcml0aWNhbCBNTVUgYW5kIGdtYXAgbG9naWMsIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gU3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4LCBzbyBmdXp6aW5nIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHBsYW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIG9mIGNvdXJzZS4gVGltZSB0byBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIHRoYXQgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6NDUuNTQzMzAyNTE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTAwMjM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00NS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDY6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEyOjQ1Ljc0ODMxMzY2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTEyNTQ3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZpbGVzOiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgIGFuZCBgYXJjaC9zMzkwL2t2bS9nbWFwLmNgLiBUaGVzZSBmaWxlcyBhcmUgbGlrZWx5IHdoZXJlIGFueSBzMzkwLXNwZWNpZmljIEtWTSBjb25maWd1cmF0aW9uIG9yIGhhbmRsaW5nIGlzIGRlZmluZWQuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMgdGhhdCBJIG1heSBoYXZlIG92ZXJsb29rZWQuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiB0aGUgc3lzdGVtLCBhbmQgdGhlc2UgZmlsZXMgYXJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgaGVscCBtZSBiZSBjb25maWRlbnQgSSBoYXZlbid0IG1pc3NlZCBhbnkgb2J2aW91cyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEyOjQ5LjczOTU3MDkyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODM1MjI3OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2dtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6NDkuODM3OTMxMjE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzA0NzExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBwcml2LmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgcHJpdmlsZWdlZCBpbnN0cnVjdGlvbiBoYW5kbGluZy4gTGV0J3Mgc3RhcnQgd2l0aCBgYXJjaC9zMzkwL2t2bS9wcml2LmNgLiBJdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgdHJhcHBpbmcgYW5kIGVtdWxhdGluZyB0aG9zZSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyByZXNpZGVzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBpbnN0cnVjdGlvbiBhY2Nlc3MsIG1hbmFnaW5nIHRoZSBndWVzdCdzIHN0YXRlIGNoYW5nZXMsIGFuZCBpbnRlcmZhY2luZyB3aXRoIHRoZSBoeXBlcnZpc29yIHdoZW4gbmVjZXNzYXJ5LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgdGhlIGluc3RydWN0aW9uIGRlY29kaW5nLCB0aGUgc3BlY2lmaWMgaGFuZGxlcnMgZm9yIGVhY2ggcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW5zdHJ1Y3Rpb24sIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdG8gZW5zdXJlIHByb3BlciBndWVzdCBpc29sYXRpb24uIFRoaXMgZmlsZSBzaG91bGQgYmUgYSBrZXkgcGFydCBpbiB0aGUgd2hvbGUgS1ZNIHMzOTAgc3lzdGVtLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb25zLCBnaXZlbiB0aGVpciBzcGVjaWZpYyBxdWlya3MuIEknbSBleHBlY3Rpbmcgc29tZSBjbGV2ZXIgdHJpY2tzIHRvIGtlZXAgcGVyZm9ybWFuY2UgdXAsIHdoaWxlIG1haW50YWluaW5nIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMjo1My4wNzA5ODAxNzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMDQwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz01NDA9c3RhdGljIGludCBoYW5kbGVfaW9faW5zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy01NjgtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NTY5OiNpZiBJU19FTkFCTEVEKENPTkZJR19WRklPX0FQKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU3MC1ib29sIGt2bV9zMzkwX2lzX2dwYV9pbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMjo1My4xMjYxOTE1MjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQwNzkxOTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gQ2hhbmdlcyBpbiB0aGUgUzM5MCBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBDT05GSUdfS1ZNYCDigJMgdGhhdCdzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBCdXQgdGhlIGFjdHVhbCBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIG5lc3RlZCB3aXRoaW4gYGFyY2gvczM5MC9rdm0vYCBhbmQgYGFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY2AuIEp1c3QgY29uZmlybWluZyB0aGF0IGBDT05GSUdfS1ZNYCBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFsbCByZWxldmFudCBhZGp1c3RtZW50cy4gU2VlbXMgc28uXG5cbk5vdywgbGV0J3MgaG9uZSBpbiBvbiBzb21lIHNwZWNpZmljIHN5bWJvbHMgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHkuIEknbGwgZm9jdXMgb24gdGhlc2U6IGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLCBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIFRoYXQgc2hvdWxkIGNvdmVyIHRoZSBpbXBvcnRhbnQgYXJlYXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBJIHNlZSBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAgYW5kIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgYXJlIHN0YXRpYy4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjb25maXJtIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgaXMgZXhwb3J0ZWQsIHRoYXQgY291bGQgYmUgc2lnbmlmaWNhbnQuIExldCBtZSBnbyBjaGVjayB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNzUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6NTguMTY2OTg1MTgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk2OTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2dtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2dtYXAuYz0xMDc3PXN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDkzLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwOTQ6dm9pZCBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShzdHJ1Y3QgZ21hcCAqZ21hcClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDk1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6NTguMjE5OTYyMDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNTQyNTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAgaW4gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTS9zMzkwIHN1YnN5c3RlbSBoYW5kbGVzIHRoZSBpbml0aWF0aW9uIG9mIGEgVk0gbWlncmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBtaWdyYXRpb24gcHJvY2Vzcy4gSXMgdGhpcyB0aGUgZW50cnkgcG9pbnQsIG9yIGlzIGl0IGEgc3Vic2VxdWVudCBzdGFnZT8gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgYWNjZXB0LCBhbmQgd2hhdCBkb2VzIGl0ICpkbyogd2l0aCB0aGVtPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZDsgdGhpcyBpcyBjcml0aWNhbCBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IHdoZXJlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIFZNIHN0YXRlIG5lZWRzIGNhcmVmdWwgbWFuYWdlbWVudC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBWTSdzIGd1ZXN0IHN0YXRlLCB0aGUgbWlncmF0aW9uIHN0cnVjdHVyZXMsIG9yIHBlcmhhcHMgc29tZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdpdGggdGhlIGRlc3RpbmF0aW9uIGhvc3Q/IEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciBhcmVhcyB3aGVyZSB0aGUgbWlncmF0aW9uIHByb2Nlc3MgbWlnaHQgYmxvY2sgb3IgYmVjb21lIGEgYm90dGxlbmVjay4gT25jZSBJIHVuZGVyc3RhbmQgdGhlICp3aGF0KiBvZiB0aGUgZnVuY3Rpb24sIEknbGwgbmVlZCB0byBtb3ZlIG9udG8gdGhlICp3aHkqLCB0cmFjaW5nIGNhbGxzIGludG8gb3RoZXIgZnVuY3Rpb25zLCB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3csIGFuZCBmaWd1cmluZyBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBLVk0gaW1wbGVtZW50YXRpb24uIEluIHRoZSBlbmQsIEkgbmVlZCB0byBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWlncmF0aW9uIHBpcGVsaW5lLCBhbmQgaG93IGl0cyBjb3JyZWN0IGJlaGF2aW9yIGVuc3VyZXMgYSBzbW9vdGggYW5kIGNvbnNpc3RlbnQgbWlncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQyLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MDIuNjI1MzkwMTA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzU5OTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTc3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExODktICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExOTA6c3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTkxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjE5LSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzIGFuZFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIwOiAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbi5cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMS0gKi9cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjMzPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI0MC1cXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI0MTpcXHRcXHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI0Mi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MDIuNjgyOTk1NTY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTk1MzEzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipBbmFseXppbmcgczM5MCBLVk0gTWlncmF0aW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBzdGF0aWMgbmF0dXJlIG9mIGEgZmV3IGtleSBjb21wb25lbnRzOiBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGhhbmRsZV9zc2tlYCwgYW5kIGBoYW5kbGVfcGZtZmAuIFRoZWlyIHN0YXRpYyBkZXNpZ25hdGlvbiBpcyBzaWduaWZpY2FudDsgaXQgcmVzdHJpY3RzIHRoZWlyIHNjb3BlIHdpdGhpbiB0aGUga2VybmVsIG1vZHVsZSwgd2hpY2ggSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGVuIEknbSBkZWJ1Z2dpbmcgb3IgdHJhY2luZyBhbnkgbWlncmF0aW9uLXJlbGF0ZWQgaXNzdWVzLiBJIGFsc28gbm90ZSB0aGF0IGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgaW50ZW5kZWQgZm9yIGJyb2FkZXIgdXNlLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBpdCdzIGEgY3JpdGljYWwgdXRpbGl0eS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG1pZ2h0IHJlbHkgb24gaXQuIE15IG5leHQgc3RlcD8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGFyY2gvczM5MC9rdm0vZGF0LmNgIHRvIGV4YW1pbmUgYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYCwgYXMgdGhleSBhcmUgY3JpdGljYWwgY29tcG9uZW50cyBmb3IgREFUIG9wZXJhdGlvbnMgYW5kIGl0IGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGNvbnRleHQgb2YgdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjA2Ljc4MjUzMDA3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5NDIyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF0X3BlZWtfY21tYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2RhdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZGF0LmM9MTE2OT1zdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3Ni1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNzc6c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3OC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExODktXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTkwOnN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTk4LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5OTppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMC17XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjAxLVxcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0ge1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMjpcXHRcXHQucHRlX2VudHJ5ID0gX19kYXRfcGVla19jbW1hX3B0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDM6XFx0XFx0LnBtZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDQ6XFx0XFx0LnB1ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDU6XFx0XFx0LnA0ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDY6XFx0XFx0LnBnZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDctXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MDYuODM3NDc4MDc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTI0MzUyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIGFuZCBQb3RlbnRpYWwgVmlzaWJpbGl0eSBvZiBEYXRhIEFjY2VzcyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZGF0X3BlZWtfY21tYWAuIFRoZSBmYWN0IHRoYXQgaXQncyBleHBvcnRlZCwgb3IgYXQgbGVhc3Qgbm90IHN0YXRpYywgaW1tZWRpYXRlbHkgcmFpc2VzIG15IGFudGVubmEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBpdHMgZGF0YS4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBkYXRfZ2V0X2NtbWFgIC0gdGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjA5Ljg4OTkxNTYzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NjY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF0X2dldF9jbW1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vZGF0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9kYXQuYz0xMTU5PWxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE2OC1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNjk6c3RydWN0IGRhdF9nZXRfY21tYV9zdGF0ZSB7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTcwLVxcdGdmbl90IHN0YXJ0O1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMTc3PXN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE3OTpcXHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlICpzdGF0ZSA9IHdhbGstXFx1MDAzZXByaXY7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTgwLVxcdHVuaW9uIHBnc3RlIHBnc3RlO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMTkwPXN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MjpcXHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlICpzdGF0ZSA9IHdhbGstXFx1MDAzZXByaXY7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkzLVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMTk5PWludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDctXFx0fTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDg6XFx0c3RydWN0IGRhdF9nZXRfY21tYV9zdGF0ZSBzdGF0ZSA9IHsgLnZhbHVlcyA9IHZhbHVlcywgfTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDktXFx0aW50IHJjO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjE2LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIxNzpzdGF0aWMgbG9uZyBfX2RhdF9nZXRfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMTgte1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIxOTpcXHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlICpzdGF0ZSA9IHdhbGstXFx1MDAzZXByaXY7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjIwLVxcdHVuaW9uIHBnc3RlIHBnc3RlO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjQ0LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTI0NTppbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjQ2LXtcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyNDc6XFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBfX2RhdF9nZXRfY21tYV9wdGUsIH07XFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjQ4OlxcdHN0cnVjdCBkYXRfZ2V0X2NtbWFfc3RhdGUgc3RhdGUgPSB7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjQ5LVxcdFxcdC5yZW1haW5pbmcgPSByZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjA5Ljk0NDM4NjgzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk2NjY5NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipBbmFseXppbmcgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGVzZSBmdW5jdGlvbnMsIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAuIFRoZSBrZXkgdGhpbmcgdG8gcmVtZW1iZXIgaXMgdGhhdCB0aGV5J3JlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGNoYW5nZXMgaG93IEknbSB0aGlua2luZyBhYm91dCB0aGVpciBzY29wZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlIHRoZXNlIGNvdWxkIGJlIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBmcm9tLiBJdCBzdWdnZXN0cyBhIG1vcmUgZ2xvYmFsIHNjb3BlIHRoYW4gc29tZXRoaW5nIGludGVybmFsIHRvIGEgcGFydGljdWxhciBtb2R1bGUuIEkgaGF2ZSB0byB0cmFjZSBob3cgdGhlIGRhdGEgaXMgYmVpbmcgcGFzc2VkIGFuZCBtb2RpZmllZCBhY3Jvc3MgbXVsdGlwbGUgY29tcGlsYXRpb24gdW5pdHMuIFdpdGggdGhlc2UgZnVuY3Rpb25zIGJlaW5nIG5vbi1zdGF0aWMsIEknbSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgYW5kIGlmIHRoZXkgbWlnaHQgYmUgY2FsbGVkIGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBPa2F5LCBsZXQncyB0dXJuIG15IGF0dGVudGlvbiBub3cgdG8gdGhlIGZ1bmN0aW9uIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLiBNeSBuZXh0IGxpbmUgb2YgaW5xdWlyeSBoYXMgdG8gYmUgYWJvdXQgaG93IHRoYXQgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggb3IgdXNlcyBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjEzLjY0MTA1ODUzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4ODMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vZ21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZ21hcC5jPTExOTE9c3RhdGljIHN0cnVjdCBnbWFwICpnbWFwX2ZpbmRfc2hhZG93KHN0cnVjdCBnbWFwICpwYXJlbnQsIHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjA0LSNkZWZpbmUgQ1JTVF9UQUJMRV9QQUdFUyAoX0NSU1RfVEFCTEVfU0laRSAvIFBBR0VfU0laRSlcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjA1OnN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwge1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMDYtXFx0dW5zaWduZWQgbG9uZyBzZXE7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjA5LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyMTA6c3RhdGljIGlubGluZSBpbnQgX19nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZyxcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjExOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgKmNvbnRleHQpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIxMi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjQyLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNDM6c3RhdGljIGlubGluZSBpbnQgX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLFxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgKmNvbnRleHQpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI0NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjU2LVxcdFxcdFxcdHJldHVybiByYztcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjU3OlxcdFxcdHJjID0gX19nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIHNnLCBjb250ZXh0KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjU4LVxcdFxcdHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNjMtXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI2NDpzdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNjUte1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNjY6XFx0c3RydWN0IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCBjb250ZXh0ID0ge307XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI2Ny1cXHR1bmlvbiBhc2NlIGFzY2UgPSBzZy1cXHUwMDNlZ3Vlc3RfYXNjZTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNzktXFx0aWYgKCFyYylcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjgwOlxcdFxcdHJjID0gX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChtYywgc2csIFxcdTAwMjZjb250ZXh0KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjgxLVxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTEzMDQ9c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnBhcmVudCxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNTQtXFx0LyogUHJvdGVjdCB3aGlsZSBpbnNlcnRpbmcsIHByb3RlY3RzIGFnYWluc3QgaW52YWxpZGF0aW9uIHJhY2VzLiAqL1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEzNTU6XFx0cmMgPSBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIG5ldyk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM1Ni1cXHRpZiAocmMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MTMuNjk0OTQ4MDMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTQ5MjE0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHMzOTAgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIHMzOTAgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBjaGFuZ2VzLiBGaXJzdCBvYnNlcnZhdGlvbjogYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUuIEhvd2V2ZXIsIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYCBhcmUgKmV4cG9ydGVkKiwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhlbSBhcyBwb3RlbnRpYWwgdGFyZ2V0cy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgLCBhcmUgZGVmaW5lZC4gQWgsIHRoZXkncmUgaW5saW5lIGZ1bmN0aW9ucy4gVGhpcyBnaXZlcyBtZSBhIGJldHRlciBmZWVsIGZvciBob3cgdGhleSBtaWdodCBiZSB1c2VkIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIHRvdWNoIGJvdGggS1ZNIGFuZCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IG9uIHMzOTAuIEdpdmVuIHRoYXQgY29tYmluYXRpb24sIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGFuZCBhIGZ1enppbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGV4cG9ydGVkIHN5bWJvbHM6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gVGhleSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIGluIHRoZSBjb2RlYmFzZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBMZXQncyBjaGVjayBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCBxdWlja2x5LiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGZvciBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgcmVsZXZhbnQsIHNpbmNlIG1pZ3JhdGlvbiBjYW4gaW52b2x2ZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyOTAsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MTkuNjQ5ODcxNjk0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxMjg4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMjI9c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIzMi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTIzMzpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjM0LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xOTc4PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE5OTUtXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT046XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjE5OTY6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihrdm0sIGF0dHIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xOTk3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzoxOS43NzUwMDUzOTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxOTI4OTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0gczM5MCBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCBzbyBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50IGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2hlbiB3ZSdyZSBzZXR0aW5nIGF0dHJpYnV0ZXMgZm9yIHRoZSB2aXJ0dWFsIG1hY2hpbmUgb24gczM5MC4gVG8gZG8gdGhhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBjb2RlLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBoYW5kbGVycyBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucy5cblxuTGV0IG1lIGNoZWNrIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBmaWxlIHdpbGwgY29udGFpbiB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBoYW5kbGluZyBzZW5zaXRpdmUgaW5zdHJ1Y3Rpb25zIG9yIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSSBzcGVjaWZpY2FsbHkgd2FudCB0byB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBhbmQgYmVoYXZpb3Igb2YgaGFuZGxlcnMgZm9yIFNlY3VyZSBTZXJ2aWNlIEtleSBFbmFibGVtZW50IChgaGFuZGxlX3Nza2VgKSBhbmQgUGFnZSBGYXVsdCBNZWFzdXJlbWVudCBGYWNpbGl0eSAoYGhhbmRsZV9wZm1mYCkuIFRoZXNlIGFyZSBjcml0aWNhbCBmdW5jdGlvbmFsaXRpZXMgb24gczM5MCBhbmQgYXJlIGxpa2VseSBtYW5hZ2VkIGF0IHRoaXMgbGV2ZWwuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBhdHRyaWJ1dGUgc2V0dGluZyBpbnRlcmFjdHMgd2l0aCB0aGVzZSBoYW5kbGVycyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjI0Ljc5NDI5ODM1NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5NTMyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3Nza2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmM9Mjg5PXN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzIyLSNkZWZpbmUgU1NLRV9NQiAweDFcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzozMjM6c3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzI0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OD1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MC1cXHRjYXNlIDB4MmI6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTgxOlxcdFxcdHJldHVybiBoYW5kbGVfc3NrZSh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05ODItXFx0Y2FzZSAweDJjOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzoyNC44NzEyNTcxODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NDU5MTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEIyIEluc3RydWN0aW9uIEhhbmRsZXIqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBga3ZtX3MzOTBfaGFuZGxlX2IyYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkgZW50cnkgcG9pbnQsIHRoZSBzdGFydGluZyBsaW5lIGZvciBwcm9jZXNzaW5nIGEgQjIgaW5zdHJ1Y3Rpb24gd2l0aGluIHRoZSBLVk0vczM5MCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIHBvaW50IHdoZXJlIHRoZSBoeXBlcnZpc29yIGludGVyY2VwdHMgYW5kIGJlZ2lucyB0byBpbnRlcnByZXQgYW5kIGVtdWxhdGUgYSBCMiBpbnN0cnVjdGlvbiBlbmNvdW50ZXJlZCBieSB0aGUgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSXQncyB0aGUgYmVnaW5uaW5nIG9mIGEgY29tcGxleCBkYW5jZSBiZXR3ZWVuIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSwgd2hlcmUgd2UncmUgYWltaW5nIHRvIGZhaXRoZnVsbHkgZXhlY3V0ZSB0aGlzIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGh5cGVydmlzb3Igd29ya3MgaW4gdHJhbnNsYXRpbmcgZ3Vlc3QgaW5zdHJ1Y3Rpb25zIHRvIGhvc3QgYWN0aXZpdHkuIEZyb20gaGVyZSwgYWxsIHNvcnRzIG9mIHRoaW5ncyBjYW4gaGFwcGVuLCBhbmQgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIHRvIHRyb3VibGVzaG9vdCwgYW5hbHl6ZSwgb3IgaW1wcm92ZSB0aGUgaGFuZGxpbmcgb2YgdGhpcyBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MjguMTY1ODUwNjAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI2NTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfcGZtZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz0xMDE2PXN0YXRpYyBpbnQgaGFuZGxlX2Vwc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTA0NC1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMDQ1OnN0YXRpYyBpbnQgaGFuZGxlX3BmbWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEwNDYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4Mj1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTMtXFx0Y2FzZSAweGFmOlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTQ6XFx0XFx0cmV0dXJuIGhhbmRsZV9wZm1mKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTUtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MjguMjIxMTIxOTUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzI1NzAxNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBzMzkweCBLVk0gRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGBrdm1fczM5MF9oYW5kbGVfYjlgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHdlJ3JlIGNvbmNlcm5lZCB3aXRoLiBUaGF0J3Mgb3VyIGp1bXBpbmctb2ZmIHBvaW50LiBOb3csIHRvIG5hcnJvdyB0aGluZ3MgZG93biwgSSdtIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIHNwZWNpZmljIHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgZGF0YSBhZGRyZXNzIHRyYW5zbGF0aW9uIChEQVQpIG1lY2hhbmlzbSBhbmQgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LiBJJ3ZlIGdvdCBhIHByZWxpbWluYXJ5IGxpc3Q6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLCBga3ZtX3MzOTBfaGFuZGxlX2IyYCwgYW5kLCBvZiBjb3Vyc2UsIGBrdm1fczM5MF9oYW5kbGVfYjlgIGl0c2VsZiwgYW5kIGFsc28gYGt2bV9zMzkwX3ZtX3NldF9hdHRyYC5cblxuSG93ZXZlciwgb24gc2Vjb25kIHRob3VnaHQsIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YCBhcmUgKnZlcnkqIGdlbmVyaWMuIFRoZXkgaGFuZGxlIGEgd2lkZSByYW5nZSBvZiBpbnN0cnVjdGlvbnMsIHNvIHRoZXkncmUgcHJvYmFibHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gbmFycm93IGRvd24gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucywgbGlrZSB0aGUgREFUIGFuZCBQVEUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCBzZWVtIGxpa2UgYSBtdWNoIGJldHRlciB0YXJnZXQgZm9yIGluaXRpYWwgaW52ZXN0aWdhdGlvbi5cblxuU28sIEknbGwgcmV2aXNlIG15IHN0cmF0ZWd5IGFuZCBmb2N1cyBvbiBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIEJlZm9yZSBJIGRlbHZlIGZ1cnRoZXIsIHRob3VnaCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRob3NlIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBzeW1ib2xzLCBvciBpZiB0aGV5J3JlIHNpbXBseSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEtWTSBtb2R1bGUuIFRoYXQgd2lsbCBpbXBhY3QgaG93IGVhc2lseSBJIGNhbiBhbmFseXplIHRoZWlyIGNyb3NzLXJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcm9sZSBpbiB0aGUgb3ZlcmFsbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzozOS45NDY4MjgyMTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTQwNzYzNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2RhdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzo0MC4xNTYyNDMwNDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyNjQzMDU4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRGF0YSBNdXRhYmlsaXR5IGluIFJlbGF0aW9uIHRvIEV4cG9ydGVkIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgZGF0YSBpbiBxdWVzdGlvbiBpc24ndCBleHBsaWNpdGx5IG1hcmtlZCBmb3IgZXh0ZXJuYWwgYWNjZXNzLCBidXQgaXQncyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AgZWl0aGVyLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGltcGx5aW5nIHBvdGVudGlhbCBmb3IgbW9kaWZpY2F0aW9uIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBzY29wZSwgd2hpY2ggY291bGQgYmUgcHJvYmxlbWF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBub24tc3RhdGljIGJ1dCBub24tZXhwb3J0ZWQgc3RhdHVzLlxuXG5MZXQncyBkaWcgaW50byB0aGF0IGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgZnVuY3Rpb24uIFRoaXMgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpbnZlc3RpZ2F0aW5nIGhvdyBhbmQgd2hlcmUgdGhpcyBkYXRhIG1pZ2h0IGJlIG1vZGlmaWVkLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiwgaXRzIGNhbGwgc2l0ZXMsIGFuZCBlc3BlY2lhbGx5IGl0cyBhY2Nlc3MgcGF0dGVybnMuIElzIGl0IGNoYW5naW5nIHRoZSBkYXRhIGRpcmVjdGx5PyBJcyBpdCBpbmRpcmVjdCB2aWEgcG9pbnRlcnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBuZWVkIGZ1cnRoZXIgc2NydXRpbnk/IFVsdGltYXRlbHksIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gdGhpcyBub24tZXhwb3J0ZWQsIGJ1dCBub3Qtc3RhdGljIHZhcmlhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTExNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjQ0LjA4MjY3NTg4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4NDI3NjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9nbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjQ0LjE1MDUyNjQzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAxODg3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIHdoYXQgd2VyZSB3ZSBqdXN0IGxvb2tpbmcgYXQ/IFJpZ2h0LCB0aGUgZXhwb3J0IHN5bWJvbHMuIEkgcmVtZW1iZXIgc2VlaW5nIGBFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQpYCBpbiB0aGF0IGRpZmYsIHNvIHRoYXQgb25lICppcyogZXhwb3J0ZWQuIEdvb2QsIGdvb2QuIEJ1dCBJIGFsc28gc2F3IHNvbWV0aGluZyBlbHNlIHdhcyAqbm90KiBleHBvcnRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuXG5cbioqQ2hlY2tpbmcgRXhwb3J0ZWQgU3ltYm9scyoqXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgZXhwb3J0ZWQuIFRoYXQncyBhIGNydWNpYWwgZnVuY3Rpb24sIHNvIEkgc2hvdWxkIGJlIHN1cmUuIEknbGwgbmVlZCB0byBnbyBhbmQgY2hlY2sgdGhlIGV4cG9ydCBzeW1ib2xzIHRvIG1ha2Ugc3VyZS4gSSdsbCBoYXZlIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGBFWFBPUlRfU1lNQk9MYCBvciBgRVhQT1JUX1NZTUJPTF9HUExgIGRlZmluaXRpb24gZm9yIGl0LiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoYXQncyB2aXNpYmxlIGV4dGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDExLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NDcuNDUyNDE3MTQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU4OTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzA4Nz12b2lkIGt2bV9hcmNoX2NyeXB0b19zZXRfbWFza3Moc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICphcG0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEyMi19XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMjM6RVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2FyY2hfY3J5cHRvX3NldF9tYXNrcyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMjQtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEzNz12b2lkIGt2bV9hcmNoX2NyeXB0b19jbGVhcl9tYXNrcyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1MC19XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNTE6RVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NDcuNTIxMDE0NTcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDE4MTgxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIGZ1bmN0aW9ucyBJIGhhdmUgaW4gbWluZCBhcmVuJ3QgZXhwbGljaXRseSAqZXhwb3J0ZWQqLCBidXQgdGhhdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGJsb2NrIHRoZWlyIHVzZWZ1bG5lc3MgYXMgZm9jdXMgc3ltYm9scy4gSW4gZmFjdCwgdGhpbmtpbmcgYWJvdXQgaXQsIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgYXJlIGFjdHVhbGx5IHF1aXRlIGdvb2QgY2FuZGlkYXRlcyBmb3IgdGhhdCByb2xlLiBUaGVpciBiZWhhdmlvciBpcyBjb3JlIHRvIHRoZSBhcmVhIG9mIGludGVyZXN0LiBBbmQsIGV4dGVuZGluZyB0aGF0IHRob3VnaHQsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgYWxzbyBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlLiBPaCwgYW5kIEkgc2hvdWxkbid0IGZvcmdldCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gVGhhdCBvbmUgY291bGQgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0IHRvby5cblxuTm93LCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgcGF0aCwgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBJJ20gb3Zlcmxvb2tpbmcuIExldCBtZSBjaGVjay4uLiBqdXN0IGBDT05GSUdfS1ZNYCBzZWVtcyB0byBiZSB0aGUgb25seSByZWxldmFudCBvbmUuXG5cbldhaXQuLi4gaXMganVzdCBgQ09ORklHX0tWTWAgKnN1ZmZpY2llbnQqPyBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBJIG1pZ2h0IGJlIG1pc3Npbmcgc29tZXRoaW5nIHRoZXJlLiBCZXN0IHRvIGRvdWJsZS1jaGVjay4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYGFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMgSSdtIG5vdCBhY2NvdW50aW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NTEuOTIyODM0Njk5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1OTYwODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjUyLjAyNTQzNzY2NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI5NDg2MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGhhdmluZyB0aGVzZSB0aG91Z2h0czpcblxuKipHTUFQIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5IbW0sIEkgbmVlZCB0byBsb29rIGludG8gdGhpcy4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHNldCBvZiBwYXJhbWV0ZXJzLCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBmb3IgR01BUD8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBpbiB0ZXJtcyBvZiBpdHMgYmVoYXZpb3Igb3IgaXRzIGluaXRpYWwgc2V0dXAuIEknbSBvcGVyYXRpbmcgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBleGlzdHMsIGNvbnNpZGVyaW5nIGhvdyBjb21wbGV4IHRoZSBzeXN0ZW0gaXMuIEJldHRlciB0byBkb3VibGUtY2hlY2sgbm93IHRoYW4gcnVuIGludG8gaXNzdWVzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzo1NS4wNTQ5MjU4NTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjkyMzI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJHTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzo1NS4xMjYyMzAyNTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMDg5OTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgUzM5MCBBcmNoaXRlY3R1cmUncyBNZW1vcnkgTWFuYWdlbWVudCBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgd2hlcmUgc2hvdWxkIEkgc3RhcnQgbG9va2luZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaXMgY29uZmlndXJlZCBmb3IgdGhlIFMzOTAgYXJjaGl0ZWN0dXJlPyBUaGUgbG9naWNhbCBmaXJzdCBtb3ZlLCBlc3BlY2lhbGx5IHdpdGggbXkgZXhwZXJpZW5jZSwgaXMgdG8gZGlnIGludG8gdGhlIGBhcmNoL3MzOTAvbW0vTWFrZWZpbGVgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBwb2ludCBmb3Igb3JjaGVzdHJhdGluZyB0aGUgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgb2YgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHNvdXJjZSBmaWxlcyBmb3IgdGhpcyBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkaXJlY3RpdmVzIGZvciBvYmplY3QgZmlsZXMsIGluY2x1ZGUgcGF0aHMsIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbiBmbGFncy4gSG9wZWZ1bGx5IGl0J3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgZGVmaW5lcyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGNvcmUgTU0gY29tcG9uZW50cy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgd2FpdGluZyB0byBiZSB1bmNvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NTguNjM3MTMyMDQ2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTIwMjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9tbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1BGQVVMVClcXHRcXHQrPSBwZmF1bHQub1xcbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xNC1cXG5hcmNoL3MzOTAvbW0vTWFrZWZpbGU6MTU6b2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX0tWTSkpXFx0Kz0gZ21hcF9oZWxwZXJzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NTguNjk2MzM5NjE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NzA0MDA1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyBgZ21hcF9oZWxwZXJzLm9gIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IOKAkyBzZWVtcyBsaWtlIGBDT05GSUdfS1ZNYCBpcyB0aGUgb25seSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBoZXJlLlxuXG5MZXQncyBzZWUsIHRoZSBzeXN0ZW0gaGFzIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBhcyBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZzpcblxuKiAgIGBkYXRfcGVla19jbW1hYFxuKiAgIGBkYXRfZ2V0X2NtbWFgXG4qICAgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YFxuKiAgIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgXG4qICAgYGt2bV9zMzkwX2hhbmRsZV9iMmBcbiogICBga3ZtX3MzOTBfaGFuZGxlX2I5YFxuXG5IbW0sIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YC4uLiB0aG9zZSBhcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHJpZ2h0PyBUaGV5IG1pZ2h0IGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHVuZGVyIHNwZWNpZmljIHdvcmtsb2Fkcywgc28gdGhleSBjb3VsZCBiZSBob3QgcGF0aHMgaWYgY2VydGFpbiBpbnN0cnVjdGlvbnMgYXJlIGZyZXF1ZW50bHkgZXhlY3V0ZWQgYnkgdGhlIGd1ZXN0LiBCdXQsIHRoZXkncmUgdGllZCB0byAqdmVyeSogc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLiBJJ20gZ29pbmcgdG8gbGVhbiB0b3dhcmRzIHVzaW5nIHRoZSBgZGF0XypgIGFuZCBgZ21hcF8qYCBzeW1ib2xzIGJlY2F1c2UgdGhleSBzZWVtIG1vcmUgZ2VuZXJhbC5cblxuSSB0aGluayB3ZSBjYW4gbmFycm93IHRoaXMgZG93bi4gTGV0J3Mgc3RhcnQgd2l0aCBqdXN0IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gVGhlbiwgSSdtIGdvaW5nIHRvIGFkZCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGFzIHdlbGwsIGJlY2F1c2UgaXQncyB0aGUgZW50cnkgcG9pbnQgZm9yIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLiBUaGF0IHNvdW5kcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCBpcyBhIGdvb2QgY2hvaWNlLiBBaCB5ZXMsIGl0IGhhbmRsZXMgYWxsIHRoZSBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgaW9jdGxzIGZvciB0aGUgVk0uIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBlbnRyeSBwb2ludCwgYW5kIHdvcnRoIHRoZSBlZmZvcnQgdG8gY2hlY2suXG5cbkZpbmFsbHksIEknbGwgcXVpY2tseSBjaGVjayBpZiBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgIGFyZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLi4uanVzdCB0byBzZWUgaG93IGJyb2FkIHRoZSBhdHRhY2sgc3VyZmFjZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTQ6MDcuMTY2NzQyNzg1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUyODcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXRfcGVla19jbW1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZGF0LmM9MTE2OT1zdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3Ni1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNzc6c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3OC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExODktXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTkwOnN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTk4LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5OTppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMC17XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjAxLVxcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0ge1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMjpcXHRcXHQucHRlX2VudHJ5ID0gX19kYXRfcGVla19jbW1hX3B0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDM6XFx0XFx0LnBtZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDQ6XFx0XFx0LnB1ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDU6XFx0XFx0LnA0ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDY6XFx0XFx0LnBnZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDctXFx0fTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0Lmg9NTUxPWxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydF9nZm4pO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUyOmludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTUzLWludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsIGF0b21pYzY0X3QgKnJlbSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjIyNT1zdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyNTctXFx0XFx0aWYgKHBlZWspXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIyNTg6XFx0XFx0XFx0cmV0ID0gZGF0X3BlZWtfY21tYShhcmdzLVxcdTAwM2VzdGFydF9nZm4sIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBcXHUwMDI2YXJncy1cXHUwMDNlY291bnQsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyNTktXFx0XFx0XFx0XFx0XFx0ICAgIHZhbHVlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjE0OjA3LjIyODI3NjU4M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3NzkzMDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBDTU1BIEJpdCBSZXRyaWV2YWwgaW4gS1ZNL3MzOTAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgc2VlIGl0IGNhbGxzIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAuICBUaGF0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmZXRjaGluZyB0aGUgQ3VycmVudCBNYWNoaW5lIE1lbW9yeSBBZGRyZXNzIChDTU1BKSBiaXRzLCBvciBhdCBsZWFzdCBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJldHJpZXZhbCBwcm9jZXNzLiBTbywgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGJpdCBmZXRjaGluZyBpcyBvcmNoZXN0cmF0ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGZsb3cgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzYxLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTQ6MzcuMzA2MjEwMTk1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwMDcyNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfZ2V0X2NtbWFfYml0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIxNTU9c3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjIyNC0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjIyNTpzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMjI2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI4NjM9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzMtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjkzNDpcXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNS1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjE0OjM3LjQ0MTIyNjA3MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzY5MTQxMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIHRoZSBsb2dpYy4gSXQgbG9va3MgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gY2FsbHMgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgLiAgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgIGZlZWxzIGxpa2UgYSBnb29kIGtleSBzeW1ib2wgdG8gZm9jdXMgb24uIExldCBtZSBxdWlja2x5IHN1bW1hcml6ZSB0aGUgcmVsYXRlZCBmdW5jdGlvbiBuYW1lcyBJJ3ZlIHB1bGxlZCBvdXQ6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AsIGFuZCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCBhbmQgZ2l2ZW4gdGhhdCBLVk0gaXMgZW5hYmxlZCwgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1vZGlmeWluZyB0aGUgczM5MCBNTVUgYW5kIGdtYXAgaW1wbGVtZW50YXRpb24uIFRoZSBwcmltYXJ5IGdvYWwgc2VlbXMgdG8gYmUgcmVzb2x2aW5nIGlzc3VlcyB3aXRoIENNTUEgZGlydHkgcGFnZSB0cmFja2luZyBkdXJpbmcgVk0gbWlncmF0aW9uIGFuZCBob3cgdGhlIHVudXNlZCBiaXQgaXMgaGFuZGxlZCBpbiB0aGUgcGFnZSB0YWJsZS4gVGhlc2UgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjaGFuZ2VzIGltcGFjdGluZyByZWFjaGFibGUgS1ZNIGNvZGUgb24gczM5MC5cblxuSnVzdCB0byBjb25maXJtLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuIFl1cCwgSSBzYXcgaXQgaW4gYGt2bS1zMzkwLmNgLiBBbHNvLCBjb25maXJtaW5nIGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYCBpcyBhbHNvIHRoZSByaWdodCBmdW5jdGlvbiBuYW1lLiBPa2F5LCBJIHRoaW5rIHRoYXQncyBzdWZmaWNpZW50IGFuYWx5c2lzLiBMZXQncyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQzMywiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTQ6NDQuMjEwMzcwNjg4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3NTIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhdF9wZWVrX2NtbWFcIixcbiAgICBcImRhdF9nZXRfY21tYVwiLFxuICAgIFwiZ21hcF9zZXRfY21tYV9hbGxfZGlydHlcIixcbiAgICBcImdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZFwiLFxuICAgIFwia3ZtX3MzOTBfZ2V0X2NtbWFfYml0c1wiLFxuICAgIFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBzMzkwIE1NVSBhbmQgZ21hcCBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBpc3N1ZXMgd2l0aCBDTU1BIChDaGFubmVsIE1lYXN1cmVtZW50IE1lbW9yeSBBY2Nlc3MpIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZHVyaW5nIFZNIG1pZ3JhdGlvbiwgYW5kIHBhZ2UgdGFibGUgdW51c2VkIGJpdCBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGNvZGUgb24gczM5MC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5XCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIixcbiAgICBcImt2bV9zMzkwX2dldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgaXNzdWVzIHdpdGggQ01NQSAoQ2hhbm5lbCBNZWFzdXJlbWVudCBNZW1vcnkgQWNjZXNzKSBkaXJ0eSBwYWdlIHRyYWNraW5nIGR1cmluZyBWTSBtaWdyYXRpb24sIGFuZCBwYWdlIHRhYmxlIHVudXNlZCBiaXQgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-19 16:05:34 +0000 UTC FinishedAt: 2026-06-19 16:14:46 +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": "f14a0c9e03e4c2e21f86d5104157e672b6449e17", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f14a0c9e03e4c2e21f86d5104157e672b6449e17", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "c145a0e8-2b36-487a-addd-15034d4cf9ea" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "dat_peek_cmma", "dat_get_cmma", "gmap_set_cmma_all_dirty", "gmap_helper_try_set_pte_unused", "kvm_s390_get_cmma_bits", "kvm_s390_vm_set_migration" ], "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+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9wZWVrX2NtbWEmIzM0OywKICAgICYjMzQ7ZGF0X2dldF9jbW1hJiMzNDssCiAgICAmIzM0O2dtYXBfc2V0X2NtbWFfYWxsX2RpcnR5JiMzNDssCiAgICAmIzM0O2dtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9nZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHMzOTAgTU1VIGFuZCBnbWFwIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIGlzc3VlcyB3aXRoIENNTUEgKENoYW5uZWwgTWVhc3VyZW1lbnQgTWVtb3J5IEFjY2VzcykgZGlydHkgcGFnZSB0cmFja2luZyBkdXJpbmcgVk0gbWlncmF0aW9uLCBhbmQgcGFnZSB0YWJsZSB1bnVzZWQgYml0IGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gY29kZSBvbiBzMzkwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjdjZDQ3ZWViMjUxYTdiNmFkMDJhNjYyYzU3ZjRjODNjYzgzMzYyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDE5IDE2OjEyOjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCAyYzZjZWU4MjQxZTA0NC4uNDc0MGM3NTY0OWViYjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtOTgwLDYgJiM0Mzs5ODAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4ge1xuJiM0MztcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuJiM0MztcdFx0cHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xuIFx0V1JJVEVfT05DRSgqcHRlcCwgcHRlKTtcbiB9XG4gXG5AQCAtMTMzMiw4ICYjNDM7MTMzNCw2IEBAIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7XG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgbnIpXG4ge1xuLVx0aWYgKHB0ZV9wcmVzZW50KGVudHJ5KSlcbi1cdFx0ZW50cnkgPSBjbGVhcl9wdGVfYml0KGVudHJ5LCBfX3BncHJvdChfUEFHRV9VTlVTRUQpKTtcbiBcdHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIGVudHJ5LCBucik7XG4gXHRmb3IgKDs7KSB7XG4gXHRcdHNldF9wdGUocHRlcCwgZW50cnkpO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5pbmRleCBhNGZlNjY0ZjY1ZWUxNS4uNWYxOTYwZWM5ODJkMDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5AQCAtMTIwOSw3ICYjNDM7MTIwOSw3IEBAIGludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpXG4gXHRpbnQgcmM7XG4gXG4gXHRyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICYjNDM7ICpjb3VudCwgYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19ERUZBVUxULCBcdTAwMjZzdGF0ZSk7XG4tXHQqY291bnQgPSBzdGF0ZS5lbmQgLSBzdGFydDtcbiYjNDM7XHQqY291bnQgPSBzdGF0ZS5lbmQgXHUwMDNlPSBzdGFydCA/IHN0YXRlLmVuZCAtIHN0YXJ0IDogMDtcbiBcdC8qIFJldHVybiBzdWNjZXNzIGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSB3YXMgc2F2ZWQsIG90aGVyd2lzZSBhbiBlcnJvci4gKi9cbiBcdHJldHVybiAocmMgPT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgKmNvdW50IFx1MDAzZSAwKSA/IDAgOiByYztcbiB9XG5AQCAtMTI1Myw2ICYjNDM7MTI1Myw5IEBAIGludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsXG4gXHR9O1xuIFxuIFx0X2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuJiM0MztcdC8qIElmIG5vIGRpcnR5IHBhZ2VzIHdlcmUgZm91bmQsIHdyYXAgYXJvdW5kIGFuZCBjb250aW51ZSBzZWFyY2hpbmcgKi9cbiYjNDM7XHRpZiAoKnN0YXJ0IFx1MDAyNlx1MDAyNiBzdGF0ZS5zdGFydCA9PSAtMSlcbiYjNDM7XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoMCwgKnN0YXJ0LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuIFxuIFx0aWYgKHN0YXRlLnN0YXJ0ID09IC0xKSB7XG4gXHRcdCpjb3VudCA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggMWQyODlmOGZhM2IyMDkuLjRhYTYyYzlhNDhkZTY5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMzI3LDcgJiM0MzszMjcsNyBAQCBzdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdFxuIFx0XHRuZXcuaC5pID0gMTtcbiBcdFx0bmV3LnMuZmMxLnkgPSAwO1xuIFx0XHRuZXcucy5mYzEucHJlZml4X25vdGlmID0gMDtcbi1cdFx0aWYgKG5ldy5zLmZjMS5kIHx8ICFuZXcuaC5wKVxuJiM0MztcdFx0aWYgKChuZXcucy5mYzEuZCB8fCAhbmV3LmgucCkgXHUwMDI2XHUwMDI2ICFuZXcucy5mYzEucylcbiBcdFx0XHRmb2xpb19zZXRfZGlydHkocGh5c190b19mb2xpbyhjcnN0ZV9vcmlnaW5fbGFyZ2UoY3JzdGUpKSk7XG4gXHRcdG5ldy5zLmZjMS5kID0gMDtcbiBcdFx0bmV3LmgucCA9IDE7XG5AQCAtMTA3Niw3ICYjNDM7MTA3NiwxNiBAQCBpbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZlxuIFxuIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4ge1xuLVx0X19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCBcdTAwMjZwZ3N0ZV9vZihwdGVwKS1cdTAwM2V2YWwpO1xuJiM0MztcdHVuaW9uIHBnc3RlIHBnc3RlO1xuJiM0MztcbiYjNDM7XHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuJiM0MztcdC8qIEF2b2lkIGRvdWJsZS1jb3VudGluZyB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBoYXBwZW4gKi9cbiYjNDM7XHRpZiAoIXBnc3RlLmNtbWFfZCkge1xuJiM0MztcdFx0cGdzdGUuY21tYV9kID0gMTtcbiYjNDM7XHRcdGF0b21pYzY0X2luYyh3YWxrLVx1MDAzZXByaXYpO1xuJiM0MztcdH1cbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XG4gXHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gXHRcdHJldHVybiBuZXh0O1xuIFx0cmV0dXJuIDA7XG5AQCAtMTA5MCw3ICYjNDM7MTA5OSw4IEBAIHZvaWQgZ21hcF9zZXRfY21tYV9hbGxfZGlydHkoc3RydWN0IGdtYXAgKmdtYXApXG4gXHRkbyB7XG4gXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNmdtYXAtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuIFx0XHRcdGdmbiA9IF9kYXRfd2Fsa19nZm5fcmFuZ2UoZ2ZuLCBhc2NlX2VuZChnbWFwLVx1MDAzZWFzY2UpLCBnbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcyxcbi1cdFx0XHRcdFx0XHQgIERBVF9XQUxLX0lHTl9IT0xFUywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgREFUX1dBTEtfSUdOX0hPTEVTLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNmdtYXAtXHUwMDNla3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fSB3aGlsZSAoZ2ZuKTtcbiB9XG5AQCAtMTI2Myw3ICYjNDM7MTI3Myw3IEBAIHN0YXRpYyBpbnQgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqL1xuIFx0c21wX3JtYigpO1xuIFxuLVx0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXHUwMDNla3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS5kdCAmIzQzOyAxLCBmYWxzZSk7XG4mIzQzO1x0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXHUwMDNla3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS50bCAmIzQzOyAxLCBmYWxzZSk7XG4gXHRpZiAocmMgXHUwMDNlIDApXG4gXHRcdHJjID0gLUVGQVVMVDtcbiBcdGlmICghcmMpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCBmZmIyMGE2NGQzMjhmMy4uOTA3ZDJjYTk5NTFkYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTExOTEsNyAmIzQzOzExOTEsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbi1cdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcbiBcdGludCBia3Q7XG4gXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cbkBAIC0xMjA4LDEyICYjNDM7MTIwNywxMCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm1fZm9yX2VhY2hfbWVtc2xvdChtcywgYmt0LCBzbG90cykge1xuIFx0XHRpZiAoIW1zLVx1MDAzZWRpcnR5X2JpdG1hcClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0cmFtX3BhZ2VzICYjNDM7PSBtcy1cdTAwM2VucGFnZXM7XG4gXHR9XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuIFx0LyogbWFyayBhbGwgdGhlIHBhZ2VzIGFzIGRpcnR5ICovXG4gXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbi1cdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCByYW1fcGFnZXMpO1xuLVx0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuIFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5pbmRleCA0NDdlYzdlZDQyM2RjNC4uOWJjNmZkMDJmZjc3NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0zNjYsNyAmIzQzOzM2Niw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Nza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRpZiAocmMgXHUwMDNlIDEpXG4gXHRcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4tXHRcdFx0a3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4mIzQzO1x0XHRcdHJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4mIzQzO1x0XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKHJjIFx1MDAzYyAwKVxuQEAgLTExMjIsNyAmIzQzOzExMjQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wZm1mKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRpZiAocmMgXHUwMDNlIDEpXG4gXHRcdFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcbiBcdFx0XHRpZiAocmMgPT0gLUVOT01FTSkge1xuLVx0XHRcdFx0a3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4mIzQzO1x0XHRcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbiYjNDM7XHRcdFx0XHRpZiAocmMpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHJjIFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xuaW5kZXggZWUzZjM3YWY4YWVlNGEuLjRiZjdjOTAxMmZlYjZhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbkBAIC0xODEsNyAmIzQzOzE4MSw4IEBAIHZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChwdGVwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19hdG9taWM2NF9vcihfUEFHRV9VTlVTRUQsIChsb25nICopcHRlcCk7XG4mIzQzO1x0aWYgKHB0ZV9wcmVzZW50KCpwdGVwKSlcbiYjNDM7XHRcdF9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApO1xuIFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbmluZGV4IGUzOWE3MjRmZTg2MGUzLi4wNGYzNGI3ZWMxMjc5YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuQEAgLTM5LDExICYjNDM7MzksMTQgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXG4gXHRcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXG4mIzQzO1x0XHRcJiMzNDtcdHhnciAxLDFcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7XHRsbGlsZiAxLCVbc3RhcnRfZ2ZuXVxcblwmIzM0O1xuIFx0XHQvKiBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZ2ZuICovXG4gXHRcdFwmIzM0O1x0c2xsZyAxLDEsMTIoMClcXG5cJiMzNDtcbiBcdFx0Lyogc2V0IHRoZSBmaXJzdCBwYWdlIGluIFRFU1RfREFUQSBtZW1zbG90IHRvIFNUQUJMRSAqL1xuIFx0XHRcJiMzNDtcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1x0YWdmaSAxLDB4MTAwMDAwXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cJiMzNDtcbiBcdFx0LyogaHlwZXJjYWxsICovXG4gXHRcdFwmIzM0O1x0ZGlhZyAwLDAsMHg1MDFcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7MDpcdGogMGJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfcGVla19jbW1hJiMzNDssCiAgICAmIzM0O2RhdF9nZXRfY21tYSYjMzQ7LAogICAgJiMzNDtnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eSYjMzQ7LAogICAgJiMzNDtnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBzMzkwIE1NVSBhbmQgZ21hcCBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBpc3N1ZXMgd2l0aCBDTU1BIChDaGFubmVsIE1lYXN1cmVtZW50IE1lbW9yeSBBY2Nlc3MpIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZHVyaW5nIFZNIG1pZ3JhdGlvbiwgYW5kIHBhZ2UgdGFibGUgdW51c2VkIGJpdCBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGNvZGUgb24gczM5MC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjdjZDQ3ZWViMjUxYTdiNmFkMDJhNjYyYzU3ZjRjODNjYzgzMzYyMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDE5IDE2OjEyOjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMmM2Y2VlODI0MWUwNDQuLjQ3NDBjNzU2NDllYmI1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTk4MCw2ICYjNDM7OTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKJiM0MzsJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCiYjNDM7CQlwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7CiAJV1JJVEVfT05DRSgqcHRlcCwgcHRlKTsKIH0KIApAQCAtMTMzMiw4ICYjNDM7MTMzNCw2IEBAIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IG5yKQogewotCWlmIChwdGVfcHJlc2VudChlbnRyeSkpCi0JCWVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7CiAJcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgZW50cnksIG5yKTsKIAlmb3IgKDs7KSB7CiAJCXNldF9wdGUocHRlcCwgZW50cnkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKaW5kZXggYTRmZTY2NGY2NWVlMTUuLjVmMTk2MGVjOTgyZDA0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKQEAgLTEyMDksNyAmIzQzOzEyMDksNyBAQCBpbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKQogCWludCByYzsKIAogCXJjID0gX2RhdF93YWxrX2dmbl9yYW5nZShzdGFydCwgc3RhcnQgJiM0MzsgKmNvdW50LCBhc2NlLCAmYW1wO29wcywgREFUX1dBTEtfREVGQVVMVCwgJmFtcDtzdGF0ZSk7Ci0JKmNvdW50ID0gc3RhdGUuZW5kIC0gc3RhcnQ7CiYjNDM7CSpjb3VudCA9IHN0YXRlLmVuZCAmZ3Q7PSBzdGFydCA/IHN0YXRlLmVuZCAtIHN0YXJ0IDogMDsKIAkvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovCiAJcmV0dXJuIChyYyA9PSAtRUZBVUxUICZhbXA7JmFtcDsgKmNvdW50ICZndDsgMCkgPyAwIDogcmM7CiB9CkBAIC0xMjUzLDYgJiM0MzsxMjUzLDkgQEAgaW50IGRhdF9nZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90ICpzdGFydCwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcywKIAl9OwogCiAJX2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCAmYW1wO29wcywgREFUX1dBTEtfSUdOX0hPTEVTLCAmYW1wO3N0YXRlKTsKJiM0MzsJLyogSWYgbm8gZGlydHkgcGFnZXMgd2VyZSBmb3VuZCwgd3JhcCBhcm91bmQgYW5kIGNvbnRpbnVlIHNlYXJjaGluZyAqLwomIzQzOwlpZiAoKnN0YXJ0ICZhbXA7JmFtcDsgc3RhdGUuc3RhcnQgPT0gLTEpCiYjNDM7CQlfZGF0X3dhbGtfZ2ZuX3JhbmdlKDAsICpzdGFydCwgYXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgJmFtcDtzdGF0ZSk7CiAKIAlpZiAoc3RhdGUuc3RhcnQgPT0gLTEpIHsKIAkJKmNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZ21hcC5jIGIvYXJjaC9zMzkwL2t2bS9nbWFwLmMKaW5kZXggMWQyODlmOGZhM2IyMDkuLjRhYTYyYzlhNDhkZTY5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2dtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2dtYXAuYwpAQCAtMzI3LDcgJiM0MzszMjcsNyBAQCBzdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdAogCQluZXcuaC5pID0gMTsKIAkJbmV3LnMuZmMxLnkgPSAwOwogCQluZXcucy5mYzEucHJlZml4X25vdGlmID0gMDsKLQkJaWYgKG5ldy5zLmZjMS5kIHx8ICFuZXcuaC5wKQomIzQzOwkJaWYgKChuZXcucy5mYzEuZCB8fCAhbmV3LmgucCkgJmFtcDsmYW1wOyAhbmV3LnMuZmMxLnMpCiAJCQlmb2xpb19zZXRfZGlydHkocGh5c190b19mb2xpbyhjcnN0ZV9vcmlnaW5fbGFyZ2UoY3JzdGUpKSk7CiAJCW5ldy5zLmZjMS5kID0gMDsKIAkJbmV3LmgucCA9IDE7CkBAIC0xMDc2LDcgJiM0MzsxMDc2LDE2IEBAIGludCBnbWFwX3Byb3RlY3Rfcm1hcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLCBnZm5fdCBwX2dmCiAKIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspCiB7Ci0JX19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCAmYW1wO3Bnc3RlX29mKHB0ZXApLSZndDt2YWwpOwomIzQzOwl1bmlvbiBwZ3N0ZSBwZ3N0ZTsKJiM0MzsKJiM0MzsJcGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKJiM0MzsJLyogQXZvaWQgZG91YmxlLWNvdW50aW5nIHdoZW4gY29uY3VycmVudCB1cGRhdGVzIGhhcHBlbiAqLwomIzQzOwlpZiAoIXBnc3RlLmNtbWFfZCkgewomIzQzOwkJcGdzdGUuY21tYV9kID0gMTsKJiM0MzsJCWF0b21pYzY0X2luYyh3YWxrLSZndDtwcml2KTsKJiM0MzsJfQomIzQzOwlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKJiM0MzsKIAlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCXJldHVybiBuZXh0OwogCXJldHVybiAwOwpAQCAtMTA5MCw3ICYjNDM7MTA5OSw4IEBAIHZvaWQgZ21hcF9zZXRfY21tYV9hbGxfZGlydHkoc3RydWN0IGdtYXAgKmdtYXApCiAJZG8gewogCQlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO2dtYXAtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCiAJCQlnZm4gPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKGdmbiwgYXNjZV9lbmQoZ21hcC0mZ3Q7YXNjZSksIGdtYXAtJmd0O2FzY2UsICZhbXA7b3BzLAotCQkJCQkJICBEQVRfV0FMS19JR05fSE9MRVMsIE5VTEwpOwomIzQzOwkJCQkJCSAgREFUX1dBTEtfSUdOX0hPTEVTLAomIzQzOwkJCQkJCSAgJmFtcDtnbWFwLSZndDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcyk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0gd2hpbGUgKGdmbik7CiB9CkBAIC0xMjYzLDcgJiM0MzsxMjczLDcgQEAgc3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWEKIAkvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqLwogCXNtcF9ybWIoKTsKIAotCXJjID0ga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2VzKHNnLSZndDtrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLmR0ICYjNDM7IDEsIGZhbHNlKTsKJiM0MzsJcmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctJmd0O2t2bSwgY29udGV4dC5mLCBhc2NlLnJzdG8sIGFzY2UudGwgJiM0MzsgMSwgZmFsc2UpOwogCWlmIChyYyAmZ3Q7IDApCiAJCXJjID0gLUVGQVVMVDsKIAlpZiAoIXJjKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IGZmYjIwYTY0ZDMyOGYzLi45MDdkMmNhOTk1MWRhYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMTE5MSw3ICYjNDM7MTE5MSw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptczsKIAlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90czsKLQl1bnNpZ25lZCBsb25nIHJhbV9wYWdlcyA9IDA7CiAJaW50IGJrdDsKIAogCS8qIG1pZ3JhdGlvbiBtb2RlIGFscmVhZHkgZW5hYmxlZCAqLwpAQCAtMTIwOCwxMiAmIzQzOzEyMDcsMTAgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKQogCWt2bV9mb3JfZWFjaF9tZW1zbG90KG1zLCBia3QsIHNsb3RzKSB7CiAJCWlmICghbXMtJmd0O2RpcnR5X2JpdG1hcCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyYW1fcGFnZXMgJiM0Mzs9IG1zLSZndDtucGFnZXM7CiAJfQomIzQzOwlrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgPSAxOwogCS8qIG1hcmsgYWxsIHRoZSBwYWdlcyBhcyBkaXJ0eSAqLwogCWdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KGt2bS0mZ3Q7YXJjaC5nbWFwKTsKLQlhdG9taWM2NF9zZXQoJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcywgcmFtX3BhZ2VzKTsKLQlrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgPSAxOwogCWt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUQVJUX01JR1JBVElPTik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IDQ0N2VjN2VkNDIzZGM0Li45YmM2ZmQwMmZmNzc3MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKQEAgLTM2Niw3ICYjNDM7MzY2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCWlmIChyYyAmZ3Q7IDEpCiAJCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTsKIAkJaWYgKHJjID09IC1FTk9NRU0pIHsKLQkJCWt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LSZndDthcmNoLm1jKTsKJiM0MzsJCQlyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LSZndDthcmNoLm1jKTsKJiM0MzsJCQlpZiAocmMpCiYjNDM7CQkJCXJldHVybiByYzsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChyYyAmbHQ7IDApCkBAIC0xMTIyLDcgJiM0MzsxMTI0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcGZtZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQlpZiAocmMgJmd0OyAxKQogCQkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpOwogCQkJaWYgKHJjID09IC1FTk9NRU0pIHsKLQkJCQlrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS0mZ3Q7YXJjaC5tYyk7CiYjNDM7CQkJCXJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtJmd0O2FyY2gubWMpOwomIzQzOwkJCQlpZiAocmMpCiYjNDM7CQkJCQlyZXR1cm4gcmM7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAocmMgJmx0OyAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jCmluZGV4IGVlM2YzN2FmOGFlZTRhLi40YmY3YzkwMTJmZWI2YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYwpAQCAtMTgxLDcgJiM0MzsxODEsOCBAQCB2b2lkIGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiAJaWYgKElTX0VSUl9PUl9OVUxMKHB0ZXApKQogCQlyZXR1cm47CiAKLQlfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTsKJiM0MzsJaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkKJiM0MzsJCV9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApOwogCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jCmluZGV4IGUzOWE3MjRmZTg2MGUzLi4wNGYzNGI3ZWMxMjc5YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKQEAgLTM5LDExICYjNDM7MzksMTQgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZCkKIHsKIAlhc20gdm9sYXRpbGUoCiAJCS8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovCiYjNDM7CQkmIzM0Owl4Z3IgMSwxXG4mIzM0OwogCQkmIzM0OwlsbGlsZiAxLCVbc3RhcnRfZ2ZuXVxuJiMzNDsKIAkJLyogY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGdmbiAqLwogCQkmIzM0OwlzbGxnIDEsMSwxMigwKVxuJiMzNDsKIAkJLyogc2V0IHRoZSBmaXJzdCBwYWdlIGluIFRFU1RfREFUQSBtZW1zbG90IHRvIFNUQUJMRSAqLwogCQkmIzM0OwkuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXG4mIzM0OwomIzQzOwkJJiMzNDsJYWdmaSAxLDB4MTAwMDAwXG4mIzM0OwomIzQzOwkJJiMzNDsJLmluc24gcnJmLDB4YjlhYjAwMDAsMiwxLDEsMFxuJiMzNDsKIAkJLyogaHlwZXJjYWxsICovCiAJCSYjMzQ7CWRpYWcgMCwwLDB4NTAxXG4mIzM0OwogCQkmIzM0OzA6CWogMGImIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgczM5MCBLVk0gUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGZvY3VzZWQgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgS1ZNLXJlbGF0ZWQgY29kZS4gSSBzZWUgYSBmZXcga2V5IGFyZWFzIGJlaW5nIHRvdWNoZWQ6IHBhZ2UgdGFibGVzLCB0aGUgS1ZNIER5bmFtaWMgQWRkcmVzcyBUcmFuc2xhdGlvbiAoREFUKSwgdGhlIGdtYXAgY29tcG9uZW50LCBhbmQgdGhlIEtWTSBzMzkwIG1vZHVsZSBpdHNlbGYuCgpGaXJzdCwgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHN0cmVhbWxpbmluZyB0aGUgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgIGZ1bmN0aW9ucywgcmVtb3Zpbmcgc29tZSByZWR1bmRhbnQgbG9naWMgcmVnYXJkaW5nIHRoZSBgX1BBR0VfVU5VU0VEYCBiaXQuIFRoZSBgc2V0X3B0ZWAgZnVuY3Rpb24gbm93IGhhbmRsZXMgdGhlIGNsZWFyaW5nIG9mIHRoaXMgYml0IGlmIHRoZSBQVEUgaXMgcHJlc2VudCwgYW5kIHRoaXMgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbi4gTm90aGluZyBtYWpvciwgYnV0IGEgZ29vZCBjbGVhbnVwLgoKVGhlIGBkYXQuY2AgZmlsZSBzaG93cyBhIGNvdXBsZSBvZiBmaXhlcy4gSW4gYGRhdF9wZWVrX2NtbWFgLCB0aGV5JiMzOTtyZSBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgZGlydHkgcGFnZSBjb3VudCBjYWxjdWxhdGlvbnMuIFRoZSBgZGF0X2dldF9jbW1hYCBmdW5jdGlvbiBub3cgaGFuZGxlcyB3cmFwLWFyb3VuZCBtb3JlIGdyYWNlZnVsbHkuCgpUaGUgYGdtYXAuY2AgbW9kaWZpY2F0aW9ucyBzZWVtIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcuIFRoZXkmIzM5O3ZlIGFkZGVkIGEgY29uZGl0aW9uIHRvIGBmb2xpb19zZXRfZGlydHlgIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMsIEkgdGhpbmsuIFRoZW4sIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgaXMgdXNpbmcgbG9ja2luZyBwcmltaXRpdmVzIChgcGdzdGVfZ2V0X2xvY2tgIGFuZCBgcGdzdGVfc2V0X3VubG9ja2ApIHRvIHByZXZlbnQgZG91YmxlLWNvdW50aW5nIG9mIHRoZSBgY21tYV9kYCBiaXQuIFNtYXJ0OyBjb25jdXJyZW5jeSBidWdzIGFyZSBuYXN0eS4gVGhleSYjMzk7cmUgYWxzbyBwYXNzaW5nIHRoZSBgY21tYV9kaXJ0eV9wYWdlc2AgY291bnRlciB0byBgX2RhdF93YWxrX2dmbl9yYW5nZWAsIHByb2JhYmx5IHRvIGVuc3VyZSB0aGUgcGFnZSBjb3VudCBpcyB1cGRhdGVkIGNvcnJlY3RseS4gIEFuZCBmaW5hbGx5LCBhIHNtYWxsIGNoYW5nZSB0byBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCwgY2hhbmdpbmcgYGFzY2UuZHQgJiM0MzsgMWAgdG8gYGFzY2UudGwgJiM0MzsgMWAuCgpJbiBga3ZtLXMzOTAuY2AsIHRoZXkmIzM5O3ZlIHJlbW92ZWQgc29tZSByZWR1bmRhbnQgYHJhbV9wYWdlc2AgY2FsY3VsYXRpb24uIEl0IG5vdyByZWxpZXMgb24gdGhlIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgZnVuY3Rpb25hbGl0eSB0byBrZWVwIHRyYWNrIG9mIGRpcnR5IHBhZ2VzLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHNpbXBsaWZpY2F0aW9uLgoKYHByaXYuY2AgaGFzIHNvbWUgdHdlYWtzIHRvIGhhbmRsZSByZXR1cm4gdmFsdWVzIGZyb20gYGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cGAgd2hpY2ggbG9va3MgbGlrZSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZy4KCmBnbWFwX2hlbHBlcnMuY2AgaW5jbHVkZXMgYSBjaGVjayBmb3IgYHB0ZV9wcmVzZW50KCpwdGVwKWAgYmVmb3JlIHNldHRpbmcgYF9QQUdFX1VOVVNFRGAuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4KCkZpbmFsbHksIHdlIGhhdmUgYSBtb2RpZmljYXRpb24gdG8gYSBzZWxmLXRlc3QgaW4gYGNtbWFfdGVzdC5jYC4gIEFsd2F5cyBnb29kIHRvIHNlZSB0aG9zZSBnZXR0aW5nIHVwZGF0ZWQuCgpTbywgb3ZlcmFsbCwgdGhpcyBzZXJpZXMgaXMgZm9jdXNpbmcgb24gZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgYW5kIGJ1ZyBmaXhlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgS1ZNJiMzOTtzIE1NVSBhbmQgZ21hcCBsb2dpYyB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgS1ZNIGNvZGUgYW5kIG1vZGlmaWVzIHNvbWUgY3JpdGljYWwgTU1VIGFuZCBnbWFwIGxvZ2ljLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcgYW5kIHRlc3RpbmcuIFN5emthbGxlciBzdXBwb3J0cyBzMzkweCwgc28gZnV6emluZyB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBwbGFuLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLCBvZiBjb3Vyc2UuIFRpbWUgdG8gbG9vayBhdCB0aGUgYEtjb25maWdgIGZvciB0aGF0IG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ1LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZpbGVzOiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgIGFuZCBgYXJjaC9zMzkwL2t2bS9nbWFwLmNgLiBUaGVzZSBmaWxlcyBhcmUgbGlrZWx5IHdoZXJlIGFueSBzMzkwLXNwZWNpZmljIEtWTSBjb25maWd1cmF0aW9uIG9yIGhhbmRsaW5nIGlzIGRlZmluZWQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzIHRoYXQgSSBtYXkgaGF2ZSBvdmVybG9va2VkLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIHN5c3RlbSwgYW5kIHRoZXNlIGZpbGVzIGFyZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgYmUgY29uZmlkZW50IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZ21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODQ0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBwcml2LmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AuIEl0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgdHJhcHBpbmcgYW5kIGVtdWxhdGluZyB0aG9zZSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyByZXNpZGVzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBpbnN0cnVjdGlvbiBhY2Nlc3MsIG1hbmFnaW5nIHRoZSBndWVzdCYjMzk7cyBzdGF0ZSBjaGFuZ2VzLCBhbmQgaW50ZXJmYWNpbmcgd2l0aCB0aGUgaHlwZXJ2aXNvciB3aGVuIG5lY2Vzc2FyeS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGluZ3MgbGlrZSB0aGUgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIHRoZSBzcGVjaWZpYyBoYW5kbGVycyBmb3IgZWFjaCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpbnN0cnVjdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0byBlbnN1cmUgcHJvcGVyIGd1ZXN0IGlzb2xhdGlvbi4gVGhpcyBmaWxlIHNob3VsZCBiZSBhIGtleSBwYXJ0IGluIHRoZSB3aG9sZSBLVk0gczM5MCBzeXN0ZW0uIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSYjMzk7cyBwcml2aWxlZ2VkIGluc3RydWN0aW9ucywgZ2l2ZW4gdGhlaXIgc3BlY2lmaWMgcXVpcmtzLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGNsZXZlciB0cmlja3MgdG8ga2VlcCBwZXJmb3JtYW5jZSB1cCwgd2hpbGUgbWFpbnRhaW5pbmcgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9NTQwPXN0YXRpYyBpbnQgaGFuZGxlX2lvX2luc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU2OC1cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjU2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfVkZJT19BUClcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU3MC1ib29sIGt2bV9zMzkwX2lzX2dwYV9pbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzUKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBDaGFuZ2VzIGluIHRoZSBTMzkwIEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBDT05GSUdfS1ZNYCDigJMgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBiZSBjb25jZXJuZWQgd2l0aC4gQnV0IHRoZSBhY3R1YWwgY29kZSBtb2RpZmljYXRpb25zIGFyZSBuZXN0ZWQgd2l0aGluIGBhcmNoL3MzOTAva3ZtL2AgYW5kIGBhcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNgLiBKdXN0IGNvbmZpcm1pbmcgdGhhdCBgQ09ORklHX0tWTWAgaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbGwgcmVsZXZhbnQgYWRqdXN0bWVudHMuIFNlZW1zIHNvLgoKTm93LCBsZXQmIzM5O3MgaG9uZSBpbiBvbiBzb21lIHNwZWNpZmljIHN5bWJvbHMgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHkuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlOiBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAsIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgaW1wb3J0YW50IGFyZWFzLgoKRmlyc3QsIEkgbmVlZCB0byBrbm93IGlmIHRoZXNlIGFyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIEkgc2VlIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCBhbmQgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCBhcmUgc3RhdGljLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIGNvbmZpcm0gYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCBpcyBleHBvcnRlZCwgdGhhdCBjb3VsZCBiZSBzaWduaWZpY2FudC4gTGV0IG1lIGdvIGNoZWNrIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z21hcF9zZXRfY21tYV9hbGxfZGlydHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYz0xMDc3PXN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTA5My1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwOTQ6dm9pZCBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShzdHJ1Y3QgZ21hcCAqZ21hcClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEwOTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQyCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCoqCgpBbHJpZ2h0LCB0aGUgY29yZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTS9zMzkwIHN1YnN5c3RlbSBoYW5kbGVzIHRoZSBpbml0aWF0aW9uIG9mIGEgVk0gbWlncmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBtaWdyYXRpb24gcHJvY2Vzcy4gSXMgdGhpcyB0aGUgZW50cnkgcG9pbnQsIG9yIGlzIGl0IGEgc3Vic2VxdWVudCBzdGFnZT8gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgYWNjZXB0LCBhbmQgd2hhdCBkb2VzIGl0ICpkbyogd2l0aCB0aGVtPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZDsgdGhpcyBpcyBjcml0aWNhbCBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IHdoZXJlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIFZNIHN0YXRlIG5lZWRzIGNhcmVmdWwgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzOiBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgVk0mIzM5O3MgZ3Vlc3Qgc3RhdGUsIHRoZSBtaWdyYXRpb24gc3RydWN0dXJlcywgb3IgcGVyaGFwcyBzb21lIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2l0aCB0aGUgZGVzdGluYXRpb24gaG9zdD8gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciBhcmVhcyB3aGVyZSB0aGUgbWlncmF0aW9uIHByb2Nlc3MgbWlnaHQgYmxvY2sgb3IgYmVjb21lIGEgYm90dGxlbmVjay4gT25jZSBJIHVuZGVyc3RhbmQgdGhlICp3aGF0KiBvZiB0aGUgZnVuY3Rpb24sIEkmIzM5O2xsIG5lZWQgdG8gbW92ZSBvbnRvIHRoZSAqd2h5KiwgdHJhY2luZyBjYWxscyBpbnRvIG90aGVyIGZ1bmN0aW9ucywgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93LCBhbmQgZmlndXJpbmcgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzIHJlbGF0ZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgS1ZNIGltcGxlbWVudGF0aW9uLiBJbiB0aGUgZW5kLCBJIG5lZWQgdG8gaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGlvbiBwaXBlbGluZSwgYW5kIGhvdyBpdHMgY29ycmVjdCBiZWhhdmlvciBlbnN1cmVzIGEgc21vb3RoIGFuZCBjb25zaXN0ZW50IG1pZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTc3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTg5LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExOTA6c3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExOTEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjE5LSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMgYW5kXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTIyMDogKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24uXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMS0gKi9cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIzMz1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjQwLVx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI0MTpcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI0Mi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqQW5hbHl6aW5nIHMzOTAgS1ZNIE1pZ3JhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgc3RhdGljIG5hdHVyZSBvZiBhIGZldyBrZXkgY29tcG9uZW50czogYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBoYW5kbGVfc3NrZWAsIGFuZCBgaGFuZGxlX3BmbWZgLiBUaGVpciBzdGF0aWMgZGVzaWduYXRpb24gaXMgc2lnbmlmaWNhbnQ7IGl0IHJlc3RyaWN0cyB0aGVpciBzY29wZSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUsIHdoaWNoIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgd2hlbiBJJiMzOTttIGRlYnVnZ2luZyBvciB0cmFjaW5nIGFueSBtaWdyYXRpb24tcmVsYXRlZCBpc3N1ZXMuIEkgYWxzbyBub3RlIHRoYXQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGJyb2FkZXIgdXNlLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBpdCYjMzk7cyBhIGNyaXRpY2FsIHV0aWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbWlnaHQgcmVseSBvbiBpdC4gTXkgbmV4dCBzdGVwPyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGFyY2gvczM5MC9rdm0vZGF0LmNgIHRvIGV4YW1pbmUgYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYCwgYXMgdGhleSBhcmUgY3JpdGljYWwgY29tcG9uZW50cyBmb3IgREFUIG9wZXJhdGlvbnMgYW5kIGl0IGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGNvbnRleHQgb2YgdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZGF0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9kYXQuYz0xMTY5PXN0cnVjdCBkYXRfZ2V0X2NtbWFfc3RhdGUge1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3Ni1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE3NzpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE4OS1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MDpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE5OC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5OTppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjAwLXtcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMS1cdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0ge1xuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjAyOlx0XHQucHRlX2VudHJ5ID0gX19kYXRfcGVla19jbW1hX3B0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMzpcdFx0LnBtZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNDpcdFx0LnB1ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNTpcdFx0LnA0ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNjpcdFx0LnBnZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwNy1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4OTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBhbmQgUG90ZW50aWFsIFZpc2liaWxpdHkgb2YgRGF0YSBBY2Nlc3MgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZGF0X3BlZWtfY21tYWAuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vdCBzdGF0aWMsIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBhbnRlbm5hLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYWNjZXNzaWJpbGl0eSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gaG93IGl0IGludGVyYWN0cyB3aXRoIGl0cyBkYXRhLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBkYXRfZ2V0X2NtbWFgIC0gdGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF0X2dldF9jbW1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9kYXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2RhdC5jPTExNTk9bG9uZyBkYXRfcmVzZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE2OC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE2OTpzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHtcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3MC1cdGdmbl90IHN0YXJ0O1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9MTE3Nz1zdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTc5Olx0c3RydWN0IGRhdF9nZXRfY21tYV9zdGF0ZSAqc3RhdGUgPSB3YWxrLVx1MDAzZXByaXY7XG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExODAtXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTExOTA9c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkxLXtcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MjpcdHN0cnVjdCBkYXRfZ2V0X2NtbWFfc3RhdGUgKnN0YXRlID0gd2Fsay1cdTAwM2Vwcml2O1xuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkzLVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmM9MTE5OT1pbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwNy1cdH07XG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDg6XHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHN0YXRlID0geyAudmFsdWVzID0gdmFsdWVzLCB9O1xuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjA5LVx0aW50IHJjO1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIxNi1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIxNzpzdGF0aWMgbG9uZyBfX2RhdF9nZXRfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIxOC17XG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMTk6XHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlICpzdGF0ZSA9IHdhbGstXHUwMDNlcHJpdjtcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIyMC1cdHVuaW9uIHBnc3RlIHBnc3RlO1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTI0NC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTI0NTppbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyNDYte1xuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjQ3Olx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBfX2RhdF9nZXRfY21tYV9wdGUsIH07XG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyNDg6XHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHN0YXRlID0ge1xuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjQ5LVx0XHQucmVtYWluaW5nID0gcmVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAwMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlLgoKKipBbmFseXppbmcgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGZ1bmN0aW9ucywgYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYC4gVGhlIGtleSB0aGluZyB0byByZW1lbWJlciBpcyB0aGF0IHRoZXkmIzM5O3JlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGNoYW5nZXMgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlaXIgc2NvcGUgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgZWxzZSB0aGVzZSBjb3VsZCBiZSBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQgZnJvbS4gSXQgc3VnZ2VzdHMgYSBtb3JlIGdsb2JhbCBzY29wZSB0aGFuIHNvbWV0aGluZyBpbnRlcm5hbCB0byBhIHBhcnRpY3VsYXIgbW9kdWxlLiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoZSBkYXRhIGlzIGJlaW5nIHBhc3NlZCBhbmQgbW9kaWZpZWQgYWNyb3NzIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzLiBXaXRoIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBub24tc3RhdGljLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHNpZGUgZWZmZWN0cyBhbmQgaWYgdGhleSBtaWdodCBiZSBjYWxsZWQgaW4gdW5leHBlY3RlZCBwbGFjZXMuIE9rYXksIGxldCYjMzk7cyB0dXJuIG15IGF0dGVudGlvbiBub3cgdG8gdGhlIGZ1bmN0aW9uIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLiBNeSBuZXh0IGxpbmUgb2YgaW5xdWlyeSBoYXMgdG8gYmUgYWJvdXQgaG93IHRoYXQgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggb3IgdXNlcyBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYz0xMTkxPXN0YXRpYyBzdHJ1Y3QgZ21hcCAqZ21hcF9maW5kX3NoYWRvdyhzdHJ1Y3QgZ21hcCAqcGFyZW50LCB1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMDQtI2RlZmluZSBDUlNUX1RBQkxFX1BBR0VTIChfQ1JTVF9UQUJMRV9TSVpFIC8gUEFHRV9TSVpFKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIwNTpzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsIHtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMDYtXHR1bnNpZ25lZCBsb25nIHNlcTtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjA5LVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIxMDpzdGF0aWMgaW5saW5lIGludCBfX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIxMTpcdFx0XHRcdFx0XHRzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsICpjb250ZXh0KVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIxMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI0Mi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNDM6c3RhdGljIGlubGluZSBpbnQgX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI0NDpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgKmNvbnRleHQpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjQ1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjU2LVx0XHRcdHJldHVybiByYztcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNTc6XHRcdHJjID0gX19nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIHNnLCBjb250ZXh0KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNTgtXHRcdHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjYzLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI2NDpzdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI2NS17XG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjY2Olx0c3RydWN0IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCBjb250ZXh0ID0ge307XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjY3LVx0dW5pb24gYXNjZSBhc2NlID0gc2ctXHUwMDNlZ3Vlc3RfYXNjZTtcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjc5LVx0aWYgKCFyYylcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyODA6XHRcdHJjID0gX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChtYywgc2csIFx1MDAyNmNvbnRleHQpO1xuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI4MS1cdGlmIChyYylcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMzA0PXN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlbnQsXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM1NC1cdC8qIFByb3RlY3Qgd2hpbGUgaW5zZXJ0aW5nLCBwcm90ZWN0cyBhZ2FpbnN0IGludmFsaWRhdGlvbiByYWNlcy4gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEzNTU6XHRyYyA9IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChtYywgbmV3KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNTYtXHRpZiAocmMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyOTAKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHMzOTAgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgczM5MCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGNoYW5nZXMuIEZpcnN0IG9ic2VydmF0aW9uOiBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZS4gSG93ZXZlciwgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgIGFyZSAqZXhwb3J0ZWQqLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCB0YXJnZXRzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgLCBhcmUgZGVmaW5lZC4gQWgsIHRoZXkmIzM5O3JlIGlubGluZSBmdW5jdGlvbnMuIFRoaXMgZ2l2ZXMgbWUgYSBiZXR0ZXIgZmVlbCBmb3IgaG93IHRoZXkgbWlnaHQgYmUgdXNlZCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gdG91Y2ggYm90aCBLVk0gYW5kIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgb24gczM5MC4gR2l2ZW4gdGhhdCBjb21iaW5hdGlvbiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGFuZCBhIGZ1enppbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGV4cG9ydGVkIHN5bWJvbHM6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gVGhleSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzLgoKTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiB0aGUgY29kZWJhc2UgdGhhdCBtaWdodCBiZSByZWxldmFudD8gTGV0JiMzOTtzIGNoZWNrIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIHF1aWNrbHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgcmVsZXZhbnQsIHNpbmNlIG1pZ3JhdGlvbiBjYW4gaW52b2x2ZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIyMj1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIzMi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjMzOnN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIzNC1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTk3OD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTk5NS1cdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjE5OTY6XHRcdHJldCA9IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oa3ZtLCBhdHRyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xOTk3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEtWTSBzMzkwIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBzbyBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50IGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdoZW4gd2UmIzM5O3JlIHNldHRpbmcgYXR0cmlidXRlcyBmb3IgdGhlIHZpcnR1YWwgbWFjaGluZSBvbiBzMzkwLiBUbyBkbyB0aGF0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBoYW5kbGVycyBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucy4KCkxldCBtZSBjaGVjayBgYXJjaC9zMzkwL2t2bS9wcml2LmNgLiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIGltcGxlbWVudGF0aW9ucyBmb3IgaGFuZGxpbmcgc2Vuc2l0aXZlIGluc3RydWN0aW9ucyBvciBldmVudHMgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEkgc3BlY2lmaWNhbGx5IHdhbnQgdG8gdmVyaWZ5IHRoZSBleGlzdGVuY2UgYW5kIGJlaGF2aW9yIG9mIGhhbmRsZXJzIGZvciBTZWN1cmUgU2VydmljZSBLZXkgRW5hYmxlbWVudCAoYGhhbmRsZV9zc2tlYCkgYW5kIFBhZ2UgRmF1bHQgTWVhc3VyZW1lbnQgRmFjaWxpdHkgKGBoYW5kbGVfcGZtZmApLiBUaGVzZSBhcmUgY3JpdGljYWwgZnVuY3Rpb25hbGl0aWVzIG9uIHMzOTAgYW5kIGFyZSBsaWtlbHkgbWFuYWdlZCBhdCB0aGlzIGxldmVsLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgYXR0cmlidXRlIHNldHRpbmcgaW50ZXJhY3RzIHdpdGggdGhlc2UgaGFuZGxlcnMgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3Nza2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYz0yODk9c3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzIyLSNkZWZpbmUgU1NLRV9NQiAweDFcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjMyMzpzdGF0aWMgaW50IGhhbmRsZV9zc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTMyNC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9OTU4PWludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MC1cdGNhc2UgMHgyYjpcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjk4MTpcdFx0cmV0dXJuIGhhbmRsZV9zc2tlKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTgyLVx0Y2FzZSAweDJjOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCMiBJbnN0cnVjdGlvbiBIYW5kbGVyKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBga3ZtX3MzOTBfaGFuZGxlX2IyYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5IGVudHJ5IHBvaW50LCB0aGUgc3RhcnRpbmcgbGluZSBmb3IgcHJvY2Vzc2luZyBhIEIyIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgS1ZNL3MzOTAgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHRoZSBwb2ludCB3aGVyZSB0aGUgaHlwZXJ2aXNvciBpbnRlcmNlcHRzIGFuZCBiZWdpbnMgdG8gaW50ZXJwcmV0IGFuZCBlbXVsYXRlIGEgQjIgaW5zdHJ1Y3Rpb24gZW5jb3VudGVyZWQgYnkgdGhlIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0uIEl0JiMzOTtzIHRoZSBiZWdpbm5pbmcgb2YgYSBjb21wbGV4IGRhbmNlIGJldHdlZW4gaGFyZHdhcmUgYW5kIHNvZnR3YXJlLCB3aGVyZSB3ZSYjMzk7cmUgYWltaW5nIHRvIGZhaXRoZnVsbHkgZXhlY3V0ZSB0aGlzIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGh5cGVydmlzb3Igd29ya3MgaW4gdHJhbnNsYXRpbmcgZ3Vlc3QgaW5zdHJ1Y3Rpb25zIHRvIGhvc3QgYWN0aXZpdHkuIEZyb20gaGVyZSwgYWxsIHNvcnRzIG9mIHRoaW5ncyBjYW4gaGFwcGVuLCBhbmQgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIHRvIHRyb3VibGVzaG9vdCwgYW5hbHl6ZSwgb3IgaW1wcm92ZSB0aGUgaGFuZGxpbmcgb2YgdGhpcyBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9wZm1mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9MTAxNj1zdGF0aWMgaW50IGhhbmRsZV9lcHN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMDQ0LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTA0NTpzdGF0aWMgaW50IGhhbmRsZV9wZm1mKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEwNDYte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyODI9aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5My1cdGNhc2UgMHhhZjpcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTQ6XHRcdHJldHVybiBoYW5kbGVfcGZtZih2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTUtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgczM5MHggS1ZNIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGBrdm1fczM5MF9oYW5kbGVfYjlgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aC4gVGhhdCYjMzk7cyBvdXIganVtcGluZy1vZmYgcG9pbnQuIE5vdywgdG8gbmFycm93IHRoaW5ncyBkb3duLCBJJiMzOTttIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIHNwZWNpZmljIHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgZGF0YSBhZGRyZXNzIHRyYW5zbGF0aW9uIChEQVQpIG1lY2hhbmlzbSBhbmQgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LiBJJiMzOTt2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0OiBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYCwgYGt2bV9zMzkwX2hhbmRsZV9iMmAsIGFuZCwgb2YgY291cnNlLCBga3ZtX3MzOTBfaGFuZGxlX2I5YCBpdHNlbGYsIGFuZCBhbHNvIGBrdm1fczM5MF92bV9zZXRfYXR0cmAuCgpIb3dldmVyLCBvbiBzZWNvbmQgdGhvdWdodCwgYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBrdm1fczM5MF9oYW5kbGVfYjlgIGFyZSAqdmVyeSogZ2VuZXJpYy4gVGhleSBoYW5kbGUgYSB3aWRlIHJhbmdlIG9mIGluc3RydWN0aW9ucywgc28gdGhleSYjMzk7cmUgcHJvYmFibHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gbmFycm93IGRvd24gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucywgbGlrZSB0aGUgREFUIGFuZCBQVEUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCBzZWVtIGxpa2UgYSBtdWNoIGJldHRlciB0YXJnZXQgZm9yIGluaXRpYWwgaW52ZXN0aWdhdGlvbi4KClNvLCBJJiMzOTtsbCByZXZpc2UgbXkgc3RyYXRlZ3kgYW5kIGZvY3VzIG9uIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gQmVmb3JlIEkgZGVsdmUgZnVydGhlciwgdGhvdWdoLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhvc2UgYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIHN5bWJvbHMsIG9yIGlmIHRoZXkmIzM5O3JlIHNpbXBseSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEtWTSBtb2R1bGUuIFRoYXQgd2lsbCBpbXBhY3QgaG93IGVhc2lseSBJIGNhbiBhbmFseXplIHRoZWlyIGNyb3NzLXJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcm9sZSBpbiB0aGUgb3ZlcmFsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2RhdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBEYXRhIE11dGFiaWxpdHkgaW4gUmVsYXRpb24gdG8gRXhwb3J0ZWQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyB0aGUgZGF0YSBpbiBxdWVzdGlvbiBpc24mIzM5O3QgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4dGVybmFsIGFjY2VzcywgYnV0IGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYCBlaXRoZXIuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGltcGx5aW5nIHBvdGVudGlhbCBmb3IgbW9kaWZpY2F0aW9uIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBzY29wZSwgd2hpY2ggY291bGQgYmUgcHJvYmxlbWF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBub24tc3RhdGljIGJ1dCBub24tZXhwb3J0ZWQgc3RhdHVzLgoKTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCBmdW5jdGlvbi4gVGhpcyBmZWVscyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGludmVzdGlnYXRpbmcgaG93IGFuZCB3aGVyZSB0aGlzIGRhdGEgbWlnaHQgYmUgbW9kaWZpZWQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiwgaXRzIGNhbGwgc2l0ZXMsIGFuZCBlc3BlY2lhbGx5IGl0cyBhY2Nlc3MgcGF0dGVybnMuIElzIGl0IGNoYW5naW5nIHRoZSBkYXRhIGRpcmVjdGx5PyBJcyBpdCBpbmRpcmVjdCB2aWEgcG9pbnRlcnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBuZWVkIGZ1cnRoZXIgc2NydXRpbnk/IFVsdGltYXRlbHksIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gdGhpcyBub24tZXhwb3J0ZWQsIGJ1dCBub3Qtc3RhdGljIHZhcmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIHdoYXQgd2VyZSB3ZSBqdXN0IGxvb2tpbmcgYXQ/IFJpZ2h0LCB0aGUgZXhwb3J0IHN5bWJvbHMuIEkgcmVtZW1iZXIgc2VlaW5nIGBFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQpYCBpbiB0aGF0IGRpZmYsIHNvIHRoYXQgb25lICppcyogZXhwb3J0ZWQuIEdvb2QsIGdvb2QuIEJ1dCBJIGFsc28gc2F3IHNvbWV0aGluZyBlbHNlIHdhcyAqbm90KiBleHBvcnRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKKipDaGVja2luZyBFeHBvcnRlZCBTeW1ib2xzKioKCkkgbmVlZCB0byBjb25maXJtIGlmIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGZ1bmN0aW9uLCBzbyBJIHNob3VsZCBiZSBzdXJlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGFuZCBjaGVjayB0aGUgZXhwb3J0IHN5bWJvbHMgdG8gbWFrZSBzdXJlLiBJJiMzOTtsbCBoYXZlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBgRVhQT1JUX1NZTUJPTGAgb3IgYEVYUE9SVF9TWU1CT0xfR1BMYCBkZWZpbml0aW9uIGZvciBpdC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB2aXNpYmxlIGV4dGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMwODc9dm9pZCBrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqYXBtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTIyLX1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTIzOkVYUE9SVF9TWU1CT0xfR1BMKGt2bV9hcmNoX2NyeXB0b19zZXRfbWFza3MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMjQtXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMzc9dm9pZCBrdm1fYXJjaF9jcnlwdG9fY2xlYXJfbWFza3Moc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTUwLX1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTUxOkVYUE9SVF9TWU1CT0xfR1BMKGt2bV9hcmNoX2NyeXB0b19jbGVhcl9tYXNrcyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSBmdW5jdGlvbnMgSSBoYXZlIGluIG1pbmQgYXJlbiYjMzk7dCBleHBsaWNpdGx5ICpleHBvcnRlZCosIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGJsb2NrIHRoZWlyIHVzZWZ1bG5lc3MgYXMgZm9jdXMgc3ltYm9scy4gSW4gZmFjdCwgdGhpbmtpbmcgYWJvdXQgaXQsIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgYXJlIGFjdHVhbGx5IHF1aXRlIGdvb2QgY2FuZGlkYXRlcyBmb3IgdGhhdCByb2xlLiBUaGVpciBiZWhhdmlvciBpcyBjb3JlIHRvIHRoZSBhcmVhIG9mIGludGVyZXN0LiBBbmQsIGV4dGVuZGluZyB0aGF0IHRob3VnaHQsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgYWxzbyBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlLiBPaCwgYW5kIEkgc2hvdWxkbiYjMzk7dCBmb3JnZXQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIFRoYXQgb25lIGNvdWxkIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dCB0b28uCgpOb3csIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyBwYXRoLCBJIHNob3VsZCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nLiBMZXQgbWUgY2hlY2suLi4ganVzdCBgQ09ORklHX0tWTWAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVsZXZhbnQgb25lLgoKV2FpdC4uLiBpcyBqdXN0IGBDT05GSUdfS1ZNYCAqc3VmZmljaWVudCo/IEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IEkgbWlnaHQgYmUgbWlzc2luZyBzb21ldGhpbmcgdGhlcmUuIEJlc3QgdG8gZG91YmxlLWNoZWNrLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMgSSYjMzk7bSBub3QgYWNjb3VudGluZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkdNQVAgQ29uZmlndXJhdGlvbjogQSBRdWljayBDaGVjayoqCgpIbW0sIEkgbmVlZCB0byBsb29rIGludG8gdGhpcy4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHNldCBvZiBwYXJhbWV0ZXJzLCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBmb3IgR01BUD8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaW4gdGVybXMgb2YgaXRzIGJlaGF2aW9yIG9yIGl0cyBpbml0aWFsIHNldHVwLiBJJiMzOTttIG9wZXJhdGluZyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0IGV4aXN0cywgY29uc2lkZXJpbmcgaG93IGNvbXBsZXggdGhlIHN5c3RlbSBpcy4gQmV0dGVyIHRvIGRvdWJsZS1jaGVjayBub3cgdGhhbiBydW4gaW50byBpc3N1ZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtHTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIFMzOTAgQXJjaGl0ZWN0dXJlJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50IE1ha2VmaWxlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGxvb2tpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSBTMzkwIGFyY2hpdGVjdHVyZT8gVGhlIGxvZ2ljYWwgZmlyc3QgbW92ZSwgZXNwZWNpYWxseSB3aXRoIG15IGV4cGVyaWVuY2UsIGlzIHRvIGRpZyBpbnRvIHRoZSBgYXJjaC9zMzkwL21tL01ha2VmaWxlYC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIG9yY2hlc3RyYXRpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBzb3VyY2UgZmlsZXMgZm9yIHRoaXMgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRpcmVjdGl2ZXMgZm9yIG9iamVjdCBmaWxlcywgaW5jbHVkZSBwYXRocywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9uIGZsYWdzLiBIb3BlZnVsbHkgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgZGVmaW5lcyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGNvcmUgTU0gY29tcG9uZW50cy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfUEZBVUxUKVx0XHQmIzQzOz0gcGZhdWx0Lm9cbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xNC1cbmFyY2gvczM5MC9tbS9NYWtlZmlsZToxNTpvYmotJChzdWJzdCBtLHksJChDT05GSUdfS1ZNKSlcdCYjNDM7PSBnbWFwX2hlbHBlcnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyBgZ21hcF9oZWxwZXJzLm9gIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCDigJMgc2VlbXMgbGlrZSBgQ09ORklHX0tWTWAgaXMgdGhlIG9ubHkgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgaGVyZS4KCkxldCYjMzk7cyBzZWUsIHRoZSBzeXN0ZW0gaGFzIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBhcyBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZzoKCiogICBgZGF0X3BlZWtfY21tYWAKKiAgIGBkYXRfZ2V0X2NtbWFgCiogICBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgCiogICBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYAoqICAgYGt2bV9zMzkwX2hhbmRsZV9iMmAKKiAgIGBrdm1fczM5MF9oYW5kbGVfYjlgCgpIbW0sIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YC4uLiB0aG9zZSBhcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHJpZ2h0PyBUaGV5IG1pZ2h0IGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHVuZGVyIHNwZWNpZmljIHdvcmtsb2Fkcywgc28gdGhleSBjb3VsZCBiZSBob3QgcGF0aHMgaWYgY2VydGFpbiBpbnN0cnVjdGlvbnMgYXJlIGZyZXF1ZW50bHkgZXhlY3V0ZWQgYnkgdGhlIGd1ZXN0LiBCdXQsIHRoZXkmIzM5O3JlIHRpZWQgdG8gKnZlcnkqIHNwZWNpZmljIGluc3RydWN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBsZWFuIHRvd2FyZHMgdXNpbmcgdGhlIGBkYXRfKmAgYW5kIGBnbWFwXypgIHN5bWJvbHMgYmVjYXVzZSB0aGV5IHNlZW0gbW9yZSBnZW5lcmFsLgoKSSB0aGluayB3ZSBjYW4gbmFycm93IHRoaXMgZG93bi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGgganVzdCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIFRoZW4sIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgYXMgd2VsbCwgYmVjYXVzZSBpdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLiBUaGF0IHNvdW5kcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgYSBnb29kIGNob2ljZS4gQWggeWVzLCBpdCBoYW5kbGVzIGFsbCB0aGUgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RscyBmb3IgdGhlIFZNLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCB3b3J0aCB0aGUgZWZmb3J0IHRvIGNoZWNrLgoKRmluYWxseSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgIGFyZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLi4uanVzdCB0byBzZWUgaG93IGJyb2FkIHRoZSBhdHRhY2sgc3VyZmFjZSBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZGF0LmM9MTE2OT1zdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzYtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNzc6c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTc4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExODktXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExOTA6c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTgtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExOTk6aW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcylcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMC17XG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDEtXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHtcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMjpcdFx0LnB0ZV9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9wdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDM6XHRcdC5wbWRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDQ6XHRcdC5wdWRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDU6XHRcdC5wNGRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDY6XHRcdC5wZ2RfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDctXHR9O1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0Lmg9NTUxPWxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydF9nZm4pO1xuYXJjaC9zMzkwL2t2bS9kYXQuaDo1NTI6aW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcyk7XG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1My1pbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMjI1PXN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyNTctXHRcdGlmIChwZWVrKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIyNTg6XHRcdFx0cmV0ID0gZGF0X3BlZWtfY21tYShhcmdzLVx1MDAzZXN0YXJ0X2dmbiwga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBcdTAwMjZhcmdzLVx1MDAzZWNvdW50LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyNTktXHRcdFx0XHRcdCAgICB2YWx1ZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc2MQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgQ01NQSBCaXQgUmV0cmlldmFsIGluIEtWTS9zMzkwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgc2VlIGl0IGNhbGxzIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAuICBUaGF0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmZXRjaGluZyB0aGUgQ3VycmVudCBNYWNoaW5lIE1lbW9yeSBBZGRyZXNzIChDTU1BKSBiaXRzLCBvciBhdCBsZWFzdCBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJldHJpZXZhbCBwcm9jZXNzLiBTbywgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGJpdCBmZXRjaGluZyBpcyBvcmNoZXN0cmF0ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGZsb3cgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2dldF9jbW1hX2JpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIxNTU9c3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyMjQtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjIyNTpzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyMjYtXHRcdFx0XHQgIHN0cnVjdCBrdm1fczM5MF9jbW1hX2xvZyAqYXJncylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mjg2Mz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzMtXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5MzQ6XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNS1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MzMKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBmdW5jdGlvbiBjYWxscyBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuICBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AgZmVlbHMgbGlrZSBhIGdvb2Qga2V5IHN5bWJvbCB0byBmb2N1cyBvbi4gTGV0IG1lIHF1aWNrbHkgc3VtbWFyaXplIHRoZSByZWxhdGVkIGZ1bmN0aW9uIG5hbWVzIEkmIzM5O3ZlIHB1bGxlZCBvdXQ6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AsIGFuZCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYW5kIGdpdmVuIHRoYXQgS1ZNIGlzIGVuYWJsZWQsIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtb2RpZnlpbmcgdGhlIHMzOTAgTU1VIGFuZCBnbWFwIGltcGxlbWVudGF0aW9uLiBUaGUgcHJpbWFyeSBnb2FsIHNlZW1zIHRvIGJlIHJlc29sdmluZyBpc3N1ZXMgd2l0aCBDTU1BIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZHVyaW5nIFZNIG1pZ3JhdGlvbiBhbmQgaG93IHRoZSB1bnVzZWQgYml0IGlzIGhhbmRsZWQgaW4gdGhlIHBhZ2UgdGFibGUuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcyBpbXBhY3RpbmcgcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuCgpKdXN0IHRvIGNvbmZpcm0sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuIFl1cCwgSSBzYXcgaXQgaW4gYGt2bS1zMzkwLmNgLiBBbHNvLCBjb25maXJtaW5nIGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYCBpcyBhbHNvIHRoZSByaWdodCBmdW5jdGlvbiBuYW1lLiBPa2F5LCBJIHRoaW5rIHRoYXQmIzM5O3Mgc3VmZmljaWVudCBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfcGVla19jbW1hJiMzNDssCiAgICAmIzM0O2RhdF9nZXRfY21tYSYjMzQ7LAogICAgJiMzNDtnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eSYjMzQ7LAogICAgJiMzNDtnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBzMzkwIE1NVSBhbmQgZ21hcCBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBpc3N1ZXMgd2l0aCBDTU1BIChDaGFubmVsIE1lYXN1cmVtZW50IE1lbW9yeSBBY2Nlc3MpIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZHVyaW5nIFZNIG1pZ3JhdGlvbiwgYW5kIHBhZ2UgdGFibGUgdW51c2VkIGJpdCBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGNvZGUgb24gczM5MC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICAgJiMzNDtkYXRfZ2V0X2NtbWEmIzM0OywKICAgICYjMzQ7Z21hcF9zZXRfY21tYV9hbGxfZGlydHkmIzM0OywKICAgICYjMzQ7Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2dldF9jbW1hX2JpdHMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgaXNzdWVzIHdpdGggQ01NQSAoQ2hhbm5lbCBNZWFzdXJlbWVudCBNZW1vcnkgQWNjZXNzKSBkaXJ0eSBwYWdlIHRyYWNraW5nIGR1cmluZyBWTSBtaWdyYXRpb24sIGFuZCBwYWdlIHRhYmxlIHVudXNlZCBiaXQgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMjozNC4yMDUyMDg4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDA4NTk0OTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5XCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIixcbiAgICBcImt2bV9zMzkwX2dldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgaXNzdWVzIHdpdGggQ01NQSAoQ2hhbm5lbCBNZWFzdXJlbWVudCBNZW1vcnkgQWNjZXNzKSBkaXJ0eSBwYWdlIHRyYWNraW5nIGR1cmluZyBWTSBtaWdyYXRpb24sIGFuZCBwYWdlIHRhYmxlIHVudXNlZCBiaXQgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEyOjM0LjIwNTIxNjQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU3NTk5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyN2NkNDdlZWIyNTFhN2I2YWQwMmE2NjJjNTdmNGM4M2NjODMzNjIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDE5IDE2OjEyOjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggMmM2Y2VlODI0MWUwNDQuLjQ3NDBjNzU2NDllYmI1IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTk4MCw2ICs5ODAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcXG4ge1xcbitcXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcXG4rXFx0XFx0cHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xcbiBcXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xcbiB9XFxuIFxcbkBAIC0xMzMyLDggKzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpO1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgbnIpXFxuIHtcXG4tXFx0aWYgKHB0ZV9wcmVzZW50KGVudHJ5KSlcXG4tXFx0XFx0ZW50cnkgPSBjbGVhcl9wdGVfYml0KGVudHJ5LCBfX3BncHJvdChfUEFHRV9VTlVTRUQpKTtcXG4gXFx0cGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgZW50cnksIG5yKTtcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHRzZXRfcHRlKHB0ZXAsIGVudHJ5KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcXG5pbmRleCBhNGZlNjY0ZjY1ZWUxNS4uNWYxOTYwZWM5ODJkMDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcXG5AQCAtMTIwOSw3ICsxMjA5LDcgQEAgaW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcylcXG4gXFx0aW50IHJjO1xcbiBcXG4gXFx0cmMgPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKHN0YXJ0LCBzdGFydCArICpjb3VudCwgYXNjZSwgXFx1MDAyNm9wcywgREFUX1dBTEtfREVGQVVMVCwgXFx1MDAyNnN0YXRlKTtcXG4tXFx0KmNvdW50ID0gc3RhdGUuZW5kIC0gc3RhcnQ7XFxuK1xcdCpjb3VudCA9IHN0YXRlLmVuZCBcXHUwMDNlPSBzdGFydCA/IHN0YXRlLmVuZCAtIHN0YXJ0IDogMDtcXG4gXFx0LyogUmV0dXJuIHN1Y2Nlc3MgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIHdhcyBzYXZlZCwgb3RoZXJ3aXNlIGFuIGVycm9yLiAqL1xcbiBcXHRyZXR1cm4gKHJjID09IC1FRkFVTFQgXFx1MDAyNlxcdTAwMjYgKmNvdW50IFxcdTAwM2UgMCkgPyAwIDogcmM7XFxuIH1cXG5AQCAtMTI1Myw2ICsxMjUzLDkgQEAgaW50IGRhdF9nZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90ICpzdGFydCwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcyxcXG4gXFx0fTtcXG4gXFxuIFxcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoKnN0YXJ0LCBhc2NlX2VuZChhc2NlKSwgYXNjZSwgXFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLCBcXHUwMDI2c3RhdGUpO1xcbitcXHQvKiBJZiBubyBkaXJ0eSBwYWdlcyB3ZXJlIGZvdW5kLCB3cmFwIGFyb3VuZCBhbmQgY29udGludWUgc2VhcmNoaW5nICovXFxuK1xcdGlmICgqc3RhcnQgXFx1MDAyNlxcdTAwMjYgc3RhdGUuc3RhcnQgPT0gLTEpXFxuK1xcdFxcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoMCwgKnN0YXJ0LCBhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsIFxcdTAwMjZzdGF0ZSk7XFxuIFxcbiBcXHRpZiAoc3RhdGUuc3RhcnQgPT0gLTEpIHtcXG4gXFx0XFx0KmNvdW50ID0gMDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xcbmluZGV4IDFkMjg5ZjhmYTNiMjA5Li40YWE2MmM5YTQ4ZGU2OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2dtYXAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXFxuQEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdFxcbiBcXHRcXHRuZXcuaC5pID0gMTtcXG4gXFx0XFx0bmV3LnMuZmMxLnkgPSAwO1xcbiBcXHRcXHRuZXcucy5mYzEucHJlZml4X25vdGlmID0gMDtcXG4tXFx0XFx0aWYgKG5ldy5zLmZjMS5kIHx8ICFuZXcuaC5wKVxcbitcXHRcXHRpZiAoKG5ldy5zLmZjMS5kIHx8ICFuZXcuaC5wKSBcXHUwMDI2XFx1MDAyNiAhbmV3LnMuZmMxLnMpXFxuIFxcdFxcdFxcdGZvbGlvX3NldF9kaXJ0eShwaHlzX3RvX2ZvbGlvKGNyc3RlX29yaWdpbl9sYXJnZShjcnN0ZSkpKTtcXG4gXFx0XFx0bmV3LnMuZmMxLmQgPSAwO1xcbiBcXHRcXHRuZXcuaC5wID0gMTtcXG5AQCAtMTA3Niw3ICsxMDc2LDE2IEBAIGludCBnbWFwX3Byb3RlY3Rfcm1hcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLCBnZm5fdCBwX2dmXFxuIFxcbiBzdGF0aWMgbG9uZyBfX3NldF9jbW1hX2RpcnR5X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbiB7XFxuLVxcdF9fYXRvbWljNjRfb3IoUEdTVEVfQ01NQV9EX0JJVCwgXFx1MDAyNnBnc3RlX29mKHB0ZXApLVxcdTAwM2V2YWwpO1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4rXFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdC8qIEF2b2lkIGRvdWJsZS1jb3VudGluZyB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBoYXBwZW4gKi9cXG4rXFx0aWYgKCFwZ3N0ZS5jbW1hX2QpIHtcXG4rXFx0XFx0cGdzdGUuY21tYV9kID0gMTtcXG4rXFx0XFx0YXRvbWljNjRfaW5jKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHR9XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXG4gXFx0aWYgKG5lZWRfcmVzY2hlZCgpKVxcbiBcXHRcXHRyZXR1cm4gbmV4dDtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTEwOTAsNyArMTA5OSw4IEBAIHZvaWQgZ21hcF9zZXRfY21tYV9hbGxfZGlydHkoc3RydWN0IGdtYXAgKmdtYXApXFxuIFxcdGRvIHtcXG4gXFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNmdtYXAtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuIFxcdFxcdFxcdGdmbiA9IF9kYXRfd2Fsa19nZm5fcmFuZ2UoZ2ZuLCBhc2NlX2VuZChnbWFwLVxcdTAwM2Vhc2NlKSwgZ21hcC1cXHUwMDNlYXNjZSwgXFx1MDAyNm9wcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBEQVRfV0FMS19JR05fSE9MRVMsIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgIERBVF9XQUxLX0lHTl9IT0xFUyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Z21hcC1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fSB3aGlsZSAoZ2ZuKTtcXG4gfVxcbkBAIC0xMjYzLDcgKzEyNzMsNyBAQCBzdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYVxcbiBcXHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqL1xcbiBcXHRzbXBfcm1iKCk7XFxuIFxcbi1cXHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cXHUwMDNla3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS5kdCArIDEsIGZhbHNlKTtcXG4rXFx0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXFx1MDAzZWt2bSwgY29udGV4dC5mLCBhc2NlLnJzdG8sIGFzY2UudGwgKyAxLCBmYWxzZSk7XFxuIFxcdGlmIChyYyBcXHUwMDNlIDApXFxuIFxcdFxcdHJjID0gLUVGQVVMVDtcXG4gXFx0aWYgKCFyYylcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuaW5kZXggZmZiMjBhNjRkMzI4ZjMuLjkwN2QyY2E5OTUxZGFiIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbkBAIC0xMTkxLDcgKzExOTEsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XFxuIFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzO1xcbi1cXHR1bnNpZ25lZCBsb25nIHJhbV9wYWdlcyA9IDA7XFxuIFxcdGludCBia3Q7XFxuIFxcbiBcXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cXG5AQCAtMTIwOCwxMiArMTIwNywxMCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdGt2bV9mb3JfZWFjaF9tZW1zbG90KG1zLCBia3QsIHNsb3RzKSB7XFxuIFxcdFxcdGlmICghbXMtXFx1MDAzZWRpcnR5X2JpdG1hcClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdHJhbV9wYWdlcyArPSBtcy1cXHUwMDNlbnBhZ2VzO1xcbiBcXHR9XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSA9IDE7XFxuIFxcdC8qIG1hcmsgYWxsIHRoZSBwYWdlcyBhcyBkaXJ0eSAqL1xcbiBcXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdGF0b21pYzY0X3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMsIHJhbV9wYWdlcyk7XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSA9IDE7XFxuIFxcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUQVJUX01JR1JBVElPTik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG5pbmRleCA0NDdlYzdlZDQyM2RjNC4uOWJjNmZkMDJmZjc3NzAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbkBAIC0zNjYsNyArMzY2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdGlmIChyYyBcXHUwMDNlIDEpXFxuIFxcdFxcdFxcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpO1xcbiBcXHRcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbi1cXHRcXHRcXHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuK1xcdFxcdFxcdHJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXFx1MDAzZWFyY2gubWMpO1xcbitcXHRcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByYztcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG5AQCAtMTEyMiw3ICsxMTI0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcGZtZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdGlmIChyYyBcXHUwMDNlIDEpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xcbiBcXHRcXHRcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbi1cXHRcXHRcXHRcXHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuK1xcdFxcdFxcdFxcdHJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXFx1MDAzZWFyY2gubWMpO1xcbitcXHRcXHRcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiByYztcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXFxuaW5kZXggZWUzZjM3YWY4YWVlNGEuLjRiZjdjOTAxMmZlYjZhIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xcbisrKyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xcbkBAIC0xODEsNyArMTgxLDggQEAgdm9pZCBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxcbiBcXHRpZiAoSVNfRVJSX09SX05VTEwocHRlcCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdF9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApO1xcbitcXHRpZiAocHRlX3ByZXNlbnQoKnB0ZXApKVxcbitcXHRcXHRfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTtcXG4gXFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG5pbmRleCBlMzlhNzI0ZmU4NjBlMy4uMDRmMzRiN2VjMTI3OWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xcbkBAIC0zOSwxMSArMzksMTQgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUoXFxuIFxcdFxcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXFxuK1xcdFxcdFxcXCJcXHR4Z3IgMSwxXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCJcXHRsbGlsZiAxLCVbc3RhcnRfZ2ZuXVxcXFxuXFxcIlxcbiBcXHRcXHQvKiBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZ2ZuICovXFxuIFxcdFxcdFxcXCJcXHRzbGxnIDEsMSwxMigwKVxcXFxuXFxcIlxcbiBcXHRcXHQvKiBzZXQgdGhlIGZpcnN0IHBhZ2UgaW4gVEVTVF9EQVRBIG1lbXNsb3QgdG8gU1RBQkxFICovXFxuIFxcdFxcdFxcXCJcXHQuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXHRhZ2ZpIDEsMHgxMDAwMDBcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXFxcblxcXCJcXG4gXFx0XFx0LyogaHlwZXJjYWxsICovXFxuIFxcdFxcdFxcXCJcXHRkaWFnIDAsMCwweDUwMVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiMDpcXHRqIDBiXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMjozNC44OTE4MDE2OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTM5OTMyNjc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5XCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIixcbiAgICBcImt2bV9zMzkwX2dldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgaXNzdWVzIHdpdGggQ01NQSAoQ2hhbm5lbCBNZWFzdXJlbWVudCBNZW1vcnkgQWNjZXNzKSBkaXJ0eSBwYWdlIHRyYWNraW5nIGR1cmluZyBWTSBtaWdyYXRpb24sIGFuZCBwYWdlIHRhYmxlIHVudXNlZCBiaXQgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjdjZDQ3ZWViMjUxYTdiNmFkMDJhNjYyYzU3ZjRjODNjYzgzMzYyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDE5IDE2OjEyOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDJjNmNlZTgyNDFlMDQ0Li40NzQwYzc1NjQ5ZWJiNSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC05ODAsNiArOTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZClcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbitcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuK1x0XHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xuIH1cbiBcbkBAIC0xMzMyLDggKzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IG5yKVxuIHtcbi1cdGlmIChwdGVfcHJlc2VudChlbnRyeSkpXG4tXHRcdGVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfcHRlKHB0ZXAsIGVudHJ5KTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggYTRmZTY2NGY2NWVlMTUuLjVmMTk2MGVjOTgyZDA0IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTEyMDksNyArMTIwOSw3IEBAIGludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpXG4gXHRpbnQgcmM7XG4gXG4gXHRyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgKmNvdW50LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0RFRkFVTFQsIFx1MDAyNnN0YXRlKTtcbi1cdCpjb3VudCA9IHN0YXRlLmVuZCAtIHN0YXJ0O1xuK1x0KmNvdW50ID0gc3RhdGUuZW5kIFx1MDAzZT0gc3RhcnQgPyBzdGF0ZS5lbmQgLSBzdGFydCA6IDA7XG4gXHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovXG4gXHRyZXR1cm4gKHJjID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICpjb3VudCBcdTAwM2UgMCkgPyAwIDogcmM7XG4gfVxuQEAgLTEyNTMsNiArMTI1Myw5IEBAIGludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsXG4gXHR9O1xuIFxuIFx0X2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuK1x0LyogSWYgbm8gZGlydHkgcGFnZXMgd2VyZSBmb3VuZCwgd3JhcCBhcm91bmQgYW5kIGNvbnRpbnVlIHNlYXJjaGluZyAqL1xuK1x0aWYgKCpzdGFydCBcdTAwMjZcdTAwMjYgc3RhdGUuc3RhcnQgPT0gLTEpXG4rXHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoMCwgKnN0YXJ0LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuIFxuIFx0aWYgKHN0YXRlLnN0YXJ0ID09IC0xKSB7XG4gXHRcdCpjb3VudCA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggMWQyODlmOGZhM2IyMDkuLjRhYTYyYzlhNDhkZTY5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBsb25nIGdtYXBfY2xlYXJfeW91bmdfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0XG4gXHRcdG5ldy5oLmkgPSAxO1xuIFx0XHRuZXcucy5mYzEueSA9IDA7XG4gXHRcdG5ldy5zLmZjMS5wcmVmaXhfbm90aWYgPSAwO1xuLVx0XHRpZiAobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApXG4rXHRcdGlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApIFx1MDAyNlx1MDAyNiAhbmV3LnMuZmMxLnMpXG4gXHRcdFx0Zm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpO1xuIFx0XHRuZXcucy5mYzEuZCA9IDA7XG4gXHRcdG5ldy5oLnAgPSAxO1xuQEAgLTEwNzYsNyArMTA3NiwxNiBAQCBpbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZlxuIFxuIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4ge1xuLVx0X19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCBcdTAwMjZwZ3N0ZV9vZihwdGVwKS1cdTAwM2V2YWwpO1xuK1x0dW5pb24gcGdzdGUgcGdzdGU7XG4rXG4rXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuK1x0LyogQXZvaWQgZG91YmxlLWNvdW50aW5nIHdoZW4gY29uY3VycmVudCB1cGRhdGVzIGhhcHBlbiAqL1xuK1x0aWYgKCFwZ3N0ZS5jbW1hX2QpIHtcbitcdFx0cGdzdGUuY21tYV9kID0gMTtcbitcdFx0YXRvbWljNjRfaW5jKHdhbGstXHUwMDNlcHJpdik7XG4rXHR9XG4rXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbitcbiBcdGlmIChuZWVkX3Jlc2NoZWQoKSlcbiBcdFx0cmV0dXJuIG5leHQ7XG4gXHRyZXR1cm4gMDtcbkBAIC0xMDkwLDcgKzEwOTksOCBAQCB2b2lkIGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KHN0cnVjdCBnbWFwICpnbWFwKVxuIFx0ZG8ge1xuIFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZnbWFwLVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiBcdFx0XHRnZm4gPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKGdmbiwgYXNjZV9lbmQoZ21hcC1cdTAwM2Vhc2NlKSwgZ21hcC1cdTAwM2Vhc2NlLCBcdTAwMjZvcHMsXG4tXHRcdFx0XHRcdFx0ICBEQVRfV0FMS19JR05fSE9MRVMsIE5VTEwpO1xuK1x0XHRcdFx0XHRcdCAgREFUX1dBTEtfSUdOX0hPTEVTLFxuK1x0XHRcdFx0XHRcdCAgXHUwMDI2Z21hcC1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9IHdoaWxlIChnZm4pO1xuIH1cbkBAIC0xMjYzLDcgKzEyNzMsNyBAQCBzdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJjID0ga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2VzKHNnLVx1MDAzZWt2bSwgY29udGV4dC5mLCBhc2NlLnJzdG8sIGFzY2UuZHQgKyAxLCBmYWxzZSk7XG4rXHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLnRsICsgMSwgZmFsc2UpO1xuIFx0aWYgKHJjIFx1MDAzZSAwKVxuIFx0XHRyYyA9IC1FRkFVTFQ7XG4gXHRpZiAoIXJjKVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggZmZiMjBhNjRkMzI4ZjMuLjkwN2QyY2E5OTUxZGFiIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC0xMTkxLDcgKzExOTEsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbi1cdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcbiBcdGludCBia3Q7XG4gXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cbkBAIC0xMjA4LDEyICsxMjA3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGt2bV9mb3JfZWFjaF9tZW1zbG90KG1zLCBia3QsIHNsb3RzKSB7XG4gXHRcdGlmICghbXMtXHUwMDNlZGlydHlfYml0bWFwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRyYW1fcGFnZXMgKz0gbXMtXHUwMDNlbnBhZ2VzO1xuIFx0fVxuK1x0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuIFx0LyogbWFyayBhbGwgdGhlIHBhZ2VzIGFzIGRpcnR5ICovXG4gXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbi1cdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCByYW1fcGFnZXMpO1xuLVx0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuIFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5pbmRleCA0NDdlYzdlZDQyM2RjNC4uOWJjNmZkMDJmZjc3NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0zNjYsNyArMzY2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGlmIChyYyBcdTAwM2UgMSlcbiBcdFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTtcbiBcdFx0aWYgKHJjID09IC1FTk9NRU0pIHtcbi1cdFx0XHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbitcdFx0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuK1x0XHRcdGlmIChyYylcbitcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAocmMgXHUwMDNjIDApXG5AQCAtMTEyMiw3ICsxMTI0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcGZtZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0aWYgKHJjIFx1MDAzZSAxKVxuIFx0XHRcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XG4gXHRcdFx0aWYgKHJjID09IC1FTk9NRU0pIHtcbi1cdFx0XHRcdGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuK1x0XHRcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbitcdFx0XHRcdGlmIChyYylcbitcdFx0XHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChyYyBcdTAwM2MgMClcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMgYi9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbmluZGV4IGVlM2YzN2FmOGFlZTRhLi40YmY3YzkwMTJmZWI2YSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xuKysrIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXG5AQCAtMTgxLDcgKzE4MSw4IEBAIHZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChwdGVwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19hdG9taWM2NF9vcihfUEFHRV9VTlVTRUQsIChsb25nICopcHRlcCk7XG4rXHRpZiAocHRlX3ByZXNlbnQoKnB0ZXApKVxuK1x0XHRfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTtcbiBcdHB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5pbmRleCBlMzlhNzI0ZmU4NjBlMy4uMDRmMzRiN2VjMTI3OWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbkBAIC0zOSwxMSArMzksMTQgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXG4gXHRcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXG4rXHRcdFwiXHR4Z3IgMSwxXFxuXCJcbiBcdFx0XCJcdGxsaWxmIDEsJVtzdGFydF9nZm5dXFxuXCJcbiBcdFx0LyogY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGdmbiAqL1xuIFx0XHRcIlx0c2xsZyAxLDEsMTIoMClcXG5cIlxuIFx0XHQvKiBzZXQgdGhlIGZpcnN0IHBhZ2UgaW4gVEVTVF9EQVRBIG1lbXNsb3QgdG8gU1RBQkxFICovXG4gXHRcdFwiXHQuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXFxuXCJcbitcdFx0XCJcdGFnZmkgMSwweDEwMDAwMFxcblwiXG4rXHRcdFwiXHQuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXFxuXCJcbiBcdFx0LyogaHlwZXJjYWxsICovXG4gXHRcdFwiXHRkaWFnIDAsMCwweDUwMVxcblwiXG4gXHRcdFwiMDpcdGogMGJcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6MzQuODkxODAzMzY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NTE0OTcwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzMzkwIEtWTSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGZvY3VzZWQgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgS1ZNLXJlbGF0ZWQgY29kZS4gSSBzZWUgYSBmZXcga2V5IGFyZWFzIGJlaW5nIHRvdWNoZWQ6IHBhZ2UgdGFibGVzLCB0aGUgS1ZNIER5bmFtaWMgQWRkcmVzcyBUcmFuc2xhdGlvbiAoREFUKSwgdGhlIGdtYXAgY29tcG9uZW50LCBhbmQgdGhlIEtWTSBzMzkwIG1vZHVsZSBpdHNlbGYuXG5cbkZpcnN0LCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaGAsIGl0IGxvb2tzIGxpa2UgdGhleSdyZSBzdHJlYW1saW5pbmcgdGhlIGBzZXRfcHRlYCBhbmQgYHNldF9wdGVzYCBmdW5jdGlvbnMsIHJlbW92aW5nIHNvbWUgcmVkdW5kYW50IGxvZ2ljIHJlZ2FyZGluZyB0aGUgYF9QQUdFX1VOVVNFRGAgYml0LiBUaGUgYHNldF9wdGVgIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIHRoZSBjbGVhcmluZyBvZiB0aGlzIGJpdCBpZiB0aGUgUFRFIGlzIHByZXNlbnQsIGFuZCB0aGlzIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb24uIE5vdGhpbmcgbWFqb3IsIGJ1dCBhIGdvb2QgY2xlYW51cC5cblxuVGhlIGBkYXQuY2AgZmlsZSBzaG93cyBhIGNvdXBsZSBvZiBmaXhlcy4gSW4gYGRhdF9wZWVrX2NtbWFgLCB0aGV5J3JlIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyBkaXJ0eSBwYWdlIGNvdW50IGNhbGN1bGF0aW9ucy4gVGhlIGBkYXRfZ2V0X2NtbWFgIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIHdyYXAtYXJvdW5kIG1vcmUgZ3JhY2VmdWxseS5cblxuVGhlIGBnbWFwLmNgIG1vZGlmaWNhdGlvbnMgc2VlbSBhIGJpdCBtb3JlIGludGVyZXN0aW5nLiBUaGV5J3ZlIGFkZGVkIGEgY29uZGl0aW9uIHRvIGBmb2xpb19zZXRfZGlydHlgIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMsIEkgdGhpbmsuIFRoZW4sIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgaXMgdXNpbmcgbG9ja2luZyBwcmltaXRpdmVzIChgcGdzdGVfZ2V0X2xvY2tgIGFuZCBgcGdzdGVfc2V0X3VubG9ja2ApIHRvIHByZXZlbnQgZG91YmxlLWNvdW50aW5nIG9mIHRoZSBgY21tYV9kYCBiaXQuIFNtYXJ0OyBjb25jdXJyZW5jeSBidWdzIGFyZSBuYXN0eS4gVGhleSdyZSBhbHNvIHBhc3NpbmcgdGhlIGBjbW1hX2RpcnR5X3BhZ2VzYCBjb3VudGVyIHRvIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCwgcHJvYmFibHkgdG8gZW5zdXJlIHRoZSBwYWdlIGNvdW50IGlzIHVwZGF0ZWQgY29ycmVjdGx5LiAgQW5kIGZpbmFsbHksIGEgc21hbGwgY2hhbmdlIHRvIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBjaGFuZ2luZyBgYXNjZS5kdCArIDFgIHRvIGBhc2NlLnRsICsgMWAuXG5cbkluIGBrdm0tczM5MC5jYCwgdGhleSd2ZSByZW1vdmVkIHNvbWUgcmVkdW5kYW50IGByYW1fcGFnZXNgIGNhbGN1bGF0aW9uLiBJdCBub3cgcmVsaWVzIG9uIHRoZSBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgIGZ1bmN0aW9uYWxpdHkgdG8ga2VlcCB0cmFjayBvZiBkaXJ0eSBwYWdlcy4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzaW1wbGlmaWNhdGlvbi5cblxuYHByaXYuY2AgaGFzIHNvbWUgdHdlYWtzIHRvIGhhbmRsZSByZXR1cm4gdmFsdWVzIGZyb20gYGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cGAgd2hpY2ggbG9va3MgbGlrZSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZy5cblxuYGdtYXBfaGVscGVycy5jYCBpbmNsdWRlcyBhIGNoZWNrIGZvciBgcHRlX3ByZXNlbnQoKnB0ZXApYCBiZWZvcmUgc2V0dGluZyBgX1BBR0VfVU5VU0VEYC4gVGhpcyBpcyBnb29kIHByYWN0aWNlLlxuXG5GaW5hbGx5LCB3ZSBoYXZlIGEgbW9kaWZpY2F0aW9uIHRvIGEgc2VsZi10ZXN0IGluIGBjbW1hX3Rlc3QuY2AuICBBbHdheXMgZ29vZCB0byBzZWUgdGhvc2UgZ2V0dGluZyB1cGRhdGVkLlxuXG5Tbywgb3ZlcmFsbCwgdGhpcyBzZXJpZXMgaXMgZm9jdXNpbmcgb24gZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgYW5kIGJ1ZyBmaXhlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgS1ZNJ3MgTU1VIGFuZCBnbWFwIGxvZ2ljIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyBLVk0gY29kZSBhbmQgbW9kaWZpZXMgc29tZSBjcml0aWNhbCBNTVUgYW5kIGdtYXAgbG9naWMsIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gU3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4LCBzbyBmdXp6aW5nIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHBsYW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIG9mIGNvdXJzZS4gVGltZSB0byBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIHRoYXQgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6NDUuNTQzMzAyNTE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTAwMjM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00NS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDY6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEyOjQ1Ljc0ODMxMzY2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTEyNTQ3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZpbGVzOiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgIGFuZCBgYXJjaC9zMzkwL2t2bS9nbWFwLmNgLiBUaGVzZSBmaWxlcyBhcmUgbGlrZWx5IHdoZXJlIGFueSBzMzkwLXNwZWNpZmljIEtWTSBjb25maWd1cmF0aW9uIG9yIGhhbmRsaW5nIGlzIGRlZmluZWQuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMgdGhhdCBJIG1heSBoYXZlIG92ZXJsb29rZWQuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiB0aGUgc3lzdGVtLCBhbmQgdGhlc2UgZmlsZXMgYXJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgaGVscCBtZSBiZSBjb25maWRlbnQgSSBoYXZlbid0IG1pc3NlZCBhbnkgb2J2aW91cyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEyOjQ5LjczOTU3MDkyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODM1MjI3OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2dtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6NDkuODM3OTMxMjE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzA0NzExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBwcml2LmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgcHJpdmlsZWdlZCBpbnN0cnVjdGlvbiBoYW5kbGluZy4gTGV0J3Mgc3RhcnQgd2l0aCBgYXJjaC9zMzkwL2t2bS9wcml2LmNgLiBJdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgdHJhcHBpbmcgYW5kIGVtdWxhdGluZyB0aG9zZSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyByZXNpZGVzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBpbnN0cnVjdGlvbiBhY2Nlc3MsIG1hbmFnaW5nIHRoZSBndWVzdCdzIHN0YXRlIGNoYW5nZXMsIGFuZCBpbnRlcmZhY2luZyB3aXRoIHRoZSBoeXBlcnZpc29yIHdoZW4gbmVjZXNzYXJ5LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgdGhlIGluc3RydWN0aW9uIGRlY29kaW5nLCB0aGUgc3BlY2lmaWMgaGFuZGxlcnMgZm9yIGVhY2ggcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW5zdHJ1Y3Rpb24sIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdG8gZW5zdXJlIHByb3BlciBndWVzdCBpc29sYXRpb24uIFRoaXMgZmlsZSBzaG91bGQgYmUgYSBrZXkgcGFydCBpbiB0aGUgd2hvbGUgS1ZNIHMzOTAgc3lzdGVtLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb25zLCBnaXZlbiB0aGVpciBzcGVjaWZpYyBxdWlya3MuIEknbSBleHBlY3Rpbmcgc29tZSBjbGV2ZXIgdHJpY2tzIHRvIGtlZXAgcGVyZm9ybWFuY2UgdXAsIHdoaWxlIG1haW50YWluaW5nIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMjo1My4wNzA5ODAxNzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMDQwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz01NDA9c3RhdGljIGludCBoYW5kbGVfaW9faW5zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy01NjgtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NTY5OiNpZiBJU19FTkFCTEVEKENPTkZJR19WRklPX0FQKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTU3MC1ib29sIGt2bV9zMzkwX2lzX2dwYV9pbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMjo1My4xMjYxOTE1MjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQwNzkxOTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gQ2hhbmdlcyBpbiB0aGUgUzM5MCBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBDT05GSUdfS1ZNYCDigJMgdGhhdCdzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBCdXQgdGhlIGFjdHVhbCBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIG5lc3RlZCB3aXRoaW4gYGFyY2gvczM5MC9rdm0vYCBhbmQgYGFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY2AuIEp1c3QgY29uZmlybWluZyB0aGF0IGBDT05GSUdfS1ZNYCBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFsbCByZWxldmFudCBhZGp1c3RtZW50cy4gU2VlbXMgc28uXG5cbk5vdywgbGV0J3MgaG9uZSBpbiBvbiBzb21lIHNwZWNpZmljIHN5bWJvbHMgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHkuIEknbGwgZm9jdXMgb24gdGhlc2U6IGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLCBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIFRoYXQgc2hvdWxkIGNvdmVyIHRoZSBpbXBvcnRhbnQgYXJlYXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBJIHNlZSBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAgYW5kIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgYXJlIHN0YXRpYy4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjb25maXJtIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgaXMgZXhwb3J0ZWQsIHRoYXQgY291bGQgYmUgc2lnbmlmaWNhbnQuIExldCBtZSBnbyBjaGVjayB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNzUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6NTguMTY2OTg1MTgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk2OTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2dtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2dtYXAuYz0xMDc3PXN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDkzLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEwOTQ6dm9pZCBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShzdHJ1Y3QgZ21hcCAqZ21hcClcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMDk1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTI6NTguMjE5OTYyMDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNTQyNTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAgaW4gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTS9zMzkwIHN1YnN5c3RlbSBoYW5kbGVzIHRoZSBpbml0aWF0aW9uIG9mIGEgVk0gbWlncmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBtaWdyYXRpb24gcHJvY2Vzcy4gSXMgdGhpcyB0aGUgZW50cnkgcG9pbnQsIG9yIGlzIGl0IGEgc3Vic2VxdWVudCBzdGFnZT8gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgYWNjZXB0LCBhbmQgd2hhdCBkb2VzIGl0ICpkbyogd2l0aCB0aGVtPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IG11dGV4ZXMsIHNwaW5sb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZDsgdGhpcyBpcyBjcml0aWNhbCBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IHdoZXJlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIFZNIHN0YXRlIG5lZWRzIGNhcmVmdWwgbWFuYWdlbWVudC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBWTSdzIGd1ZXN0IHN0YXRlLCB0aGUgbWlncmF0aW9uIHN0cnVjdHVyZXMsIG9yIHBlcmhhcHMgc29tZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdpdGggdGhlIGRlc3RpbmF0aW9uIGhvc3Q/IEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciBhcmVhcyB3aGVyZSB0aGUgbWlncmF0aW9uIHByb2Nlc3MgbWlnaHQgYmxvY2sgb3IgYmVjb21lIGEgYm90dGxlbmVjay4gT25jZSBJIHVuZGVyc3RhbmQgdGhlICp3aGF0KiBvZiB0aGUgZnVuY3Rpb24sIEknbGwgbmVlZCB0byBtb3ZlIG9udG8gdGhlICp3aHkqLCB0cmFjaW5nIGNhbGxzIGludG8gb3RoZXIgZnVuY3Rpb25zLCB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3csIGFuZCBmaWd1cmluZyBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBLVk0gaW1wbGVtZW50YXRpb24uIEluIHRoZSBlbmQsIEkgbmVlZCB0byBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWlncmF0aW9uIHBpcGVsaW5lLCBhbmQgaG93IGl0cyBjb3JyZWN0IGJlaGF2aW9yIGVuc3VyZXMgYSBzbW9vdGggYW5kIGNvbnNpc3RlbnQgbWlncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQyLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MDIuNjI1MzkwMTA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzU5OTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTc3PXN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExODktICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExOTA6c3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTkxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjE5LSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzIGFuZFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIwOiAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbi5cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMS0gKi9cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjMzPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI0MC1cXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI0MTpcXHRcXHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI0Mi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MDIuNjgyOTk1NTY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTk1MzEzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipBbmFseXppbmcgczM5MCBLVk0gTWlncmF0aW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBzdGF0aWMgbmF0dXJlIG9mIGEgZmV3IGtleSBjb21wb25lbnRzOiBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGhhbmRsZV9zc2tlYCwgYW5kIGBoYW5kbGVfcGZtZmAuIFRoZWlyIHN0YXRpYyBkZXNpZ25hdGlvbiBpcyBzaWduaWZpY2FudDsgaXQgcmVzdHJpY3RzIHRoZWlyIHNjb3BlIHdpdGhpbiB0aGUga2VybmVsIG1vZHVsZSwgd2hpY2ggSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGVuIEknbSBkZWJ1Z2dpbmcgb3IgdHJhY2luZyBhbnkgbWlncmF0aW9uLXJlbGF0ZWQgaXNzdWVzLiBJIGFsc28gbm90ZSB0aGF0IGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgaW50ZW5kZWQgZm9yIGJyb2FkZXIgdXNlLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBpdCdzIGEgY3JpdGljYWwgdXRpbGl0eS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG1pZ2h0IHJlbHkgb24gaXQuIE15IG5leHQgc3RlcD8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGFyY2gvczM5MC9rdm0vZGF0LmNgIHRvIGV4YW1pbmUgYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYCwgYXMgdGhleSBhcmUgY3JpdGljYWwgY29tcG9uZW50cyBmb3IgREFUIG9wZXJhdGlvbnMgYW5kIGl0IGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGNvbnRleHQgb2YgdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjA2Ljc4MjUzMDA3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5NDIyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF0X3BlZWtfY21tYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2RhdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZGF0LmM9MTE2OT1zdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3Ni1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNzc6c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3OC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExODktXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTkwOnN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTk4LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5OTppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMC17XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjAxLVxcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0ge1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMjpcXHRcXHQucHRlX2VudHJ5ID0gX19kYXRfcGVla19jbW1hX3B0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDM6XFx0XFx0LnBtZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDQ6XFx0XFx0LnB1ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDU6XFx0XFx0LnA0ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDY6XFx0XFx0LnBnZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDctXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MDYuODM3NDc4MDc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTI0MzUyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIGFuZCBQb3RlbnRpYWwgVmlzaWJpbGl0eSBvZiBEYXRhIEFjY2VzcyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZGF0X3BlZWtfY21tYWAuIFRoZSBmYWN0IHRoYXQgaXQncyBleHBvcnRlZCwgb3IgYXQgbGVhc3Qgbm90IHN0YXRpYywgaW1tZWRpYXRlbHkgcmFpc2VzIG15IGFudGVubmEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBpdHMgZGF0YS4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBkYXRfZ2V0X2NtbWFgIC0gdGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjA5Ljg4OTkxNTYzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NjY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF0X2dldF9jbW1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vZGF0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9kYXQuYz0xMTU5PWxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE2OC1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNjk6c3RydWN0IGRhdF9nZXRfY21tYV9zdGF0ZSB7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTcwLVxcdGdmbl90IHN0YXJ0O1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMTc3PXN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE3OTpcXHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlICpzdGF0ZSA9IHdhbGstXFx1MDAzZXByaXY7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTgwLVxcdHVuaW9uIHBnc3RlIHBnc3RlO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMTkwPXN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MjpcXHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlICpzdGF0ZSA9IHdhbGstXFx1MDAzZXByaXY7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkzLVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYz0xMTk5PWludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDctXFx0fTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDg6XFx0c3RydWN0IGRhdF9nZXRfY21tYV9zdGF0ZSBzdGF0ZSA9IHsgLnZhbHVlcyA9IHZhbHVlcywgfTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDktXFx0aW50IHJjO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjE2LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIxNzpzdGF0aWMgbG9uZyBfX2RhdF9nZXRfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMTgte1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIxOTpcXHRzdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlICpzdGF0ZSA9IHdhbGstXFx1MDAzZXByaXY7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjIwLVxcdHVuaW9uIHBnc3RlIHBnc3RlO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjQ0LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTI0NTppbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjQ2LXtcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyNDc6XFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBfX2RhdF9nZXRfY21tYV9wdGUsIH07XFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjQ4OlxcdHN0cnVjdCBkYXRfZ2V0X2NtbWFfc3RhdGUgc3RhdGUgPSB7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjQ5LVxcdFxcdC5yZW1haW5pbmcgPSByZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjA5Ljk0NDM4NjgzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk2NjY5NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipBbmFseXppbmcgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGVzZSBmdW5jdGlvbnMsIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAuIFRoZSBrZXkgdGhpbmcgdG8gcmVtZW1iZXIgaXMgdGhhdCB0aGV5J3JlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGNoYW5nZXMgaG93IEknbSB0aGlua2luZyBhYm91dCB0aGVpciBzY29wZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlIHRoZXNlIGNvdWxkIGJlIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBmcm9tLiBJdCBzdWdnZXN0cyBhIG1vcmUgZ2xvYmFsIHNjb3BlIHRoYW4gc29tZXRoaW5nIGludGVybmFsIHRvIGEgcGFydGljdWxhciBtb2R1bGUuIEkgaGF2ZSB0byB0cmFjZSBob3cgdGhlIGRhdGEgaXMgYmVpbmcgcGFzc2VkIGFuZCBtb2RpZmllZCBhY3Jvc3MgbXVsdGlwbGUgY29tcGlsYXRpb24gdW5pdHMuIFdpdGggdGhlc2UgZnVuY3Rpb25zIGJlaW5nIG5vbi1zdGF0aWMsIEknbSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgYW5kIGlmIHRoZXkgbWlnaHQgYmUgY2FsbGVkIGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBPa2F5LCBsZXQncyB0dXJuIG15IGF0dGVudGlvbiBub3cgdG8gdGhlIGZ1bmN0aW9uIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLiBNeSBuZXh0IGxpbmUgb2YgaW5xdWlyeSBoYXMgdG8gYmUgYWJvdXQgaG93IHRoYXQgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggb3IgdXNlcyBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjEzLjY0MTA1ODUzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4ODMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vZ21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZ21hcC5jPTExOTE9c3RhdGljIHN0cnVjdCBnbWFwICpnbWFwX2ZpbmRfc2hhZG93KHN0cnVjdCBnbWFwICpwYXJlbnQsIHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjA0LSNkZWZpbmUgQ1JTVF9UQUJMRV9QQUdFUyAoX0NSU1RfVEFCTEVfU0laRSAvIFBBR0VfU0laRSlcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjA1OnN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwge1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMDYtXFx0dW5zaWduZWQgbG9uZyBzZXE7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjA5LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyMTA6c3RhdGljIGlubGluZSBpbnQgX19nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZyxcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjExOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgKmNvbnRleHQpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIxMi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjQyLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNDM6c3RhdGljIGlubGluZSBpbnQgX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnLFxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgKmNvbnRleHQpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI0NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjU2LVxcdFxcdFxcdHJldHVybiByYztcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjU3OlxcdFxcdHJjID0gX19nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIHNnLCBjb250ZXh0KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjU4LVxcdFxcdHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNjMtXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI2NDpzdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNjUte1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNjY6XFx0c3RydWN0IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCBjb250ZXh0ID0ge307XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI2Ny1cXHR1bmlvbiBhc2NlIGFzY2UgPSBzZy1cXHUwMDNlZ3Vlc3RfYXNjZTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNzktXFx0aWYgKCFyYylcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjgwOlxcdFxcdHJjID0gX2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChtYywgc2csIFxcdTAwMjZjb250ZXh0KTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjgxLVxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jPTEzMDQ9c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnBhcmVudCxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNTQtXFx0LyogUHJvdGVjdCB3aGlsZSBpbnNlcnRpbmcsIHByb3RlY3RzIGFnYWluc3QgaW52YWxpZGF0aW9uIHJhY2VzLiAqL1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEzNTU6XFx0cmMgPSBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIG5ldyk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM1Ni1cXHRpZiAocmMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MTMuNjk0OTQ4MDMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTQ5MjE0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHMzOTAgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIHMzOTAgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBjaGFuZ2VzLiBGaXJzdCBvYnNlcnZhdGlvbjogYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUuIEhvd2V2ZXIsIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYCBhcmUgKmV4cG9ydGVkKiwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhlbSBhcyBwb3RlbnRpYWwgdGFyZ2V0cy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgLCBhcmUgZGVmaW5lZC4gQWgsIHRoZXkncmUgaW5saW5lIGZ1bmN0aW9ucy4gVGhpcyBnaXZlcyBtZSBhIGJldHRlciBmZWVsIGZvciBob3cgdGhleSBtaWdodCBiZSB1c2VkIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIHRvdWNoIGJvdGggS1ZNIGFuZCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IG9uIHMzOTAuIEdpdmVuIHRoYXQgY29tYmluYXRpb24sIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGFuZCBhIGZ1enppbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGV4cG9ydGVkIHN5bWJvbHM6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gVGhleSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIGluIHRoZSBjb2RlYmFzZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBMZXQncyBjaGVjayBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCBxdWlja2x5LiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGZvciBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgcmVsZXZhbnQsIHNpbmNlIG1pZ3JhdGlvbiBjYW4gaW52b2x2ZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyOTAsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MTkuNjQ5ODcxNjk0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxMjg4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMjI9c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIzMi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTIzMzpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjM0LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xOTc4PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTE5OTUtXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT046XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjE5OTY6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihrdm0sIGF0dHIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xOTk3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzoxOS43NzUwMDUzOTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxOTI4OTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0gczM5MCBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCBzbyBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50IGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2hlbiB3ZSdyZSBzZXR0aW5nIGF0dHJpYnV0ZXMgZm9yIHRoZSB2aXJ0dWFsIG1hY2hpbmUgb24gczM5MC4gVG8gZG8gdGhhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBjb2RlLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBoYW5kbGVycyBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucy5cblxuTGV0IG1lIGNoZWNrIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBmaWxlIHdpbGwgY29udGFpbiB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBoYW5kbGluZyBzZW5zaXRpdmUgaW5zdHJ1Y3Rpb25zIG9yIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSSBzcGVjaWZpY2FsbHkgd2FudCB0byB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBhbmQgYmVoYXZpb3Igb2YgaGFuZGxlcnMgZm9yIFNlY3VyZSBTZXJ2aWNlIEtleSBFbmFibGVtZW50IChgaGFuZGxlX3Nza2VgKSBhbmQgUGFnZSBGYXVsdCBNZWFzdXJlbWVudCBGYWNpbGl0eSAoYGhhbmRsZV9wZm1mYCkuIFRoZXNlIGFyZSBjcml0aWNhbCBmdW5jdGlvbmFsaXRpZXMgb24gczM5MCBhbmQgYXJlIGxpa2VseSBtYW5hZ2VkIGF0IHRoaXMgbGV2ZWwuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBhdHRyaWJ1dGUgc2V0dGluZyBpbnRlcmFjdHMgd2l0aCB0aGVzZSBoYW5kbGVycyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjI0Ljc5NDI5ODM1NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5NTMyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3Nza2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmM9Mjg5PXN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzIyLSNkZWZpbmUgU1NLRV9NQiAweDFcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzozMjM6c3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzI0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OD1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MC1cXHRjYXNlIDB4MmI6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTgxOlxcdFxcdHJldHVybiBoYW5kbGVfc3NrZSh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05ODItXFx0Y2FzZSAweDJjOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzoyNC44NzEyNTcxODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NDU5MTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEIyIEluc3RydWN0aW9uIEhhbmRsZXIqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBga3ZtX3MzOTBfaGFuZGxlX2IyYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkgZW50cnkgcG9pbnQsIHRoZSBzdGFydGluZyBsaW5lIGZvciBwcm9jZXNzaW5nIGEgQjIgaW5zdHJ1Y3Rpb24gd2l0aGluIHRoZSBLVk0vczM5MCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIHBvaW50IHdoZXJlIHRoZSBoeXBlcnZpc29yIGludGVyY2VwdHMgYW5kIGJlZ2lucyB0byBpbnRlcnByZXQgYW5kIGVtdWxhdGUgYSBCMiBpbnN0cnVjdGlvbiBlbmNvdW50ZXJlZCBieSB0aGUgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSXQncyB0aGUgYmVnaW5uaW5nIG9mIGEgY29tcGxleCBkYW5jZSBiZXR3ZWVuIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSwgd2hlcmUgd2UncmUgYWltaW5nIHRvIGZhaXRoZnVsbHkgZXhlY3V0ZSB0aGlzIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGh5cGVydmlzb3Igd29ya3MgaW4gdHJhbnNsYXRpbmcgZ3Vlc3QgaW5zdHJ1Y3Rpb25zIHRvIGhvc3QgYWN0aXZpdHkuIEZyb20gaGVyZSwgYWxsIHNvcnRzIG9mIHRoaW5ncyBjYW4gaGFwcGVuLCBhbmQgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIHRvIHRyb3VibGVzaG9vdCwgYW5hbHl6ZSwgb3IgaW1wcm92ZSB0aGUgaGFuZGxpbmcgb2YgdGhpcyBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MjguMTY1ODUwNjAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI2NTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfcGZtZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz0xMDE2PXN0YXRpYyBpbnQgaGFuZGxlX2Vwc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTA0NC1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMDQ1OnN0YXRpYyBpbnQgaGFuZGxlX3BmbWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEwNDYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4Mj1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTMtXFx0Y2FzZSAweGFmOlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTQ6XFx0XFx0cmV0dXJuIGhhbmRsZV9wZm1mKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTUtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6MjguMjIxMTIxOTUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzI1NzAxNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBzMzkweCBLVk0gRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGBrdm1fczM5MF9oYW5kbGVfYjlgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHdlJ3JlIGNvbmNlcm5lZCB3aXRoLiBUaGF0J3Mgb3VyIGp1bXBpbmctb2ZmIHBvaW50LiBOb3csIHRvIG5hcnJvdyB0aGluZ3MgZG93biwgSSdtIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIHNwZWNpZmljIHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgZGF0YSBhZGRyZXNzIHRyYW5zbGF0aW9uIChEQVQpIG1lY2hhbmlzbSBhbmQgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LiBJJ3ZlIGdvdCBhIHByZWxpbWluYXJ5IGxpc3Q6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLCBga3ZtX3MzOTBfaGFuZGxlX2IyYCwgYW5kLCBvZiBjb3Vyc2UsIGBrdm1fczM5MF9oYW5kbGVfYjlgIGl0c2VsZiwgYW5kIGFsc28gYGt2bV9zMzkwX3ZtX3NldF9hdHRyYC5cblxuSG93ZXZlciwgb24gc2Vjb25kIHRob3VnaHQsIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YCBhcmUgKnZlcnkqIGdlbmVyaWMuIFRoZXkgaGFuZGxlIGEgd2lkZSByYW5nZSBvZiBpbnN0cnVjdGlvbnMsIHNvIHRoZXkncmUgcHJvYmFibHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gbmFycm93IGRvd24gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucywgbGlrZSB0aGUgREFUIGFuZCBQVEUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLCBzZWVtIGxpa2UgYSBtdWNoIGJldHRlciB0YXJnZXQgZm9yIGluaXRpYWwgaW52ZXN0aWdhdGlvbi5cblxuU28sIEknbGwgcmV2aXNlIG15IHN0cmF0ZWd5IGFuZCBmb2N1cyBvbiBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIEJlZm9yZSBJIGRlbHZlIGZ1cnRoZXIsIHRob3VnaCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRob3NlIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBzeW1ib2xzLCBvciBpZiB0aGV5J3JlIHNpbXBseSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEtWTSBtb2R1bGUuIFRoYXQgd2lsbCBpbXBhY3QgaG93IGVhc2lseSBJIGNhbiBhbmFseXplIHRoZWlyIGNyb3NzLXJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcm9sZSBpbiB0aGUgb3ZlcmFsbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzozOS45NDY4MjgyMTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTQwNzYzNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2RhdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzo0MC4xNTYyNDMwNDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyNjQzMDU4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRGF0YSBNdXRhYmlsaXR5IGluIFJlbGF0aW9uIHRvIEV4cG9ydGVkIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgZGF0YSBpbiBxdWVzdGlvbiBpc24ndCBleHBsaWNpdGx5IG1hcmtlZCBmb3IgZXh0ZXJuYWwgYWNjZXNzLCBidXQgaXQncyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AgZWl0aGVyLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGltcGx5aW5nIHBvdGVudGlhbCBmb3IgbW9kaWZpY2F0aW9uIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBzY29wZSwgd2hpY2ggY291bGQgYmUgcHJvYmxlbWF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBub24tc3RhdGljIGJ1dCBub24tZXhwb3J0ZWQgc3RhdHVzLlxuXG5MZXQncyBkaWcgaW50byB0aGF0IGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgZnVuY3Rpb24uIFRoaXMgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpbnZlc3RpZ2F0aW5nIGhvdyBhbmQgd2hlcmUgdGhpcyBkYXRhIG1pZ2h0IGJlIG1vZGlmaWVkLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBpdHMgZGVmaW5pdGlvbiwgaXRzIGNhbGwgc2l0ZXMsIGFuZCBlc3BlY2lhbGx5IGl0cyBhY2Nlc3MgcGF0dGVybnMuIElzIGl0IGNoYW5naW5nIHRoZSBkYXRhIGRpcmVjdGx5PyBJcyBpdCBpbmRpcmVjdCB2aWEgcG9pbnRlcnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBuZWVkIGZ1cnRoZXIgc2NydXRpbnk/IFVsdGltYXRlbHksIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gdGhpcyBub24tZXhwb3J0ZWQsIGJ1dCBub3Qtc3RhdGljIHZhcmlhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTExNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjQ0LjA4MjY3NTg4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4NDI3NjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9nbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjQ0LjE1MDUyNjQzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAxODg3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIHdoYXQgd2VyZSB3ZSBqdXN0IGxvb2tpbmcgYXQ/IFJpZ2h0LCB0aGUgZXhwb3J0IHN5bWJvbHMuIEkgcmVtZW1iZXIgc2VlaW5nIGBFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQpYCBpbiB0aGF0IGRpZmYsIHNvIHRoYXQgb25lICppcyogZXhwb3J0ZWQuIEdvb2QsIGdvb2QuIEJ1dCBJIGFsc28gc2F3IHNvbWV0aGluZyBlbHNlIHdhcyAqbm90KiBleHBvcnRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuXG5cbioqQ2hlY2tpbmcgRXhwb3J0ZWQgU3ltYm9scyoqXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgZXhwb3J0ZWQuIFRoYXQncyBhIGNydWNpYWwgZnVuY3Rpb24sIHNvIEkgc2hvdWxkIGJlIHN1cmUuIEknbGwgbmVlZCB0byBnbyBhbmQgY2hlY2sgdGhlIGV4cG9ydCBzeW1ib2xzIHRvIG1ha2Ugc3VyZS4gSSdsbCBoYXZlIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGBFWFBPUlRfU1lNQk9MYCBvciBgRVhQT1JUX1NZTUJPTF9HUExgIGRlZmluaXRpb24gZm9yIGl0LiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoYXQncyB2aXNpYmxlIGV4dGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDExLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NDcuNDUyNDE3MTQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU4OTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzA4Nz12b2lkIGt2bV9hcmNoX2NyeXB0b19zZXRfbWFza3Moc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICphcG0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEyMi19XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMjM6RVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2FyY2hfY3J5cHRvX3NldF9tYXNrcyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMjQtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEzNz12b2lkIGt2bV9hcmNoX2NyeXB0b19jbGVhcl9tYXNrcyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1MC19XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNTE6RVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE1Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NDcuNTIxMDE0NTcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDE4MTgxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIGZ1bmN0aW9ucyBJIGhhdmUgaW4gbWluZCBhcmVuJ3QgZXhwbGljaXRseSAqZXhwb3J0ZWQqLCBidXQgdGhhdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGJsb2NrIHRoZWlyIHVzZWZ1bG5lc3MgYXMgZm9jdXMgc3ltYm9scy4gSW4gZmFjdCwgdGhpbmtpbmcgYWJvdXQgaXQsIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgYXJlIGFjdHVhbGx5IHF1aXRlIGdvb2QgY2FuZGlkYXRlcyBmb3IgdGhhdCByb2xlLiBUaGVpciBiZWhhdmlvciBpcyBjb3JlIHRvIHRoZSBhcmVhIG9mIGludGVyZXN0LiBBbmQsIGV4dGVuZGluZyB0aGF0IHRob3VnaHQsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgYWxzbyBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlLiBPaCwgYW5kIEkgc2hvdWxkbid0IGZvcmdldCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gVGhhdCBvbmUgY291bGQgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0IHRvby5cblxuTm93LCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgcGF0aCwgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBJJ20gb3Zlcmxvb2tpbmcuIExldCBtZSBjaGVjay4uLiBqdXN0IGBDT05GSUdfS1ZNYCBzZWVtcyB0byBiZSB0aGUgb25seSByZWxldmFudCBvbmUuXG5cbldhaXQuLi4gaXMganVzdCBgQ09ORklHX0tWTWAgKnN1ZmZpY2llbnQqPyBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBJIG1pZ2h0IGJlIG1pc3Npbmcgc29tZXRoaW5nIHRoZXJlLiBCZXN0IHRvIGRvdWJsZS1jaGVjay4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYGFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMgSSdtIG5vdCBhY2NvdW50aW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NTEuOTIyODM0Njk5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1OTYwODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjEzOjUyLjAyNTQzNzY2NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI5NDg2MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGhhdmluZyB0aGVzZSB0aG91Z2h0czpcblxuKipHTUFQIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5IbW0sIEkgbmVlZCB0byBsb29rIGludG8gdGhpcy4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHNldCBvZiBwYXJhbWV0ZXJzLCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBmb3IgR01BUD8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBpbiB0ZXJtcyBvZiBpdHMgYmVoYXZpb3Igb3IgaXRzIGluaXRpYWwgc2V0dXAuIEknbSBvcGVyYXRpbmcgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBleGlzdHMsIGNvbnNpZGVyaW5nIGhvdyBjb21wbGV4IHRoZSBzeXN0ZW0gaXMuIEJldHRlciB0byBkb3VibGUtY2hlY2sgbm93IHRoYW4gcnVuIGludG8gaXNzdWVzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzo1NS4wNTQ5MjU4NTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjkyMzI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJHTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNjoxMzo1NS4xMjYyMzAyNTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMDg5OTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgUzM5MCBBcmNoaXRlY3R1cmUncyBNZW1vcnkgTWFuYWdlbWVudCBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgd2hlcmUgc2hvdWxkIEkgc3RhcnQgbG9va2luZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaXMgY29uZmlndXJlZCBmb3IgdGhlIFMzOTAgYXJjaGl0ZWN0dXJlPyBUaGUgbG9naWNhbCBmaXJzdCBtb3ZlLCBlc3BlY2lhbGx5IHdpdGggbXkgZXhwZXJpZW5jZSwgaXMgdG8gZGlnIGludG8gdGhlIGBhcmNoL3MzOTAvbW0vTWFrZWZpbGVgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBwb2ludCBmb3Igb3JjaGVzdHJhdGluZyB0aGUgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgb2YgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHNvdXJjZSBmaWxlcyBmb3IgdGhpcyBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkaXJlY3RpdmVzIGZvciBvYmplY3QgZmlsZXMsIGluY2x1ZGUgcGF0aHMsIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbiBmbGFncy4gSG9wZWZ1bGx5IGl0J3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgZGVmaW5lcyB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGNvcmUgTU0gY29tcG9uZW50cy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgd2FpdGluZyB0byBiZSB1bmNvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NTguNjM3MTMyMDQ2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTIwMjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9tbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1BGQVVMVClcXHRcXHQrPSBwZmF1bHQub1xcbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xNC1cXG5hcmNoL3MzOTAvbW0vTWFrZWZpbGU6MTU6b2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX0tWTSkpXFx0Kz0gZ21hcF9oZWxwZXJzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTM6NTguNjk2MzM5NjE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NzA0MDA1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyBgZ21hcF9oZWxwZXJzLm9gIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IOKAkyBzZWVtcyBsaWtlIGBDT05GSUdfS1ZNYCBpcyB0aGUgb25seSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBoZXJlLlxuXG5MZXQncyBzZWUsIHRoZSBzeXN0ZW0gaGFzIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBhcyBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZzpcblxuKiAgIGBkYXRfcGVla19jbW1hYFxuKiAgIGBkYXRfZ2V0X2NtbWFgXG4qICAgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YFxuKiAgIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgXG4qICAgYGt2bV9zMzkwX2hhbmRsZV9iMmBcbiogICBga3ZtX3MzOTBfaGFuZGxlX2I5YFxuXG5IbW0sIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YC4uLiB0aG9zZSBhcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHJpZ2h0PyBUaGV5IG1pZ2h0IGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHVuZGVyIHNwZWNpZmljIHdvcmtsb2Fkcywgc28gdGhleSBjb3VsZCBiZSBob3QgcGF0aHMgaWYgY2VydGFpbiBpbnN0cnVjdGlvbnMgYXJlIGZyZXF1ZW50bHkgZXhlY3V0ZWQgYnkgdGhlIGd1ZXN0LiBCdXQsIHRoZXkncmUgdGllZCB0byAqdmVyeSogc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLiBJJ20gZ29pbmcgdG8gbGVhbiB0b3dhcmRzIHVzaW5nIHRoZSBgZGF0XypgIGFuZCBgZ21hcF8qYCBzeW1ib2xzIGJlY2F1c2UgdGhleSBzZWVtIG1vcmUgZ2VuZXJhbC5cblxuSSB0aGluayB3ZSBjYW4gbmFycm93IHRoaXMgZG93bi4gTGV0J3Mgc3RhcnQgd2l0aCBqdXN0IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gVGhlbiwgSSdtIGdvaW5nIHRvIGFkZCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGFzIHdlbGwsIGJlY2F1c2UgaXQncyB0aGUgZW50cnkgcG9pbnQgZm9yIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLiBUaGF0IHNvdW5kcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCBpcyBhIGdvb2QgY2hvaWNlLiBBaCB5ZXMsIGl0IGhhbmRsZXMgYWxsIHRoZSBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgaW9jdGxzIGZvciB0aGUgVk0uIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBlbnRyeSBwb2ludCwgYW5kIHdvcnRoIHRoZSBlZmZvcnQgdG8gY2hlY2suXG5cbkZpbmFsbHksIEknbGwgcXVpY2tseSBjaGVjayBpZiBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgIGFyZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLi4uanVzdCB0byBzZWUgaG93IGJyb2FkIHRoZSBhdHRhY2sgc3VyZmFjZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTQ6MDcuMTY2NzQyNzg1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUyODcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXRfcGVla19jbW1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZGF0LmM9MTE2OT1zdHJ1Y3QgZGF0X2dldF9jbW1hX3N0YXRlIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3Ni1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExNzc6c3RhdGljIGxvbmcgX19kYXRfcGVla19jbW1hX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3OC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExODktXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTkwOnN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTk4LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5OTppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMC17XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjAxLVxcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0ge1xcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMjpcXHRcXHQucHRlX2VudHJ5ID0gX19kYXRfcGVla19jbW1hX3B0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDM6XFx0XFx0LnBtZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDQ6XFx0XFx0LnB1ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDU6XFx0XFx0LnA0ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDY6XFx0XFx0LnBnZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDctXFx0fTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0Lmg9NTUxPWxvbmcgZGF0X3Jlc2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydF9nZm4pO1xcbmFyY2gvczM5MC9rdm0vZGF0Lmg6NTUyOmludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpO1xcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTUzLWludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsIGF0b21pYzY0X3QgKnJlbSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjIyNT1zdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyNTctXFx0XFx0aWYgKHBlZWspXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIyNTg6XFx0XFx0XFx0cmV0ID0gZGF0X3BlZWtfY21tYShhcmdzLVxcdTAwM2VzdGFydF9nZm4sIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBcXHUwMDI2YXJncy1cXHUwMDNlY291bnQsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyNTktXFx0XFx0XFx0XFx0XFx0ICAgIHZhbHVlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjE0OjA3LjIyODI3NjU4M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3NzkzMDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBDTU1BIEJpdCBSZXRyaWV2YWwgaW4gS1ZNL3MzOTAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgc2VlIGl0IGNhbGxzIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAuICBUaGF0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmZXRjaGluZyB0aGUgQ3VycmVudCBNYWNoaW5lIE1lbW9yeSBBZGRyZXNzIChDTU1BKSBiaXRzLCBvciBhdCBsZWFzdCBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJldHJpZXZhbCBwcm9jZXNzLiBTbywgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGJpdCBmZXRjaGluZyBpcyBvcmNoZXN0cmF0ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGZsb3cgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzYxLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTQ6MzcuMzA2MjEwMTk1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwMDcyNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfZ2V0X2NtbWFfYml0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIxNTU9c3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjIyNC0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjIyNTpzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMjI2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI4NjM9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzMtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjkzNDpcXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNS1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE2OjE0OjM3LjQ0MTIyNjA3MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzY5MTQxMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIHRoZSBsb2dpYy4gSXQgbG9va3MgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gY2FsbHMgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgLiAgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgIGZlZWxzIGxpa2UgYSBnb29kIGtleSBzeW1ib2wgdG8gZm9jdXMgb24uIExldCBtZSBxdWlja2x5IHN1bW1hcml6ZSB0aGUgcmVsYXRlZCBmdW5jdGlvbiBuYW1lcyBJJ3ZlIHB1bGxlZCBvdXQ6IGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AsIGFuZCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCBhbmQgZ2l2ZW4gdGhhdCBLVk0gaXMgZW5hYmxlZCwgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1vZGlmeWluZyB0aGUgczM5MCBNTVUgYW5kIGdtYXAgaW1wbGVtZW50YXRpb24uIFRoZSBwcmltYXJ5IGdvYWwgc2VlbXMgdG8gYmUgcmVzb2x2aW5nIGlzc3VlcyB3aXRoIENNTUEgZGlydHkgcGFnZSB0cmFja2luZyBkdXJpbmcgVk0gbWlncmF0aW9uIGFuZCBob3cgdGhlIHVudXNlZCBiaXQgaXMgaGFuZGxlZCBpbiB0aGUgcGFnZSB0YWJsZS4gVGhlc2UgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjaGFuZ2VzIGltcGFjdGluZyByZWFjaGFibGUgS1ZNIGNvZGUgb24gczM5MC5cblxuSnVzdCB0byBjb25maXJtLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuIFl1cCwgSSBzYXcgaXQgaW4gYGt2bS1zMzkwLmNgLiBBbHNvLCBjb25maXJtaW5nIGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYCBpcyBhbHNvIHRoZSByaWdodCBmdW5jdGlvbiBuYW1lLiBPa2F5LCBJIHRoaW5rIHRoYXQncyBzdWZmaWNpZW50IGFuYWx5c2lzLiBMZXQncyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQzMywiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTY6MTQ6NDQuMjEwMzcwNjg4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3NTIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhdF9wZWVrX2NtbWFcIixcbiAgICBcImRhdF9nZXRfY21tYVwiLFxuICAgIFwiZ21hcF9zZXRfY21tYV9hbGxfZGlydHlcIixcbiAgICBcImdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZFwiLFxuICAgIFwia3ZtX3MzOTBfZ2V0X2NtbWFfYml0c1wiLFxuICAgIFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBzMzkwIE1NVSBhbmQgZ21hcCBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBpc3N1ZXMgd2l0aCBDTU1BIChDaGFubmVsIE1lYXN1cmVtZW50IE1lbW9yeSBBY2Nlc3MpIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZHVyaW5nIFZNIG1pZ3JhdGlvbiwgYW5kIHBhZ2UgdGFibGUgdW51c2VkIGJpdCBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGNvZGUgb24gczM5MC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5XCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIixcbiAgICBcImt2bV9zMzkwX2dldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gczM5MCBNTVUgYW5kIGdtYXAgbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgaXNzdWVzIHdpdGggQ01NQSAoQ2hhbm5lbCBNZWFzdXJlbWVudCBNZW1vcnkgQWNjZXNzKSBkaXJ0eSBwYWdlIHRyYWNraW5nIGR1cmluZyBWTSBtaWdyYXRpb24sIGFuZCBwYWdlIHRhYmxlIHVudXNlZCBiaXQgaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBjb2RlIG9uIHMzOTAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[1] Phase: Succeeded StartedAt: 2026-06-19 16:16:12 +0000 UTC FinishedAt: 2026-06-19 16:16:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-19 16:16:12 +0000 UTC FinishedAt: 2026-06-19 16:16:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2] Phase: Succeeded StartedAt: 2026-06-19 16:16:12 +0000 UTC FinishedAt: 2026-06-19 17:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-19 16:16:12 +0000 UTC FinishedAt: 2026-06-19 17:19:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-19 16:16:12 +0000 UTC FinishedAt: 2026-06-19 16:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:16:12 +0000 UTC FinishedAt: 2026-06-19 16:16:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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-workflows8qhb/series-workflows8qhb-convert-artifact-721146459/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-19 16:16:22 +0000 UTC FinishedAt: 2026-06-19 16:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:16:22 +0000 UTC FinishedAt: 2026-06-19 16:42:44 +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:*94f500c7-4dd3-4005-aa81-c64f1749a7dc,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-workflows8qhb/series-workflows8qhb-convert-artifact-721146459/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": "483fa25e-9806-43a0-912b-721d9764ec80", "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-workflows8qhb/series-workflows8qhb-build-action-1893961625/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:16:22 +0000 UTC FinishedAt: 2026-06-19 16:41:59 +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:*94f500c7-4dd3-4005-aa81-c64f1749a7dc,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-workflows8qhb/series-workflows8qhb-convert-artifact-721146459/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": "483fa25e-9806-43a0-912b-721d9764ec80", "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-workflows8qhb/series-workflows8qhb-build-action-1893961625/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-19 16:42:44 +0000 UTC FinishedAt: 2026-06-19 16:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:42:44 +0000 UTC FinishedAt: 2026-06-19 16:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-19 16:42:44 +0000 UTC FinishedAt: 2026-06-19 16:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:42:44 +0000 UTC FinishedAt: 2026-06-19 16:42:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-workflows8qhb/series-workflows8qhb-convert-artifact-2448098994/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-19 16:42:54 +0000 UTC FinishedAt: 2026-06-19 16:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:42:54 +0000 UTC FinishedAt: 2026-06-19 16:44:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*483fa25e-9806-43a0-912b-721d9764ec80,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-workflows8qhb/series-workflows8qhb-build-action-1893961625/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-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-19 16:45:09 +0000 UTC FinishedAt: 2026-06-19 16:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:45:09 +0000 UTC FinishedAt: 2026-06-19 16:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-19 16:45:09 +0000 UTC FinishedAt: 2026-06-19 17:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:45:09 +0000 UTC FinishedAt: 2026-06-19 17:13:22 +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:*94f500c7-4dd3-4005-aa81-c64f1749a7dc,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-workflows8qhb/series-workflows8qhb-convert-artifact-2448098994/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": "f27f5406-c65f-407a-80ff-8b9a0f196897", "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-workflows8qhb/series-workflows8qhb-build-action-3089627206/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 16:45:09 +0000 UTC FinishedAt: 2026-06-19 17:10:27 +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:*94f500c7-4dd3-4005-aa81-c64f1749a7dc,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-workflows8qhb/series-workflows8qhb-convert-artifact-2448098994/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": "f27f5406-c65f-407a-80ff-8b9a0f196897", "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-workflows8qhb/series-workflows8qhb-build-action-3089627206/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-19 17:13:22 +0000 UTC FinishedAt: 2026-06-19 17:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:13:22 +0000 UTC FinishedAt: 2026-06-19 17:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-19 17:13:22 +0000 UTC FinishedAt: 2026-06-19 17:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:13:22 +0000 UTC FinishedAt: 2026-06-19 17:15:28 +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:*f27f5406-c65f-407a-80ff-8b9a0f196897,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-workflows8qhb/series-workflows8qhb-build-action-3089627206/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-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-19 17:15:40 +0000 UTC FinishedAt: 2026-06-19 17:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:15:40 +0000 UTC FinishedAt: 2026-06-19 17:19:25 +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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"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:*483fa25e-9806-43a0-912b-721d9764ec80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f27f5406-c65f-407a-80ff-8b9a0f196897,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-workflows8qhb/series-workflows8qhb-build-action-1893961625/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-workflows8qhb/series-workflows8qhb-build-action-3089627206/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:15:40 +0000 UTC FinishedAt: 2026-06-19 17:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:15:40 +0000 UTC FinishedAt: 2026-06-19 17:16:18 +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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"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-workflows8qhb/series-workflows8qhb-convert-artifact-2895939591/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:15:40 +0000 UTC FinishedAt: 2026-06-19 17:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-19 17:15:40 +0000 UTC FinishedAt: 2026-06-19 17:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:15:40 +0000 UTC FinishedAt: 2026-06-19 17:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:16:42 +0000 UTC FinishedAt: 2026-06-19 17:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8qhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["dat_peek_cmma","dat_get_cmma","gmap_set_cmma_all_dirty","gmap_helper_try_set_pte_unused","kvm_s390_get_cmma_bits","kvm_s390_vm_set_migration"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f14a0c9e03e4c2e21f86d5104157e672b6449e17","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"c145a0e8-2b36-487a-addd-15034d4cf9ea","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-06-19 17:16:42 +0000 UTC FinishedAt: 2026-06-19 17:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*483fa25e-9806-43a0-912b-721d9764ec80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f27f5406-c65f-407a-80ff-8b9a0f196897,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-workflows8qhb/series-workflows8qhb-build-action-1893961625/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-workflows8qhb/series-workflows8qhb-build-action-3089627206/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-workflows8qhb/series-workflows8qhb-convert-artifact-2895939591/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,}