Name: series-workflowrzg5b Phase: Succeeded StartedAt: 2026-07-17 02:40:22 +0000 UTC FinishedAt: 2026-07-17 08:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[0] Phase: Succeeded StartedAt: 2026-07-17 02:40:22 +0000 UTC FinishedAt: 2026-07-17 03:19:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[0].run-triage Phase: Succeeded StartedAt: 2026-07-17 02:40:22 +0000 UTC FinishedAt: 2026-07-17 03:19:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e22254e9ddd8020130c4b806b6b4aa77b09c2560", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e22254e9ddd8020130c4b806b6b4aa77b09c2560", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX" ], "series_id": "c5018216-cfee-41ae-ba51-df25f51236d4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "vmap_try_huge_pmd", "vmap_try_huge_pud", "vmap_try_huge_p4d", "cpa_collapse_large_pages", "ptdump_walk_pgd", "walk_page_range_debug" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgYW5kIHg4NiBDUEEgKGNoYW5nZSBwYWdlIGF0dHJpYnV0ZSkgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHVzaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNiMDE5MWZhYWM3YTdhMWNiMzk3NTY1YmYxM2NhZTJkNDc3YThmNTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAwMzoxNzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuQEAgLTcsOCAmIzQzOzcsNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0ZHVtcC5oXHUwMDNlXG4gXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gI2lmZGVmIENPTkZJR19QVERVTVBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGEyNWQ4YmVhY2M4MzEwLi5iZDUyZmNhNmU4NzIwYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC00OSw4ICYjNDM7NDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NjQsOCAmIzQzOzE4NjIsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXG4mIzQzO2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90ICp0YWJsZTtcbiBcdHBtZF90IHBtZDtcbkBAIC0xODc3LDI1ICYjNDM7MTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkxMSwzNiAmIzQzOzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHR9XG4gXG4gXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4tXG4tXHQvKlxuLVx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXG4tXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cbi1cdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXG4tXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcbi1cdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xuLVx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcbi1cdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxuLVx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXG4tXHQgKi9cbi1cdHB1ZF9jbGVhcihwdWRwKTtcbi1cdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHBtZHAgPSB0YWJsZTtcbiBcdG5leHQgPSBhZGRyO1xuIFx0ZW5kID0gYWRkciAmIzQzOyBQVURfU0laRTtcbiBcdGRvIHtcbiBcdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4mIzQzO1x0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuIFx0fSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4gXG4mIzQzO1x0cHVkX2NsZWFyKHB1ZHApO1xuJiM0MztcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4gXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4te1xuLVx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xuLVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi19XG4tXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XG5AQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSk7XG4mIzQzO1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICYjNDM7MzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuIFxuIFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xuIFx0XHRwcl93YXJuKFwmIzM0O0NoZWNrZWQgVyYjNDM7WCBtYXBwaW5nczogRkFJTEVELCAlbHUgVyYjNDM7WCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li5kMWU2M2Y3ZDI2N2ZmMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQxMCw3ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbiBcbi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4mIzQzO3N0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGFkZHIsIGVuZDtcbiBcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcbkBAIC00NDIsNiAmIzQzOzQ0MywxOCBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxuJiM0MztcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cbiYjNDM7XHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXG4mIzQzO1x0ICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICYjNDM7NjIxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gREVGSU5FX0dVQVJEKG1tYXBfcmVhZF9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4gXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXG4mIzQzO0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiYjNDM7XHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcbiYjNDM7REVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jXG5AQCAtNjc4LDYgJiM0Mzs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZFxuICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLlxuICAqXG4gICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxuICAqL1xuIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5AQCAtNjkxLDI0ICYjNDM7NjkzLDI4IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdC5ub192bWFcdFx0PSB0cnVlXG4gXHR9O1xuIFxuLVx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xuLVx0aWYgKG1tID09IFx1MDAyNmluaXRfbW0pXG4tXHRcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcbi1cdFx0XHRcdFx0XHQgICAgcGdkLCBwcml2YXRlKTtcbi1cdGlmIChzdGFydCBcdTAwM2U9IGVuZCB8fCAhd2Fsay5tbSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0Lypcbi1cdCAqIFRoZSBtbWFwIGxvY2sgcHJvdGVjdHMgdGhlIHBhZ2Ugd2Fsa2VyIGZyb20gY2hhbmdlcyB0byB0aGUgcGFnZVxuLVx0ICogdGFibGVzIGR1cmluZyB0aGUgd2Fsay4gIEhvd2V2ZXIgYSByZWFkIGxvY2sgaXMgaW5zdWZmaWNpZW50IHRvXG4tXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzXG4tXHQgKiB0aGUgVk1BcyBiZWZvcmUgZG93bmdyYWRpbmcgdG8gYSByZWFkIGxvY2sgYW5kIGFjdHVhbGx5IHRlYXJpbmdcbi1cdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcbi1cdCAqIGJlIGhlbGQuXG4mIzQzO1x0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXG4mIzQzO1x0ICogYWNjb3VudCBmb3IgbXVubWFwKCkgZG93bmdyYWRpbmcgdG8gYW4gbW1hcCByZWFkIGxvY2sgd2hlbiB0ZWFyaW5nXG4mIzQzO1x0ICogZG93biBwYWdlIHRhYmxlcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdoZW4gd2Fsa2luZyBrZXJuZWwgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGFsc28gYmUgaGVsZFxuJiM0MztcdCAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLlxuIFx0ICovXG4gXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogeDg2LCBhcm02NCBwdGR1bXAgYWxsb3cgd2Fsa3Mgb2YgZWZpIG1tJiMzOTtzIGFuZCB4ODYgcHRkdW1wIGFsbG93cyB3YWxrc1xuJiM0MztcdCAqIG9mIGFyYml0cmFyeSBtbSYjMzk7cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXG4mIzQzO1x0ICogY29uY3VycmVudCBrZXJuZWwgcGFnZSB0YWJsZSBmcmVlaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXHUwMDI2d2Fsayk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcbi0tLSBhL21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wdGR1bXAuY1xuQEAgLTE3OCwxMSAmIzQzOzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG4mIzQzO1x0LyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovXG4mIzQzO1x0aWYgKG1tICE9IFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFx1MDAyNmluaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiYjNDM7XG4gXHR3aGlsZSAocmFuZ2UtXHUwMDNlc3RhcnQgIT0gcmFuZ2UtXHUwMDNlZW5kKSB7XG4gXHRcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbiBcdFx0XHRcdCAgICAgIFx1MDAyNnB0ZHVtcF9vcHMsIHBnZCwgc3QpO1xuIFx0XHRyYW5nZSYjNDM7JiM0Mzs7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0bW1hcF93cml0ZV91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRwdXRfb25saW5lX21lbXMoKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li5mNGZhMjI3YThkN2YwNCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zaG1wYXJhbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcdTAwM2VcbkBAIC0xNTgsMTAgJiM0MzsxNTksMjEgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXG4mIzQzO1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWNxdWlyZSB0aGUgbW1hcCByZWFkIGxvY2sgdG8gZXhjbHVkZSBwdGR1bXAsIHdoaWNoIHdhbGtzXG4mIzQzO1x0ICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQ29uY3VycmVudCByZWFkIGxvY2sgaG9sZGVycyBhcmUgc2FmZTogZWFjaCBleGNsdXNpdmVseSBvd25zXG4mIzQzO1x0ICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjNDM7XHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yMTAsMTAgJiM0MzsyMjIsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcdTAwMjZcdTAwMjYgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXG4mIzQzO1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4mIzQzO1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0aWYgKCFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTI2MiwxMCAmIzQzOzI3OSwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFx1MDAyNlx1MDAyNiAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcbiYjNDM7XHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbiYjNDM7XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzQzO1x0XHRpZiAoIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7REVCVUdfV1gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwX3RyeV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3B1ZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3A0ZCYjMzQ7LAogICAgJiMzNDtjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV9yYW5nZV9kZWJ1ZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYjAxOTFmYWFjN2E3YTFjYjM5NzU2NWJmMTNjYWUyZDQ3N2E4ZjUzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTcgMDM6MTc6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaAppbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaApAQCAtNyw4ICYjNDM7Nyw2IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9wdGR1bXAuaCZndDsKIAotREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KICNpZmRlZiBDT05GSUdfUFREVU1QCiAKICNpbmNsdWRlICZsdDtsaW51eC9tbV90eXBlcy5oJmd0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTQ5LDggJiM0Mzs0OSw2IEBACiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1MJQklUKDEpCiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1MJQklUKDIpCS8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovCiAKLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7CiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTsKIApAQCAtMTg2NCw4ICYjNDM7MTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcCkKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaykKJiM0MztpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwdGVfdCAqdGFibGU7CiAJcG1kX3QgcG1kOwpAQCAtMTg3NywyNSAmIzQzOzE4NzQsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAxOwogCX0KIAotCS8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovCiAJdGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKIAlwbWRfY2xlYXIocG1kcCk7CiAJX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7Ci0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpICZhbXA7JmFtcDsgYWNxdWlyZV9tbWFwX2xvY2spIHsKLQkJbW1hcF9yZWFkX2xvY2soJmFtcDtpbml0X21tKTsKLQkJbW1hcF9yZWFkX3VubG9jaygmYW1wO2luaXRfbW0pOwotCX0KLQogCXB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCS8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovCi0JcmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTsKLX0KLQogaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcG1kX3QgKnRhYmxlOwpAQCAtMTkxMSwzNiAmIzQzOzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJfQogCiAJdGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpOwotCi0JLyoKLQkgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXMKLQkgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb24KLQkgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLAotCSAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZQotCSAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhcwotCSAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzCi0JICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsCi0JICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuCi0JICovCi0JcHVkX2NsZWFyKHB1ZHApOwotCV9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpOwotCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkgewotCQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwotCQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JfQotCiAJcG1kcCA9IHRhYmxlOwogCW5leHQgPSBhZGRyOwogCWVuZCA9IGFkZHIgJiM0MzsgUFVEX1NJWkU7CiAJZG8gewogCQlpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKQotCQkJLyoKLQkJCSAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vCi0JCQkgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suCi0JCQkgKi8KLQkJCV9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7CiYjNDM7CQkJcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7CiAJfSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7CiAKJiM0MzsJcHVkX2NsZWFyKHB1ZHApOwomIzQzOwlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTsKIAlwbWRfZnJlZShOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwppbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwpAQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpCiAJbm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpOwogfQogCi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0YXRpY19icmFuY2hfaW5jKCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQlwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTsKLQlzdGF0aWNfYnJhbmNoX2RlYygmYW1wO2FybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci19Ci0KIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMOwpAQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKQogCQl9CiAJfTsKIAotCWFybTY0X3B0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgaW5mby0mZ3Q7bW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsIGluZm8tJmd0O21tLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpCkBAIC0zNjAsNyAmIzQzOzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpCiAJCX0KIAl9OwogCi0JYXJtNjRfcHRkdW1wX3dhbGtfcGdkKCZhbXA7c3QucHRkdW1wLCAmYW1wO2luaXRfbW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsICZhbXA7aW5pdF9tbSwgTlVMTCk7CiAKIAlpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7CiAJCXByX3dhcm4oJiMzNDtDaGVja2VkIFcmIzQzO1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcmIzQzO1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXG4mIzM0OywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGQwMjNhNDBhMWUwMzQ1Li5kMWU2M2Y3ZDI2N2ZmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NjX3BsYXRmb3JtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlZ2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC00MTAsNyAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKQogCiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpOwogCi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kOwogCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDsKQEAgLTQ0Miw2ICYjNDM7NDQzLDE4IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzoKJiM0MzsJICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93bgomIzQzOwkgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuCiYjNDM7CSAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuCiYjNDM7CSAqLwomIzQzOwlzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCAmYW1wO2luaXRfbW0pCiYjNDM7CQlfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKQogewogCXVuc2lnbmVkIGludCBpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosCiYjNDM7CSAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKQomIzQzO0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jCmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li41ZDg3YzYzMmEyNTUwNyAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC02NzgsNiAmIzQzOzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kCiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay4KICAqCiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS4KJiM0MzsgKgomIzQzOyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLgogICovCiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsCkBAIC02OTEsMjQgJiM0Mzs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJLm5vX3ZtYQkJPSB0cnVlCiAJfTsKIAotCS8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi8KLQlpZiAobW0gPT0gJmFtcDtpbml0X21tKQotCQlyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsCi0JCQkJCQkgICAgcGdkLCBwcml2YXRlKTsKLQlpZiAoc3RhcnQgJmd0Oz0gZW5kIHx8ICF3YWxrLm1tKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyoKLQkgKiBUaGUgbW1hcCBsb2NrIHByb3RlY3RzIHRoZSBwYWdlIHdhbGtlciBmcm9tIGNoYW5nZXMgdG8gdGhlIHBhZ2UKLQkgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG8KLQkgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzCi0JICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nCi0JICogZG93biBQVEVzL3BhZ2UgdGFibGVzLiBJbiB3aGljaCBjYXNlLCB0aGUgbW1hcCB3cml0ZSBsb2NrIHNob3VsZAotCSAqIGJlIGhlbGQuCiYjNDM7CSAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0bwomIzQzOwkgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmcKJiM0MzsJICogZG93biBwYWdlIHRhYmxlcy4KJiM0MzsJICoKJiM0MzsJICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkCiYjNDM7CSAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLgogCSAqLwogCW1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7CiYjNDM7CS8qCiYjNDM7CSAqIHg4NiwgYXJtNjQgcHRkdW1wIGFsbG93IHdhbGtzIG9mIGVmaSBtbSYjMzk7cyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3MKJiM0MzsJICogb2YgYXJiaXRyYXJ5IG1tJiMzOTtzLgomIzQzOwkgKgomIzQzOwkgKiBIb3dldmVyLCB0aGV5IGJvdGggbXVzdCBhbHNvIGhvbGQgdGhlIGluaXRfbW0gbG9jayB0byBhY2NvdW50IGZvcgomIzQzOwkgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuCiYjNDM7CSAqLwomIzQzOwltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoJmFtcDtpbml0X21tKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZndDs9IGVuZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCAmYW1wO3dhbGspOwogfQpkaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuYwppbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0Ci0tLSBhL21tL3B0ZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3B0ZHVtcC5jCkBAIC0xNzgsMTEgJiM0MzsxNzgsMTggQEAgdm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQogCiAJZ2V0X29ubGluZV9tZW1zKCk7CiAJbW1hcF93cml0ZV9sb2NrKG1tKTsKJiM0MzsJLyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovCiYjNDM7CWlmIChtbSAhPSAmYW1wO2luaXRfbW0pCiYjNDM7CQltbWFwX3dyaXRlX2xvY2tfbmVzdGVkKCZhbXA7aW5pdF9tbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwogCXdoaWxlIChyYW5nZS0mZ3Q7c3RhcnQgIT0gcmFuZ2UtJmd0O2VuZCkgewogCQl3YWxrX3BhZ2VfcmFuZ2VfZGVidWcobW0sIHJhbmdlLSZndDtzdGFydCwgcmFuZ2UtJmd0O2VuZCwKIAkJCQkgICAgICAmYW1wO3B0ZHVtcF9vcHMsIHBnZCwgc3QpOwogCQlyYW5nZSYjNDM7JiM0Mzs7CiAJfQomIzQzOwomIzQzOwlpZiAobW0gIT0gJmFtcDtpbml0X21tKQomIzQzOwkJbW1hcF93cml0ZV91bmxvY2soJmFtcDtpbml0X21tKTsKIAltbWFwX3dyaXRlX3VubG9jayhtbSk7CiAJcHV0X29ubGluZV9tZW1zKCk7CiAKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NobXBhcmFtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9vd25lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy92bWFsbG9jLmgmZ3Q7CkBAIC0xNTgsMTAgJiM0MzsxNTksMjEgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocG1kX3ByZXNlbnQoKnBtZCkgJmFtcDsmYW1wOyAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKgomIzQzOwkgKiBBY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBleGNsdWRlIHB0ZHVtcCwgd2hpY2ggd2Fsa3MKJiM0MzsJICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLgomIzQzOwkgKgomIzQzOwkgKiBDb25jdXJyZW50IHJlYWQgbG9jayBob2xkZXJzIGFyZSBzYWZlOiBlYWNoIGV4Y2x1c2l2ZWx5IG93bnMKJiM0MzsJICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0yMTAsMTAgJiM0MzsyMjIsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocHVkX3ByZXNlbnQoKnB1ZCkgJmFtcDsmYW1wOyAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCiYjNDM7CQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqLwomIzQzOwlzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTI2MiwxMCAmIzQzOzI3OSwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKQogCQlyZXR1cm4gMDsKIAotCWlmIChwNGRfcHJlc2VudCgqcDRkKSAmYW1wOyZhbXA7ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQotCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFwNGRfcHJlc2VudCgqcDRkKSkKJiM0MzsJCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwogCi0JcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CS8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovCiYjNDM7CXNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSkgewomIzQzOwkJaWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQmIzM5O3MgdHdlYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLiBJdCYjMzk7cyB0b3VjaGluZyBvbiBib3RoIHg4NiBhbmQgYXJtNjQgYXJjaGl0ZWN0dXJlcywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBsb29rLW92ZXIuIEkgc2VlIHRoZXkmIzM5O3JlIHJlbW92aW5nIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBhbmQgcmV2aXNpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBpbiBmdW5jdGlvbnMgbGlrZSBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLCBhbmQgYHB0ZHVtcF93YWxrX3BnZGAuIFRoYXQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGNoYW5nZSBhbHdheXMgd2FycmFudHMgZXh0cmEgc2NydXRpbnkuCgpUaGV5JiMzOTtyZSB1c2luZyBgbW1hcF93cml0ZV9sb2NrKCZhbXA7aW5pdF9tbSlgIGluIGBwdGR1bXBfd2Fsa19wZ2RgIGFuZCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYW5kIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhpcyBgc2NvcGVkX2NvbmRfZ3VhcmRgIHdpdGggYG1tYXBfcmVhZF9sb2NrX3RyeWAgaW4gc2V2ZXJhbCBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgY29uY3VycmVuY3kgaXMgbm93IGhhbmRsZWQgZGlmZmVyZW50bHkgaW4gdGhlc2UgY3JpdGljYWwgdm1hbGxvYyBhcmVhcy4gVGhlc2UgYXJlIGFsbCBjb3JlIGNoYW5nZXMsIGRpcmVjdGx5IGltcGFjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdm1hbGxvYywgc28gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIHRoaXMgaXMgaGlnaCBwcmlvcml0eSBmb3IgdGVzdGluZy4gR2l2ZW4gdGhlIGJyZWFkdGggb2YgdGhlIGltcGFjdCwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0IGhlcmUuCgpMZXQmIzM5O3MgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGFmZmVjdHMuIEkmIzM5O20gZm9jdXNpbmcgb246IGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGB2bWFwX3RyeV9odWdlX3A0ZGAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYW5kIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdXBwb3NlZCB0byB3b3JrIGluIGJvdGggbG9jayBhbmQgbG9ja2xlc3Mgc2NlbmFyaW9zIGFuZCB3aGF0IHNvcnQgb2YgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBDbGVhcmx5LCBgQ09ORklHX1BURFVNUF9DT1JFYCBpcyBpbnZvbHZlZCBiZWNhdXNlIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvZGUgaW4gYG1tL3B0ZHVtcC5jYC4gVG8gZ2V0IHRoaXMgd29ya2luZyBmcm9tIHVzZXJzcGFjZSwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYC4gUGx1cywgYENPTkZJR19ERUJVR19XWGAgd2lsbCBiZSB1c2VmdWwgc2luY2UgaXQgdHJpZ2dlcnMgcHRkdW1wIGF0IGJvb3QuIEFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgZXNzZW50aWFsIHRvIGVuYWJsZSB0aGUgdm1hcCBodWdlIHBhZ2UgbG9naWMgdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gTm93IEkgc2hvdWxkIHF1aWNrbHkgZG8gYSBxdWljayBjb2RlIHNlYXJjaCB0byB2ZXJpZnkgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNldCBpbiB0aGUgcmVsZXZhbnQgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wX3dhbGtfcGdkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTE2PXN0cnVjdCBwdGR1bXBfaW5mbyB7XG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjEtXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDoyMjp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbyk7XG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0yMy0jaWZkZWYgQ09ORklHX0FSTV9QVERVTVBfREVCVUdGU1xuLS1cbmFyY2gvYXJtL21tL2R1bXAuYz0zOTg9c3RhdGljIHZvaWQgd2Fsa19wZ2Qoc3RydWN0IHBnX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuYXJjaC9hcm0vbW0vZHVtcC5jLTQxNC1cbmFyY2gvYXJtL21tL2R1bXAuYzo0MTU6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXG5hcmNoL2FybS9tbS9kdW1wLmMtNDE2LXtcbi0tXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jPTc9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYy0xMC1cbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmM6MTE6XHRwdGR1bXBfd2Fsa19wZ2QobSwgaW5mbyk7XG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jLTEyLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9hcm02NC9tbS9wdGR1bXAuYz0yODY9dm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMxMy1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM6MzE0Olx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMxNS19XG4tLVxuYXJjaC9hcm02NC9tbS9wdGR1bXAuYz0zMzE9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTM1NS1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM6MzU2Olx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTM1Ny1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jPTMzND1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM1MS1cdC8qIFRyYXZlcnNlIGtlcm5lbCBwYWdlIHRhYmxlcyAqL1xuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYzozNTI6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzUzLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zNjg9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM5MS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM6MzkyOlx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM5My1cbi0tXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM1Mz1zdGF0aWMgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGRfbW1faW5mbyAqcGluZm8pXG4tLVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzItXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjM3MzpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIHBpbmZvLVx1MDAzZW1tLCBOVUxMKTtcbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmMtMzc0LX1cbi0tXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM3Nj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmMtMzk5LVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYzo0MDA6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmMtNDAxLVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xODI9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjEwLVx0XHRyZXR1cm4gdHJ1ZTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyMTE6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTItXHRpZiAoc3Qud3hfcGFnZXMpIHtcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI2PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTAtXHRtdXRleF9sb2NrKFx1MDAyNmNwYV9tdXRleCk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUxOlx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUyLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNwYV9tdXRleCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTMwPXN0cnVjdCBzZXFfZmlsZTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMjp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzMtXHRcdFx0XHQgICBib29sIHVzZXIpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM0OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzU6I2RlZmluZSBwdGR1bXBfY2hlY2tfd3ggcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zNi12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTg9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZpbml0X21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MTY9c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTI2PXN0YXRpYyBpbnQgcHRkdW1wX2N1cnVzcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXHRpZiAoY3VycmVudC1cdTAwM2VtbS1cdTAwM2VwZ2QpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6Mjk6XHRcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXHUwMDNlbW0sIHRydWUpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTMwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTM3PXN0YXRpYyBpbnQgcHRkdW1wX2VmaV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzktXHRpZiAoZWZpX21tLnBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0MDpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXHUwMDI2ZWZpX21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00MTY9c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyMi1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyMzpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyNC1cdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1Ny1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1ODpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU5LVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3My1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NDp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc1LXtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NjpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cdTAwM2VwZ2QsIGZhbHNlLCB0cnVlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3Ny19XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Nzk6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVx0XHRcdFx0ICAgYm9vbCB1c2VyKVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4Ni0jZW5kaWZcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ4NzpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBwZ2QsIGZhbHNlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODgtfVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ5MD12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDAtXHRwZ2QgPSBrZXJuZWxfdG9fdXNlcl9wZ2RwKHBnZCk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MDE6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShOVUxMLCBcdTAwMjZpbml0X21tLCBwZ2QsIHRydWUsIGZhbHNlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMi0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDQtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MDU6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDktXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MTA6XHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgSU5JVF9QR0QsIHRydWUsIGZhbHNlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUxMS19XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV8zMi5jPTc1PXZvaWQgX19pbml0IGVmaV9kdW1wX3BhZ2V0YWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfMzIuYy03Ny0jaWZkZWYgQ09ORklHX0VGSV9QR1RfRFVNUFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV8zMi5jOjc4Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFx1MDAyNmluaXRfbW0pO1xuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV8zMi5jLTc5LSNlbmRpZlxuLS1cbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYz00MjM9dm9pZCBfX2luaXQgZWZpX2R1bXBfcGFnZXRhYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jLTQyNS0jaWZkZWYgQ09ORklHX0VGSV9QR1RfRFVNUFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jOjQyNjpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbChOVUxMLCBcdTAwMjZlZmlfbW0pO1xuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jLTQyNy0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTEzPXN0cnVjdCBwdGR1bXBfc3RhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMjctXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjI4OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0yOS1cdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zMC1cdFx0XHRcdGJvb2wgY2hlY2t3eCwgYm9vbCBkbWVzZyk7XG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjMxOnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7XG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTMyLWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xuLS1cbm1tL3B0ZHVtcC5jPTE2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHB0ZHVtcF9vcHMgPSB7XG4tLVxubW0vcHRkdW1wLmMtMTc0LVxubW0vcHRkdW1wLmM6MTc1OnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbm1tL3B0ZHVtcC5jLTE3Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgcHRkdW1wIFdhbGsgVHJpZ2dlcioqCgpSaWdodCwgc28gdGhlIGBwdGR1bXBgIHdhbGssIGFzIEkgcmVjYWxsLCBpcyBpbml0aWF0ZWQgdGhyb3VnaCB0aG9zZSBkZWJ1Z2ZzIGZpbGVzLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBoZWFydCBvZiBob3cgdGhhdCYjMzk7cyBjb25maWd1cmVkLiBNeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgaW4gYGFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuY2AgYW5kIGBhcmNoL2FybTY0L21tL3B0ZHVtcC5jYC4gVGhhdCBzaG91bGQgc2hvdyBtZSBwcmVjaXNlbHkgaG93IHRoZSBkZWJ1Z2ZzIGVudHJpZXMgYXJlIGNyZWF0ZWQgYW5kIGxpbmtlZCB0byB0aGUgYHB0ZHVtcGAgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbTsgSSYjMzk7bSBiZXR0aW5nIG9uZSBvZiB0aGVzZSBmaWxlcyB3aWxsIGJlIHRoZSBrZXkuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBjYWxsIHBhdGguIE9uY2UgSSBzZWUgaG93IGRlYnVnZnMgaXMgd2lyZWQgaW4sIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlIGZpbGVzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlYnVnZnNfY3JlYXRlX2ZpbGUuKnB0ZHVtcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jPTE2PXZvaWQgX19pbml0IHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSlcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmMtMTcte1xuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYzoxODpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgMDQwMCwgTlVMTCwgaW5mbywgXHUwMDI2cHRkdW1wX2ZvcHMpO1xuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYy0xOS19XG4tLVxuYXJjaC9hcm02NC9tbS9wdGR1bXBfZGVidWdmcy5jPTE2PXZvaWQgX19pbml0IHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSlcbmFyY2gvYXJtNjQvbW0vcHRkdW1wX2RlYnVnZnMuYy0xNy17XG5hcmNoL2FybTY0L21tL3B0ZHVtcF9kZWJ1Z2ZzLmM6MTg6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIDA0MDAsIE5VTEwsIGluZm8sIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gvYXJtNjQvbW0vcHRkdW1wX2RlYnVnZnMuYy0xOS19XG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz00MDY9c3RhdGljIGludCBfX2luaXQgcHRkdW1wX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQyMC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QVERVTVBfREVCVUdGUykpXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMTpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtrZXJuZWxfcGFnZV90YWJsZXNcJiMzNDssIDA0MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtNDIyLVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0zMTU9c3RhdGljIGludCBwdF9kdW1wX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzU2LSNpZmRlZiBDT05GSUdfUFREVU1QX0RFQlVHRlNcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNTc6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2tlcm5lbF9wYWdlX3RhYmxlc1wmIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cHRkdW1wX2ZvcHMpO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1OC0jZW5kaWYgLyogQ09ORklHX1BURFVNUF9ERUJVR0ZTICovXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IHB0X2R1bXBfZGVidWdfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Mi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1MzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7a2VybmVsXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01NC1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y3VycmVudF9rZXJuZWxcJiMzNDssIDA0MDAsIGRpciwgTlVMTCxcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNjEtI2lmIGRlZmluZWQoQ09ORklHX0VGSSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo2MjpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7ZWZpXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsIFx1MDAyNnB0ZHVtcF9lZmlfZm9wcyk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNjMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpczoKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyByZXF1aXJlZC4gVGhhdCYjMzk7cyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgSSYjMzk7bSBub3QgZ29pbmcgdG8ganVtcCB0byBjb25jbHVzaW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQmIzM5O3MgbmVlZGVkLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyB0aGlzIGp1c3QgYWx3YXlzIG9uLCBvciBjb25kaXRpb25hbD8mIzM0OyBJIHJlbWVtYmVyIHNlZWluZyBgYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jYCBmbG9hdGluZyBhcm91bmQgcmVjZW50bHksIGFuZCB0aGF0ICpmZWx0KiBjb25kaXRpb25hbCBpbiBpdHMgY29tcGlsYXRpb24uIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYGFyY2gveDg2L21tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgd291bGQgYmUuIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgZGVwZW5kZW50IG9uIG90aGVyIHZhcmlhYmxlcyBvciBpZiB0aGVyZSYjMzk7cyBtb3JlIHRvIGl0IHRoYW4gbWVldHMgdGhlIGV5ZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVidWdfcGFnZXRhYmxlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL01ha2VmaWxlPTM3PW9iai0kKENPTkZJR19QVERVTVApXHRcdCYjNDM7PSBkdW1wX3BhZ2V0YWJsZXMub1xuYXJjaC94ODYvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKVx0JiM0Mzs9IGRlYnVnX3BhZ2V0YWJsZXMub1xuYXJjaC94ODYvbW0vTWFrZWZpbGUtMzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBNYXBwaW5nIENoYW5nZXMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCB0aGF0JiMzOTtzIGdvaW5nIHRvIHRyaWdnZXIgc29tZSBwYWdlIHRhYmxlIGR1bXBzLCBhbmQgaXQmIzM5O3MgZW5hYmxlZCBieSBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYC4gVGhhdCYjMzk7cyBnb29kLCBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcuIEFuZCwgYWhhLCBgQ09ORklHX0RFQlVHX1dYYCBhbHNvIGRvZXMgaXQsIG1lYW5pbmcgdGhlIHN5c3RlbSB3aWxsIGR1bXAgcHRkdW1wcyBhdCBib290LiBUaGF0IG5hcnJvd3MgZG93biB0aGUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCB0aGlzIGNvZGUgZXhlY3V0ZXMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtbS92bWFsbG9jLmNgIGFuZCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIE9rYXksIGZvY3VzaW5nIG9uIGBtbS92bWFsbG9jLmNgLCB0aGUgcGF0Y2ggdG91Y2hlcyBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBhbmQgYHZtYXBfdHJ5X2h1Z2VfcDRkYC4gVGhvc2UgYXJlIGFsbCByZWxhdGVkIHRvIGh1Z2UgcGFnZSBtYXBwaW5nIHdpdGhpbiBgdm1hbGxvY2AuIFRoYXQgbWVhbnMgdGhpcyBpcyBhbGwgdmVyeSByZWxldmFudCB0byBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24sIHBhcnRpY3VsYXJseSB3aGVuIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaWYgdGhpcyBpcyBlbmFibGVkLCBpdCBzaG91bGQgd29yayBhcyBpcy4gVGltZSB0byBwdWxsIHVwIGBtbS92bWFsbG9jLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz05NT1zdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTE0Mi1cbm1tL3ZtYWxsb2MuYzoxNDM6c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1hbGxvYy5jLTE0NC1cdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4tLVxubW0vdm1hbGxvYy5jPTE3OT1zdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTE5Mi1cbm1tL3ZtYWxsb2MuYzoxOTM6XHRcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcbm1tL3ZtYWxsb2MuYy0xOTQtXHRcdFx0XHRcdG1heF9wYWdlX3NoaWZ0KSkge1xuLS1cbm1tL3ZtYWxsb2MuYz0yMDY9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0yMjctXG5tbS92bWFsbG9jLmM6MjI4Olx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbm1tL3ZtYWxsb2MuYy0yMjktXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4tLVxubW0vdm1hbGxvYy5jPTI2Mz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTI4NC1cbm1tL3ZtYWxsb2MuYzoyODU6XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xubW0vdm1hbGxvYy5jLTI4Ni1cdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb246CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGB2bWFwX3RyeV9odWdlX3BtZGAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdGF0dXMgb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYC4gVGhlcmUmIzM5O3Mgbm8gdGltZSB0byB3YXN0ZSB3YWRpbmcgdGhyb3VnaCBldmVyeXRoaW5nLiBJIHdhbnQgYSBkZWZpbml0aXZlIGFuc3dlciBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIGZ1bmN0aW9uIGlzICphbHdheXMqIHByZXNlbnQgaW4gdGhlIGJ1aWxkLCBvciBpZiBpdCYjMzk7cyBnYXRlZCBiZWhpbmQgc29tZSBjb25maWd1cmF0aW9uIG1hY3JvLiBUaW1lIHRvIHF1aWNrbHkgZmluZCBvdXQgaWYgSSBuZWVkIHRvIGV2ZW4gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgaXQgbWlnaHQgYmUgdW5hdmFpbGFibGUgb24gYSBnaXZlbiB0YXJnZXQuIEkgbmVlZCB0byBrbm93IHdoaWNoIHBvdGVudGlhbCBhcmNoaXRlY3R1cmVzLCBmZWF0dXJlcywgb3IgY29uZmlndXJhdGlvbnMgd2lsbCBpbXBhY3QgaXRzIHByZXNlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfSFVHRV9WTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYy01My1cbm1tL3ZtYWxsb2MuYzo1NDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBcbm1tL3ZtYWxsb2MuYy01NS1zdGF0aWMgdW5zaWduZWQgaW50IF9fcm9fYWZ0ZXJfaW5pdCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gQklUU19QRVJfTE9ORyAtIDE7XG4tLVxubW0vdm1hbGxvYy5jPTYyPWVhcmx5X3BhcmFtKFwmIzM0O25vaHVnZWlvbWFwXCYjMzQ7LCBzZXRfbm9odWdlaW9tYXApO1xubW0vdm1hbGxvYy5jOjYzOiNlbHNlIC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQICovXG5tbS92bWFsbG9jLmMtNjQtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcbm1tL3ZtYWxsb2MuYzo2NTojZW5kaWZcdC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQICovXG5tbS92bWFsbG9jLmMtNjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgdm1hcF90cnlfaHVnZV9wbWRgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHZtYXBfdHJ5X2h1Z2VfcG1kYCB3YXMgb25seSBjb21waWxlZCBpbiBpZiB3ZSBoYWQgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQYCBkZWZpbmVkLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHRoZSBjYXNlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpTbywgZXZlbiBpZiB0aGUgYXJjaGl0ZWN0dXJlICpkb2VzbiYjMzk7dCogc3VwcG9ydCBodWdlIHZtYXBzLCB0aGUgZnVuY3Rpb24gc3RpbGwgZXhpc3RzIGluIHRoZSBjb21waWxlZCBjb2RlLCBhbGJlaXQgcG90ZW50aWFsbHkgZG9pbmcgbm90aGluZy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBpdHNlbGYgdG8gZnVsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgd2hhdCBjb25kaXRpb25zIHdvdWxkIHRyaWdnZXIgaXQgdG8gYWN0dWFsbHkgKmRvKiBzb21ldGhpbmcsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQgc2ltcGx5IHJldHVybnMgYSB2YWx1ZSB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYG1heF9wYWdlX3NoaWZ0YCBhbmQgYFBNRF9TSElGVGAgaXMgb2J2aW91c2x5IGtleS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHRoYXQmIzM5O3MgYWxsIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQzOlx0c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIDE0NDpcdFx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbiAxNDU6XHRcdFx0XHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4gMTQ2Olx0e1xuIDE0NzpcdFx0aWYgKG1heF9wYWdlX3NoaWZ0IFx1MDAzYyBQTURfU0hJRlQpXG4gMTQ4Olx0XHRcdHJldHVybiAwO1xuIDE0OTpcdFxuIDE1MDpcdFx0aWYgKCFhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSlcbiAxNTE6XHRcdFx0cmV0dXJuIDA7XG4gMTUyOlx0XG4gMTUzOlx0XHRpZiAoKGVuZCAtIGFkZHIpICE9IFBNRF9TSVpFKVxuIDE1NDpcdFx0XHRyZXR1cm4gMDtcbiAxNTU6XHRcbiAxNTY6XHRcdGlmICghSVNfQUxJR05FRChhZGRyLCBQTURfU0laRSkpXG4gMTU3Olx0XHRcdHJldHVybiAwO1xuIDE1ODpcdFxuIDE1OTpcdFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIDE2MDpcdFx0XHRyZXR1cm4gMDtcbiAxNjE6XHRcbiAxNjI6XHRcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXG4gMTYzOlx0XHRcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuIDE2NDpcdFxuIDE2NTpcdFx0LypcbiAxNjY6XHRcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xuIDE2NzpcdFx0ICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLlxuIDE2ODpcdFx0ICpcbiAxNjk6XHRcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xuIDE3MDpcdFx0ICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLlxuIDE3MTpcdFx0ICovXG4gMTcyOlx0XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4gMTczOlx0XHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbiAxNzQ6XHRcdFx0XHRyZXR1cm4gMDtcbiAxNzU6XHRcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gMTc2Olx0XHR9XG4gMTc3Olx0fVxuIDE3ODpcdFxuIDE3OTpcdHN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiAxODA6XHRcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4gMTgxOlx0XHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiAxODI6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEh1Z2UgUGFnZSBNYXBwaW5nKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBgbWF4X3BhZ2Vfc2hpZnRgIHZhbHVlIGlzIHVsdGltYXRlbHkgZGVyaXZlZCBmcm9tIGVpdGhlciBgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdGAgb3IgYHZtYXBfbWF4X3BhZ2Vfc2hpZnRgLiBOb3csIGlmIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnRgIHNpbXBseSBkZWZhdWx0cyB0byBgUEFHRV9TSElGVGAuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGF0IGNvbmRpdGlvbiBpcyBtZXQsIGBtYXhfcGFnZV9zaGlmdGAgd2lsbCAqYWx3YXlzKiBiZSBsZXNzIHRoYW4gYFBNRF9TSElGVGAsIHJpZ2h0PyBDb25zZXF1ZW50bHksIHRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byBiYWlsIG91dCBhbmQgcmV0dXJuIDAuIFNvLCBpdCYjMzk7cyBjbGVhcjogdG8gZXZlbiAqY29uc2lkZXIqIHRoZSBtb2RpZmllZCBsb2dpYyB3aXRoaW4gYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQYCAqbXVzdCogYmUgZGVmaW5lZC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDEyPXN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQxMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDE0OnN0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQ1LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NDY6c3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NDcte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU0LVx0c2NvcGVkX2d1YXJkKG1tYXBfd3JpdGVfbG9jaywgXHUwMDI2aW5pdF9tbSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDU1Olx0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NTYtfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDU4PXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDkzLVx0aWYgKGNwYS1cdTAwM2VmbGFncyBcdTAwMjYgQ1BBX0NPTExBUFNFKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0OTQ6XHRcdGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00OTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgxNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBzeXN0ZW1zIGVuZ2luZWVyOgoKKipEZWNvbnN0cnVjdGluZyBNZW1vcnkgQXR0cmlidXRlIENoYW5nZXMqKgoKUmlnaHQsIHNvIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGdldHRpbmcgdHJpZ2dlcmVkIGZyb20gYGNwYV9mbHVzaGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBwdXRzIG1lIGluIG1pbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIExvb2tpbmcgY2xvc2VyLCBpdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIHdoaWNoIGlzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmeWluZyBtZW1vcnkgYXR0cmlidXRlcy4gVGhpbmdzIGxpa2UgcmVhZC1vbmx5LCBuby1leGVjdXRlLCBldGMuIGFyZSBoYW5kbGVkIGhlcmUuCgpUaGUgZmFjdCB0aGF0IHRoaXMgaXMgKmFsd2F5cyogY29tcGlsZWQgb24geDg2IGlzIGEgY3J1Y2lhbCBkZXRhaWwuIEl0IHN1Z2dlc3RzIHRoaXMgcGFydGljdWxhciBsb2dpYyBpcyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7ZCBiZSB3aWxsaW5nIHRvIGJldCB0aGlzIG9wdGltaXphdGlvbiBpcyBzcGVjaWZpYyB0byB4ODYmIzM5O3MgbWVtb3J5IG1vZGVsIGFuZCBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIFRoaXMgaGludHMgYXQgc29tZXRoaW5nIHBvdGVudGlhbGx5IGxldmVyYWdpbmcgc3BlY2lmaWMgQ1BVIGZlYXR1cmVzLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AgZnVuY3Rpb24gbWVudGlvbmVkLiBBIHF1aWNrIGxvb2sgYXQgYG1tL3BhZ2V3YWxrLmNgIHdpbGwgcHJvYmFibHkgY2xhcmlmeSBob3cgdGhpcyBwYWdlIHJhbmdlIG1hbmlwdWxhdGlvbiBvcGVyYXRlcy4gSXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbW9yZSBnZW5lcmFsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2UgdGFibGUgZW50cmllcyBhbmQgYXBwbHlpbmcgdGhlIGF0dHJpYnV0ZSBjaGFuZ2VzIGVmZmljaWVudGx5LiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jPTY0OD1pbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTY2Ny0vKipcbm1tL3BhZ2V3YWxrLmM6NjY4OiAqIHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyAtIHdhbGsgYSByYW5nZSBvZiBwYWdldGFibGVzIG5vdCBiYWNrZWQgYnkgYSB2bWFcbm1tL3BhZ2V3YWxrLmMtNjY5LSAqIEBtbTpcdFx0bW1fc3RydWN0IHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHByb2Nlc3Mgb2YgcGFnZSB0YWJsZSB3YWxrXG4tLVxubW0vcGFnZXdhbGsuYy02ODMtICovXG5tbS9wYWdld2Fsay5jOjY4NDppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vcGFnZXdhbGsuYy02ODUtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDMyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlcyB0byBQYWdlIFRhYmxlIERlYnVnZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIHdoaWNoIGlzIGNhbGxlZCBieSBgcHRkdW1wX3dhbGtfcGdkYCBpbiBgbW0vcHRkdW1wLmNgLiBUaGUgbWFpbiBhZGRpdGlvbiBpcyBhbiBgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKCZhbXA7aW5pdF9tbSlgIGNhbGwgaW5zaWRlIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBpbXBsaWVzIHdlJiMzOTtyZSB0cnlpbmcgdG8gdGlnaHRlbiB1cCBzb21lIGxvY2tpbmcgYXJvdW5kIHRoZSBpbml0aWFsIG1lbW9yeSBtYXAuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkaWdnaW5nIGFyb3VuZCBpbiBwYWdlIHRhYmxlcyBhbmQgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGNvbmN1cnJlbnQgYWNjZXNzLgoKTGV0IG1lIHNlZSwgdGhlIGZ1bmN0aW9ucyByZWFsbHkgaW4gcGxheSBoZXJlIGFyZSBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIG9mIGNvdXJzZSBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0IHdpdGggZWFjaCBvdGhlciBpbiB0aGlzIG5ldyBjb250ZXh0LgoKVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFBURFVNUF9ERUJVR0ZTYCwgYERFQlVHX1dYYCwgYW5kIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgbm90IGp1c3QgYSBtYWNyby4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZsYWdzIGFmZmVjdCB0aGUgb3ZlcmFsbCBiZWhhdmlvciBhbmQgd2hhdCBhcmNoaXRlY3R1cmVzIHRoaXMgY2hhbmdlIGltcGFjdHMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHdoZW4gYXNzZXNzaW5nIHRoZXNlIGtpbmQgb2YgY2hhbmdlcy4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSBicmVha2luZyBzb21ldGhpbmcgb24gYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBvciBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA4OT1jb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuLS1cbmFyY2gvS2NvbmZpZy0xMDkxLVxuYXJjaC9LY29uZmlnOjEwOTI6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcbmFyY2gvS2NvbmZpZy0xMDkzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA4NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQmIzM5O3MgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBmdWxseS4gQXJlIHRoZXJlICpvdGhlciogcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgd2hpY2ggY291bGQgaW1wYWN0IHRoaXMgb25lPyBUaGUgZGVwZW5kZW5jeSBncmFwaCBpcyB0aGUga2V5IGhlcmUuIExldCYjMzk7cyBzZWUuLi4gQWgsIGBDT05GSUdfUFREVU1QX0NPUkVgIGlzICpzZWxlY3RlZCogYnkgYm90aCBgUFREVU1QX0RFQlVHRlNgIGFuZCBgREVCVUdfV1hgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgdGVsbHMgbWUgaW1tZWRpYXRlbHkgdGhhdCB0aGUgc3RhdGUgb2YgKnRoaXMqIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBjb250cm9sbGVkIGJ5IGEgY291cGxlIG9mIG90aGVyIHRoaW5ncy4gTm93IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jeSBgUFREVU1QX0RFQlVHRlNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcG90ZW50aWFsIGltcGFjdHMuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgYW5kIHRoZSBpbXBsaWNhdGlvbnMgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QX0RFQlVHRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQwOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIGEgZGVlcCBkaXZlIGludG8gZGVidWdnaW5nOgoKKipEZWJ1Z2dpbmcgSW5pdGlhdGl2ZTogVGhlIGBERUJVR19XWGAgVmFyaWFibGUqKgoKQWxyaWdodCwgdGltZSB0byB0cm91Ymxlc2hvb3QuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYERFQlVHX1dYYC4gVGhhdCB2YXJpYWJsZSBpcyB1c3VhbGx5IHRoZSBsaW5jaHBpbiBpbiB0aGlzIHR5cGUgb2YgcHJvYmxlbSwgYW5kIEkgYW0gYmV0dGluZyBJIGFtIGdvaW5nIHRvIGZpbmQgc29tZXRoaW5nIHRoZXJlLiBJcyBpdCBvbiwgb2ZmLCBzZXQgaW5jb3JyZWN0bHk/IEl0cyBzdGF0ZSB3aWxsIHN0ZWVyIHRoZSBuZXh0IG1vdmUuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBpbml0aWFsIGNvbnRleHQgZm9yIHRoZSBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX1dYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTgzPWNvbmZpZyBBUkNIX0hBU19ERUJVR19XWFxuLS1cbm1tL0tjb25maWcuZGVidWctMTg1LVxubW0vS2NvbmZpZy5kZWJ1ZzoxODY6Y29uZmlnIERFQlVHX1dYXG5tbS9LY29uZmlnLmRlYnVnLTE4Ny1cdGJvb2wgXCYjMzQ7V2FybiBvbiBXJiM0MztYIG1hcHBpbmdzIGF0IGJvb3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaGVyZS4KCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBzbyBgUFREVU1QX0RFQlVHRlNgIGFuZCBgREVCVUdfV1hgIGxvb2sgcHJvbWlzaW5nIGFzIHN0YXJ0aW5nIHBvaW50cy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBDT05GSUdfWDg2X1BBVGAgZGlyZWN0aXZlLiBIbW1tLCB0aGUgYXNzb2NpYXRlZCBmaWxlIGlzIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZpbGUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX1g4Nl9QQVRgPyBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgYnkgb3BlbmluZyBhbmQgY2hlY2tpbmcgdGhlIGBhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9NYWtlZmlsZS0yLVxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcdFx0XHRcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXZpZXdpbmcgUmVjZW50IE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZXNlIHJlY2VudCBjaGFuZ2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGZvY3VzIGlzIG9uIG1lbW9yeSBtYXBwaW5nIGFuZCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIGl0JiMzOTtzIGFsbCBjb21waWxlZCwgb2YgY291cnNlLgoKRmlyc3QsIGluIGBtbS92bWFsbG9jLmNgLCB0aGVyZSYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gdm1hbGxvYyBodWdlIHBhZ2VzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbG9jayB1c2luZyBgc2NvcGVkX2NvbmRfZ3VhcmRgIHdpdGhpbiBgcG1kX2ZyZWVfcHRlX3BhZ2VgLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIHN5bmNocm9uaXphdGlvbiB3aGVuIG1hcHBpbmcgdGhlc2UgaHVnZSBwYWdlcywgd2hpY2ggaXMgZ29vZCB0byBzZWUuCgpUaGVuLCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIHRoZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBmdW5jdGlvbiBpcyBnZXR0aW5nIGEgbG9jayBhcyB3ZWxsLCB1c2luZyBgc2NvcGVkX2d1YXJkYC4gSXQgc2VlbXMgdGhpcyBpcyBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudCBDUEEgd2Fsa2VycyBhbmQgYXZvaWRpbmcgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBgcHRkdW1wYCBmdW5jdGlvbmFsaXR5LiBUaGF0IGFsc28gbWFrZXMgc2Vuc2UuCgpOZXh0LCB0aGUgYG1tL3B0ZHVtcC5jYCBmaWxlIGhhcyBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGBpbml0X21tYCBsb2NraW5nIHdpdGhpbiBgcHRkdW1wX3dhbGtfcGdkYC4gVGhleSYjMzk7cmUgYWNxdWlyaW5nIHRoZSBgaW5pdF9tbWAgbG9jayBub3csIHdoaWNoIGlzIGRlZmluaXRlbHkgZGVzaWduZWQgdG8gaW1wcm92ZSBzdGFiaWxpdHkgb2Yga2VybmVsIHBhZ2UgdGFibGVzIGJ5IGFjcXVpcmluZyBhIGxvY2sgb24gYGluaXRfbW1gLCBzbyBhIGdvb2QgY2hhbmdlLgoKRmluYWxseSwgaW4gYGFyY2gvYXJtNjQvbW0vbW11LmNgLCB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMgYnJhbmNoIGFuZCB0aGUgYG1tYXBfcmVhZF9sb2NrKCZhbXA7aW5pdF9tbSlgIGZyb20gYHBtZF9mcmVlX3B0ZV9wYWdlYCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYC4gVGhpcyBzZWVtcyB0byBiZSBhIGNsZWFudXAgYW5kIHNpbXBsaWZpY2F0aW9uLCBwZXJoYXBzIGFmdGVyIHByZXZpb3VzIGxvY2tpbmcgY2hhbmdlcyBvciBpbXByb3ZlbWVudHMuCgpPdmVyYWxsLCB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHNldCBvZiBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGFyZSBhbGwgY2hhbmdlcyB0aGF0IGFyZSBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgdGhpbmsgdGhlIGtleSBhcmVhcyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZyB3aWxsIGJlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwdGR1bXBfd2Fsa19wZ2RgLCBhbmQgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuCgpBcyBmb3IgY29uZmlncywgYFBURFVNUF9ERUJVR0ZTYCwgYERFQlVHX1dYYCwgYW5kIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCBzZWVtIHJlbGV2YW50LiBJIHNob3VsZCBjaGVjayBpZiBgSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgdXNlci1zZWxlY3RhYmxlLCBiZWNhdXNlIHRoYXQmIzM5O3MgYWx3YXlzIHVzZWZ1bCBmb3IgZnV6emVyIHNlbGVjdGlvbiBhbmQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTEwODk9Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbi0tXG5hcmNoL0tjb25maWctMTA5MS1cbmFyY2gvS2NvbmZpZzoxMDkyOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXG5hcmNoL0tjb25maWctMTA5My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0ODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXJjaGl0ZWN0dXJhbCBTZWxlY3Rpb24sIE5vdCBVc2VyIENob2ljZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBmZWF0dXJlLCBvciBwZXJoYXBzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIHRoZSBlbmQtdXNlciBnZXRzIHRvIHR3aWRkbGUgd2l0aCBkaXJlY3RseS4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IHRoZSAqYXJjaGl0ZWN0dXJlIGl0c2VsZiogZGV0ZXJtaW5lcyB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgb3Igbm90LiBUaGluayBvZiBpdCBsaWtlIHRoaXM6IHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBpdHNlbGYsIGl0cyBmdW5kYW1lbnRhbCBkZXNpZ24sIGlzIHdoYXQmIzM5O3MgbWFraW5nIHRoZSBjYWxsLiBJdCYjMzk7cyBub3QgYSBjb21waWxlLXRpbWUgZmxhZyB0aGUgdXNlciBjYW4gc2ltcGx5IGZsaXAuCgpUaGUgZXhhbXBsZSBoaWdobGlnaHRzIHRoYXQgY2xlYXJseSwgbGlrZSB4ODYgYW5kIGFybTY0IGFyY2hpdGVjdHVyZXMgYXJlIHRoZSBvbmVzIG1ha2luZyB0aGF0IHNlbGVjdGlvbiwgd2hpY2ggaGVscHMgY29udGV4dHVhbGl6ZSB3aGF0IGlzIGdvaW5nIG9uLgoKVG8gcmVhbGx5IG5haWwgdGhpcyBkb3duLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIHg4Ni1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHNlZSB3aGF0IGBhcmNoL3g4Ni9LY29uZmlnYCByZXZlYWxzLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE5MS1cdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXG5hcmNoL3g4Ni9LY29uZmlnOjE5MjpcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXHRcdGlmIFg4Nl82NCB8fCBYODZfUEFFXG5hcmNoL3g4Ni9LY29uZmlnLTE5My1cdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXHRcdGlmIFg4Nl82NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwNQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gVHdlYWtzIGZvciBJbXByb3ZlZCBEZWJ1Z2dpbmcqKgoKT2theSwgc28gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUgaGFzIGh1Z2Ugdm1hcHMgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJIGRvbiYjMzk7dCB0ZWNobmljYWxseSAqbmVlZCogdG8gZXhwbGljaXRseSBlbmFibGUgaXQuIEhvd2V2ZXIsIGl0IHdvdWxkbiYjMzk7dCBodXJ0IHRvIGxpc3QgaXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEJ1dCBoYW5nIG9uLCBgSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgYSBzdHJhaWdodCBib29sZWFuLCBubyBwcm9tcHQsIHNvIEkgY2FuJiMzOTt0IGRpcmVjdGx5IGVuYWJsZSBpdCBpbiB0aGUgYC5jb25maWdgIGZpbGUuIEkmIzM5O20gYmV0dGVyIG9mZiBvbWl0dGluZyBpdCBlbnRpcmVseSwgb3IganVzdCBsaXN0aW5nIGl0LCBzaW5jZSBzeXpib3Qgd2lsbCBqdXN0IGlnbm9yZSBpdCBpZiBpdCBjYW4mIzM5O3QgYmUgc2V0LiBCdXQgeWVzLCBJIHNob3VsZCBkZWZpbml0ZWx5IGxpc3QgYFBURFVNUF9ERUJVR0ZTYCBhbmQgYERFQlVHX1dYYC4gVGhvc2UgYXJlIGNyaXRpY2FsLgoKTGV0IG1lIGRvdWJsZS1jaGVjayBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gSXQmIzM5O3MgZGVmaW5lZCBzdGF0aWNhbGx5LiBCdXQgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIHVzZWZ1bCwgc28gbGV0JiMzOTtzIGxpc3QgaXQgYW55d2F5LiBXYWl0IGEgc2Vjb25kLi4uIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGNhbGxlZCBmcm9tIGBjcGFfZmx1c2hgLiBPa2F5LCB0aGF0IHNlYWxzIGl0LiBJIHNob3VsZCAqZGVmaW5pdGVseSogbGlzdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gQXMgd2VsbCBhcyBgcHRkdW1wX3dhbGtfcGdkYCwgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYW5kIGB2bWFwX3RyeV9odWdlX3B1ZGAgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuIFRob3NlIGFsbCBzZWVtIHJlbGV2YW50IHRvIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4KClJpZ2h0LCBJIHRoaW5rIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBkb25lLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtERUJVR19XWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIGFuZCB4ODYgQ1BBIChjaGFuZ2UgcGFnZSBhdHRyaWJ1dGUpIGxhcmdlIHBhZ2UgY29sbGFwc2luZy4gSXQgaW50cm9kdWNlcyBuZXcgbG9ja2luZyB1c2luZyBtbWFwX3JlYWRfbG9jay9tbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgYW5kIHg4NiBDUEEgKGNoYW5nZSBwYWdlIGF0dHJpYnV0ZSkgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHVzaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE3OjUyLjU2OTAyNzY3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMDI2OTI1MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxNzo1Mi41NjkwMzM5MDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTcwMDcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNiMDE5MWZhYWM3YTdhMWNiMzk3NTY1YmYxM2NhZTJkNDc3YThmNTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTcgMDM6MTc6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG5AQCAtNyw4ICs3LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdGR1bXAuaFxcdTAwM2VcXG4gXFxuLURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi1cXG4gI2lmZGVmIENPTkZJR19QVERVTVBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV90eXBlcy5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xcbmluZGV4IGEyNWQ4YmVhY2M4MzEwLi5iZDUyZmNhNmU4NzIwYiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xcbkBAIC00OSw4ICs0OSw2IEBAXFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1xcdEJJVCgxKVxcbiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1NcXHRCSVQoMilcXHQvKiBhc3N1bWVzIEZFQVRfSFBEUyBpcyBub3QgdXNlZCAqL1xcbiBcXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFxuIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7XFxuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xcbiBcXG5AQCAtMTg2NCw4ICsxODYyLDcgQEAgaW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgICBib29sIGFjcXVpcmVfbW1hcF9sb2NrKVxcbitpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwdGVfdCAqdGFibGU7XFxuIFxcdHBtZF90IHBtZDtcXG5AQCAtMTg3NywyNSArMTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovXFxuIFxcdHRhYmxlID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7XFxuIFxcdHBtZF9jbGVhcihwbWRwKTtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XFxuLVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpIFxcdTAwMjZcXHUwMDI2IGFjcXVpcmVfbW1hcF9sb2NrKSB7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdH1cXG4tXFxuIFxcdHB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1pbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4te1xcbi1cXHQvKiBJZiBwdGR1bXAgaXMgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcywgYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jayAqL1xcbi1cXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xcbi19XFxuLVxcbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwbWRfdCAqdGFibGU7XFxuQEAgLTE5MTEsMzYgKzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcdH1cXG4gXFxuIFxcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIE91ciBvYmplY3RpdmUgaXMgdG8gcHJldmVudCBwdGR1bXAgZnJvbSByZWFkaW5nIGEgUE1EIHRhYmxlIHdoaWNoIGhhc1xcbi1cXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cXG4tXFx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcXG4tXFx0ICogYXMgYSByZXN1bHQgb2YgdGhlIG1tYXAgd3JpdGUgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gcHRkdW1wLCBnaXZlXFxuLVxcdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xcbi1cXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xcbi1cXHQgKiBpc3N1ZWQgYnkgX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoKSBndWFyYW50ZWVzIHRoYXQgcHRkdW1wIHdpbGxcXG4tXFx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXFxuLVxcdCAqL1xcbi1cXHRwdWRfY2xlYXIocHVkcCk7XFxuLVxcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbi1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xcbi1cXHRcXHRtbWFwX3JlYWRfbG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHR9XFxuLVxcbiBcXHRwbWRwID0gdGFibGU7XFxuIFxcdG5leHQgPSBhZGRyO1xcbiBcXHRlbmQgPSBhZGRyICsgUFVEX1NJWkU7XFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJ3Qgc2VlIGl0LiBOb1xcbi1cXHRcXHRcXHQgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gZmFsc2UpO1xcbitcXHRcXHRcXHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcXG4gXFx0fSB3aGlsZSAocG1kcCsrLCBuZXh0ICs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XFxuIFxcbitcXHRwdWRfY2xlYXIocHVkcCk7XFxuK1xcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbiBcXHRwbWRfZnJlZShOVUxMLCB0YWJsZSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuaW5kZXggMWMyMDE0NDcwMGQ3ZDcuLjVhNzZjNTliNWFkYTU1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuQEAgLTI4MywxMyArMjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXFxuIFxcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4te1xcbi1cXHRzdGF0aWNfYnJhbmNoX2luYyhcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XFxuLVxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi19XFxuLVxcbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcXG5AQCAtMzE4LDcgKzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fTtcXG4gXFxuLVxcdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBpbmZvLVxcdTAwM2VtbSk7XFxuK1xcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBpbmZvLVxcdTAwM2VtbSwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxcbkBAIC0zNjAsNyArMzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4gXFx0XFx0fVxcbiBcXHR9O1xcbiBcXG4tXFx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tKTtcXG4rXFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG4gXFxuIFxcdGlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHtcXG4gXFx0XFx0cHJfd2FybihcXFwiQ2hlY2tlZCBXK1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcrWCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuaW5kZXggZDAyM2E0MGExZTAzNDUuLmQxZTYzZjdkMjY3ZmYzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZWdpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZTgyMC9hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG5AQCAtNDEwLDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxcbiBcXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcXG4gXFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xcbiBcXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XFxuQEAgLTQ0Miw2ICs0NDMsMTggQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcXG4rXFx0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxcbitcXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXFxuK1xcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuQEAgLTYyMSw2ICs2MjEsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxcbiBcXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4rXFx0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xcbisrKyBiL21tL3BhZ2V3YWxrLmNcXG5AQCAtNjc4LDYgKzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXFxuICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLlxcbiAgKlxcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cXG4rICpcXG4rICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXFxuICAqL1xcbiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG5AQCAtNjkxLDI0ICs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0Lm5vX3ZtYVxcdFxcdD0gdHJ1ZVxcbiBcXHR9O1xcbiBcXG4tXFx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xcbi1cXHRpZiAobW0gPT0gXFx1MDAyNmluaXRfbW0pXFxuLVxcdFxcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBnZCwgcHJpdmF0ZSk7XFxuLVxcdGlmIChzdGFydCBcXHUwMDNlPSBlbmQgfHwgIXdhbGsubW0pXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0LypcXG4tXFx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXFxuLVxcdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xcbi1cXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbid0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXNcXG4tXFx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXFxuLVxcdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcXG4tXFx0ICogYmUgaGVsZC5cXG4rXFx0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXFxuK1xcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xcbitcXHQgKiBkb3duIHBhZ2UgdGFibGVzLlxcbitcXHQgKlxcbitcXHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcXG4rXFx0ICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuXFxuIFxcdCAqL1xcbiBcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xcbitcXHQvKlxcbitcXHQgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0ncyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcXG4rXFx0ICogb2YgYXJiaXRyYXJ5IG1tJ3MuXFxuK1xcdCAqXFxuK1xcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXFxuK1xcdCAqIGNvbmN1cnJlbnQga2VybmVsIHBhZ2UgdGFibGUgZnJlZWluZy5cXG4rXFx0ICovXFxuK1xcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcXHUwMDI2aW5pdF9tbSk7XFxuK1xcbitcXHRpZiAoc3RhcnQgXFx1MDAzZT0gZW5kKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2Fsayk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuY1xcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcXG4tLS0gYS9tbS9wdGR1bXAuY1xcbisrKyBiL21tL3B0ZHVtcC5jXFxuQEAgLTE3OCwxMSArMTc4LDE4IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcXG4gXFxuIFxcdGdldF9vbmxpbmVfbWVtcygpO1xcbiBcXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xcbitcXHQvKiBUbyBzdGFiaWxpc2Uga2VybmVsIHBhZ2UgdGFibGVzIHdlIG11c3QgaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvby4gKi9cXG4rXFx0aWYgKG1tICE9IFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFxcdTAwMjZpbml0X21tLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcbiBcXHR3aGlsZSAocmFuZ2UtXFx1MDAzZXN0YXJ0ICE9IHJhbmdlLVxcdTAwM2VlbmQpIHtcXG4gXFx0XFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcXG4gXFx0XFx0cmFuZ2UrKztcXG4gXFx0fVxcbitcXG4rXFx0aWYgKG1tICE9IFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRtbWFwX3dyaXRlX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuIFxcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcXG4gXFx0cHV0X29ubGluZV9tZW1zKCk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90bGJmbHVzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NobXBhcmFtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTE1OCwxMCArMTU5LDIxIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcXHUwMDI2XFx1MDAyNiAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXFxuK1xcdFxcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qXFxuK1xcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xcbitcXHQgKiBrZXJuZWwgcGFnZSB0YWJsZXMgaXQgZG9lcyBub3Qgb3duIHVuZGVyIHRoZSBtbWFwIHdyaXRlIGxvY2suXFxuK1xcdCAqXFxuK1xcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xcbitcXHQgKiB0aGUgcmFuZ2UgaXQgb3BlcmF0ZXMgb24gYW5kIGNhbm5vdCByZWFjaCB0aGlzIHBhZ2UgdGFibGUuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTIxMCwxMCArMjIyLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcXHUwMDI2XFx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxuK1xcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuK1xcdFxcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5AQCAtMjYyLDEwICsyNzksMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFxcdTAwMjZcXHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuIFxcbi1cXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG4rXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxNzo1My40NDEzNjY1MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTU0NTcxNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNiMDE5MWZhYWM3YTdhMWNiMzk3NTY1YmYxM2NhZTJkNDc3YThmNTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAwMzoxNzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5AQCAtNyw4ICs3LDYgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdGR1bXAuaFx1MDAzZVxuIFxuLURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVxuICNpZmRlZiBDT05GSUdfUFREVU1QXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jXG5pbmRleCBhMjVkOGJlYWNjODMxMC4uYmQ1MmZjYTZlODcyMGIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXG4rKysgYi9hcmNoL2FybTY0L21tL21tdS5jXG5AQCAtNDksOCArNDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NjQsOCArMTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaylcbitpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwdGVfdCAqdGFibGU7XG4gXHRwbWRfdCBwbWQ7XG5AQCAtMTg3NywyNSArMTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkxMSwzNiArMTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdH1cbiBcbiBcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbi1cbi1cdC8qXG4tXHQgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXNcbi1cdCAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvblxuLVx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcbi1cdCAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZVxuLVx0ICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzXG4tXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xuLVx0ICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsXG4tXHQgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC5cbi1cdCAqL1xuLVx0cHVkX2NsZWFyKHB1ZHApO1xuLVx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0fVxuLVxuIFx0cG1kcCA9IHRhYmxlO1xuIFx0bmV4dCA9IGFkZHI7XG4gXHRlbmQgPSBhZGRyICsgUFVEX1NJWkU7XG4gXHRkbyB7XG4gXHRcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBQTUQgaGFzIGJlZW4gaXNvbGF0ZWQsIHNvIHB0ZHVtcCB3b24ndCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4rXHRcdFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XG4gXHR9IHdoaWxlIChwbWRwKyssIG5leHQgKz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcbiBcbitcdHB1ZF9jbGVhcihwdWRwKTtcbitcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcbiBcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi17XG4tXHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XG4tXHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLX1cbi1cbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcbkBAIC0zMTgsNyArMzExLDcgQEAgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIGluZm8tXHUwMDNlbW0pO1xuK1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICszNTMsNyBAQCBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSk7XG4rXHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbiBcbiBcdGlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHtcbiBcdFx0cHJfd2FybihcIkNoZWNrZWQgVytYIG1hcHBpbmdzOiBGQUlMRUQsICVsdSBXK1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXFxuXCIsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li5kMWU2M2Y3ZDI2N2ZmMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC00MTAsNyArNDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbiBcbi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xuIFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wO1xuQEAgLTQ0Miw2ICs0NDMsMTggQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4re1xuK1x0LypcbitcdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxuK1x0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxuK1x0ICogICB3cml0ZSBsb2NrIG9uIGluaXRfbW0pLlxuK1x0ICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy5cbitcdCAqL1xuK1x0c2NvcGVkX2d1YXJkKG1tYXBfd3JpdGVfbG9jaywgXHUwMDI2aW5pdF9tbSlcbitcdFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi4wNDdmNWY1ZTJjMzQ3NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiArNjIxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gREVGSU5FX0dVQVJEKG1tYXBfcmVhZF9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4gXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXG4rREVGSU5FX0dVQVJEKG1tYXBfd3JpdGVfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuK1x0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXG4rREVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4rKysgYi9tbS9wYWdld2Fsay5jXG5AQCAtNjc4LDYgKzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXG4gICogd2lsbCBhbHNvIG5vdCBsb2NrIHRoZSBQVEVzIGZvciB0aGUgcHRlX2VudHJ5KCkgY2FsbGJhY2suXG4gICpcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cbisgKlxuKyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxuICAqL1xuIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5AQCAtNjkxLDI0ICs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0Lm5vX3ZtYVx0XHQ9IHRydWVcbiBcdH07XG4gXG4tXHQvKiBGb3IgY29udmVuaWVuY2UsIHdlIGFsbG93IHRyYXZlcnNhbCBvZiBrZXJuZWwgbWFwcGluZ3MuICovXG4tXHRpZiAobW0gPT0gXHUwMDI2aW5pdF9tbSlcbi1cdFx0cmV0dXJuIHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgb3BzLFxuLVx0XHRcdFx0XHRcdCAgICBwZ2QsIHByaXZhdGUpO1xuLVx0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kIHx8ICF3YWxrLm1tKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHQvKlxuLVx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXG4tXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cbi1cdCAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJ3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlc1xuLVx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXG4tXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXG4tXHQgKiBiZSBoZWxkLlxuK1x0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXG4rXHQgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmdcbitcdCAqIGRvd24gcGFnZSB0YWJsZXMuXG4rXHQgKlxuK1x0ICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkXG4rXHQgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy5cbiBcdCAqL1xuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbitcdC8qXG4rXHQgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0ncyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcbitcdCAqIG9mIGFyYml0cmFyeSBtbSdzLlxuK1x0ICpcbitcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXG4rXHQgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuXG4rXHQgKi9cbitcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtcbitcbitcdGlmIChzdGFydCBcdTAwM2U9IGVuZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jXG5pbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0XG4tLS0gYS9tbS9wdGR1bXAuY1xuKysrIGIvbW0vcHRkdW1wLmNcbkBAIC0xNzgsMTEgKzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG4rXHQvKiBUbyBzdGFiaWxpc2Uga2VybmVsIHBhZ2UgdGFibGVzIHdlIG11c3QgaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvby4gKi9cbitcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuK1x0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFx1MDAyNmluaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcbiBcdHdoaWxlIChyYW5nZS1cdTAwM2VzdGFydCAhPSByYW5nZS1cdTAwM2VlbmQpIHtcbiBcdFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxuIFx0XHRcdFx0ICAgICAgXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XG4gXHRcdHJhbmdlKys7XG4gXHR9XG4rXG4rXHRpZiAobW0gIT0gXHUwMDI2aW5pdF9tbSlcbitcdFx0bW1hcF93cml0ZV91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRwdXRfb25saW5lX21lbXMoKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li5mNGZhMjI3YThkN2YwNCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiArNDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NobXBhcmFtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICsxNTksMjEgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwbWRfcHJlc2VudCgqcG1kKSlcbitcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qXG4rXHQgKiBBY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBleGNsdWRlIHB0ZHVtcCwgd2hpY2ggd2Fsa3NcbitcdCAqIGtlcm5lbCBwYWdlIHRhYmxlcyBpdCBkb2VzIG5vdCBvd24gdW5kZXIgdGhlIG1tYXAgd3JpdGUgbG9jay5cbitcdCAqXG4rXHQgKiBDb25jdXJyZW50IHJlYWQgbG9jayBob2xkZXJzIGFyZSBzYWZlOiBlYWNoIGV4Y2x1c2l2ZWx5IG93bnNcbitcdCAqIHRoZSByYW5nZSBpdCBvcGVyYXRlcyBvbiBhbmQgY2Fubm90IHJlYWNoIHRoaXMgcGFnZSB0YWJsZS5cbitcdCAqL1xuK1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjEwLDEwICsyMjIsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcdTAwMjZcdTAwMjYgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwdWRfcHJlc2VudCgqcHVkKSlcbitcdFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4rXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4rXHRcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yNjIsMTAgKzI3OSwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFx1MDAyNlx1MDAyNiAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRpZiAoIXA0ZF9wcmVzZW50KCpwNGQpKVxuK1x0XHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbitcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTc6NTMuNDQxMzY3ODcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2Nzc5NTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb3JlIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCdzIHR3ZWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBkdW1waW5nIGFuZCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncy4gSXQncyB0b3VjaGluZyBvbiBib3RoIHg4NiBhbmQgYXJtNjQgYXJjaGl0ZWN0dXJlcywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBsb29rLW92ZXIuIEkgc2VlIHRoZXkncmUgcmVtb3ZpbmcgdGhlIGBhcm02NF9wdGR1bXBfbG9ja19rZXlgIGFuZCByZXZpc2luZyB0aGUgc3luY2hyb25pemF0aW9uIGluIGZ1bmN0aW9ucyBsaWtlIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGBwdWRfZnJlZV9wbWRfcGFnZWAsIGFuZCBgcHRkdW1wX3dhbGtfcGdkYC4gVGhhdCBzeW5jaHJvbml6YXRpb24gbG9naWMgY2hhbmdlIGFsd2F5cyB3YXJyYW50cyBleHRyYSBzY3J1dGlueS5cblxuVGhleSdyZSB1c2luZyBgbW1hcF93cml0ZV9sb2NrKFx1MDAyNmluaXRfbW0pYCBpbiBgcHRkdW1wX3dhbGtfcGdkYCBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGFuZCB0aGV5J3ZlIGludHJvZHVjZWQgdGhpcyBgc2NvcGVkX2NvbmRfZ3VhcmRgIHdpdGggYG1tYXBfcmVhZF9sb2NrX3RyeWAgaW4gc2V2ZXJhbCBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgY29uY3VycmVuY3kgaXMgbm93IGhhbmRsZWQgZGlmZmVyZW50bHkgaW4gdGhlc2UgY3JpdGljYWwgdm1hbGxvYyBhcmVhcy4gVGhlc2UgYXJlIGFsbCBjb3JlIGNoYW5nZXMsIGRpcmVjdGx5IGltcGFjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdm1hbGxvYywgc28gSSdtIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBoaWdoIHByaW9yaXR5IGZvciB0ZXN0aW5nLiBHaXZlbiB0aGUgYnJlYWR0aCBvZiB0aGUgaW1wYWN0LCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QgaGVyZS5cblxuTGV0J3MgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGFmZmVjdHMuIEknbSBmb2N1c2luZyBvbjogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYHB0ZHVtcF93YWxrX3BnZGAsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBhbmQgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHN1cHBvc2VkIHRvIHdvcmsgaW4gYm90aCBsb2NrIGFuZCBsb2NrbGVzcyBzY2VuYXJpb3MgYW5kIHdoYXQgc29ydCBvZiBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBDbGVhcmx5LCBgQ09ORklHX1BURFVNUF9DT1JFYCBpcyBpbnZvbHZlZCBiZWNhdXNlIHdlJ3JlIGxvb2tpbmcgYXQgY29kZSBpbiBgbW0vcHRkdW1wLmNgLiBUbyBnZXQgdGhpcyB3b3JraW5nIGZyb20gdXNlcnNwYWNlLCBJJ2xsIG5lZWQgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIFBsdXMsIGBDT05GSUdfREVCVUdfV1hgIHdpbGwgYmUgdXNlZnVsIHNpbmNlIGl0IHRyaWdnZXJzIHB0ZHVtcCBhdCBib290LiBBbmQgb2YgY291cnNlLCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBgIGlzIGVzc2VudGlhbCB0byBlbmFibGUgdGhlIHZtYXAgaHVnZSBwYWdlIGxvZ2ljIHRoYXQncyBiZWluZyBtb2RpZmllZC4gTm93IEkgc2hvdWxkIHF1aWNrbHkgZG8gYSBxdWljayBjb2RlIHNlYXJjaCB0byB2ZXJpZnkgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNldCBpbiB0aGUgcmVsZXZhbnQgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODowMC43MDkxNjY4ODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkyNTQ0NzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfd2Fsa19wZ2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MTY9c3RydWN0IHB0ZHVtcF9pbmZvIHtcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTIxLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIyOnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKTtcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0yMy0jaWZkZWYgQ09ORklHX0FSTV9QVERVTVBfREVCVUdGU1xcbi0tXFxuYXJjaC9hcm0vbW0vZHVtcC5jPTM5OD1zdGF0aWMgdm9pZCB3YWxrX3BnZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvYXJtL21tL2R1bXAuYy00MTQtXFxuYXJjaC9hcm0vbW0vZHVtcC5jOjQxNTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcXG5hcmNoL2FybS9tbS9kdW1wLmMtNDE2LXtcXG4tLVxcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmM9Nz1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmMtMTAtXFxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYzoxMTpcXHRwdGR1bXBfd2Fsa19wZ2QobSwgaW5mbyk7XFxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYy0xMi1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9Mjg2PXZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMxMy1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjMxNDpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cXHUwMDNlbW0sIE5VTEwpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzE1LX1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9MzMxPWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTM1NS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjM1NjpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzU3LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zMzQ9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM1MS1cXHQvKiBUcmF2ZXJzZSBrZXJuZWwgcGFnZSB0YWJsZXMgKi9cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjM1MjpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzUzLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zNjg9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzkxLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM6MzkyOlxcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBcXHUwMDI2aW5pdF9tbSwgTlVMTCk7XFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy0zOTMtXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM1Mz1zdGF0aWMgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGRfbW1faW5mbyAqcGluZm8pXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3Mi1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjM3MzpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgcGluZm8tXFx1MDAzZW1tLCBOVUxMKTtcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3NC19XFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM3Nj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zOTktXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYzo0MDA6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTQwMS1cXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xODI9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTAtXFx0XFx0cmV0dXJuIHRydWU7XFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjIxMTpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTItXFx0aWYgKHN0Lnd4X3BhZ2VzKSB7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI2PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZjcGFfbXV0ZXgpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTE6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3BhX211dGV4KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0zMD1zdHJ1Y3Qgc2VxX2ZpbGU7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjMxOnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMjp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMzLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcik7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM0OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM1OiNkZWZpbmUgcHRkdW1wX2NoZWNrX3d4IHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz04PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy05LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXFx1MDAyNmluaXRfbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MTY9c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE4LVxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVxcdTAwM2VtbSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yMC1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz0yNj1zdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5OlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXFx1MDAzZW1tLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9Mzc9c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM5LVxcdGlmIChlZmlfbW0ucGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0MDpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcXHUwMDI2ZWZpX21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTQxLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDE2PXN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyMi1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MjM6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDI0LVxcdFxcdFxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU3LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1ODpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgbW0sIHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU5LVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDczLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NDp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3NS17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc2OlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc3LX1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzgtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODAtXFx0XFx0XFx0XFx0ICAgYm9vbCB1c2VyKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg2LSNlbmRpZlxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ4NzpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00OTA9dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDAtXFx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwMTpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShOVUxMLCBcXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAyLSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwNTpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwOS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MTA6XFx0cmV0dXJuIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBJTklUX1BHRCwgdHJ1ZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUxMS19XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM9NzU9dm9pZCBfX2luaXQgZWZpX2R1bXBfcGFnZXRhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzctI2lmZGVmIENPTkZJR19FRklfUEdUX0RVTVBcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM6Nzg6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFxcdTAwMjZpbml0X21tKTtcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzktI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmM9NDIzPXZvaWQgX19pbml0IGVmaV9kdW1wX3BhZ2V0YWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jLTQyNS0jaWZkZWYgQ09ORklHX0VGSV9QR1RfRFVNUFxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYzo0MjY6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFxcdTAwMjZlZmlfbW0pO1xcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYy00MjctI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTEzPXN0cnVjdCBwdGR1bXBfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjI4OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMjktXFx0XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zMC1cXHRcXHRcXHRcXHRib29sIGNoZWNrd3gsIGJvb2wgZG1lc2cpO1xcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTMyLWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xcbi0tXFxubW0vcHRkdW1wLmM9MTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcHRkdW1wX29wcyA9IHtcXG4tLVxcbm1tL3B0ZHVtcC5jLTE3NC1cXG5tbS9wdGR1bXAuYzoxNzU6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxcbm1tL3B0ZHVtcC5jLTE3Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjAzLjYzNDYyMDIzMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTQ2NDQ1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIHB0ZHVtcCBXYWxrIFRyaWdnZXIqKlxuXG5SaWdodCwgc28gdGhlIGBwdGR1bXBgIHdhbGssIGFzIEkgcmVjYWxsLCBpcyBpbml0aWF0ZWQgdGhyb3VnaCB0aG9zZSBkZWJ1Z2ZzIGZpbGVzLiBMZXQncyBnZXQgdG8gdGhlIGhlYXJ0IG9mIGhvdyB0aGF0J3MgY29uZmlndXJlZC4gTXkgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGluIGBhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmNgIGFuZCBgYXJjaC9hcm02NC9tbS9wdGR1bXAuY2AuIFRoYXQgc2hvdWxkIHNob3cgbWUgcHJlY2lzZWx5IGhvdyB0aGUgZGVidWdmcyBlbnRyaWVzIGFyZSBjcmVhdGVkIGFuZCBsaW5rZWQgdG8gdGhlIGBwdGR1bXBgIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc207IEknbSBiZXR0aW5nIG9uZSBvZiB0aGVzZSBmaWxlcyB3aWxsIGJlIHRoZSBrZXkuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBjYWxsIHBhdGguIE9uY2UgSSBzZWUgaG93IGRlYnVnZnMgaXMgd2lyZWQgaW4sIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlIGZpbGVzIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEwNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjA3LjM4OTI2NzEzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA0NzAxMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlYnVnZnNfY3JlYXRlX2ZpbGUuKnB0ZHVtcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jPTE2PXZvaWQgX19pbml0IHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSlcXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jLTE3LXtcXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jOjE4OlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgMDQwMCwgTlVMTCwgaW5mbywgXFx1MDAyNnB0ZHVtcF9mb3BzKTtcXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jLTE5LX1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wX2RlYnVnZnMuYz0xNj12b2lkIF9faW5pdCBwdGR1bXBfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKm5hbWUpXFxuYXJjaC9hcm02NC9tbS9wdGR1bXBfZGVidWdmcy5jLTE3LXtcXG5hcmNoL2FybTY0L21tL3B0ZHVtcF9kZWJ1Z2ZzLmM6MTg6XFx0ZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCAwNDAwLCBOVUxMLCBpbmZvLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wX2RlYnVnZnMuYy0xOS19XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwdGR1bXBfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy00MjAtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKSlcXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMTpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtNDIyLVxcbi0tXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTMxNT1zdGF0aWMgaW50IHB0X2R1bXBfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1Ni0jaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM1NzpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTgtI2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IHB0X2R1bXBfZGVidWdfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTUyLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1MzpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxcXFwiLCAwNDAwLCBkaXIsIE5VTEwsIFxcdTAwMjZwdGR1bXBfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTU0LVxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImN1cnJlbnRfa2VybmVsXFxcIiwgMDQwMCwgZGlyLCBOVUxMLFxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYxLSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NjI6XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZWZpXFxcIiwgMDQwMCwgZGlyLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2VmaV9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNjMtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjEwLjM5Mzk3NjU4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODYzODQ5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgcmVxdWlyZWQuIFRoYXQncyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgSSdtIG5vdCBnb2luZyB0byBqdW1wIHRvIGNvbmNsdXNpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiBpdCdzIG5lZWRlZC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgXCJJcyB0aGlzIGp1c3QgYWx3YXlzIG9uLCBvciBjb25kaXRpb25hbD9cIiBJIHJlbWVtYmVyIHNlZWluZyBgYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jYCBmbG9hdGluZyBhcm91bmQgcmVjZW50bHksIGFuZCB0aGF0ICpmZWx0KiBjb25kaXRpb25hbCBpbiBpdHMgY29tcGlsYXRpb24uIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYGFyY2gveDg2L21tL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB3b3VsZCBiZS4gSSBuZWVkIHRvIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBkZXBlbmRlbnQgb24gb3RoZXIgdmFyaWFibGVzIG9yIGlmIHRoZXJlJ3MgbW9yZSB0byBpdCB0aGFuIG1lZXRzIHRoZSBleWUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhhdCBNYWtlZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoxMy4zODAzNjQ2NDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0OTIxNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlYnVnX3BhZ2V0YWJsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBkdW1wX3BhZ2V0YWJsZXMub1xcbmFyY2gveDg2L21tL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19QVERVTVBfREVCVUdGUylcXHQrPSBkZWJ1Z19wYWdldGFibGVzLm9cXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZS0zOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MTMuNTI1MjkwOThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAxNDc2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgTWVtb3J5IE1hcHBpbmcgQ2hhbmdlcyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCB0aGF0J3MgZ29pbmcgdG8gdHJpZ2dlciBzb21lIHBhZ2UgdGFibGUgZHVtcHMsIGFuZCBpdCdzIGVuYWJsZWQgYnkgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIFRoYXQncyBnb29kLCBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcuIEFuZCwgYWhhLCBgQ09ORklHX0RFQlVHX1dYYCBhbHNvIGRvZXMgaXQsIG1lYW5pbmcgdGhlIHN5c3RlbSB3aWxsIGR1bXAgcHRkdW1wcyBhdCBib290LiBUaGF0IG5hcnJvd3MgZG93biB0aGUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCB0aGlzIGNvZGUgZXhlY3V0ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG1tL3ZtYWxsb2MuY2AgYW5kIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRob3NlIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gT2theSwgZm9jdXNpbmcgb24gYG1tL3ZtYWxsb2MuY2AsIHRoZSBwYXRjaCB0b3VjaGVzIGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGFuZCBgdm1hcF90cnlfaHVnZV9wNGRgLiBUaG9zZSBhcmUgYWxsIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIG1hcHBpbmcgd2l0aGluIGB2bWFsbG9jYC4gVGhhdCBtZWFucyB0aGlzIGlzIGFsbCB2ZXJ5IHJlbGV2YW50IHRvIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpZiB0aGlzIGlzIGVuYWJsZWQsIGl0IHNob3VsZCB3b3JrIGFzIGlzLiBUaW1lIHRvIHB1bGwgdXAgYG1tL3ZtYWxsb2MuY2AgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZCB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoxNy45MjY3NzA4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NTc4NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9OTU9c3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE0Mi1cXG5tbS92bWFsbG9jLmM6MTQzOnN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS92bWFsbG9jLmMtMTQ0LVxcdFxcdFxcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcXG4tLVxcbm1tL3ZtYWxsb2MuYz0xNzk9c3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE5Mi1cXG5tbS92bWFsbG9jLmM6MTkzOlxcdFxcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcXG5tbS92bWFsbG9jLmMtMTk0LVxcdFxcdFxcdFxcdFxcdG1heF9wYWdlX3NoaWZ0KSkge1xcbi0tXFxubW0vdm1hbGxvYy5jPTIwNj1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMjI3LVxcbm1tL3ZtYWxsb2MuYzoyMjg6XFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG5tbS92bWFsbG9jLmMtMjI5LVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjYzPXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yODQtXFxubW0vdm1hbGxvYy5jOjI4NTpcXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xcbm1tL3ZtYWxsb2MuYy0yODYtXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MTguMDM1MzU4OTk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTcyODk4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb246XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdGF0dXMgb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYC4gVGhlcmUncyBubyB0aW1lIHRvIHdhc3RlIHdhZGluZyB0aHJvdWdoIGV2ZXJ5dGhpbmcuIEkgd2FudCBhIGRlZmluaXRpdmUgYW5zd2VyIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgZnVuY3Rpb24gaXMgKmFsd2F5cyogcHJlc2VudCBpbiB0aGUgYnVpbGQsIG9yIGlmIGl0J3MgZ2F0ZWQgYmVoaW5kIHNvbWUgY29uZmlndXJhdGlvbiBtYWNyby4gVGltZSB0byBxdWlja2x5IGZpbmQgb3V0IGlmIEkgbmVlZCB0byBldmVuIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGl0IG1pZ2h0IGJlIHVuYXZhaWxhYmxlIG9uIGEgZ2l2ZW4gdGFyZ2V0LiBJIG5lZWQgdG8ga25vdyB3aGljaCBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJlcywgZmVhdHVyZXMsIG9yIGNvbmZpZ3VyYXRpb25zIHdpbGwgaW1wYWN0IGl0cyBwcmVzZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoyMS4wMzI2NTI0NDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjA1MjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfSFVHRV9WTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmMtNTMtXFxubW0vdm1hbGxvYy5jOjU0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUFxcbm1tL3ZtYWxsb2MuYy01NS1zdGF0aWMgdW5zaWduZWQgaW50IF9fcm9fYWZ0ZXJfaW5pdCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gQklUU19QRVJfTE9ORyAtIDE7XFxuLS1cXG5tbS92bWFsbG9jLmM9NjI9ZWFybHlfcGFyYW0oXFxcIm5vaHVnZWlvbWFwXFxcIiwgc2V0X25vaHVnZWlvbWFwKTtcXG5tbS92bWFsbG9jLmM6NjM6I2Vsc2UgLyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVAgKi9cXG5tbS92bWFsbG9jLmMtNjQtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcXG5tbS92bWFsbG9jLmM6NjU6I2VuZGlmXFx0LyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVAgKi9cXG5tbS92bWFsbG9jLmMtNjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjIxLjEzNDcxMjkzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYxOTY0MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHZtYXBfdHJ5X2h1Z2VfcG1kYCB3YXMgb25seSBjb21waWxlZCBpbiBpZiB3ZSBoYWQgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQYCBkZWZpbmVkLCBidXQgdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgdGhlIGNhc2UuIEl0IGxvb2tzIGxpa2UgaXQncyB1bmNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBUaGlzIGlzIGludGVyZXN0aW5nLlxuXG5TbywgZXZlbiBpZiB0aGUgYXJjaGl0ZWN0dXJlICpkb2Vzbid0KiBzdXBwb3J0IGh1Z2Ugdm1hcHMsIHRoZSBmdW5jdGlvbiBzdGlsbCBleGlzdHMgaW4gdGhlIGNvbXBpbGVkIGNvZGUsIGFsYmVpdCBwb3RlbnRpYWxseSBkb2luZyBub3RoaW5nLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdm1hcF90cnlfaHVnZV9wbWRgIGl0c2VsZiB0byBmdWxseSBncmFzcCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQgY29uZGl0aW9ucyB3b3VsZCB0cmlnZ2VyIGl0IHRvIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIGl0IHNpbXBseSByZXR1cm5zIGEgdmFsdWUgd2l0aG91dCB0YWtpbmcgYW55IGFjdGlvbi4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtYXhfcGFnZV9zaGlmdGAgYW5kIGBQTURfU0hJRlRgIGlzIG9idmlvdXNseSBrZXkuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHRoYXQncyBhbGwgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MjQuNjk2NjgwMDYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzQ4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MzpcXHRzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIDE0NDpcXHRcXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuIDE0NTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXFxuIDE0NjpcXHR7XFxuIDE0NzpcXHRcXHRpZiAobWF4X3BhZ2Vfc2hpZnQgXFx1MDAzYyBQTURfU0hJRlQpXFxuIDE0ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0aWYgKCFhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSlcXG4gMTUxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRpZiAoKGVuZCAtIGFkZHIpICE9IFBNRF9TSVpFKVxcbiAxNTQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdGlmICghSVNfQUxJR05FRChhZGRyLCBQTURfU0laRSkpXFxuIDE1NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxcbiAxNjA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXFxuIDE2MzpcXHRcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0LypcXG4gMTY2OlxcdFxcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xcbiAxNjc6XFx0XFx0ICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLlxcbiAxNjg6XFx0XFx0ICpcXG4gMTY5OlxcdFxcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xcbiAxNzA6XFx0XFx0ICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLlxcbiAxNzE6XFx0XFx0ICovXFxuIDE3MjpcXHRcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbiAxNzM6XFx0XFx0XFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxcbiAxNzQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE3NTpcXHRcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4gMTc2OlxcdFxcdH1cXG4gMTc3OlxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0c3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiAxODA6XFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxcbiAxODE6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4gMTgyOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MjQuNjk4MDE5MTUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTc0NzA0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSHVnZSBQYWdlIE1hcHBpbmcqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBgbWF4X3BhZ2Vfc2hpZnRgIHZhbHVlIGlzIHVsdGltYXRlbHkgZGVyaXZlZCBmcm9tIGVpdGhlciBgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdGAgb3IgYHZtYXBfbWF4X3BhZ2Vfc2hpZnRgLiBOb3csIGlmIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXNuJ3QgZW5hYmxlZCwgdGhlbiBgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdGAgc2ltcGx5IGRlZmF1bHRzIHRvIGBQQUdFX1NISUZUYC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoYXQgY29uZGl0aW9uIGlzIG1ldCwgYG1heF9wYWdlX3NoaWZ0YCB3aWxsICphbHdheXMqIGJlIGxlc3MgdGhhbiBgUE1EX1NISUZUYCwgcmlnaHQ/IENvbnNlcXVlbnRseSwgdGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJhaWwgb3V0IGFuZCByZXR1cm4gMC4gU28sIGl0J3MgY2xlYXI6IHRvIGV2ZW4gKmNvbnNpZGVyKiB0aGUgbW9kaWZpZWQgbG9naWMgd2l0aGluIGB2bWFwX3RyeV9odWdlX3BtZGAsIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgKm11c3QqIGJlIGRlZmluZWQuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MzAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoyOS4yMTU0OTUyOTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTEzNjc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQxMj1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDEzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDE0OnN0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDE1LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQ1LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDQ2OnN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ0Ny17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1NC1cXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ1NTpcXHRcXHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU2LX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDU4PXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00OTMtXFx0aWYgKGNwYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBDUEFfQ09MTEFQU0UpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0OTQ6XFx0XFx0Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00OTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoyOS4zMjY2Mzc4NTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NjI4NzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBzeXN0ZW1zIGVuZ2luZWVyOlxuXG4qKkRlY29uc3RydWN0aW5nIE1lbW9yeSBBdHRyaWJ1dGUgQ2hhbmdlcyoqXG5cblJpZ2h0LCBzbyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBnZXR0aW5nIHRyaWdnZXJlZCBmcm9tIGBjcGFfZmx1c2hgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBwdXRzIG1lIGluIG1pbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIExvb2tpbmcgY2xvc2VyLCBpdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIHdoaWNoIGlzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZ5aW5nIG1lbW9yeSBhdHRyaWJ1dGVzLiBUaGluZ3MgbGlrZSByZWFkLW9ubHksIG5vLWV4ZWN1dGUsIGV0Yy4gYXJlIGhhbmRsZWQgaGVyZS5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIGlzICphbHdheXMqIGNvbXBpbGVkIG9uIHg4NiBpcyBhIGNydWNpYWwgZGV0YWlsLiBJdCBzdWdnZXN0cyB0aGlzIHBhcnRpY3VsYXIgbG9naWMgaXMgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBhcmNoaXRlY3R1cmUuIEknZCBiZSB3aWxsaW5nIHRvIGJldCB0aGlzIG9wdGltaXphdGlvbiBpcyBzcGVjaWZpYyB0byB4ODYncyBtZW1vcnkgbW9kZWwgYW5kIHBhZ2UgdGFibGUgbWFuYWdlbWVudC4gVGhpcyBoaW50cyBhdCBzb21ldGhpbmcgcG90ZW50aWFsbHkgbGV2ZXJhZ2luZyBzcGVjaWZpYyBDUFUgZmVhdHVyZXMuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGZ1bmN0aW9uIG1lbnRpb25lZC4gQSBxdWljayBsb29rIGF0IGBtbS9wYWdld2Fsay5jYCB3aWxsIHByb2JhYmx5IGNsYXJpZnkgaG93IHRoaXMgcGFnZSByYW5nZSBtYW5pcHVsYXRpb24gb3BlcmF0ZXMuIEl0J2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gaXRlcmF0aW5nIHRocm91Z2ggcGFnZSB0YWJsZSBlbnRyaWVzIGFuZCBhcHBseWluZyB0aGUgYXR0cmlidXRlIGNoYW5nZXMgZWZmaWNpZW50bHkuIExldCdzIHNlZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MzMuNDIyOTI4MDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUzNDY2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2V3YWxrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZXdhbGsuYz02NDg9aW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTY2Ny0vKipcXG5tbS9wYWdld2Fsay5jOjY2ODogKiB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcgLSB3YWxrIGEgcmFuZ2Ugb2YgcGFnZXRhYmxlcyBub3QgYmFja2VkIGJ5IGEgdm1hXFxubW0vcGFnZXdhbGsuYy02NjktICogQG1tOlxcdFxcdG1tX3N0cnVjdCByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBwcm9jZXNzIG9mIHBhZ2UgdGFibGUgd2Fsa1xcbi0tXFxubW0vcGFnZXdhbGsuYy02ODMtICovXFxubW0vcGFnZXdhbGsuYzo2ODQ6aW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9wYWdld2Fsay5jLTY4NS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MzMuNTM4MjgyNDIxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTgzNjM5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGFuZ2VzIHRvIFBhZ2UgVGFibGUgRGVidWdnaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIHdoaWNoIGlzIGNhbGxlZCBieSBgcHRkdW1wX3dhbGtfcGdkYCBpbiBgbW0vcHRkdW1wLmNgLiBUaGUgbWFpbiBhZGRpdGlvbiBpcyBhbiBgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKFx1MDAyNmluaXRfbW0pYCBjYWxsIGluc2lkZSBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC4gVGhhdCdzIGludGVyZXN0aW5nLCBpbXBsaWVzIHdlJ3JlIHRyeWluZyB0byB0aWdodGVuIHVwIHNvbWUgbG9ja2luZyBhcm91bmQgdGhlIGluaXRpYWwgbWVtb3J5IG1hcC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgd2UncmUgZGlnZ2luZyBhcm91bmQgaW4gcGFnZSB0YWJsZXMgYW5kIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBjb25jdXJyZW50IGFjY2Vzcy5cblxuTGV0IG1lIHNlZSwgdGhlIGZ1bmN0aW9ucyByZWFsbHkgaW4gcGxheSBoZXJlIGFyZSBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIG9mIGNvdXJzZSBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0IHdpdGggZWFjaCBvdGhlciBpbiB0aGlzIG5ldyBjb250ZXh0LlxuXG5UaGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgUFREVU1QX0RFQlVHRlNgLCBgREVCVUdfV1hgLCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgSEFWRV9BUkNIX0hVR0VfVk1BUGAgdG8gbWFrZSBzdXJlIGl0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgbm90IGp1c3QgYSBtYWNyby4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmxhZ3MgYWZmZWN0IHRoZSBvdmVyYWxsIGJlaGF2aW9yIGFuZCB3aGF0IGFyY2hpdGVjdHVyZXMgdGhpcyBjaGFuZ2UgaW1wYWN0cy4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgd2hlbiBhc3Nlc3NpbmcgdGhlc2Uga2luZCBvZiBjaGFuZ2VzLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgYnJlYWtpbmcgc29tZXRoaW5nIG9uIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgb3IgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MzguMDk2NjQ5NjY4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI4NzYzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDg5PWNvbmZpZyBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuLS1cXG5hcmNoL0tjb25maWctMTA5MS1cXG5hcmNoL0tjb25maWc6MTA5Mjpjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6NDAuNTI1NDE5MTc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTM5NzI3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0J3MgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBmdWxseS4gQXJlIHRoZXJlICpvdGhlciogcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgd2hpY2ggY291bGQgaW1wYWN0IHRoaXMgb25lPyBUaGUgZGVwZW5kZW5jeSBncmFwaCBpcyB0aGUga2V5IGhlcmUuIExldCdzIHNlZS4uLiBBaCwgYENPTkZJR19QVERVTVBfQ09SRWAgaXMgKnNlbGVjdGVkKiBieSBib3RoIGBQVERVTVBfREVCVUdGU2AgYW5kIGBERUJVR19XWGAuIFRoYXQncyBpbXBvcnRhbnQuIEl0IHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgdGhlIHN0YXRlIG9mICp0aGlzKiBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgY29udHJvbGxlZCBieSBhIGNvdXBsZSBvZiBvdGhlciB0aGluZ3MuIE5vdyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY3kgYFBURFVNUF9ERUJVR0ZTYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCBpbXBhY3RzLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIGFuZCB0aGUgaW1wbGljYXRpb25zIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwODUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODo0My40MzkzOTYxNDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTcxMjMzMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURFVNUF9ERUJVR0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MjE5PWNvbmZpZyBQVERVTVBcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjIxLVxcbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xcbm1tL0tjb25maWcuZGVidWctMjIzLVxcdGJvb2wgXFxcIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjQ1LjgzNjUzOTAxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTM4MDQzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBhIGRlZXAgZGl2ZSBpbnRvIGRlYnVnZ2luZzpcblxuKipEZWJ1Z2dpbmcgSW5pdGlhdGl2ZTogVGhlIGBERUJVR19XWGAgVmFyaWFibGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHRyb3VibGVzaG9vdC4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBpbW1lZGlhdGVseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBERUJVR19XWGAuIFRoYXQgdmFyaWFibGUgaXMgdXN1YWxseSB0aGUgbGluY2hwaW4gaW4gdGhpcyB0eXBlIG9mIHByb2JsZW0sIGFuZCBJIGFtIGJldHRpbmcgSSBhbSBnb2luZyB0byBmaW5kIHNvbWV0aGluZyB0aGVyZS4gSXMgaXQgb24sIG9mZiwgc2V0IGluY29ycmVjdGx5PyBJdHMgc3RhdGUgd2lsbCBzdGVlciB0aGUgbmV4dCBtb3ZlLiBUaGlzIHdpbGwgbGlrZWx5IHByb3ZpZGUgaW5pdGlhbCBjb250ZXh0IGZvciB0aGUgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDA4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODo0OC45NTAzNDg4NTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzI3NTE3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFQlVHX1dYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MTgzPWNvbmZpZyBBUkNIX0hBU19ERUJVR19XWFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0xODUtXFxubW0vS2NvbmZpZy5kZWJ1ZzoxODY6Y29uZmlnIERFQlVHX1dYXFxubW0vS2NvbmZpZy5kZWJ1Zy0xODctXFx0Ym9vbCBcXFwiV2FybiBvbiBXK1ggbWFwcGluZ3MgYXQgYm9vdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6NTEuNTIzMTA1NTA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjA3ODU5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUFREVU1QX0RFQlVHRlNgIGFuZCBgREVCVUdfV1hgIGxvb2sgcHJvbWlzaW5nIGFzIHN0YXJ0aW5nIHBvaW50cy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBDT05GSUdfWDg2X1BBVGAgZGlyZWN0aXZlLiBIbW1tLCB0aGUgYXNzb2NpYXRlZCBmaWxlIGlzIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZpbGUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX1g4Nl9QQVRgPyBMZXQncyBxdWlja2x5IHZlcmlmeSBieSBvcGVuaW5nIGFuZCBjaGVja2luZyB0aGUgYGFyY2gveDg2L21tL3BhdC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBUaGF0J2xsIGdpdmUgbWUgYSBkZWZpbml0aXZlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODo1NC43NDM4OTQzNDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTQ2NTEwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtMi1cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVxcdFxcdFxcdFxcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6NTUuMTM1MzY3NTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk3MDI2OTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgUmVjZW50IE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSByZWNlbnQgY2hhbmdlcy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBmb2N1cyBpcyBvbiBtZW1vcnkgbWFwcGluZyBhbmQgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIGFuZCBpdCdzIGFsbCBjb21waWxlZCwgb2YgY291cnNlLlxuXG5GaXJzdCwgaW4gYG1tL3ZtYWxsb2MuY2AsIHRoZXJlJ3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIHZtYWxsb2MgaHVnZSBwYWdlcy4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgbG9jayB1c2luZyBgc2NvcGVkX2NvbmRfZ3VhcmRgIHdpdGhpbiBgcG1kX2ZyZWVfcHRlX3BhZ2VgLiBUaGlzIHN1Z2dlc3RzIHRoZXkncmUgdHJ5aW5nIHRvIGltcHJvdmUgc3luY2hyb25pemF0aW9uIHdoZW4gbWFwcGluZyB0aGVzZSBodWdlIHBhZ2VzLCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuVGhlbiwgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24gaXMgZ2V0dGluZyBhIGxvY2sgYXMgd2VsbCwgdXNpbmcgYHNjb3BlZF9ndWFyZGAuIEl0IHNlZW1zIHRoaXMgaXMgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMgYW5kIGF2b2lkaW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgYHB0ZHVtcGAgZnVuY3Rpb25hbGl0eS4gVGhhdCBhbHNvIG1ha2VzIHNlbnNlLlxuXG5OZXh0LCB0aGUgYG1tL3B0ZHVtcC5jYCBmaWxlIGhhcyBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGBpbml0X21tYCBsb2NraW5nIHdpdGhpbiBgcHRkdW1wX3dhbGtfcGdkYC4gVGhleSdyZSBhY3F1aXJpbmcgdGhlIGBpbml0X21tYCBsb2NrIG5vdywgd2hpY2ggaXMgZGVmaW5pdGVseSBkZXNpZ25lZCB0byBpbXByb3ZlIHN0YWJpbGl0eSBvZiBrZXJuZWwgcGFnZSB0YWJsZXMgYnkgYWNxdWlyaW5nIGEgbG9jayBvbiBgaW5pdF9tbWAsIHNvIGEgZ29vZCBjaGFuZ2UuXG5cbkZpbmFsbHksIGluIGBhcmNoL2FybTY0L21tL21tdS5jYCwgdGhleSd2ZSByZW1vdmVkIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMgYnJhbmNoIGFuZCB0aGUgYG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pYCBmcm9tIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuIFRoaXMgc2VlbXMgdG8gYmUgYSBjbGVhbnVwIGFuZCBzaW1wbGlmaWNhdGlvbiwgcGVyaGFwcyBhZnRlciBwcmV2aW91cyBsb2NraW5nIGNoYW5nZXMgb3IgaW1wcm92ZW1lbnRzLlxuXG5PdmVyYWxsLCB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHNldCBvZiBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGFyZSBhbGwgY2hhbmdlcyB0aGF0IGFyZSBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgdGhpbmsgdGhlIGtleSBhcmVhcyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZyB3aWxsIGJlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwdGR1bXBfd2Fsa19wZ2RgLCBhbmQgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuXG5cbkFzIGZvciBjb25maWdzLCBgUFREVU1QX0RFQlVHRlNgLCBgREVCVUdfV1hgLCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgIHNlZW0gcmVsZXZhbnQuIEkgc2hvdWxkIGNoZWNrIGlmIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCBpcyB1c2VyLXNlbGVjdGFibGUsIGJlY2F1c2UgdGhhdCdzIGFsd2F5cyB1c2VmdWwgZm9yIGZ1enplciBzZWxlY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE5OjA0LjEwNTY0MDkxNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1NzA1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDg5PWNvbmZpZyBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuLS1cXG5hcmNoL0tjb25maWctMTA5MS1cXG5hcmNoL0tjb25maWc6MTA5Mjpjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTk6MDQuMTk2MjE4NDE0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzY5Njc3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFyY2hpdGVjdHVyYWwgU2VsZWN0aW9uLCBOb3QgVXNlciBDaG9pY2UqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBhIGZlYXR1cmUsIG9yIHBlcmhhcHMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGl0J3Mgbm90IHNvbWV0aGluZyB0aGUgZW5kLXVzZXIgZ2V0cyB0byB0d2lkZGxlIHdpdGggZGlyZWN0bHkuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGUgKmFyY2hpdGVjdHVyZSBpdHNlbGYqIGRldGVybWluZXMgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90LiBUaGluayBvZiBpdCBsaWtlIHRoaXM6IHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBpdHNlbGYsIGl0cyBmdW5kYW1lbnRhbCBkZXNpZ24sIGlzIHdoYXQncyBtYWtpbmcgdGhlIGNhbGwuIEl0J3Mgbm90IGEgY29tcGlsZS10aW1lIGZsYWcgdGhlIHVzZXIgY2FuIHNpbXBseSBmbGlwLlxuXG5UaGUgZXhhbXBsZSBoaWdobGlnaHRzIHRoYXQgY2xlYXJseSwgbGlrZSB4ODYgYW5kIGFybTY0IGFyY2hpdGVjdHVyZXMgYXJlIHRoZSBvbmVzIG1ha2luZyB0aGF0IHNlbGVjdGlvbiwgd2hpY2ggaGVscHMgY29udGV4dHVhbGl6ZSB3aGF0IGlzIGdvaW5nIG9uLlxuXG5UbyByZWFsbHkgbmFpbCB0aGlzIGRvd24sIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciB4ODYtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIExldCBtZSBzZWUgd2hhdCBgYXJjaC94ODYvS2NvbmZpZ2AgcmV2ZWFscy4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDgyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTk6MDguMTMzMTg5Mjk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMzNjEyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTkxLVxcdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXFxuYXJjaC94ODYvS2NvbmZpZzoxOTI6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcXHRcXHRpZiBYODZfNjQgfHwgWDg2X1BBRVxcbmFyY2gveDg2L0tjb25maWctMTkzLVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFx0XFx0aWYgWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE5OjA4LjMzNjU1NjYzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwOTczOTk0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gVHdlYWtzIGZvciBJbXByb3ZlZCBEZWJ1Z2dpbmcqKlxuXG5Pa2F5LCBzbyB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZSBoYXMgaHVnZSB2bWFwcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkgZG9uJ3QgdGVjaG5pY2FsbHkgKm5lZWQqIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0LiBIb3dldmVyLCBpdCB3b3VsZG4ndCBodXJ0IHRvIGxpc3QgaXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEJ1dCBoYW5nIG9uLCBgSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgYSBzdHJhaWdodCBib29sZWFuLCBubyBwcm9tcHQsIHNvIEkgY2FuJ3QgZGlyZWN0bHkgZW5hYmxlIGl0IGluIHRoZSBgLmNvbmZpZ2AgZmlsZS4gSSdtIGJldHRlciBvZmYgb21pdHRpbmcgaXQgZW50aXJlbHksIG9yIGp1c3QgbGlzdGluZyBpdCwgc2luY2Ugc3l6Ym90IHdpbGwganVzdCBpZ25vcmUgaXQgaWYgaXQgY2FuJ3QgYmUgc2V0LiBCdXQgeWVzLCBJIHNob3VsZCBkZWZpbml0ZWx5IGxpc3QgYFBURFVNUF9ERUJVR0ZTYCBhbmQgYERFQlVHX1dYYC4gVGhvc2UgYXJlIGNyaXRpY2FsLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBJdCdzIGRlZmluZWQgc3RhdGljYWxseS4gQnV0IHRoZSBpbmZvcm1hdGlvbiBtaWdodCBiZSB1c2VmdWwsIHNvIGxldCdzIGxpc3QgaXQgYW55d2F5LiBXYWl0IGEgc2Vjb25kLi4uIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGNhbGxlZCBmcm9tIGBjcGFfZmx1c2hgLiBPa2F5LCB0aGF0IHNlYWxzIGl0LiBJIHNob3VsZCAqZGVmaW5pdGVseSogbGlzdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gQXMgd2VsbCBhcyBgcHRkdW1wX3dhbGtfcGdkYCwgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYW5kIGB2bWFwX3RyeV9odWdlX3B1ZGAgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuIFRob3NlIGFsbCBzZWVtIHJlbGV2YW50IHRvIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy5cblxuUmlnaHQsIEkgdGhpbmsgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZG9uZS4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTA1LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxOToxNS40MzM5NjQ2NTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE5NjQxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-17 02:40:22 +0000 UTC FinishedAt: 2026-07-17 03:19:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e22254e9ddd8020130c4b806b6b4aa77b09c2560", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e22254e9ddd8020130c4b806b6b4aa77b09c2560", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX" ], "series_id": "c5018216-cfee-41ae-ba51-df25f51236d4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "vmap_try_huge_pmd", "vmap_try_huge_pud", "vmap_try_huge_p4d", "cpa_collapse_large_pages", "ptdump_walk_pgd", "walk_page_range_debug" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgYW5kIHg4NiBDUEEgKGNoYW5nZSBwYWdlIGF0dHJpYnV0ZSkgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHVzaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNiMDE5MWZhYWM3YTdhMWNiMzk3NTY1YmYxM2NhZTJkNDc3YThmNTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAwMzoxNzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuQEAgLTcsOCAmIzQzOzcsNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0ZHVtcC5oXHUwMDNlXG4gXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gI2lmZGVmIENPTkZJR19QVERVTVBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGEyNWQ4YmVhY2M4MzEwLi5iZDUyZmNhNmU4NzIwYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC00OSw4ICYjNDM7NDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NjQsOCAmIzQzOzE4NjIsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXG4mIzQzO2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90ICp0YWJsZTtcbiBcdHBtZF90IHBtZDtcbkBAIC0xODc3LDI1ICYjNDM7MTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkxMSwzNiAmIzQzOzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHR9XG4gXG4gXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4tXG4tXHQvKlxuLVx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXG4tXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cbi1cdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXG4tXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcbi1cdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xuLVx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcbi1cdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxuLVx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXG4tXHQgKi9cbi1cdHB1ZF9jbGVhcihwdWRwKTtcbi1cdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHBtZHAgPSB0YWJsZTtcbiBcdG5leHQgPSBhZGRyO1xuIFx0ZW5kID0gYWRkciAmIzQzOyBQVURfU0laRTtcbiBcdGRvIHtcbiBcdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4mIzQzO1x0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuIFx0fSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4gXG4mIzQzO1x0cHVkX2NsZWFyKHB1ZHApO1xuJiM0MztcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4gXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4te1xuLVx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xuLVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi19XG4tXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XG5AQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSk7XG4mIzQzO1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICYjNDM7MzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuIFxuIFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xuIFx0XHRwcl93YXJuKFwmIzM0O0NoZWNrZWQgVyYjNDM7WCBtYXBwaW5nczogRkFJTEVELCAlbHUgVyYjNDM7WCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li5kMWU2M2Y3ZDI2N2ZmMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQxMCw3ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbiBcbi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4mIzQzO3N0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGFkZHIsIGVuZDtcbiBcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcbkBAIC00NDIsNiAmIzQzOzQ0MywxOCBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxuJiM0MztcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cbiYjNDM7XHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXG4mIzQzO1x0ICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICYjNDM7NjIxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gREVGSU5FX0dVQVJEKG1tYXBfcmVhZF9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4gXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXG4mIzQzO0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiYjNDM7XHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcbiYjNDM7REVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jXG5AQCAtNjc4LDYgJiM0Mzs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZFxuICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLlxuICAqXG4gICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxuICAqL1xuIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5AQCAtNjkxLDI0ICYjNDM7NjkzLDI4IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdC5ub192bWFcdFx0PSB0cnVlXG4gXHR9O1xuIFxuLVx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xuLVx0aWYgKG1tID09IFx1MDAyNmluaXRfbW0pXG4tXHRcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcbi1cdFx0XHRcdFx0XHQgICAgcGdkLCBwcml2YXRlKTtcbi1cdGlmIChzdGFydCBcdTAwM2U9IGVuZCB8fCAhd2Fsay5tbSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0Lypcbi1cdCAqIFRoZSBtbWFwIGxvY2sgcHJvdGVjdHMgdGhlIHBhZ2Ugd2Fsa2VyIGZyb20gY2hhbmdlcyB0byB0aGUgcGFnZVxuLVx0ICogdGFibGVzIGR1cmluZyB0aGUgd2Fsay4gIEhvd2V2ZXIgYSByZWFkIGxvY2sgaXMgaW5zdWZmaWNpZW50IHRvXG4tXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzXG4tXHQgKiB0aGUgVk1BcyBiZWZvcmUgZG93bmdyYWRpbmcgdG8gYSByZWFkIGxvY2sgYW5kIGFjdHVhbGx5IHRlYXJpbmdcbi1cdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcbi1cdCAqIGJlIGhlbGQuXG4mIzQzO1x0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXG4mIzQzO1x0ICogYWNjb3VudCBmb3IgbXVubWFwKCkgZG93bmdyYWRpbmcgdG8gYW4gbW1hcCByZWFkIGxvY2sgd2hlbiB0ZWFyaW5nXG4mIzQzO1x0ICogZG93biBwYWdlIHRhYmxlcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdoZW4gd2Fsa2luZyBrZXJuZWwgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGFsc28gYmUgaGVsZFxuJiM0MztcdCAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLlxuIFx0ICovXG4gXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogeDg2LCBhcm02NCBwdGR1bXAgYWxsb3cgd2Fsa3Mgb2YgZWZpIG1tJiMzOTtzIGFuZCB4ODYgcHRkdW1wIGFsbG93cyB3YWxrc1xuJiM0MztcdCAqIG9mIGFyYml0cmFyeSBtbSYjMzk7cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXG4mIzQzO1x0ICogY29uY3VycmVudCBrZXJuZWwgcGFnZSB0YWJsZSBmcmVlaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXHUwMDI2d2Fsayk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcbi0tLSBhL21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wdGR1bXAuY1xuQEAgLTE3OCwxMSAmIzQzOzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG4mIzQzO1x0LyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovXG4mIzQzO1x0aWYgKG1tICE9IFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFx1MDAyNmluaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiYjNDM7XG4gXHR3aGlsZSAocmFuZ2UtXHUwMDNlc3RhcnQgIT0gcmFuZ2UtXHUwMDNlZW5kKSB7XG4gXHRcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbiBcdFx0XHRcdCAgICAgIFx1MDAyNnB0ZHVtcF9vcHMsIHBnZCwgc3QpO1xuIFx0XHRyYW5nZSYjNDM7JiM0Mzs7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0bW1hcF93cml0ZV91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRwdXRfb25saW5lX21lbXMoKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li5mNGZhMjI3YThkN2YwNCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zaG1wYXJhbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcdTAwM2VcbkBAIC0xNTgsMTAgJiM0MzsxNTksMjEgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXG4mIzQzO1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWNxdWlyZSB0aGUgbW1hcCByZWFkIGxvY2sgdG8gZXhjbHVkZSBwdGR1bXAsIHdoaWNoIHdhbGtzXG4mIzQzO1x0ICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQ29uY3VycmVudCByZWFkIGxvY2sgaG9sZGVycyBhcmUgc2FmZTogZWFjaCBleGNsdXNpdmVseSBvd25zXG4mIzQzO1x0ICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjNDM7XHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yMTAsMTAgJiM0MzsyMjIsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcdTAwMjZcdTAwMjYgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXG4mIzQzO1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4mIzQzO1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0aWYgKCFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTI2MiwxMCAmIzQzOzI3OSwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFx1MDAyNlx1MDAyNiAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcbiYjNDM7XHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbiYjNDM7XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzQzO1x0XHRpZiAoIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7REVCVUdfV1gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwX3RyeV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3B1ZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3A0ZCYjMzQ7LAogICAgJiMzNDtjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV9yYW5nZV9kZWJ1ZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYjAxOTFmYWFjN2E3YTFjYjM5NzU2NWJmMTNjYWUyZDQ3N2E4ZjUzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTcgMDM6MTc6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaAppbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaApAQCAtNyw4ICYjNDM7Nyw2IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9wdGR1bXAuaCZndDsKIAotREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KICNpZmRlZiBDT05GSUdfUFREVU1QCiAKICNpbmNsdWRlICZsdDtsaW51eC9tbV90eXBlcy5oJmd0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTQ5LDggJiM0Mzs0OSw2IEBACiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1MJQklUKDEpCiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1MJQklUKDIpCS8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovCiAKLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7CiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTsKIApAQCAtMTg2NCw4ICYjNDM7MTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcCkKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaykKJiM0MztpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwdGVfdCAqdGFibGU7CiAJcG1kX3QgcG1kOwpAQCAtMTg3NywyNSAmIzQzOzE4NzQsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAxOwogCX0KIAotCS8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovCiAJdGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKIAlwbWRfY2xlYXIocG1kcCk7CiAJX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7Ci0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpICZhbXA7JmFtcDsgYWNxdWlyZV9tbWFwX2xvY2spIHsKLQkJbW1hcF9yZWFkX2xvY2soJmFtcDtpbml0X21tKTsKLQkJbW1hcF9yZWFkX3VubG9jaygmYW1wO2luaXRfbW0pOwotCX0KLQogCXB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCS8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovCi0JcmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTsKLX0KLQogaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcG1kX3QgKnRhYmxlOwpAQCAtMTkxMSwzNiAmIzQzOzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJfQogCiAJdGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpOwotCi0JLyoKLQkgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXMKLQkgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb24KLQkgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLAotCSAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZQotCSAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhcwotCSAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzCi0JICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsCi0JICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuCi0JICovCi0JcHVkX2NsZWFyKHB1ZHApOwotCV9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpOwotCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkgewotCQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwotCQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JfQotCiAJcG1kcCA9IHRhYmxlOwogCW5leHQgPSBhZGRyOwogCWVuZCA9IGFkZHIgJiM0MzsgUFVEX1NJWkU7CiAJZG8gewogCQlpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKQotCQkJLyoKLQkJCSAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vCi0JCQkgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suCi0JCQkgKi8KLQkJCV9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7CiYjNDM7CQkJcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7CiAJfSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7CiAKJiM0MzsJcHVkX2NsZWFyKHB1ZHApOwomIzQzOwlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTsKIAlwbWRfZnJlZShOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwppbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwpAQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpCiAJbm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpOwogfQogCi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0YXRpY19icmFuY2hfaW5jKCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQlwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTsKLQlzdGF0aWNfYnJhbmNoX2RlYygmYW1wO2FybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci19Ci0KIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMOwpAQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKQogCQl9CiAJfTsKIAotCWFybTY0X3B0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgaW5mby0mZ3Q7bW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsIGluZm8tJmd0O21tLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpCkBAIC0zNjAsNyAmIzQzOzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpCiAJCX0KIAl9OwogCi0JYXJtNjRfcHRkdW1wX3dhbGtfcGdkKCZhbXA7c3QucHRkdW1wLCAmYW1wO2luaXRfbW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsICZhbXA7aW5pdF9tbSwgTlVMTCk7CiAKIAlpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7CiAJCXByX3dhcm4oJiMzNDtDaGVja2VkIFcmIzQzO1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcmIzQzO1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXG4mIzM0OywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGQwMjNhNDBhMWUwMzQ1Li5kMWU2M2Y3ZDI2N2ZmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NjX3BsYXRmb3JtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlZ2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC00MTAsNyAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKQogCiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpOwogCi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kOwogCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDsKQEAgLTQ0Miw2ICYjNDM7NDQzLDE4IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzoKJiM0MzsJICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93bgomIzQzOwkgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuCiYjNDM7CSAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuCiYjNDM7CSAqLwomIzQzOwlzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCAmYW1wO2luaXRfbW0pCiYjNDM7CQlfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKQogewogCXVuc2lnbmVkIGludCBpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosCiYjNDM7CSAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKQomIzQzO0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jCmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li41ZDg3YzYzMmEyNTUwNyAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC02NzgsNiAmIzQzOzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kCiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay4KICAqCiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS4KJiM0MzsgKgomIzQzOyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLgogICovCiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsCkBAIC02OTEsMjQgJiM0Mzs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJLm5vX3ZtYQkJPSB0cnVlCiAJfTsKIAotCS8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi8KLQlpZiAobW0gPT0gJmFtcDtpbml0X21tKQotCQlyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsCi0JCQkJCQkgICAgcGdkLCBwcml2YXRlKTsKLQlpZiAoc3RhcnQgJmd0Oz0gZW5kIHx8ICF3YWxrLm1tKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyoKLQkgKiBUaGUgbW1hcCBsb2NrIHByb3RlY3RzIHRoZSBwYWdlIHdhbGtlciBmcm9tIGNoYW5nZXMgdG8gdGhlIHBhZ2UKLQkgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG8KLQkgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzCi0JICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nCi0JICogZG93biBQVEVzL3BhZ2UgdGFibGVzLiBJbiB3aGljaCBjYXNlLCB0aGUgbW1hcCB3cml0ZSBsb2NrIHNob3VsZAotCSAqIGJlIGhlbGQuCiYjNDM7CSAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0bwomIzQzOwkgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmcKJiM0MzsJICogZG93biBwYWdlIHRhYmxlcy4KJiM0MzsJICoKJiM0MzsJICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkCiYjNDM7CSAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLgogCSAqLwogCW1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7CiYjNDM7CS8qCiYjNDM7CSAqIHg4NiwgYXJtNjQgcHRkdW1wIGFsbG93IHdhbGtzIG9mIGVmaSBtbSYjMzk7cyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3MKJiM0MzsJICogb2YgYXJiaXRyYXJ5IG1tJiMzOTtzLgomIzQzOwkgKgomIzQzOwkgKiBIb3dldmVyLCB0aGV5IGJvdGggbXVzdCBhbHNvIGhvbGQgdGhlIGluaXRfbW0gbG9jayB0byBhY2NvdW50IGZvcgomIzQzOwkgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuCiYjNDM7CSAqLwomIzQzOwltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoJmFtcDtpbml0X21tKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZndDs9IGVuZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCAmYW1wO3dhbGspOwogfQpkaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuYwppbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0Ci0tLSBhL21tL3B0ZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3B0ZHVtcC5jCkBAIC0xNzgsMTEgJiM0MzsxNzgsMTggQEAgdm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQogCiAJZ2V0X29ubGluZV9tZW1zKCk7CiAJbW1hcF93cml0ZV9sb2NrKG1tKTsKJiM0MzsJLyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovCiYjNDM7CWlmIChtbSAhPSAmYW1wO2luaXRfbW0pCiYjNDM7CQltbWFwX3dyaXRlX2xvY2tfbmVzdGVkKCZhbXA7aW5pdF9tbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwogCXdoaWxlIChyYW5nZS0mZ3Q7c3RhcnQgIT0gcmFuZ2UtJmd0O2VuZCkgewogCQl3YWxrX3BhZ2VfcmFuZ2VfZGVidWcobW0sIHJhbmdlLSZndDtzdGFydCwgcmFuZ2UtJmd0O2VuZCwKIAkJCQkgICAgICAmYW1wO3B0ZHVtcF9vcHMsIHBnZCwgc3QpOwogCQlyYW5nZSYjNDM7JiM0Mzs7CiAJfQomIzQzOwomIzQzOwlpZiAobW0gIT0gJmFtcDtpbml0X21tKQomIzQzOwkJbW1hcF93cml0ZV91bmxvY2soJmFtcDtpbml0X21tKTsKIAltbWFwX3dyaXRlX3VubG9jayhtbSk7CiAJcHV0X29ubGluZV9tZW1zKCk7CiAKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NobXBhcmFtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9vd25lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy92bWFsbG9jLmgmZ3Q7CkBAIC0xNTgsMTAgJiM0MzsxNTksMjEgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocG1kX3ByZXNlbnQoKnBtZCkgJmFtcDsmYW1wOyAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKgomIzQzOwkgKiBBY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBleGNsdWRlIHB0ZHVtcCwgd2hpY2ggd2Fsa3MKJiM0MzsJICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLgomIzQzOwkgKgomIzQzOwkgKiBDb25jdXJyZW50IHJlYWQgbG9jayBob2xkZXJzIGFyZSBzYWZlOiBlYWNoIGV4Y2x1c2l2ZWx5IG93bnMKJiM0MzsJICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0yMTAsMTAgJiM0MzsyMjIsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocHVkX3ByZXNlbnQoKnB1ZCkgJmFtcDsmYW1wOyAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCiYjNDM7CQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqLwomIzQzOwlzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTI2MiwxMCAmIzQzOzI3OSwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKQogCQlyZXR1cm4gMDsKIAotCWlmIChwNGRfcHJlc2VudCgqcDRkKSAmYW1wOyZhbXA7ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQotCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFwNGRfcHJlc2VudCgqcDRkKSkKJiM0MzsJCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwogCi0JcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CS8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovCiYjNDM7CXNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSkgewomIzQzOwkJaWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQmIzM5O3MgdHdlYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLiBJdCYjMzk7cyB0b3VjaGluZyBvbiBib3RoIHg4NiBhbmQgYXJtNjQgYXJjaGl0ZWN0dXJlcywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBsb29rLW92ZXIuIEkgc2VlIHRoZXkmIzM5O3JlIHJlbW92aW5nIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBhbmQgcmV2aXNpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBpbiBmdW5jdGlvbnMgbGlrZSBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLCBhbmQgYHB0ZHVtcF93YWxrX3BnZGAuIFRoYXQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGNoYW5nZSBhbHdheXMgd2FycmFudHMgZXh0cmEgc2NydXRpbnkuCgpUaGV5JiMzOTtyZSB1c2luZyBgbW1hcF93cml0ZV9sb2NrKCZhbXA7aW5pdF9tbSlgIGluIGBwdGR1bXBfd2Fsa19wZ2RgIGFuZCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYW5kIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhpcyBgc2NvcGVkX2NvbmRfZ3VhcmRgIHdpdGggYG1tYXBfcmVhZF9sb2NrX3RyeWAgaW4gc2V2ZXJhbCBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgY29uY3VycmVuY3kgaXMgbm93IGhhbmRsZWQgZGlmZmVyZW50bHkgaW4gdGhlc2UgY3JpdGljYWwgdm1hbGxvYyBhcmVhcy4gVGhlc2UgYXJlIGFsbCBjb3JlIGNoYW5nZXMsIGRpcmVjdGx5IGltcGFjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdm1hbGxvYywgc28gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIHRoaXMgaXMgaGlnaCBwcmlvcml0eSBmb3IgdGVzdGluZy4gR2l2ZW4gdGhlIGJyZWFkdGggb2YgdGhlIGltcGFjdCwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0IGhlcmUuCgpMZXQmIzM5O3MgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGFmZmVjdHMuIEkmIzM5O20gZm9jdXNpbmcgb246IGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGB2bWFwX3RyeV9odWdlX3A0ZGAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYW5kIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdXBwb3NlZCB0byB3b3JrIGluIGJvdGggbG9jayBhbmQgbG9ja2xlc3Mgc2NlbmFyaW9zIGFuZCB3aGF0IHNvcnQgb2YgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBDbGVhcmx5LCBgQ09ORklHX1BURFVNUF9DT1JFYCBpcyBpbnZvbHZlZCBiZWNhdXNlIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvZGUgaW4gYG1tL3B0ZHVtcC5jYC4gVG8gZ2V0IHRoaXMgd29ya2luZyBmcm9tIHVzZXJzcGFjZSwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYC4gUGx1cywgYENPTkZJR19ERUJVR19XWGAgd2lsbCBiZSB1c2VmdWwgc2luY2UgaXQgdHJpZ2dlcnMgcHRkdW1wIGF0IGJvb3QuIEFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgZXNzZW50aWFsIHRvIGVuYWJsZSB0aGUgdm1hcCBodWdlIHBhZ2UgbG9naWMgdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gTm93IEkgc2hvdWxkIHF1aWNrbHkgZG8gYSBxdWljayBjb2RlIHNlYXJjaCB0byB2ZXJpZnkgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNldCBpbiB0aGUgcmVsZXZhbnQgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wX3dhbGtfcGdkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTE2PXN0cnVjdCBwdGR1bXBfaW5mbyB7XG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjEtXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDoyMjp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbyk7XG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0yMy0jaWZkZWYgQ09ORklHX0FSTV9QVERVTVBfREVCVUdGU1xuLS1cbmFyY2gvYXJtL21tL2R1bXAuYz0zOTg9c3RhdGljIHZvaWQgd2Fsa19wZ2Qoc3RydWN0IHBnX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuYXJjaC9hcm0vbW0vZHVtcC5jLTQxNC1cbmFyY2gvYXJtL21tL2R1bXAuYzo0MTU6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXG5hcmNoL2FybS9tbS9kdW1wLmMtNDE2LXtcbi0tXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jPTc9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYy0xMC1cbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmM6MTE6XHRwdGR1bXBfd2Fsa19wZ2QobSwgaW5mbyk7XG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jLTEyLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9hcm02NC9tbS9wdGR1bXAuYz0yODY9dm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMxMy1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM6MzE0Olx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMxNS19XG4tLVxuYXJjaC9hcm02NC9tbS9wdGR1bXAuYz0zMzE9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTM1NS1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM6MzU2Olx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTM1Ny1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jPTMzND1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM1MS1cdC8qIFRyYXZlcnNlIGtlcm5lbCBwYWdlIHRhYmxlcyAqL1xuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYzozNTI6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzUzLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zNjg9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM5MS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM6MzkyOlx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM5My1cbi0tXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM1Mz1zdGF0aWMgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGRfbW1faW5mbyAqcGluZm8pXG4tLVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzItXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjM3MzpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIHBpbmZvLVx1MDAzZW1tLCBOVUxMKTtcbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmMtMzc0LX1cbi0tXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM3Nj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmMtMzk5LVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYzo0MDA6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmMtNDAxLVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xODI9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjEwLVx0XHRyZXR1cm4gdHJ1ZTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyMTE6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTItXHRpZiAoc3Qud3hfcGFnZXMpIHtcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI2PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTAtXHRtdXRleF9sb2NrKFx1MDAyNmNwYV9tdXRleCk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUxOlx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUyLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNwYV9tdXRleCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTMwPXN0cnVjdCBzZXFfZmlsZTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMjp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMzMtXHRcdFx0XHQgICBib29sIHVzZXIpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM0OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzU6I2RlZmluZSBwdGR1bXBfY2hlY2tfd3ggcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zNi12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTg9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZpbml0X21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MTY9c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTI2PXN0YXRpYyBpbnQgcHRkdW1wX2N1cnVzcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXHRpZiAoY3VycmVudC1cdTAwM2VtbS1cdTAwM2VwZ2QpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6Mjk6XHRcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXHUwMDNlbW0sIHRydWUpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTMwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTM3PXN0YXRpYyBpbnQgcHRkdW1wX2VmaV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzktXHRpZiAoZWZpX21tLnBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0MDpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXHUwMDI2ZWZpX21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00MTY9c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyMi1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyMzpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyNC1cdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1Ny1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1ODpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU5LVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3My1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NDp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc1LXtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NjpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cdTAwM2VwZ2QsIGZhbHNlLCB0cnVlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3Ny19XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Nzk6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVx0XHRcdFx0ICAgYm9vbCB1c2VyKVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4Ni0jZW5kaWZcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ4NzpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBwZ2QsIGZhbHNlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODgtfVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ5MD12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDAtXHRwZ2QgPSBrZXJuZWxfdG9fdXNlcl9wZ2RwKHBnZCk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MDE6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShOVUxMLCBcdTAwMjZpbml0X21tLCBwZ2QsIHRydWUsIGZhbHNlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMi0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDQtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MDU6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDktXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MTA6XHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgSU5JVF9QR0QsIHRydWUsIGZhbHNlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUxMS19XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV8zMi5jPTc1PXZvaWQgX19pbml0IGVmaV9kdW1wX3BhZ2V0YWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfMzIuYy03Ny0jaWZkZWYgQ09ORklHX0VGSV9QR1RfRFVNUFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV8zMi5jOjc4Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFx1MDAyNmluaXRfbW0pO1xuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV8zMi5jLTc5LSNlbmRpZlxuLS1cbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYz00MjM9dm9pZCBfX2luaXQgZWZpX2R1bXBfcGFnZXRhYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jLTQyNS0jaWZkZWYgQ09ORklHX0VGSV9QR1RfRFVNUFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jOjQyNjpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbChOVUxMLCBcdTAwMjZlZmlfbW0pO1xuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jLTQyNy0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTEzPXN0cnVjdCBwdGR1bXBfc3RhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMjctXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjI4OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0yOS1cdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zMC1cdFx0XHRcdGJvb2wgY2hlY2t3eCwgYm9vbCBkbWVzZyk7XG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjMxOnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7XG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTMyLWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xuLS1cbm1tL3B0ZHVtcC5jPTE2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHB0ZHVtcF9vcHMgPSB7XG4tLVxubW0vcHRkdW1wLmMtMTc0LVxubW0vcHRkdW1wLmM6MTc1OnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbm1tL3B0ZHVtcC5jLTE3Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgcHRkdW1wIFdhbGsgVHJpZ2dlcioqCgpSaWdodCwgc28gdGhlIGBwdGR1bXBgIHdhbGssIGFzIEkgcmVjYWxsLCBpcyBpbml0aWF0ZWQgdGhyb3VnaCB0aG9zZSBkZWJ1Z2ZzIGZpbGVzLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBoZWFydCBvZiBob3cgdGhhdCYjMzk7cyBjb25maWd1cmVkLiBNeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgaW4gYGFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuY2AgYW5kIGBhcmNoL2FybTY0L21tL3B0ZHVtcC5jYC4gVGhhdCBzaG91bGQgc2hvdyBtZSBwcmVjaXNlbHkgaG93IHRoZSBkZWJ1Z2ZzIGVudHJpZXMgYXJlIGNyZWF0ZWQgYW5kIGxpbmtlZCB0byB0aGUgYHB0ZHVtcGAgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbTsgSSYjMzk7bSBiZXR0aW5nIG9uZSBvZiB0aGVzZSBmaWxlcyB3aWxsIGJlIHRoZSBrZXkuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBjYWxsIHBhdGguIE9uY2UgSSBzZWUgaG93IGRlYnVnZnMgaXMgd2lyZWQgaW4sIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlIGZpbGVzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlYnVnZnNfY3JlYXRlX2ZpbGUuKnB0ZHVtcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jPTE2PXZvaWQgX19pbml0IHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSlcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmMtMTcte1xuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYzoxODpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgMDQwMCwgTlVMTCwgaW5mbywgXHUwMDI2cHRkdW1wX2ZvcHMpO1xuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYy0xOS19XG4tLVxuYXJjaC9hcm02NC9tbS9wdGR1bXBfZGVidWdmcy5jPTE2PXZvaWQgX19pbml0IHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSlcbmFyY2gvYXJtNjQvbW0vcHRkdW1wX2RlYnVnZnMuYy0xNy17XG5hcmNoL2FybTY0L21tL3B0ZHVtcF9kZWJ1Z2ZzLmM6MTg6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIDA0MDAsIE5VTEwsIGluZm8sIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gvYXJtNjQvbW0vcHRkdW1wX2RlYnVnZnMuYy0xOS19XG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz00MDY9c3RhdGljIGludCBfX2luaXQgcHRkdW1wX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQyMC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QVERVTVBfREVCVUdGUykpXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMTpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtrZXJuZWxfcGFnZV90YWJsZXNcJiMzNDssIDA0MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtNDIyLVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0zMTU9c3RhdGljIGludCBwdF9kdW1wX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzU2LSNpZmRlZiBDT05GSUdfUFREVU1QX0RFQlVHRlNcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNTc6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2tlcm5lbF9wYWdlX3RhYmxlc1wmIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cHRkdW1wX2ZvcHMpO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1OC0jZW5kaWYgLyogQ09ORklHX1BURFVNUF9ERUJVR0ZTICovXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IHB0X2R1bXBfZGVidWdfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Mi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1MzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7a2VybmVsXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01NC1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y3VycmVudF9rZXJuZWxcJiMzNDssIDA0MDAsIGRpciwgTlVMTCxcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNjEtI2lmIGRlZmluZWQoQ09ORklHX0VGSSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo2MjpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7ZWZpXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsIFx1MDAyNnB0ZHVtcF9lZmlfZm9wcyk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNjMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpczoKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyByZXF1aXJlZC4gVGhhdCYjMzk7cyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgSSYjMzk7bSBub3QgZ29pbmcgdG8ganVtcCB0byBjb25jbHVzaW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQmIzM5O3MgbmVlZGVkLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyB0aGlzIGp1c3QgYWx3YXlzIG9uLCBvciBjb25kaXRpb25hbD8mIzM0OyBJIHJlbWVtYmVyIHNlZWluZyBgYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jYCBmbG9hdGluZyBhcm91bmQgcmVjZW50bHksIGFuZCB0aGF0ICpmZWx0KiBjb25kaXRpb25hbCBpbiBpdHMgY29tcGlsYXRpb24uIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYGFyY2gveDg2L21tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgd291bGQgYmUuIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgZGVwZW5kZW50IG9uIG90aGVyIHZhcmlhYmxlcyBvciBpZiB0aGVyZSYjMzk7cyBtb3JlIHRvIGl0IHRoYW4gbWVldHMgdGhlIGV5ZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVidWdfcGFnZXRhYmxlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL01ha2VmaWxlPTM3PW9iai0kKENPTkZJR19QVERVTVApXHRcdCYjNDM7PSBkdW1wX3BhZ2V0YWJsZXMub1xuYXJjaC94ODYvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKVx0JiM0Mzs9IGRlYnVnX3BhZ2V0YWJsZXMub1xuYXJjaC94ODYvbW0vTWFrZWZpbGUtMzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBNYXBwaW5nIENoYW5nZXMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCB0aGF0JiMzOTtzIGdvaW5nIHRvIHRyaWdnZXIgc29tZSBwYWdlIHRhYmxlIGR1bXBzLCBhbmQgaXQmIzM5O3MgZW5hYmxlZCBieSBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYC4gVGhhdCYjMzk7cyBnb29kLCBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcuIEFuZCwgYWhhLCBgQ09ORklHX0RFQlVHX1dYYCBhbHNvIGRvZXMgaXQsIG1lYW5pbmcgdGhlIHN5c3RlbSB3aWxsIGR1bXAgcHRkdW1wcyBhdCBib290LiBUaGF0IG5hcnJvd3MgZG93biB0aGUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCB0aGlzIGNvZGUgZXhlY3V0ZXMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtbS92bWFsbG9jLmNgIGFuZCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEkgbmVlZCB0byBkaWcgaW50byB0aG9zZSBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIE9rYXksIGZvY3VzaW5nIG9uIGBtbS92bWFsbG9jLmNgLCB0aGUgcGF0Y2ggdG91Y2hlcyBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBhbmQgYHZtYXBfdHJ5X2h1Z2VfcDRkYC4gVGhvc2UgYXJlIGFsbCByZWxhdGVkIHRvIGh1Z2UgcGFnZSBtYXBwaW5nIHdpdGhpbiBgdm1hbGxvY2AuIFRoYXQgbWVhbnMgdGhpcyBpcyBhbGwgdmVyeSByZWxldmFudCB0byBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24sIHBhcnRpY3VsYXJseSB3aGVuIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaWYgdGhpcyBpcyBlbmFibGVkLCBpdCBzaG91bGQgd29yayBhcyBpcy4gVGltZSB0byBwdWxsIHVwIGBtbS92bWFsbG9jLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz05NT1zdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTE0Mi1cbm1tL3ZtYWxsb2MuYzoxNDM6c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1hbGxvYy5jLTE0NC1cdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4tLVxubW0vdm1hbGxvYy5jPTE3OT1zdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTE5Mi1cbm1tL3ZtYWxsb2MuYzoxOTM6XHRcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcbm1tL3ZtYWxsb2MuYy0xOTQtXHRcdFx0XHRcdG1heF9wYWdlX3NoaWZ0KSkge1xuLS1cbm1tL3ZtYWxsb2MuYz0yMDY9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0yMjctXG5tbS92bWFsbG9jLmM6MjI4Olx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbm1tL3ZtYWxsb2MuYy0yMjktXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4tLVxubW0vdm1hbGxvYy5jPTI2Mz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTI4NC1cbm1tL3ZtYWxsb2MuYzoyODU6XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xubW0vdm1hbGxvYy5jLTI4Ni1cdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb246CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGB2bWFwX3RyeV9odWdlX3BtZGAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdGF0dXMgb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYC4gVGhlcmUmIzM5O3Mgbm8gdGltZSB0byB3YXN0ZSB3YWRpbmcgdGhyb3VnaCBldmVyeXRoaW5nLiBJIHdhbnQgYSBkZWZpbml0aXZlIGFuc3dlciBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIGZ1bmN0aW9uIGlzICphbHdheXMqIHByZXNlbnQgaW4gdGhlIGJ1aWxkLCBvciBpZiBpdCYjMzk7cyBnYXRlZCBiZWhpbmQgc29tZSBjb25maWd1cmF0aW9uIG1hY3JvLiBUaW1lIHRvIHF1aWNrbHkgZmluZCBvdXQgaWYgSSBuZWVkIHRvIGV2ZW4gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgaXQgbWlnaHQgYmUgdW5hdmFpbGFibGUgb24gYSBnaXZlbiB0YXJnZXQuIEkgbmVlZCB0byBrbm93IHdoaWNoIHBvdGVudGlhbCBhcmNoaXRlY3R1cmVzLCBmZWF0dXJlcywgb3IgY29uZmlndXJhdGlvbnMgd2lsbCBpbXBhY3QgaXRzIHByZXNlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfSFVHRV9WTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYy01My1cbm1tL3ZtYWxsb2MuYzo1NDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBcbm1tL3ZtYWxsb2MuYy01NS1zdGF0aWMgdW5zaWduZWQgaW50IF9fcm9fYWZ0ZXJfaW5pdCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gQklUU19QRVJfTE9ORyAtIDE7XG4tLVxubW0vdm1hbGxvYy5jPTYyPWVhcmx5X3BhcmFtKFwmIzM0O25vaHVnZWlvbWFwXCYjMzQ7LCBzZXRfbm9odWdlaW9tYXApO1xubW0vdm1hbGxvYy5jOjYzOiNlbHNlIC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQICovXG5tbS92bWFsbG9jLmMtNjQtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcbm1tL3ZtYWxsb2MuYzo2NTojZW5kaWZcdC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQICovXG5tbS92bWFsbG9jLmMtNjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgdm1hcF90cnlfaHVnZV9wbWRgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHZtYXBfdHJ5X2h1Z2VfcG1kYCB3YXMgb25seSBjb21waWxlZCBpbiBpZiB3ZSBoYWQgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQYCBkZWZpbmVkLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHRoZSBjYXNlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpTbywgZXZlbiBpZiB0aGUgYXJjaGl0ZWN0dXJlICpkb2VzbiYjMzk7dCogc3VwcG9ydCBodWdlIHZtYXBzLCB0aGUgZnVuY3Rpb24gc3RpbGwgZXhpc3RzIGluIHRoZSBjb21waWxlZCBjb2RlLCBhbGJlaXQgcG90ZW50aWFsbHkgZG9pbmcgbm90aGluZy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBpdHNlbGYgdG8gZnVsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgd2hhdCBjb25kaXRpb25zIHdvdWxkIHRyaWdnZXIgaXQgdG8gYWN0dWFsbHkgKmRvKiBzb21ldGhpbmcsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQgc2ltcGx5IHJldHVybnMgYSB2YWx1ZSB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYG1heF9wYWdlX3NoaWZ0YCBhbmQgYFBNRF9TSElGVGAgaXMgb2J2aW91c2x5IGtleS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHRoYXQmIzM5O3MgYWxsIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQzOlx0c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIDE0NDpcdFx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbiAxNDU6XHRcdFx0XHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4gMTQ2Olx0e1xuIDE0NzpcdFx0aWYgKG1heF9wYWdlX3NoaWZ0IFx1MDAzYyBQTURfU0hJRlQpXG4gMTQ4Olx0XHRcdHJldHVybiAwO1xuIDE0OTpcdFxuIDE1MDpcdFx0aWYgKCFhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSlcbiAxNTE6XHRcdFx0cmV0dXJuIDA7XG4gMTUyOlx0XG4gMTUzOlx0XHRpZiAoKGVuZCAtIGFkZHIpICE9IFBNRF9TSVpFKVxuIDE1NDpcdFx0XHRyZXR1cm4gMDtcbiAxNTU6XHRcbiAxNTY6XHRcdGlmICghSVNfQUxJR05FRChhZGRyLCBQTURfU0laRSkpXG4gMTU3Olx0XHRcdHJldHVybiAwO1xuIDE1ODpcdFxuIDE1OTpcdFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIDE2MDpcdFx0XHRyZXR1cm4gMDtcbiAxNjE6XHRcbiAxNjI6XHRcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXG4gMTYzOlx0XHRcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuIDE2NDpcdFxuIDE2NTpcdFx0LypcbiAxNjY6XHRcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xuIDE2NzpcdFx0ICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLlxuIDE2ODpcdFx0ICpcbiAxNjk6XHRcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xuIDE3MDpcdFx0ICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLlxuIDE3MTpcdFx0ICovXG4gMTcyOlx0XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4gMTczOlx0XHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbiAxNzQ6XHRcdFx0XHRyZXR1cm4gMDtcbiAxNzU6XHRcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gMTc2Olx0XHR9XG4gMTc3Olx0fVxuIDE3ODpcdFxuIDE3OTpcdHN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiAxODA6XHRcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4gMTgxOlx0XHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiAxODI6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEh1Z2UgUGFnZSBNYXBwaW5nKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBgbWF4X3BhZ2Vfc2hpZnRgIHZhbHVlIGlzIHVsdGltYXRlbHkgZGVyaXZlZCBmcm9tIGVpdGhlciBgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdGAgb3IgYHZtYXBfbWF4X3BhZ2Vfc2hpZnRgLiBOb3csIGlmIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnRgIHNpbXBseSBkZWZhdWx0cyB0byBgUEFHRV9TSElGVGAuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGF0IGNvbmRpdGlvbiBpcyBtZXQsIGBtYXhfcGFnZV9zaGlmdGAgd2lsbCAqYWx3YXlzKiBiZSBsZXNzIHRoYW4gYFBNRF9TSElGVGAsIHJpZ2h0PyBDb25zZXF1ZW50bHksIHRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byBiYWlsIG91dCBhbmQgcmV0dXJuIDAuIFNvLCBpdCYjMzk7cyBjbGVhcjogdG8gZXZlbiAqY29uc2lkZXIqIHRoZSBtb2RpZmllZCBsb2dpYyB3aXRoaW4gYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQYCAqbXVzdCogYmUgZGVmaW5lZC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDEyPXN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQxMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDE0OnN0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQ1LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NDY6c3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NDcte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU0LVx0c2NvcGVkX2d1YXJkKG1tYXBfd3JpdGVfbG9jaywgXHUwMDI2aW5pdF9tbSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDU1Olx0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NTYtfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDU4PXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDkzLVx0aWYgKGNwYS1cdTAwM2VmbGFncyBcdTAwMjYgQ1BBX0NPTExBUFNFKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0OTQ6XHRcdGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00OTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgxNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBzeXN0ZW1zIGVuZ2luZWVyOgoKKipEZWNvbnN0cnVjdGluZyBNZW1vcnkgQXR0cmlidXRlIENoYW5nZXMqKgoKUmlnaHQsIHNvIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGdldHRpbmcgdHJpZ2dlcmVkIGZyb20gYGNwYV9mbHVzaGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBwdXRzIG1lIGluIG1pbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIExvb2tpbmcgY2xvc2VyLCBpdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIHdoaWNoIGlzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmeWluZyBtZW1vcnkgYXR0cmlidXRlcy4gVGhpbmdzIGxpa2UgcmVhZC1vbmx5LCBuby1leGVjdXRlLCBldGMuIGFyZSBoYW5kbGVkIGhlcmUuCgpUaGUgZmFjdCB0aGF0IHRoaXMgaXMgKmFsd2F5cyogY29tcGlsZWQgb24geDg2IGlzIGEgY3J1Y2lhbCBkZXRhaWwuIEl0IHN1Z2dlc3RzIHRoaXMgcGFydGljdWxhciBsb2dpYyBpcyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7ZCBiZSB3aWxsaW5nIHRvIGJldCB0aGlzIG9wdGltaXphdGlvbiBpcyBzcGVjaWZpYyB0byB4ODYmIzM5O3MgbWVtb3J5IG1vZGVsIGFuZCBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIFRoaXMgaGludHMgYXQgc29tZXRoaW5nIHBvdGVudGlhbGx5IGxldmVyYWdpbmcgc3BlY2lmaWMgQ1BVIGZlYXR1cmVzLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AgZnVuY3Rpb24gbWVudGlvbmVkLiBBIHF1aWNrIGxvb2sgYXQgYG1tL3BhZ2V3YWxrLmNgIHdpbGwgcHJvYmFibHkgY2xhcmlmeSBob3cgdGhpcyBwYWdlIHJhbmdlIG1hbmlwdWxhdGlvbiBvcGVyYXRlcy4gSXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbW9yZSBnZW5lcmFsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2UgdGFibGUgZW50cmllcyBhbmQgYXBwbHlpbmcgdGhlIGF0dHJpYnV0ZSBjaGFuZ2VzIGVmZmljaWVudGx5LiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jPTY0OD1pbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTY2Ny0vKipcbm1tL3BhZ2V3YWxrLmM6NjY4OiAqIHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyAtIHdhbGsgYSByYW5nZSBvZiBwYWdldGFibGVzIG5vdCBiYWNrZWQgYnkgYSB2bWFcbm1tL3BhZ2V3YWxrLmMtNjY5LSAqIEBtbTpcdFx0bW1fc3RydWN0IHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHByb2Nlc3Mgb2YgcGFnZSB0YWJsZSB3YWxrXG4tLVxubW0vcGFnZXdhbGsuYy02ODMtICovXG5tbS9wYWdld2Fsay5jOjY4NDppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vcGFnZXdhbGsuYy02ODUtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDMyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlcyB0byBQYWdlIFRhYmxlIERlYnVnZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIHdoaWNoIGlzIGNhbGxlZCBieSBgcHRkdW1wX3dhbGtfcGdkYCBpbiBgbW0vcHRkdW1wLmNgLiBUaGUgbWFpbiBhZGRpdGlvbiBpcyBhbiBgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKCZhbXA7aW5pdF9tbSlgIGNhbGwgaW5zaWRlIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBpbXBsaWVzIHdlJiMzOTtyZSB0cnlpbmcgdG8gdGlnaHRlbiB1cCBzb21lIGxvY2tpbmcgYXJvdW5kIHRoZSBpbml0aWFsIG1lbW9yeSBtYXAuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkaWdnaW5nIGFyb3VuZCBpbiBwYWdlIHRhYmxlcyBhbmQgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGNvbmN1cnJlbnQgYWNjZXNzLgoKTGV0IG1lIHNlZSwgdGhlIGZ1bmN0aW9ucyByZWFsbHkgaW4gcGxheSBoZXJlIGFyZSBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIG9mIGNvdXJzZSBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0IHdpdGggZWFjaCBvdGhlciBpbiB0aGlzIG5ldyBjb250ZXh0LgoKVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFBURFVNUF9ERUJVR0ZTYCwgYERFQlVHX1dYYCwgYW5kIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgbm90IGp1c3QgYSBtYWNyby4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZsYWdzIGFmZmVjdCB0aGUgb3ZlcmFsbCBiZWhhdmlvciBhbmQgd2hhdCBhcmNoaXRlY3R1cmVzIHRoaXMgY2hhbmdlIGltcGFjdHMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHdoZW4gYXNzZXNzaW5nIHRoZXNlIGtpbmQgb2YgY2hhbmdlcy4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSBicmVha2luZyBzb21ldGhpbmcgb24gYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBvciBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA4OT1jb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuLS1cbmFyY2gvS2NvbmZpZy0xMDkxLVxuYXJjaC9LY29uZmlnOjEwOTI6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcbmFyY2gvS2NvbmZpZy0xMDkzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA4NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQmIzM5O3MgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBmdWxseS4gQXJlIHRoZXJlICpvdGhlciogcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgd2hpY2ggY291bGQgaW1wYWN0IHRoaXMgb25lPyBUaGUgZGVwZW5kZW5jeSBncmFwaCBpcyB0aGUga2V5IGhlcmUuIExldCYjMzk7cyBzZWUuLi4gQWgsIGBDT05GSUdfUFREVU1QX0NPUkVgIGlzICpzZWxlY3RlZCogYnkgYm90aCBgUFREVU1QX0RFQlVHRlNgIGFuZCBgREVCVUdfV1hgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgdGVsbHMgbWUgaW1tZWRpYXRlbHkgdGhhdCB0aGUgc3RhdGUgb2YgKnRoaXMqIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBjb250cm9sbGVkIGJ5IGEgY291cGxlIG9mIG90aGVyIHRoaW5ncy4gTm93IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jeSBgUFREVU1QX0RFQlVHRlNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcG90ZW50aWFsIGltcGFjdHMuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgYW5kIHRoZSBpbXBsaWNhdGlvbnMgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QX0RFQlVHRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQwOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIGEgZGVlcCBkaXZlIGludG8gZGVidWdnaW5nOgoKKipEZWJ1Z2dpbmcgSW5pdGlhdGl2ZTogVGhlIGBERUJVR19XWGAgVmFyaWFibGUqKgoKQWxyaWdodCwgdGltZSB0byB0cm91Ymxlc2hvb3QuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYERFQlVHX1dYYC4gVGhhdCB2YXJpYWJsZSBpcyB1c3VhbGx5IHRoZSBsaW5jaHBpbiBpbiB0aGlzIHR5cGUgb2YgcHJvYmxlbSwgYW5kIEkgYW0gYmV0dGluZyBJIGFtIGdvaW5nIHRvIGZpbmQgc29tZXRoaW5nIHRoZXJlLiBJcyBpdCBvbiwgb2ZmLCBzZXQgaW5jb3JyZWN0bHk/IEl0cyBzdGF0ZSB3aWxsIHN0ZWVyIHRoZSBuZXh0IG1vdmUuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBpbml0aWFsIGNvbnRleHQgZm9yIHRoZSBjYXVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX1dYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTgzPWNvbmZpZyBBUkNIX0hBU19ERUJVR19XWFxuLS1cbm1tL0tjb25maWcuZGVidWctMTg1LVxubW0vS2NvbmZpZy5kZWJ1ZzoxODY6Y29uZmlnIERFQlVHX1dYXG5tbS9LY29uZmlnLmRlYnVnLTE4Ny1cdGJvb2wgXCYjMzQ7V2FybiBvbiBXJiM0MztYIG1hcHBpbmdzIGF0IGJvb3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaGVyZS4KCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBzbyBgUFREVU1QX0RFQlVHRlNgIGFuZCBgREVCVUdfV1hgIGxvb2sgcHJvbWlzaW5nIGFzIHN0YXJ0aW5nIHBvaW50cy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBDT05GSUdfWDg2X1BBVGAgZGlyZWN0aXZlLiBIbW1tLCB0aGUgYXNzb2NpYXRlZCBmaWxlIGlzIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZpbGUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX1g4Nl9QQVRgPyBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgYnkgb3BlbmluZyBhbmQgY2hlY2tpbmcgdGhlIGBhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9NYWtlZmlsZS0yLVxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcdFx0XHRcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXZpZXdpbmcgUmVjZW50IE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZXNlIHJlY2VudCBjaGFuZ2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGZvY3VzIGlzIG9uIG1lbW9yeSBtYXBwaW5nIGFuZCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIGl0JiMzOTtzIGFsbCBjb21waWxlZCwgb2YgY291cnNlLgoKRmlyc3QsIGluIGBtbS92bWFsbG9jLmNgLCB0aGVyZSYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gdm1hbGxvYyBodWdlIHBhZ2VzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbG9jayB1c2luZyBgc2NvcGVkX2NvbmRfZ3VhcmRgIHdpdGhpbiBgcG1kX2ZyZWVfcHRlX3BhZ2VgLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIHN5bmNocm9uaXphdGlvbiB3aGVuIG1hcHBpbmcgdGhlc2UgaHVnZSBwYWdlcywgd2hpY2ggaXMgZ29vZCB0byBzZWUuCgpUaGVuLCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIHRoZSBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBmdW5jdGlvbiBpcyBnZXR0aW5nIGEgbG9jayBhcyB3ZWxsLCB1c2luZyBgc2NvcGVkX2d1YXJkYC4gSXQgc2VlbXMgdGhpcyBpcyBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudCBDUEEgd2Fsa2VycyBhbmQgYXZvaWRpbmcgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBgcHRkdW1wYCBmdW5jdGlvbmFsaXR5LiBUaGF0IGFsc28gbWFrZXMgc2Vuc2UuCgpOZXh0LCB0aGUgYG1tL3B0ZHVtcC5jYCBmaWxlIGhhcyBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGBpbml0X21tYCBsb2NraW5nIHdpdGhpbiBgcHRkdW1wX3dhbGtfcGdkYC4gVGhleSYjMzk7cmUgYWNxdWlyaW5nIHRoZSBgaW5pdF9tbWAgbG9jayBub3csIHdoaWNoIGlzIGRlZmluaXRlbHkgZGVzaWduZWQgdG8gaW1wcm92ZSBzdGFiaWxpdHkgb2Yga2VybmVsIHBhZ2UgdGFibGVzIGJ5IGFjcXVpcmluZyBhIGxvY2sgb24gYGluaXRfbW1gLCBzbyBhIGdvb2QgY2hhbmdlLgoKRmluYWxseSwgaW4gYGFyY2gvYXJtNjQvbW0vbW11LmNgLCB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMgYnJhbmNoIGFuZCB0aGUgYG1tYXBfcmVhZF9sb2NrKCZhbXA7aW5pdF9tbSlgIGZyb20gYHBtZF9mcmVlX3B0ZV9wYWdlYCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYC4gVGhpcyBzZWVtcyB0byBiZSBhIGNsZWFudXAgYW5kIHNpbXBsaWZpY2F0aW9uLCBwZXJoYXBzIGFmdGVyIHByZXZpb3VzIGxvY2tpbmcgY2hhbmdlcyBvciBpbXByb3ZlbWVudHMuCgpPdmVyYWxsLCB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHNldCBvZiBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGFyZSBhbGwgY2hhbmdlcyB0aGF0IGFyZSBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgdGhpbmsgdGhlIGtleSBhcmVhcyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZyB3aWxsIGJlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwdGR1bXBfd2Fsa19wZ2RgLCBhbmQgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuCgpBcyBmb3IgY29uZmlncywgYFBURFVNUF9ERUJVR0ZTYCwgYERFQlVHX1dYYCwgYW5kIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCBzZWVtIHJlbGV2YW50LiBJIHNob3VsZCBjaGVjayBpZiBgSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgdXNlci1zZWxlY3RhYmxlLCBiZWNhdXNlIHRoYXQmIzM5O3MgYWx3YXlzIHVzZWZ1bCBmb3IgZnV6emVyIHNlbGVjdGlvbiBhbmQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTEwODk9Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbi0tXG5hcmNoL0tjb25maWctMTA5MS1cbmFyY2gvS2NvbmZpZzoxMDkyOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXG5hcmNoL0tjb25maWctMTA5My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0ODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXJjaGl0ZWN0dXJhbCBTZWxlY3Rpb24sIE5vdCBVc2VyIENob2ljZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBmZWF0dXJlLCBvciBwZXJoYXBzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIHRoZSBlbmQtdXNlciBnZXRzIHRvIHR3aWRkbGUgd2l0aCBkaXJlY3RseS4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IHRoZSAqYXJjaGl0ZWN0dXJlIGl0c2VsZiogZGV0ZXJtaW5lcyB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgb3Igbm90LiBUaGluayBvZiBpdCBsaWtlIHRoaXM6IHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBpdHNlbGYsIGl0cyBmdW5kYW1lbnRhbCBkZXNpZ24sIGlzIHdoYXQmIzM5O3MgbWFraW5nIHRoZSBjYWxsLiBJdCYjMzk7cyBub3QgYSBjb21waWxlLXRpbWUgZmxhZyB0aGUgdXNlciBjYW4gc2ltcGx5IGZsaXAuCgpUaGUgZXhhbXBsZSBoaWdobGlnaHRzIHRoYXQgY2xlYXJseSwgbGlrZSB4ODYgYW5kIGFybTY0IGFyY2hpdGVjdHVyZXMgYXJlIHRoZSBvbmVzIG1ha2luZyB0aGF0IHNlbGVjdGlvbiwgd2hpY2ggaGVscHMgY29udGV4dHVhbGl6ZSB3aGF0IGlzIGdvaW5nIG9uLgoKVG8gcmVhbGx5IG5haWwgdGhpcyBkb3duLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIHg4Ni1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHNlZSB3aGF0IGBhcmNoL3g4Ni9LY29uZmlnYCByZXZlYWxzLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE5MS1cdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXG5hcmNoL3g4Ni9LY29uZmlnOjE5MjpcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXHRcdGlmIFg4Nl82NCB8fCBYODZfUEFFXG5hcmNoL3g4Ni9LY29uZmlnLTE5My1cdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXHRcdGlmIFg4Nl82NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwNQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gVHdlYWtzIGZvciBJbXByb3ZlZCBEZWJ1Z2dpbmcqKgoKT2theSwgc28gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUgaGFzIGh1Z2Ugdm1hcHMgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJIGRvbiYjMzk7dCB0ZWNobmljYWxseSAqbmVlZCogdG8gZXhwbGljaXRseSBlbmFibGUgaXQuIEhvd2V2ZXIsIGl0IHdvdWxkbiYjMzk7dCBodXJ0IHRvIGxpc3QgaXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEJ1dCBoYW5nIG9uLCBgSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgYSBzdHJhaWdodCBib29sZWFuLCBubyBwcm9tcHQsIHNvIEkgY2FuJiMzOTt0IGRpcmVjdGx5IGVuYWJsZSBpdCBpbiB0aGUgYC5jb25maWdgIGZpbGUuIEkmIzM5O20gYmV0dGVyIG9mZiBvbWl0dGluZyBpdCBlbnRpcmVseSwgb3IganVzdCBsaXN0aW5nIGl0LCBzaW5jZSBzeXpib3Qgd2lsbCBqdXN0IGlnbm9yZSBpdCBpZiBpdCBjYW4mIzM5O3QgYmUgc2V0LiBCdXQgeWVzLCBJIHNob3VsZCBkZWZpbml0ZWx5IGxpc3QgYFBURFVNUF9ERUJVR0ZTYCBhbmQgYERFQlVHX1dYYC4gVGhvc2UgYXJlIGNyaXRpY2FsLgoKTGV0IG1lIGRvdWJsZS1jaGVjayBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gSXQmIzM5O3MgZGVmaW5lZCBzdGF0aWNhbGx5LiBCdXQgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIHVzZWZ1bCwgc28gbGV0JiMzOTtzIGxpc3QgaXQgYW55d2F5LiBXYWl0IGEgc2Vjb25kLi4uIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGNhbGxlZCBmcm9tIGBjcGFfZmx1c2hgLiBPa2F5LCB0aGF0IHNlYWxzIGl0LiBJIHNob3VsZCAqZGVmaW5pdGVseSogbGlzdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gQXMgd2VsbCBhcyBgcHRkdW1wX3dhbGtfcGdkYCwgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYW5kIGB2bWFwX3RyeV9odWdlX3B1ZGAgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuIFRob3NlIGFsbCBzZWVtIHJlbGV2YW50IHRvIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4KClJpZ2h0LCBJIHRoaW5rIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBkb25lLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDAzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtERUJVR19XWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIGFuZCB4ODYgQ1BBIChjaGFuZ2UgcGFnZSBhdHRyaWJ1dGUpIGxhcmdlIHBhZ2UgY29sbGFwc2luZy4gSXQgaW50cm9kdWNlcyBuZXcgbG9ja2luZyB1c2luZyBtbWFwX3JlYWRfbG9jay9tbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgYW5kIHg4NiBDUEEgKGNoYW5nZSBwYWdlIGF0dHJpYnV0ZSkgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHVzaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE3OjUyLjU2OTAyNzY3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMDI2OTI1MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxNzo1Mi41NjkwMzM5MDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTcwMDcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNiMDE5MWZhYWM3YTdhMWNiMzk3NTY1YmYxM2NhZTJkNDc3YThmNTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTcgMDM6MTc6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG5AQCAtNyw4ICs3LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdGR1bXAuaFxcdTAwM2VcXG4gXFxuLURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi1cXG4gI2lmZGVmIENPTkZJR19QVERVTVBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV90eXBlcy5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xcbmluZGV4IGEyNWQ4YmVhY2M4MzEwLi5iZDUyZmNhNmU4NzIwYiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xcbkBAIC00OSw4ICs0OSw2IEBAXFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1xcdEJJVCgxKVxcbiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1NcXHRCSVQoMilcXHQvKiBhc3N1bWVzIEZFQVRfSFBEUyBpcyBub3QgdXNlZCAqL1xcbiBcXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFxuIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7XFxuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xcbiBcXG5AQCAtMTg2NCw4ICsxODYyLDcgQEAgaW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgICBib29sIGFjcXVpcmVfbW1hcF9sb2NrKVxcbitpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwdGVfdCAqdGFibGU7XFxuIFxcdHBtZF90IHBtZDtcXG5AQCAtMTg3NywyNSArMTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovXFxuIFxcdHRhYmxlID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7XFxuIFxcdHBtZF9jbGVhcihwbWRwKTtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XFxuLVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpIFxcdTAwMjZcXHUwMDI2IGFjcXVpcmVfbW1hcF9sb2NrKSB7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdH1cXG4tXFxuIFxcdHB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1pbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4te1xcbi1cXHQvKiBJZiBwdGR1bXAgaXMgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcywgYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jayAqL1xcbi1cXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xcbi19XFxuLVxcbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwbWRfdCAqdGFibGU7XFxuQEAgLTE5MTEsMzYgKzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcdH1cXG4gXFxuIFxcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIE91ciBvYmplY3RpdmUgaXMgdG8gcHJldmVudCBwdGR1bXAgZnJvbSByZWFkaW5nIGEgUE1EIHRhYmxlIHdoaWNoIGhhc1xcbi1cXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cXG4tXFx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcXG4tXFx0ICogYXMgYSByZXN1bHQgb2YgdGhlIG1tYXAgd3JpdGUgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gcHRkdW1wLCBnaXZlXFxuLVxcdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xcbi1cXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xcbi1cXHQgKiBpc3N1ZWQgYnkgX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoKSBndWFyYW50ZWVzIHRoYXQgcHRkdW1wIHdpbGxcXG4tXFx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXFxuLVxcdCAqL1xcbi1cXHRwdWRfY2xlYXIocHVkcCk7XFxuLVxcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbi1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xcbi1cXHRcXHRtbWFwX3JlYWRfbG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHR9XFxuLVxcbiBcXHRwbWRwID0gdGFibGU7XFxuIFxcdG5leHQgPSBhZGRyO1xcbiBcXHRlbmQgPSBhZGRyICsgUFVEX1NJWkU7XFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJ3Qgc2VlIGl0LiBOb1xcbi1cXHRcXHRcXHQgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gZmFsc2UpO1xcbitcXHRcXHRcXHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcXG4gXFx0fSB3aGlsZSAocG1kcCsrLCBuZXh0ICs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XFxuIFxcbitcXHRwdWRfY2xlYXIocHVkcCk7XFxuK1xcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbiBcXHRwbWRfZnJlZShOVUxMLCB0YWJsZSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuaW5kZXggMWMyMDE0NDcwMGQ3ZDcuLjVhNzZjNTliNWFkYTU1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuQEAgLTI4MywxMyArMjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXFxuIFxcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4te1xcbi1cXHRzdGF0aWNfYnJhbmNoX2luYyhcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XFxuLVxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi19XFxuLVxcbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcXG5AQCAtMzE4LDcgKzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fTtcXG4gXFxuLVxcdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBpbmZvLVxcdTAwM2VtbSk7XFxuK1xcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBpbmZvLVxcdTAwM2VtbSwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxcbkBAIC0zNjAsNyArMzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4gXFx0XFx0fVxcbiBcXHR9O1xcbiBcXG4tXFx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tKTtcXG4rXFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG4gXFxuIFxcdGlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHtcXG4gXFx0XFx0cHJfd2FybihcXFwiQ2hlY2tlZCBXK1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcrWCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuaW5kZXggZDAyM2E0MGExZTAzNDUuLmQxZTYzZjdkMjY3ZmYzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZWdpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZTgyMC9hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG5AQCAtNDEwLDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxcbiBcXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcXG4gXFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xcbiBcXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XFxuQEAgLTQ0Miw2ICs0NDMsMTggQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcXG4rXFx0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxcbitcXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXFxuK1xcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuQEAgLTYyMSw2ICs2MjEsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxcbiBcXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4rXFx0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xcbisrKyBiL21tL3BhZ2V3YWxrLmNcXG5AQCAtNjc4LDYgKzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXFxuICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLlxcbiAgKlxcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cXG4rICpcXG4rICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXFxuICAqL1xcbiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG5AQCAtNjkxLDI0ICs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0Lm5vX3ZtYVxcdFxcdD0gdHJ1ZVxcbiBcXHR9O1xcbiBcXG4tXFx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xcbi1cXHRpZiAobW0gPT0gXFx1MDAyNmluaXRfbW0pXFxuLVxcdFxcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBnZCwgcHJpdmF0ZSk7XFxuLVxcdGlmIChzdGFydCBcXHUwMDNlPSBlbmQgfHwgIXdhbGsubW0pXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0LypcXG4tXFx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXFxuLVxcdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xcbi1cXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbid0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXNcXG4tXFx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXFxuLVxcdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcXG4tXFx0ICogYmUgaGVsZC5cXG4rXFx0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXFxuK1xcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xcbitcXHQgKiBkb3duIHBhZ2UgdGFibGVzLlxcbitcXHQgKlxcbitcXHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcXG4rXFx0ICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuXFxuIFxcdCAqL1xcbiBcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xcbitcXHQvKlxcbitcXHQgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0ncyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcXG4rXFx0ICogb2YgYXJiaXRyYXJ5IG1tJ3MuXFxuK1xcdCAqXFxuK1xcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXFxuK1xcdCAqIGNvbmN1cnJlbnQga2VybmVsIHBhZ2UgdGFibGUgZnJlZWluZy5cXG4rXFx0ICovXFxuK1xcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcXHUwMDI2aW5pdF9tbSk7XFxuK1xcbitcXHRpZiAoc3RhcnQgXFx1MDAzZT0gZW5kKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2Fsayk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuY1xcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcXG4tLS0gYS9tbS9wdGR1bXAuY1xcbisrKyBiL21tL3B0ZHVtcC5jXFxuQEAgLTE3OCwxMSArMTc4LDE4IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcXG4gXFxuIFxcdGdldF9vbmxpbmVfbWVtcygpO1xcbiBcXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xcbitcXHQvKiBUbyBzdGFiaWxpc2Uga2VybmVsIHBhZ2UgdGFibGVzIHdlIG11c3QgaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvby4gKi9cXG4rXFx0aWYgKG1tICE9IFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFxcdTAwMjZpbml0X21tLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcbiBcXHR3aGlsZSAocmFuZ2UtXFx1MDAzZXN0YXJ0ICE9IHJhbmdlLVxcdTAwM2VlbmQpIHtcXG4gXFx0XFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcXG4gXFx0XFx0cmFuZ2UrKztcXG4gXFx0fVxcbitcXG4rXFx0aWYgKG1tICE9IFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRtbWFwX3dyaXRlX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuIFxcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcXG4gXFx0cHV0X29ubGluZV9tZW1zKCk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90bGJmbHVzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NobXBhcmFtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTE1OCwxMCArMTU5LDIxIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcXHUwMDI2XFx1MDAyNiAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXFxuK1xcdFxcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qXFxuK1xcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xcbitcXHQgKiBrZXJuZWwgcGFnZSB0YWJsZXMgaXQgZG9lcyBub3Qgb3duIHVuZGVyIHRoZSBtbWFwIHdyaXRlIGxvY2suXFxuK1xcdCAqXFxuK1xcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xcbitcXHQgKiB0aGUgcmFuZ2UgaXQgb3BlcmF0ZXMgb24gYW5kIGNhbm5vdCByZWFjaCB0aGlzIHBhZ2UgdGFibGUuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTIxMCwxMCArMjIyLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcXHUwMDI2XFx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxuK1xcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuK1xcdFxcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5AQCAtMjYyLDEwICsyNzksMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFxcdTAwMjZcXHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuIFxcbi1cXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG4rXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxNzo1My40NDEzNjY1MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTU0NTcxNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNiMDE5MWZhYWM3YTdhMWNiMzk3NTY1YmYxM2NhZTJkNDc3YThmNTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAwMzoxNzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5AQCAtNyw4ICs3LDYgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdGR1bXAuaFx1MDAzZVxuIFxuLURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVxuICNpZmRlZiBDT05GSUdfUFREVU1QXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jXG5pbmRleCBhMjVkOGJlYWNjODMxMC4uYmQ1MmZjYTZlODcyMGIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXG4rKysgYi9hcmNoL2FybTY0L21tL21tdS5jXG5AQCAtNDksOCArNDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NjQsOCArMTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaylcbitpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwdGVfdCAqdGFibGU7XG4gXHRwbWRfdCBwbWQ7XG5AQCAtMTg3NywyNSArMTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkxMSwzNiArMTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdH1cbiBcbiBcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbi1cbi1cdC8qXG4tXHQgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXNcbi1cdCAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvblxuLVx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcbi1cdCAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZVxuLVx0ICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzXG4tXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xuLVx0ICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsXG4tXHQgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC5cbi1cdCAqL1xuLVx0cHVkX2NsZWFyKHB1ZHApO1xuLVx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0fVxuLVxuIFx0cG1kcCA9IHRhYmxlO1xuIFx0bmV4dCA9IGFkZHI7XG4gXHRlbmQgPSBhZGRyICsgUFVEX1NJWkU7XG4gXHRkbyB7XG4gXHRcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBQTUQgaGFzIGJlZW4gaXNvbGF0ZWQsIHNvIHB0ZHVtcCB3b24ndCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4rXHRcdFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XG4gXHR9IHdoaWxlIChwbWRwKyssIG5leHQgKz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcbiBcbitcdHB1ZF9jbGVhcihwdWRwKTtcbitcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcbiBcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi17XG4tXHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XG4tXHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLX1cbi1cbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcbkBAIC0zMTgsNyArMzExLDcgQEAgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIGluZm8tXHUwMDNlbW0pO1xuK1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICszNTMsNyBAQCBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSk7XG4rXHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbiBcbiBcdGlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHtcbiBcdFx0cHJfd2FybihcIkNoZWNrZWQgVytYIG1hcHBpbmdzOiBGQUlMRUQsICVsdSBXK1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXFxuXCIsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li5kMWU2M2Y3ZDI2N2ZmMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC00MTAsNyArNDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbiBcbi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xuIFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wO1xuQEAgLTQ0Miw2ICs0NDMsMTggQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4re1xuK1x0LypcbitcdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxuK1x0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxuK1x0ICogICB3cml0ZSBsb2NrIG9uIGluaXRfbW0pLlxuK1x0ICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy5cbitcdCAqL1xuK1x0c2NvcGVkX2d1YXJkKG1tYXBfd3JpdGVfbG9jaywgXHUwMDI2aW5pdF9tbSlcbitcdFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi4wNDdmNWY1ZTJjMzQ3NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiArNjIxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gREVGSU5FX0dVQVJEKG1tYXBfcmVhZF9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4gXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXG4rREVGSU5FX0dVQVJEKG1tYXBfd3JpdGVfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuK1x0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXG4rREVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4rKysgYi9tbS9wYWdld2Fsay5jXG5AQCAtNjc4LDYgKzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXG4gICogd2lsbCBhbHNvIG5vdCBsb2NrIHRoZSBQVEVzIGZvciB0aGUgcHRlX2VudHJ5KCkgY2FsbGJhY2suXG4gICpcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cbisgKlxuKyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxuICAqL1xuIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5AQCAtNjkxLDI0ICs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0Lm5vX3ZtYVx0XHQ9IHRydWVcbiBcdH07XG4gXG4tXHQvKiBGb3IgY29udmVuaWVuY2UsIHdlIGFsbG93IHRyYXZlcnNhbCBvZiBrZXJuZWwgbWFwcGluZ3MuICovXG4tXHRpZiAobW0gPT0gXHUwMDI2aW5pdF9tbSlcbi1cdFx0cmV0dXJuIHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgb3BzLFxuLVx0XHRcdFx0XHRcdCAgICBwZ2QsIHByaXZhdGUpO1xuLVx0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kIHx8ICF3YWxrLm1tKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHQvKlxuLVx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXG4tXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cbi1cdCAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJ3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlc1xuLVx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXG4tXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXG4tXHQgKiBiZSBoZWxkLlxuK1x0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXG4rXHQgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmdcbitcdCAqIGRvd24gcGFnZSB0YWJsZXMuXG4rXHQgKlxuK1x0ICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkXG4rXHQgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy5cbiBcdCAqL1xuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbitcdC8qXG4rXHQgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0ncyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcbitcdCAqIG9mIGFyYml0cmFyeSBtbSdzLlxuK1x0ICpcbitcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXG4rXHQgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuXG4rXHQgKi9cbitcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtcbitcbitcdGlmIChzdGFydCBcdTAwM2U9IGVuZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jXG5pbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0XG4tLS0gYS9tbS9wdGR1bXAuY1xuKysrIGIvbW0vcHRkdW1wLmNcbkBAIC0xNzgsMTEgKzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG4rXHQvKiBUbyBzdGFiaWxpc2Uga2VybmVsIHBhZ2UgdGFibGVzIHdlIG11c3QgaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvby4gKi9cbitcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuK1x0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFx1MDAyNmluaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcbiBcdHdoaWxlIChyYW5nZS1cdTAwM2VzdGFydCAhPSByYW5nZS1cdTAwM2VlbmQpIHtcbiBcdFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxuIFx0XHRcdFx0ICAgICAgXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XG4gXHRcdHJhbmdlKys7XG4gXHR9XG4rXG4rXHRpZiAobW0gIT0gXHUwMDI2aW5pdF9tbSlcbitcdFx0bW1hcF93cml0ZV91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRwdXRfb25saW5lX21lbXMoKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li5mNGZhMjI3YThkN2YwNCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiArNDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NobXBhcmFtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICsxNTksMjEgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwbWRfcHJlc2VudCgqcG1kKSlcbitcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qXG4rXHQgKiBBY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBleGNsdWRlIHB0ZHVtcCwgd2hpY2ggd2Fsa3NcbitcdCAqIGtlcm5lbCBwYWdlIHRhYmxlcyBpdCBkb2VzIG5vdCBvd24gdW5kZXIgdGhlIG1tYXAgd3JpdGUgbG9jay5cbitcdCAqXG4rXHQgKiBDb25jdXJyZW50IHJlYWQgbG9jayBob2xkZXJzIGFyZSBzYWZlOiBlYWNoIGV4Y2x1c2l2ZWx5IG93bnNcbitcdCAqIHRoZSByYW5nZSBpdCBvcGVyYXRlcyBvbiBhbmQgY2Fubm90IHJlYWNoIHRoaXMgcGFnZSB0YWJsZS5cbitcdCAqL1xuK1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjEwLDEwICsyMjIsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcdTAwMjZcdTAwMjYgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwdWRfcHJlc2VudCgqcHVkKSlcbitcdFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4rXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4rXHRcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yNjIsMTAgKzI3OSwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFx1MDAyNlx1MDAyNiAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRpZiAoIXA0ZF9wcmVzZW50KCpwNGQpKVxuK1x0XHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbitcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTc6NTMuNDQxMzY3ODcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2Nzc5NTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb3JlIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCdzIHR3ZWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBkdW1waW5nIGFuZCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncy4gSXQncyB0b3VjaGluZyBvbiBib3RoIHg4NiBhbmQgYXJtNjQgYXJjaGl0ZWN0dXJlcywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBsb29rLW92ZXIuIEkgc2VlIHRoZXkncmUgcmVtb3ZpbmcgdGhlIGBhcm02NF9wdGR1bXBfbG9ja19rZXlgIGFuZCByZXZpc2luZyB0aGUgc3luY2hyb25pemF0aW9uIGluIGZ1bmN0aW9ucyBsaWtlIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGBwdWRfZnJlZV9wbWRfcGFnZWAsIGFuZCBgcHRkdW1wX3dhbGtfcGdkYC4gVGhhdCBzeW5jaHJvbml6YXRpb24gbG9naWMgY2hhbmdlIGFsd2F5cyB3YXJyYW50cyBleHRyYSBzY3J1dGlueS5cblxuVGhleSdyZSB1c2luZyBgbW1hcF93cml0ZV9sb2NrKFx1MDAyNmluaXRfbW0pYCBpbiBgcHRkdW1wX3dhbGtfcGdkYCBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGFuZCB0aGV5J3ZlIGludHJvZHVjZWQgdGhpcyBgc2NvcGVkX2NvbmRfZ3VhcmRgIHdpdGggYG1tYXBfcmVhZF9sb2NrX3RyeWAgaW4gc2V2ZXJhbCBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgY29uY3VycmVuY3kgaXMgbm93IGhhbmRsZWQgZGlmZmVyZW50bHkgaW4gdGhlc2UgY3JpdGljYWwgdm1hbGxvYyBhcmVhcy4gVGhlc2UgYXJlIGFsbCBjb3JlIGNoYW5nZXMsIGRpcmVjdGx5IGltcGFjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdm1hbGxvYywgc28gSSdtIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBoaWdoIHByaW9yaXR5IGZvciB0ZXN0aW5nLiBHaXZlbiB0aGUgYnJlYWR0aCBvZiB0aGUgaW1wYWN0LCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QgaGVyZS5cblxuTGV0J3MgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGFmZmVjdHMuIEknbSBmb2N1c2luZyBvbjogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYHB0ZHVtcF93YWxrX3BnZGAsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBhbmQgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHN1cHBvc2VkIHRvIHdvcmsgaW4gYm90aCBsb2NrIGFuZCBsb2NrbGVzcyBzY2VuYXJpb3MgYW5kIHdoYXQgc29ydCBvZiBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBDbGVhcmx5LCBgQ09ORklHX1BURFVNUF9DT1JFYCBpcyBpbnZvbHZlZCBiZWNhdXNlIHdlJ3JlIGxvb2tpbmcgYXQgY29kZSBpbiBgbW0vcHRkdW1wLmNgLiBUbyBnZXQgdGhpcyB3b3JraW5nIGZyb20gdXNlcnNwYWNlLCBJJ2xsIG5lZWQgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIFBsdXMsIGBDT05GSUdfREVCVUdfV1hgIHdpbGwgYmUgdXNlZnVsIHNpbmNlIGl0IHRyaWdnZXJzIHB0ZHVtcCBhdCBib290LiBBbmQgb2YgY291cnNlLCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBgIGlzIGVzc2VudGlhbCB0byBlbmFibGUgdGhlIHZtYXAgaHVnZSBwYWdlIGxvZ2ljIHRoYXQncyBiZWluZyBtb2RpZmllZC4gTm93IEkgc2hvdWxkIHF1aWNrbHkgZG8gYSBxdWljayBjb2RlIHNlYXJjaCB0byB2ZXJpZnkgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNldCBpbiB0aGUgcmVsZXZhbnQgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODowMC43MDkxNjY4ODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkyNTQ0NzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfd2Fsa19wZ2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MTY9c3RydWN0IHB0ZHVtcF9pbmZvIHtcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTIxLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIyOnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKTtcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0yMy0jaWZkZWYgQ09ORklHX0FSTV9QVERVTVBfREVCVUdGU1xcbi0tXFxuYXJjaC9hcm0vbW0vZHVtcC5jPTM5OD1zdGF0aWMgdm9pZCB3YWxrX3BnZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvYXJtL21tL2R1bXAuYy00MTQtXFxuYXJjaC9hcm0vbW0vZHVtcC5jOjQxNTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcXG5hcmNoL2FybS9tbS9kdW1wLmMtNDE2LXtcXG4tLVxcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmM9Nz1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmMtMTAtXFxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYzoxMTpcXHRwdGR1bXBfd2Fsa19wZ2QobSwgaW5mbyk7XFxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYy0xMi1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9Mjg2PXZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMxMy1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjMxNDpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cXHUwMDNlbW0sIE5VTEwpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzE1LX1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9MzMxPWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTM1NS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjM1NjpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzU3LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zMzQ9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM1MS1cXHQvKiBUcmF2ZXJzZSBrZXJuZWwgcGFnZSB0YWJsZXMgKi9cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjM1MjpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzUzLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zNjg9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzkxLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM6MzkyOlxcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBcXHUwMDI2aW5pdF9tbSwgTlVMTCk7XFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy0zOTMtXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM1Mz1zdGF0aWMgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGRfbW1faW5mbyAqcGluZm8pXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3Mi1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjM3MzpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgcGluZm8tXFx1MDAzZW1tLCBOVUxMKTtcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3NC19XFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM3Nj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zOTktXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYzo0MDA6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTQwMS1cXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xODI9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTAtXFx0XFx0cmV0dXJuIHRydWU7XFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjIxMTpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTItXFx0aWYgKHN0Lnd4X3BhZ2VzKSB7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI2PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZjcGFfbXV0ZXgpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTE6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3BhX211dGV4KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0zMD1zdHJ1Y3Qgc2VxX2ZpbGU7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjMxOnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMjp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMzLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcik7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM0OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM1OiNkZWZpbmUgcHRkdW1wX2NoZWNrX3d4IHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz04PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy05LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXFx1MDAyNmluaXRfbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MTY9c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE4LVxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVxcdTAwM2VtbSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yMC1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz0yNj1zdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5OlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXFx1MDAzZW1tLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9Mzc9c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM5LVxcdGlmIChlZmlfbW0ucGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0MDpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcXHUwMDI2ZWZpX21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTQxLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDE2PXN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyMi1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MjM6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDI0LVxcdFxcdFxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU3LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1ODpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgbW0sIHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU5LVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDczLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NDp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3NS17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc2OlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc3LX1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzgtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODAtXFx0XFx0XFx0XFx0ICAgYm9vbCB1c2VyKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg2LSNlbmRpZlxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ4NzpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00OTA9dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDAtXFx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwMTpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShOVUxMLCBcXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAyLSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwNTpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwOS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MTA6XFx0cmV0dXJuIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBJTklUX1BHRCwgdHJ1ZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUxMS19XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM9NzU9dm9pZCBfX2luaXQgZWZpX2R1bXBfcGFnZXRhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzctI2lmZGVmIENPTkZJR19FRklfUEdUX0RVTVBcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM6Nzg6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFxcdTAwMjZpbml0X21tKTtcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzktI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmM9NDIzPXZvaWQgX19pbml0IGVmaV9kdW1wX3BhZ2V0YWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jLTQyNS0jaWZkZWYgQ09ORklHX0VGSV9QR1RfRFVNUFxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYzo0MjY6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFxcdTAwMjZlZmlfbW0pO1xcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYy00MjctI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTEzPXN0cnVjdCBwdGR1bXBfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjI4OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMjktXFx0XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zMC1cXHRcXHRcXHRcXHRib29sIGNoZWNrd3gsIGJvb2wgZG1lc2cpO1xcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTMyLWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xcbi0tXFxubW0vcHRkdW1wLmM9MTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcHRkdW1wX29wcyA9IHtcXG4tLVxcbm1tL3B0ZHVtcC5jLTE3NC1cXG5tbS9wdGR1bXAuYzoxNzU6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxcbm1tL3B0ZHVtcC5jLTE3Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjAzLjYzNDYyMDIzMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTQ2NDQ1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIHB0ZHVtcCBXYWxrIFRyaWdnZXIqKlxuXG5SaWdodCwgc28gdGhlIGBwdGR1bXBgIHdhbGssIGFzIEkgcmVjYWxsLCBpcyBpbml0aWF0ZWQgdGhyb3VnaCB0aG9zZSBkZWJ1Z2ZzIGZpbGVzLiBMZXQncyBnZXQgdG8gdGhlIGhlYXJ0IG9mIGhvdyB0aGF0J3MgY29uZmlndXJlZC4gTXkgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGluIGBhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmNgIGFuZCBgYXJjaC9hcm02NC9tbS9wdGR1bXAuY2AuIFRoYXQgc2hvdWxkIHNob3cgbWUgcHJlY2lzZWx5IGhvdyB0aGUgZGVidWdmcyBlbnRyaWVzIGFyZSBjcmVhdGVkIGFuZCBsaW5rZWQgdG8gdGhlIGBwdGR1bXBgIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc207IEknbSBiZXR0aW5nIG9uZSBvZiB0aGVzZSBmaWxlcyB3aWxsIGJlIHRoZSBrZXkuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBjYWxsIHBhdGguIE9uY2UgSSBzZWUgaG93IGRlYnVnZnMgaXMgd2lyZWQgaW4sIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlIGZpbGVzIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEwNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjA3LjM4OTI2NzEzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA0NzAxMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlYnVnZnNfY3JlYXRlX2ZpbGUuKnB0ZHVtcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jPTE2PXZvaWQgX19pbml0IHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSlcXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jLTE3LXtcXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jOjE4OlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgMDQwMCwgTlVMTCwgaW5mbywgXFx1MDAyNnB0ZHVtcF9mb3BzKTtcXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jLTE5LX1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wX2RlYnVnZnMuYz0xNj12b2lkIF9faW5pdCBwdGR1bXBfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKm5hbWUpXFxuYXJjaC9hcm02NC9tbS9wdGR1bXBfZGVidWdmcy5jLTE3LXtcXG5hcmNoL2FybTY0L21tL3B0ZHVtcF9kZWJ1Z2ZzLmM6MTg6XFx0ZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCAwNDAwLCBOVUxMLCBpbmZvLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wX2RlYnVnZnMuYy0xOS19XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwdGR1bXBfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy00MjAtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKSlcXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMTpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtNDIyLVxcbi0tXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTMxNT1zdGF0aWMgaW50IHB0X2R1bXBfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1Ni0jaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM1NzpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTgtI2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IHB0X2R1bXBfZGVidWdfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTUyLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1MzpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxcXFwiLCAwNDAwLCBkaXIsIE5VTEwsIFxcdTAwMjZwdGR1bXBfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTU0LVxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImN1cnJlbnRfa2VybmVsXFxcIiwgMDQwMCwgZGlyLCBOVUxMLFxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYxLSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NjI6XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZWZpXFxcIiwgMDQwMCwgZGlyLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2VmaV9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNjMtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjEwLjM5Mzk3NjU4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODYzODQ5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19QVERVTVBfREVCVUdGU2AgaXMgcmVxdWlyZWQuIFRoYXQncyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgSSdtIG5vdCBnb2luZyB0byBqdW1wIHRvIGNvbmNsdXNpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiBpdCdzIG5lZWRlZC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgXCJJcyB0aGlzIGp1c3QgYWx3YXlzIG9uLCBvciBjb25kaXRpb25hbD9cIiBJIHJlbWVtYmVyIHNlZWluZyBgYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jYCBmbG9hdGluZyBhcm91bmQgcmVjZW50bHksIGFuZCB0aGF0ICpmZWx0KiBjb25kaXRpb25hbCBpbiBpdHMgY29tcGlsYXRpb24uIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYGFyY2gveDg2L21tL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB3b3VsZCBiZS4gSSBuZWVkIHRvIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBkZXBlbmRlbnQgb24gb3RoZXIgdmFyaWFibGVzIG9yIGlmIHRoZXJlJ3MgbW9yZSB0byBpdCB0aGFuIG1lZXRzIHRoZSBleWUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhhdCBNYWtlZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoxMy4zODAzNjQ2NDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0OTIxNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlYnVnX3BhZ2V0YWJsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBkdW1wX3BhZ2V0YWJsZXMub1xcbmFyY2gveDg2L21tL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19QVERVTVBfREVCVUdGUylcXHQrPSBkZWJ1Z19wYWdldGFibGVzLm9cXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZS0zOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MTMuNTI1MjkwOThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAxNDc2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgTWVtb3J5IE1hcHBpbmcgQ2hhbmdlcyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCB0aGF0J3MgZ29pbmcgdG8gdHJpZ2dlciBzb21lIHBhZ2UgdGFibGUgZHVtcHMsIGFuZCBpdCdzIGVuYWJsZWQgYnkgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIFRoYXQncyBnb29kLCBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcuIEFuZCwgYWhhLCBgQ09ORklHX0RFQlVHX1dYYCBhbHNvIGRvZXMgaXQsIG1lYW5pbmcgdGhlIHN5c3RlbSB3aWxsIGR1bXAgcHRkdW1wcyBhdCBib290LiBUaGF0IG5hcnJvd3MgZG93biB0aGUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCB0aGlzIGNvZGUgZXhlY3V0ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG1tL3ZtYWxsb2MuY2AgYW5kIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRob3NlIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gT2theSwgZm9jdXNpbmcgb24gYG1tL3ZtYWxsb2MuY2AsIHRoZSBwYXRjaCB0b3VjaGVzIGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGFuZCBgdm1hcF90cnlfaHVnZV9wNGRgLiBUaG9zZSBhcmUgYWxsIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIG1hcHBpbmcgd2l0aGluIGB2bWFsbG9jYC4gVGhhdCBtZWFucyB0aGlzIGlzIGFsbCB2ZXJ5IHJlbGV2YW50IHRvIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpZiB0aGlzIGlzIGVuYWJsZWQsIGl0IHNob3VsZCB3b3JrIGFzIGlzLiBUaW1lIHRvIHB1bGwgdXAgYG1tL3ZtYWxsb2MuY2AgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZCB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoxNy45MjY3NzA4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NTc4NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9OTU9c3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE0Mi1cXG5tbS92bWFsbG9jLmM6MTQzOnN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS92bWFsbG9jLmMtMTQ0LVxcdFxcdFxcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcXG4tLVxcbm1tL3ZtYWxsb2MuYz0xNzk9c3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE5Mi1cXG5tbS92bWFsbG9jLmM6MTkzOlxcdFxcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcXG5tbS92bWFsbG9jLmMtMTk0LVxcdFxcdFxcdFxcdFxcdG1heF9wYWdlX3NoaWZ0KSkge1xcbi0tXFxubW0vdm1hbGxvYy5jPTIwNj1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMjI3LVxcbm1tL3ZtYWxsb2MuYzoyMjg6XFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG5tbS92bWFsbG9jLmMtMjI5LVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjYzPXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yODQtXFxubW0vdm1hbGxvYy5jOjI4NTpcXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xcbm1tL3ZtYWxsb2MuYy0yODYtXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MTguMDM1MzU4OTk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTcyODk4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb246XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdGF0dXMgb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYC4gVGhlcmUncyBubyB0aW1lIHRvIHdhc3RlIHdhZGluZyB0aHJvdWdoIGV2ZXJ5dGhpbmcuIEkgd2FudCBhIGRlZmluaXRpdmUgYW5zd2VyIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgZnVuY3Rpb24gaXMgKmFsd2F5cyogcHJlc2VudCBpbiB0aGUgYnVpbGQsIG9yIGlmIGl0J3MgZ2F0ZWQgYmVoaW5kIHNvbWUgY29uZmlndXJhdGlvbiBtYWNyby4gVGltZSB0byBxdWlja2x5IGZpbmQgb3V0IGlmIEkgbmVlZCB0byBldmVuIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGl0IG1pZ2h0IGJlIHVuYXZhaWxhYmxlIG9uIGEgZ2l2ZW4gdGFyZ2V0LiBJIG5lZWQgdG8ga25vdyB3aGljaCBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJlcywgZmVhdHVyZXMsIG9yIGNvbmZpZ3VyYXRpb25zIHdpbGwgaW1wYWN0IGl0cyBwcmVzZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoyMS4wMzI2NTI0NDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjA1MjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfSFVHRV9WTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmMtNTMtXFxubW0vdm1hbGxvYy5jOjU0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUFxcbm1tL3ZtYWxsb2MuYy01NS1zdGF0aWMgdW5zaWduZWQgaW50IF9fcm9fYWZ0ZXJfaW5pdCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gQklUU19QRVJfTE9ORyAtIDE7XFxuLS1cXG5tbS92bWFsbG9jLmM9NjI9ZWFybHlfcGFyYW0oXFxcIm5vaHVnZWlvbWFwXFxcIiwgc2V0X25vaHVnZWlvbWFwKTtcXG5tbS92bWFsbG9jLmM6NjM6I2Vsc2UgLyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVAgKi9cXG5tbS92bWFsbG9jLmMtNjQtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcXG5tbS92bWFsbG9jLmM6NjU6I2VuZGlmXFx0LyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVAgKi9cXG5tbS92bWFsbG9jLmMtNjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjIxLjEzNDcxMjkzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYxOTY0MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHZtYXBfdHJ5X2h1Z2VfcG1kYCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHZtYXBfdHJ5X2h1Z2VfcG1kYCB3YXMgb25seSBjb21waWxlZCBpbiBpZiB3ZSBoYWQgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQYCBkZWZpbmVkLCBidXQgdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgdGhlIGNhc2UuIEl0IGxvb2tzIGxpa2UgaXQncyB1bmNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBUaGlzIGlzIGludGVyZXN0aW5nLlxuXG5TbywgZXZlbiBpZiB0aGUgYXJjaGl0ZWN0dXJlICpkb2Vzbid0KiBzdXBwb3J0IGh1Z2Ugdm1hcHMsIHRoZSBmdW5jdGlvbiBzdGlsbCBleGlzdHMgaW4gdGhlIGNvbXBpbGVkIGNvZGUsIGFsYmVpdCBwb3RlbnRpYWxseSBkb2luZyBub3RoaW5nLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdm1hcF90cnlfaHVnZV9wbWRgIGl0c2VsZiB0byBmdWxseSBncmFzcCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQgY29uZGl0aW9ucyB3b3VsZCB0cmlnZ2VyIGl0IHRvIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIGl0IHNpbXBseSByZXR1cm5zIGEgdmFsdWUgd2l0aG91dCB0YWtpbmcgYW55IGFjdGlvbi4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtYXhfcGFnZV9zaGlmdGAgYW5kIGBQTURfU0hJRlRgIGlzIG9idmlvdXNseSBrZXkuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHRoYXQncyBhbGwgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MjQuNjk2NjgwMDYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzQ4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MzpcXHRzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIDE0NDpcXHRcXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuIDE0NTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXFxuIDE0NjpcXHR7XFxuIDE0NzpcXHRcXHRpZiAobWF4X3BhZ2Vfc2hpZnQgXFx1MDAzYyBQTURfU0hJRlQpXFxuIDE0ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0aWYgKCFhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSlcXG4gMTUxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRpZiAoKGVuZCAtIGFkZHIpICE9IFBNRF9TSVpFKVxcbiAxNTQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdGlmICghSVNfQUxJR05FRChhZGRyLCBQTURfU0laRSkpXFxuIDE1NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxcbiAxNjA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXFxuIDE2MzpcXHRcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0LypcXG4gMTY2OlxcdFxcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xcbiAxNjc6XFx0XFx0ICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLlxcbiAxNjg6XFx0XFx0ICpcXG4gMTY5OlxcdFxcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xcbiAxNzA6XFx0XFx0ICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLlxcbiAxNzE6XFx0XFx0ICovXFxuIDE3MjpcXHRcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbiAxNzM6XFx0XFx0XFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxcbiAxNzQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE3NTpcXHRcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4gMTc2OlxcdFxcdH1cXG4gMTc3OlxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0c3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiAxODA6XFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxcbiAxODE6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4gMTgyOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MjQuNjk4MDE5MTUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTc0NzA0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSHVnZSBQYWdlIE1hcHBpbmcqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBgbWF4X3BhZ2Vfc2hpZnRgIHZhbHVlIGlzIHVsdGltYXRlbHkgZGVyaXZlZCBmcm9tIGVpdGhlciBgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdGAgb3IgYHZtYXBfbWF4X3BhZ2Vfc2hpZnRgLiBOb3csIGlmIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXNuJ3QgZW5hYmxlZCwgdGhlbiBgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdGAgc2ltcGx5IGRlZmF1bHRzIHRvIGBQQUdFX1NISUZUYC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoYXQgY29uZGl0aW9uIGlzIG1ldCwgYG1heF9wYWdlX3NoaWZ0YCB3aWxsICphbHdheXMqIGJlIGxlc3MgdGhhbiBgUE1EX1NISUZUYCwgcmlnaHQ/IENvbnNlcXVlbnRseSwgdGhlIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJhaWwgb3V0IGFuZCByZXR1cm4gMC4gU28sIGl0J3MgY2xlYXI6IHRvIGV2ZW4gKmNvbnNpZGVyKiB0aGUgbW9kaWZpZWQgbG9naWMgd2l0aGluIGB2bWFwX3RyeV9odWdlX3BtZGAsIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgKm11c3QqIGJlIGRlZmluZWQuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MzAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoyOS4yMTU0OTUyOTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTEzNjc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQxMj1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDEzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDE0OnN0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDE1LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQ1LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDQ2OnN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ0Ny17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1NC1cXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ1NTpcXHRcXHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU2LX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDU4PXN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00OTMtXFx0aWYgKGNwYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBDUEFfQ09MTEFQU0UpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0OTQ6XFx0XFx0Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00OTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODoyOS4zMjY2Mzc4NTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NjI4NzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBzeXN0ZW1zIGVuZ2luZWVyOlxuXG4qKkRlY29uc3RydWN0aW5nIE1lbW9yeSBBdHRyaWJ1dGUgQ2hhbmdlcyoqXG5cblJpZ2h0LCBzbyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBnZXR0aW5nIHRyaWdnZXJlZCBmcm9tIGBjcGFfZmx1c2hgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBwdXRzIG1lIGluIG1pbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIExvb2tpbmcgY2xvc2VyLCBpdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIHdoaWNoIGlzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZ5aW5nIG1lbW9yeSBhdHRyaWJ1dGVzLiBUaGluZ3MgbGlrZSByZWFkLW9ubHksIG5vLWV4ZWN1dGUsIGV0Yy4gYXJlIGhhbmRsZWQgaGVyZS5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIGlzICphbHdheXMqIGNvbXBpbGVkIG9uIHg4NiBpcyBhIGNydWNpYWwgZGV0YWlsLiBJdCBzdWdnZXN0cyB0aGlzIHBhcnRpY3VsYXIgbG9naWMgaXMgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBhcmNoaXRlY3R1cmUuIEknZCBiZSB3aWxsaW5nIHRvIGJldCB0aGlzIG9wdGltaXphdGlvbiBpcyBzcGVjaWZpYyB0byB4ODYncyBtZW1vcnkgbW9kZWwgYW5kIHBhZ2UgdGFibGUgbWFuYWdlbWVudC4gVGhpcyBoaW50cyBhdCBzb21ldGhpbmcgcG90ZW50aWFsbHkgbGV2ZXJhZ2luZyBzcGVjaWZpYyBDUFUgZmVhdHVyZXMuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGZ1bmN0aW9uIG1lbnRpb25lZC4gQSBxdWljayBsb29rIGF0IGBtbS9wYWdld2Fsay5jYCB3aWxsIHByb2JhYmx5IGNsYXJpZnkgaG93IHRoaXMgcGFnZSByYW5nZSBtYW5pcHVsYXRpb24gb3BlcmF0ZXMuIEl0J2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gaXRlcmF0aW5nIHRocm91Z2ggcGFnZSB0YWJsZSBlbnRyaWVzIGFuZCBhcHBseWluZyB0aGUgYXR0cmlidXRlIGNoYW5nZXMgZWZmaWNpZW50bHkuIExldCdzIHNlZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MzMuNDIyOTI4MDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUzNDY2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2V3YWxrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZXdhbGsuYz02NDg9aW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTY2Ny0vKipcXG5tbS9wYWdld2Fsay5jOjY2ODogKiB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcgLSB3YWxrIGEgcmFuZ2Ugb2YgcGFnZXRhYmxlcyBub3QgYmFja2VkIGJ5IGEgdm1hXFxubW0vcGFnZXdhbGsuYy02NjktICogQG1tOlxcdFxcdG1tX3N0cnVjdCByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBwcm9jZXNzIG9mIHBhZ2UgdGFibGUgd2Fsa1xcbi0tXFxubW0vcGFnZXdhbGsuYy02ODMtICovXFxubW0vcGFnZXdhbGsuYzo2ODQ6aW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9wYWdld2Fsay5jLTY4NS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MzMuNTM4MjgyNDIxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTgzNjM5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGFuZ2VzIHRvIFBhZ2UgVGFibGUgRGVidWdnaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIHdoaWNoIGlzIGNhbGxlZCBieSBgcHRkdW1wX3dhbGtfcGdkYCBpbiBgbW0vcHRkdW1wLmNgLiBUaGUgbWFpbiBhZGRpdGlvbiBpcyBhbiBgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKFx1MDAyNmluaXRfbW0pYCBjYWxsIGluc2lkZSBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC4gVGhhdCdzIGludGVyZXN0aW5nLCBpbXBsaWVzIHdlJ3JlIHRyeWluZyB0byB0aWdodGVuIHVwIHNvbWUgbG9ja2luZyBhcm91bmQgdGhlIGluaXRpYWwgbWVtb3J5IG1hcC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgd2UncmUgZGlnZ2luZyBhcm91bmQgaW4gcGFnZSB0YWJsZXMgYW5kIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBjb25jdXJyZW50IGFjY2Vzcy5cblxuTGV0IG1lIHNlZSwgdGhlIGZ1bmN0aW9ucyByZWFsbHkgaW4gcGxheSBoZXJlIGFyZSBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIG9mIGNvdXJzZSBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0IHdpdGggZWFjaCBvdGhlciBpbiB0aGlzIG5ldyBjb250ZXh0LlxuXG5UaGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgUFREVU1QX0RFQlVHRlNgLCBgREVCVUdfV1hgLCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgSEFWRV9BUkNIX0hVR0VfVk1BUGAgdG8gbWFrZSBzdXJlIGl0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgbm90IGp1c3QgYSBtYWNyby4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmxhZ3MgYWZmZWN0IHRoZSBvdmVyYWxsIGJlaGF2aW9yIGFuZCB3aGF0IGFyY2hpdGVjdHVyZXMgdGhpcyBjaGFuZ2UgaW1wYWN0cy4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgd2hlbiBhc3Nlc3NpbmcgdGhlc2Uga2luZCBvZiBjaGFuZ2VzLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgYnJlYWtpbmcgc29tZXRoaW5nIG9uIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgb3IgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6MzguMDk2NjQ5NjY4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI4NzYzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDg5PWNvbmZpZyBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuLS1cXG5hcmNoL0tjb25maWctMTA5MS1cXG5hcmNoL0tjb25maWc6MTA5Mjpjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6NDAuNTI1NDE5MTc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTM5NzI3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0J3MgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBmdWxseS4gQXJlIHRoZXJlICpvdGhlciogcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgd2hpY2ggY291bGQgaW1wYWN0IHRoaXMgb25lPyBUaGUgZGVwZW5kZW5jeSBncmFwaCBpcyB0aGUga2V5IGhlcmUuIExldCdzIHNlZS4uLiBBaCwgYENPTkZJR19QVERVTVBfQ09SRWAgaXMgKnNlbGVjdGVkKiBieSBib3RoIGBQVERVTVBfREVCVUdGU2AgYW5kIGBERUJVR19XWGAuIFRoYXQncyBpbXBvcnRhbnQuIEl0IHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgdGhlIHN0YXRlIG9mICp0aGlzKiBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgY29udHJvbGxlZCBieSBhIGNvdXBsZSBvZiBvdGhlciB0aGluZ3MuIE5vdyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY3kgYFBURFVNUF9ERUJVR0ZTYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCBpbXBhY3RzLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIGFuZCB0aGUgaW1wbGljYXRpb25zIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwODUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODo0My40MzkzOTYxNDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTcxMjMzMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURFVNUF9ERUJVR0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MjE5PWNvbmZpZyBQVERVTVBcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjIxLVxcbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xcbm1tL0tjb25maWcuZGVidWctMjIzLVxcdGJvb2wgXFxcIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE4OjQ1LjgzNjUzOTAxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTM4MDQzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBhIGRlZXAgZGl2ZSBpbnRvIGRlYnVnZ2luZzpcblxuKipEZWJ1Z2dpbmcgSW5pdGlhdGl2ZTogVGhlIGBERUJVR19XWGAgVmFyaWFibGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHRyb3VibGVzaG9vdC4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBpbW1lZGlhdGVseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBERUJVR19XWGAuIFRoYXQgdmFyaWFibGUgaXMgdXN1YWxseSB0aGUgbGluY2hwaW4gaW4gdGhpcyB0eXBlIG9mIHByb2JsZW0sIGFuZCBJIGFtIGJldHRpbmcgSSBhbSBnb2luZyB0byBmaW5kIHNvbWV0aGluZyB0aGVyZS4gSXMgaXQgb24sIG9mZiwgc2V0IGluY29ycmVjdGx5PyBJdHMgc3RhdGUgd2lsbCBzdGVlciB0aGUgbmV4dCBtb3ZlLiBUaGlzIHdpbGwgbGlrZWx5IHByb3ZpZGUgaW5pdGlhbCBjb250ZXh0IGZvciB0aGUgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDA4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODo0OC45NTAzNDg4NTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzI3NTE3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFQlVHX1dYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MTgzPWNvbmZpZyBBUkNIX0hBU19ERUJVR19XWFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0xODUtXFxubW0vS2NvbmZpZy5kZWJ1ZzoxODY6Y29uZmlnIERFQlVHX1dYXFxubW0vS2NvbmZpZy5kZWJ1Zy0xODctXFx0Ym9vbCBcXFwiV2FybiBvbiBXK1ggbWFwcGluZ3MgYXQgYm9vdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6NTEuNTIzMTA1NTA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjA3ODU5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUFREVU1QX0RFQlVHRlNgIGFuZCBgREVCVUdfV1hgIGxvb2sgcHJvbWlzaW5nIGFzIHN0YXJ0aW5nIHBvaW50cy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBDT05GSUdfWDg2X1BBVGAgZGlyZWN0aXZlLiBIbW1tLCB0aGUgYXNzb2NpYXRlZCBmaWxlIGlzIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZpbGUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX1g4Nl9QQVRgPyBMZXQncyBxdWlja2x5IHZlcmlmeSBieSBvcGVuaW5nIGFuZCBjaGVja2luZyB0aGUgYGFyY2gveDg2L21tL3BhdC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBUaGF0J2xsIGdpdmUgbWUgYSBkZWZpbml0aXZlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxODo1NC43NDM4OTQzNDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTQ2NTEwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtMi1cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVxcdFxcdFxcdFxcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTg6NTUuMTM1MzY3NTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk3MDI2OTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgUmVjZW50IE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSByZWNlbnQgY2hhbmdlcy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBmb2N1cyBpcyBvbiBtZW1vcnkgbWFwcGluZyBhbmQgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIGFuZCBpdCdzIGFsbCBjb21waWxlZCwgb2YgY291cnNlLlxuXG5GaXJzdCwgaW4gYG1tL3ZtYWxsb2MuY2AsIHRoZXJlJ3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIHZtYWxsb2MgaHVnZSBwYWdlcy4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgbG9jayB1c2luZyBgc2NvcGVkX2NvbmRfZ3VhcmRgIHdpdGhpbiBgcG1kX2ZyZWVfcHRlX3BhZ2VgLiBUaGlzIHN1Z2dlc3RzIHRoZXkncmUgdHJ5aW5nIHRvIGltcHJvdmUgc3luY2hyb25pemF0aW9uIHdoZW4gbWFwcGluZyB0aGVzZSBodWdlIHBhZ2VzLCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuVGhlbiwgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB0aGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24gaXMgZ2V0dGluZyBhIGxvY2sgYXMgd2VsbCwgdXNpbmcgYHNjb3BlZF9ndWFyZGAuIEl0IHNlZW1zIHRoaXMgaXMgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMgYW5kIGF2b2lkaW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgYHB0ZHVtcGAgZnVuY3Rpb25hbGl0eS4gVGhhdCBhbHNvIG1ha2VzIHNlbnNlLlxuXG5OZXh0LCB0aGUgYG1tL3B0ZHVtcC5jYCBmaWxlIGhhcyBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGBpbml0X21tYCBsb2NraW5nIHdpdGhpbiBgcHRkdW1wX3dhbGtfcGdkYC4gVGhleSdyZSBhY3F1aXJpbmcgdGhlIGBpbml0X21tYCBsb2NrIG5vdywgd2hpY2ggaXMgZGVmaW5pdGVseSBkZXNpZ25lZCB0byBpbXByb3ZlIHN0YWJpbGl0eSBvZiBrZXJuZWwgcGFnZSB0YWJsZXMgYnkgYWNxdWlyaW5nIGEgbG9jayBvbiBgaW5pdF9tbWAsIHNvIGEgZ29vZCBjaGFuZ2UuXG5cbkZpbmFsbHksIGluIGBhcmNoL2FybTY0L21tL21tdS5jYCwgdGhleSd2ZSByZW1vdmVkIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMgYnJhbmNoIGFuZCB0aGUgYG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pYCBmcm9tIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuIFRoaXMgc2VlbXMgdG8gYmUgYSBjbGVhbnVwIGFuZCBzaW1wbGlmaWNhdGlvbiwgcGVyaGFwcyBhZnRlciBwcmV2aW91cyBsb2NraW5nIGNoYW5nZXMgb3IgaW1wcm92ZW1lbnRzLlxuXG5PdmVyYWxsLCB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHNldCBvZiBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGFyZSBhbGwgY2hhbmdlcyB0aGF0IGFyZSBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgdGhpbmsgdGhlIGtleSBhcmVhcyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZyB3aWxsIGJlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwdGR1bXBfd2Fsa19wZ2RgLCBhbmQgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuXG5cbkFzIGZvciBjb25maWdzLCBgUFREVU1QX0RFQlVHRlNgLCBgREVCVUdfV1hgLCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgIHNlZW0gcmVsZXZhbnQuIEkgc2hvdWxkIGNoZWNrIGlmIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCBpcyB1c2VyLXNlbGVjdGFibGUsIGJlY2F1c2UgdGhhdCdzIGFsd2F5cyB1c2VmdWwgZm9yIGZ1enplciBzZWxlY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE5OjA0LjEwNTY0MDkxNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1NzA1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDg5PWNvbmZpZyBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuLS1cXG5hcmNoL0tjb25maWctMTA5MS1cXG5hcmNoL0tjb25maWc6MTA5Mjpjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTk6MDQuMTk2MjE4NDE0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzY5Njc3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFyY2hpdGVjdHVyYWwgU2VsZWN0aW9uLCBOb3QgVXNlciBDaG9pY2UqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBhIGZlYXR1cmUsIG9yIHBlcmhhcHMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGl0J3Mgbm90IHNvbWV0aGluZyB0aGUgZW5kLXVzZXIgZ2V0cyB0byB0d2lkZGxlIHdpdGggZGlyZWN0bHkuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGUgKmFyY2hpdGVjdHVyZSBpdHNlbGYqIGRldGVybWluZXMgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90LiBUaGluayBvZiBpdCBsaWtlIHRoaXM6IHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBpdHNlbGYsIGl0cyBmdW5kYW1lbnRhbCBkZXNpZ24sIGlzIHdoYXQncyBtYWtpbmcgdGhlIGNhbGwuIEl0J3Mgbm90IGEgY29tcGlsZS10aW1lIGZsYWcgdGhlIHVzZXIgY2FuIHNpbXBseSBmbGlwLlxuXG5UaGUgZXhhbXBsZSBoaWdobGlnaHRzIHRoYXQgY2xlYXJseSwgbGlrZSB4ODYgYW5kIGFybTY0IGFyY2hpdGVjdHVyZXMgYXJlIHRoZSBvbmVzIG1ha2luZyB0aGF0IHNlbGVjdGlvbiwgd2hpY2ggaGVscHMgY29udGV4dHVhbGl6ZSB3aGF0IGlzIGdvaW5nIG9uLlxuXG5UbyByZWFsbHkgbmFpbCB0aGlzIGRvd24sIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciB4ODYtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIExldCBtZSBzZWUgd2hhdCBgYXJjaC94ODYvS2NvbmZpZ2AgcmV2ZWFscy4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDgyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMDM6MTk6MDguMTMzMTg5Mjk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMzNjEyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTkxLVxcdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXFxuYXJjaC94ODYvS2NvbmZpZzoxOTI6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcXHRcXHRpZiBYODZfNjQgfHwgWDg2X1BBRVxcbmFyY2gveDg2L0tjb25maWctMTkzLVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFx0XFx0aWYgWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDAzOjE5OjA4LjMzNjU1NjYzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwOTczOTk0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gVHdlYWtzIGZvciBJbXByb3ZlZCBEZWJ1Z2dpbmcqKlxuXG5Pa2F5LCBzbyB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZSBoYXMgaHVnZSB2bWFwcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkgZG9uJ3QgdGVjaG5pY2FsbHkgKm5lZWQqIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0LiBIb3dldmVyLCBpdCB3b3VsZG4ndCBodXJ0IHRvIGxpc3QgaXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEJ1dCBoYW5nIG9uLCBgSEFWRV9BUkNIX0hVR0VfVk1BUGAgaXMgYSBzdHJhaWdodCBib29sZWFuLCBubyBwcm9tcHQsIHNvIEkgY2FuJ3QgZGlyZWN0bHkgZW5hYmxlIGl0IGluIHRoZSBgLmNvbmZpZ2AgZmlsZS4gSSdtIGJldHRlciBvZmYgb21pdHRpbmcgaXQgZW50aXJlbHksIG9yIGp1c3QgbGlzdGluZyBpdCwgc2luY2Ugc3l6Ym90IHdpbGwganVzdCBpZ25vcmUgaXQgaWYgaXQgY2FuJ3QgYmUgc2V0LiBCdXQgeWVzLCBJIHNob3VsZCBkZWZpbml0ZWx5IGxpc3QgYFBURFVNUF9ERUJVR0ZTYCBhbmQgYERFQlVHX1dYYC4gVGhvc2UgYXJlIGNyaXRpY2FsLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBJdCdzIGRlZmluZWQgc3RhdGljYWxseS4gQnV0IHRoZSBpbmZvcm1hdGlvbiBtaWdodCBiZSB1c2VmdWwsIHNvIGxldCdzIGxpc3QgaXQgYW55d2F5LiBXYWl0IGEgc2Vjb25kLi4uIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGNhbGxlZCBmcm9tIGBjcGFfZmx1c2hgLiBPa2F5LCB0aGF0IHNlYWxzIGl0LiBJIHNob3VsZCAqZGVmaW5pdGVseSogbGlzdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYC4gQXMgd2VsbCBhcyBgcHRkdW1wX3dhbGtfcGdkYCwgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYW5kIGB2bWFwX3RyeV9odWdlX3B1ZGAgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuIFRob3NlIGFsbCBzZWVtIHJlbGV2YW50IHRvIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy5cblxuUmlnaHQsIEkgdGhpbmsgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZG9uZS4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTA1LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QwMzoxOToxNS40MzM5NjQ2NTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE5NjQxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgeDg2IENQQSAoY2hhbmdlIHBhZ2UgYXR0cmlidXRlKSBsYXJnZSBwYWdlIGNvbGxhcHNpbmcuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgdXNpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[1] Phase: Succeeded StartedAt: 2026-07-17 03:19:27 +0000 UTC FinishedAt: 2026-07-17 03:19:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-17 03:19:27 +0000 UTC FinishedAt: 2026-07-17 03:19:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2] Phase: Succeeded StartedAt: 2026-07-17 03:19:27 +0000 UTC FinishedAt: 2026-07-17 08:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-17 03:19:27 +0000 UTC FinishedAt: 2026-07-17 08:00:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-17 03:19:27 +0000 UTC FinishedAt: 2026-07-17 03:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-17 03:19:27 +0000 UTC FinishedAt: 2026-07-17 03:19:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowrzg5b/series-workflowrzg5b-convert-artifact-1060056722/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-17 03:19:37 +0000 UTC FinishedAt: 2026-07-17 03:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-17 03:19:37 +0000 UTC FinishedAt: 2026-07-17 03:56:39 +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:*ae464d32-0bf2-4a1f-9af1-4bc75a6b8186,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-workflowrzg5b/series-workflowrzg5b-convert-artifact-1060056722/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": "9f5e7b13-cfa9-48de-93ef-da7bb4f4156f", "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-workflowrzg5b/series-workflowrzg5b-build-action-3477712912/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-17 03:19:37 +0000 UTC FinishedAt: 2026-07-17 03:55:49 +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:*ae464d32-0bf2-4a1f-9af1-4bc75a6b8186,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-workflowrzg5b/series-workflowrzg5b-convert-artifact-1060056722/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": "9f5e7b13-cfa9-48de-93ef-da7bb4f4156f", "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-workflowrzg5b/series-workflowrzg5b-build-action-3477712912/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-17 03:56:39 +0000 UTC FinishedAt: 2026-07-17 03:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-17 03:56:39 +0000 UTC FinishedAt: 2026-07-17 03:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-17 03:56:39 +0000 UTC FinishedAt: 2026-07-17 03:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-17 03:56:39 +0000 UTC FinishedAt: 2026-07-17 03:56:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowrzg5b/series-workflowrzg5b-convert-artifact-1582173101/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-17 03:56:59 +0000 UTC FinishedAt: 2026-07-17 03:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-17 03:56:59 +0000 UTC FinishedAt: 2026-07-17 03:59:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f5e7b13-cfa9-48de-93ef-da7bb4f4156f,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-workflowrzg5b/series-workflowrzg5b-build-action-3477712912/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-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-17 03:59:25 +0000 UTC FinishedAt: 2026-07-17 03:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-17 03:59:25 +0000 UTC FinishedAt: 2026-07-17 03:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-17 03:59:25 +0000 UTC FinishedAt: 2026-07-17 04:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-17 03:59:25 +0000 UTC FinishedAt: 2026-07-17 04:57:19 +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:*ae464d32-0bf2-4a1f-9af1-4bc75a6b8186,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-workflowrzg5b/series-workflowrzg5b-convert-artifact-1582173101/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": "cfd73edd-3cd3-484f-887c-ffae6b7e34fa", "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-workflowrzg5b/series-workflowrzg5b-build-action-1334988809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-17 03:59:25 +0000 UTC FinishedAt: 2026-07-17 04:57:09 +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:*ae464d32-0bf2-4a1f-9af1-4bc75a6b8186,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-workflowrzg5b/series-workflowrzg5b-convert-artifact-1582173101/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": "cfd73edd-3cd3-484f-887c-ffae6b7e34fa", "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-workflowrzg5b/series-workflowrzg5b-build-action-1334988809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-17 04:57:19 +0000 UTC FinishedAt: 2026-07-17 04:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-17 04:57:19 +0000 UTC FinishedAt: 2026-07-17 04:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-17 04:57:19 +0000 UTC FinishedAt: 2026-07-17 04:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-17 04:57:19 +0000 UTC FinishedAt: 2026-07-17 04:59:02 +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:*cfd73edd-3cd3-484f-887c-ffae6b7e34fa,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-workflowrzg5b/series-workflowrzg5b-build-action-1334988809/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-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-17 04:59:12 +0000 UTC FinishedAt: 2026-07-17 08:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-17 04:59:12 +0000 UTC FinishedAt: 2026-07-17 04:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-17 04:59:12 +0000 UTC FinishedAt: 2026-07-17 04:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-17 04:59:13 +0000 UTC FinishedAt: 2026-07-17 08:00:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},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:*9f5e7b13-cfa9-48de-93ef-da7bb4f4156f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cfd73edd-3cd3-484f-887c-ffae6b7e34fa,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-workflowrzg5b/series-workflowrzg5b-build-action-3477712912/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-workflowrzg5b/series-workflowrzg5b-build-action-1334988809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-17 04:59:13 +0000 UTC FinishedAt: 2026-07-17 04:59:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-17 04:59:13 +0000 UTC FinishedAt: 2026-07-17 04:59:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},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-workflowrzg5b/series-workflowrzg5b-convert-artifact-2075354386/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-17 04:59:13 +0000 UTC FinishedAt: 2026-07-17 04:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-17 04:59:23 +0000 UTC FinishedAt: 2026-07-17 08:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzg5b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e22254e9ddd8020130c4b806b6b4aa77b09c2560","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"c5018216-cfee-41ae-ba51-df25f51236d4","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-17 04:59:23 +0000 UTC FinishedAt: 2026-07-17 08:00:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f5e7b13-cfa9-48de-93ef-da7bb4f4156f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cfd73edd-3cd3-484f-887c-ffae6b7e34fa,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-workflowrzg5b/series-workflowrzg5b-build-action-3477712912/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-workflowrzg5b/series-workflowrzg5b-build-action-1334988809/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-workflowrzg5b/series-workflowrzg5b-convert-artifact-2075354386/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,}