Name: series-workflow45w9x Phase: Succeeded StartedAt: 2026-09-13 17:34:39 +0000 UTC FinishedAt: 2026-09-13 22:22:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[0] Phase: Succeeded StartedAt: 2026-09-13 17:34:39 +0000 UTC FinishedAt: 2026-09-13 18:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 17:34:39 +0000 UTC FinishedAt: 2026-09-13 18:42:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ab5dc9daf73212125eb846404e1499a9e06679a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "BLK_DEV_MD", "BLK_DEV_NULL_BLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ab5dc9daf73212125eb846404e1499a9e06679a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "BLK_DEV_MD", "BLK_DEV_NULL_BLK" ], "series_id": "dd7a9d80-42b9-4fa4-8b95-03faa9e35005" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "prev_badblocks", "badblocks_set", "badblocks_clear", "badblocks_check", "badblocks_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ab5dc9daf73212125eb846404e1499a9e06679a1", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXZfYmFkYmxvY2tzJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3Nfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmluYXJ5IHNlYXJjaCBib3VuZGFyeSBpbml0aWFsaXphdGlvbiBpbiBgcHJldl9iYWRibG9ja3MoKWAgd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AuIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYGhpID0gYmItXHUwMDNlY291bnQgLSAxYCBpbnN0ZWFkIG9mIGBoaSA9IGJiLVx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cblxuVGhlIGJhZGJsb2NrIGJ1ZmZlciAoYGJiLVx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cdTAwM2Vjb3VudCAtIDFdYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmFkIGJsb2NrIGVudHJpZXMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBpbmRleCBjYWxjdWxhdGlvbnMgYW5kIGJvdW5kcyBpbiBhbiBpbnRlcm5hbCBiaW5hcnkgc2VhcmNoIHJvdXRpbmUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciByZWFkLCBub3IgaXMgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBleHBvc2VkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBoeXBvdGhldGljYWwgaW5kZXhpbmcgZGVmZWN0IGhlcmUgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoIGlzIHRyYWNrZWQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cdTAwM2Vjb3VudCAtIDEgaW5zdGVhZCBvZiBiYi1cdTAwM2Vjb3VudCksIHRoZSB1cHBlci1ib3VuZCBjaGVjayBjb25kaXRpb24sIGFuZCB0aGUgZmFsbGJhY2sgcmV0dXJuIGFzc2lnbm1lbnQgKHJldCA9IGxvIHVuY29uZGl0aW9uYWxseSkuIEJhZCBibG9ja3MgaGFuZGxpbmcgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGV4ZXJjaXNhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBibG9jayBkcml2ZXJzIHN1Y2ggYXMgTUQvUkFJRCAoZHJpdmVycy9tZCkgYW5kIG51bGxfYmxrIChkcml2ZXJzL2Jsb2NrL251bGxfYmxrKSwgYXMgd2VsbCBhcyB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgKGJhZGJsb2Nrc19zdG9yZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmllZCBzZWFyY2ggYm91bmRhcmllcyBhbmQgaW5kZXggaGFuZGxpbmcgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBvZmYtYnktb25lIGVycm9ycyBvbiBlZGdlIGNhc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTk2MmQwMjE2NjVjYWMxZGNkMmQ0YTQyODcxNGQ0OGQyMTg0YTJkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE4OjQwOjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcbmluZGV4IGVjZTY0ZTc2ZmU4ZmYuLjE0M2I0ODhiN2ZlNjggMTAwNjQ0XG4tLS0gYS9ibG9jay9iYWRibG9ja3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmFkYmxvY2tzLmNcbkBAIC00OTYsMTQgJiM0Mzs0OTYsMTQgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4gXHR9XG4gXG4gXHRsbyA9IDA7XG4tXHRoaSA9IGJiLVx1MDAzZWNvdW50O1xuJiM0MztcdGhpID0gYmItXHUwMDNlY291bnQgLSAxO1xuIFx0cCA9IGJiLVx1MDAzZXBhZ2U7XG4gXG4gXHQvKiBUaGUgZm9sbG93aW5nIGJpc2VjdCBzZWFyY2ggbWlnaHQgYmUgdW5uZWNlc3NhcnkgKi9cbiBcdGlmIChCQl9PRkZTRVQocFtsb10pIFx1MDAzZSBzKVxuIFx0XHRyZXR1cm4gLTE7XG4tXHRpZiAoQkJfT0ZGU0VUKHBbaGkgLSAxXSkgXHUwMDNjPSBzKVxuLVx0XHRyZXR1cm4gaGkgLSAxO1xuJiM0MztcdGlmIChCQl9PRkZTRVQocFtoaV0pIFx1MDAzYz0gcylcbiYjNDM7XHRcdHJldHVybiBoaTtcbiBcbiBcdC8qIERvIGJpc2VjdCBzZWFyY2ggaW4gYmFkIHRhYmxlICovXG4gXHR3aGlsZSAoaGkgLSBsbyBcdTAwM2UgMSkge1xuQEAgLTUyMSw4ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4gXHRcdFx0aGkgPSBtaWQ7XG4gXHR9XG4gXG4tXHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcdTAwM2M9IHMpXG4tXHRcdHJldCA9IGxvO1xuJiM0MztcdHJldCA9IGxvO1xuIG91dDpcbiBcdHJldHVybiByZXQ7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXZfYmFkYmxvY2tzJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3Nfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cdTAwM2Vjb3VudCAtIDEgaW5zdGVhZCBvZiBiYi1cdTAwM2Vjb3VudCksIHRoZSB1cHBlci1ib3VuZCBjaGVjayBjb25kaXRpb24sIGFuZCB0aGUgZmFsbGJhY2sgcmV0dXJuIGFzc2lnbm1lbnQgKHJldCA9IGxvIHVuY29uZGl0aW9uYWxseSkuIEJhZCBibG9ja3MgaGFuZGxpbmcgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGV4ZXJjaXNhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBibG9jayBkcml2ZXJzIHN1Y2ggYXMgTUQvUkFJRCAoZHJpdmVycy9tZCkgYW5kIG51bGxfYmxrIChkcml2ZXJzL2Jsb2NrL251bGxfYmxrKSwgYXMgd2VsbCBhcyB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgKGJhZGJsb2Nrc19zdG9yZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmllZCBzZWFyY2ggYm91bmRhcmllcyBhbmQgaW5kZXggaGFuZGxpbmcgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBvZmYtYnktb25lIGVycm9ycyBvbiBlZGdlIGNhc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTk2MmQwMjE2NjVjYWMxZGNkMmQ0YTQyODcxNGQ0OGQyMTg0YTJkOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDE4OjQwOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuYwppbmRleCBlY2U2NGU3NmZlOGZmLi4xNDNiNDg4YjdmZTY4IDEwMDY0NAotLS0gYS9ibG9jay9iYWRibG9ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iYWRibG9ja3MuYwpAQCAtNDk2LDE0ICYjNDM7NDk2LDE0IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLAogCX0KIAogCWxvID0gMDsKLQloaSA9IGJiLSZndDtjb3VudDsKJiM0MzsJaGkgPSBiYi0mZ3Q7Y291bnQgLSAxOwogCXAgPSBiYi0mZ3Q7cGFnZTsKIAogCS8qIFRoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeSAqLwogCWlmIChCQl9PRkZTRVQocFtsb10pICZndDsgcykKIAkJcmV0dXJuIC0xOwotCWlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSAmbHQ7PSBzKQotCQlyZXR1cm4gaGkgLSAxOwomIzQzOwlpZiAoQkJfT0ZGU0VUKHBbaGldKSAmbHQ7PSBzKQomIzQzOwkJcmV0dXJuIGhpOwogCiAJLyogRG8gYmlzZWN0IHNlYXJjaCBpbiBiYWQgdGFibGUgKi8KIAl3aGlsZSAoaGkgLSBsbyAmZ3Q7IDEpIHsKQEAgLTUyMSw4ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsCiAJCQloaSA9IG1pZDsKIAl9CiAKLQlpZiAoQkJfT0ZGU0VUKHBbbG9dKSAmbHQ7PSBzKQotCQlyZXQgPSBsbzsKJiM0MzsJcmV0ID0gbG87CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCYWQgQmxvY2tzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmFkYmxvY2tzLmNgLiAgSSBzZWUgYSBgZGlmZmAgc2hvd2luZyBjaGFuZ2VzLCB3aGljaCBtZWFucyBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGhlIHBhdGNoIGZvY3VzZXMgb24gdGhlIGBwcmV2X2JhZGJsb2Nrc2AgZnVuY3Rpb24sIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHRoZSBwcmV2aW91cyBiYWQgYmxvY2sgdG8gYSBnaXZlbiBvZmZzZXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGJsb2NrL2JhZGJsb2Nrcy5jYCBmaWxlIHVzaW5nIGVpdGhlciBteSB0cnVzdHkgYHJlYWQtZmlsZWAgY29tbWFuZCwgb3IsIGV2ZW4gYmV0dGVyLCBhIGBncmVwcGVyYCBjYWxsIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIEkgd2FudCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsb2dpYyBoZXJlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhlIGJpbmFyeSBzZWFyY2ggaW1wbGVtZW50YXRpb24gd2l0aGluIGBwcmV2X2JhZGJsb2Nrc2AuIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGBoaWAgd2FzIGluaXRpYWxpemVkIHRvIGBiYi0mZ3Q7Y291bnRgLiBUaGUgaW5kZXggYGhpYCBpcyB1c2VkIHRvIGluZGV4IGludG8gdGhlIGFycmF5IGBwYC4gVGhlIGZpcnN0IGNoYW5nZSBJIHNlZSBpcyBjaGFuZ2luZyBgaGlgIHRvIGJlIGBiYi0mZ3Q7Y291bnQgLTFgLiBUaGUgY29tbWVudCAmIzM0O1RoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeSYjMzQ7IGdpdmVzIG1lIGEgc3Ryb25nIGhpbnQgdGhpcyBpbml0aWFsaXphdGlvbiBjaGFuZ2UgaXMgdmVyeSBsaWtlbHkgcmVsYXRlZC4KCkFsc28gSSYjMzk7bSBub3RpY2luZyBhIHBvdGVudGlhbCBidWcgZml4LiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgdHdvIGVkZ2UtY2FzZSBjaGVja3M6IGBpZiAoQkJfT0ZGU0VUKHBbbG9dKSAmZ3Q7IHMpYCBhbmQgYGlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSAmbHQ7PSBzKWAuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBoYXMgY2hhbmdlZCB0aGUgc2Vjb25kIGNoZWNrIGZyb20gYGhpIC0gMWAgdG8gYGhpYC4gVGhpcyBpcyBpbW1lZGlhdGVseSBzdXNwaWNpb3VzLiBUaGUgc2Vjb25kIGNoYW5nZSBoYXMgYWZmZWN0ZWQgdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBsaWtlbHkgZml4ZXMgYW4gb2ZmLWJ5LW9uZSBlcnJvciBvciBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCkZ1cnRoZXIgZG93biwgdGhlIHJldHVybiB2YWx1ZSBgcmV0YCBzZWVtcyB0byBoYXZlIGFsc28gYmVlbiBzaW1wbGlmaWVkOiBubyBsb25nZXIgcGVyZm9ybWluZyBhbiBhZGRpdGlvbmFsIGNoZWNrLiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSB0aGV5IGFyZSBjb3JyZWN0IGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGNoYW5nZSBjb3VsZCBwb3RlbnRpYWxseSBicmVhayBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbW9kaWZpZWQgY29kZSBzdGlsbCBoYW5kbGVzIGVkZ2UgY2FzZXMgY29ycmVjdGx5IGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IGluZGV4IG9yIGFuIGVycm9yIGluZGljYXRpb24uIFVsdGltYXRlbHksIG15IGFuYWx5c2lzIHdpbGwgcmV2b2x2ZSBhcm91bmQgZW5zdXJpbmcgdGhhdCB0aGlzIG1vZGlmaWNhdGlvbiBpbXByb3ZlcyBjb3JyZWN0bmVzcyBhbmQgZWZmaWNpZW5jeSwgd2l0aG91dCBjcmVhdGluZyBuZXcgcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHR9XG4gNDcxOlx0XG4gNDcyOlx0XHRyZXR1cm4gcmV0O1xuIDQ3MzpcdH1cbiA0NzQ6XHRcbiA0NzU6XHQvKlxuIDQ3NjpcdCAqIEZpbmQgdGhlIHJhbmdlIHN0YXJ0cyBhdC1vci1iZWZvcmUgYmFkLVx1MDAzZXN0YXJ0LiBJZiAmIzM5O2hpbnQmIzM5OyBpcyBwcm92aWRlZFxuIDQ3NzpcdCAqIChoaW50IFx1MDAzZT0gMCkgdGhlbiBzZWFyY2ggaW4gdGhlIGJhZCB0YWJsZSBmcm9tIGhpbnQgZmlyc3RseS4gSXQgaXNcbiA0Nzg6XHQgKiB2ZXJ5IHByb2JhYmx5IHRoZSB3YW50ZWQgYmFkIHJhbmdlIGNhbiBiZSBmb3VuZCBmcm9tIHRoZSBoaW50IGluZGV4LFxuIDQ3OTpcdCAqIHRoZW4gdGhlIHVubmVjZXNzYXJ5IHdoaWxlLWxvb3AgaXRlcmF0aW9uIGNhbiBiZSBhdm9pZGVkLlxuIDQ4MDpcdCAqL1xuIDQ4MTpcdHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuIDQ4MjpcdFx0XHRcdCAgaW50IGhpbnQpXG4gNDgzOlx0e1xuIDQ4NDpcdFx0c2VjdG9yX3QgcyA9IGJhZC1cdTAwM2VzdGFydDtcbiA0ODU6XHRcdGludCByZXQgPSAtMTtcbiA0ODY6XHRcdGludCBsbywgaGk7XG4gNDg3Olx0XHR1NjQgKnA7XG4gNDg4Olx0XG4gNDg5Olx0XHRpZiAoIWJiLVx1MDAzZWNvdW50KVxuIDQ5MDpcdFx0XHRnb3RvIG91dDtcbiA0OTE6XHRcbiA0OTI6XHRcdGlmIChoaW50IFx1MDAzZT0gMCkge1xuIDQ5MzpcdFx0XHRyZXQgPSBwcmV2X2J5X2hpbnQoYmIsIHMsIGhpbnQpO1xuIDQ5NDpcdFx0XHRpZiAocmV0IFx1MDAzZT0gMClcbiA0OTU6XHRcdFx0XHRnb3RvIG91dDtcbiA0OTY6XHRcdH1cbiA0OTc6XHRcbiA0OTg6XHRcdGxvID0gMDtcbiA0OTk6XHRcdGhpID0gYmItXHUwMDNlY291bnQgLSAxO1xuIDUwMDpcdFx0cCA9IGJiLVx1MDAzZXBhZ2U7XG4gNTAxOlx0XG4gNTAyOlx0XHQvKiBUaGUgZm9sbG93aW5nIGJpc2VjdCBzZWFyY2ggbWlnaHQgYmUgdW5uZWNlc3NhcnkgKi9cbiA1MDM6XHRcdGlmIChCQl9PRkZTRVQocFtsb10pIFx1MDAzZSBzKVxuIDUwNDpcdFx0XHRyZXR1cm4gLTE7XG4gNTA1Olx0XHRpZiAoQkJfT0ZGU0VUKHBbaGldKSBcdTAwM2M9IHMpXG4gNTA2Olx0XHRcdHJldHVybiBoaTtcbiA1MDc6XHRcbiA1MDg6XHRcdC8qIERvIGJpc2VjdCBzZWFyY2ggaW4gYmFkIHRhYmxlICovXG4gNTA5Olx0XHR3aGlsZSAoaGkgLSBsbyBcdTAwM2UgMSkge1xuIDUxMDpcdFx0XHRpbnQgbWlkID0gKGxvICYjNDM7IGhpKS8yO1xuIDUxMTpcdFx0XHRzZWN0b3JfdCBhID0gQkJfT0ZGU0VUKHBbbWlkXSk7XG4gNTEyOlx0XG4gNTEzOlx0XHRcdGlmIChhID09IHMpIHtcbiA1MTQ6XHRcdFx0XHRyZXQgPSBtaWQ7XG4gNTE1Olx0XHRcdFx0Z290byBvdXQ7XG4gNTE2Olx0XHRcdH1cbiA1MTc6XHRcbiA1MTg6XHRcdFx0aWYgKGEgXHUwMDNjIHMpXG4gNTE5Olx0XHRcdFx0bG8gPSBtaWQ7XG4gNTIwOlx0XHRcdGVsc2VcbiA1MjE6XHRcdFx0XHRoaSA9IG1pZDtcbiA1MjI6XHRcdH1cbiA1MjM6XHRcbiA1MjQ6XHRcdHJldCA9IGxvO1xuIDUyNTpcdG91dDpcbiA1MjY6XHRcdHJldHVybiByZXQ7XG4gNTI3Olx0fVxuIDUyODpcdFxuIDUyOTpcdC8qXG4gNTMwOlx0ICogUmV0dXJuICYjMzk7dHJ1ZSYjMzk7IGlmIHRoZSByYW5nZSBpbmRpY2F0ZWQgYnkgJiMzOTtiYWQmIzM5OyBjYW4gYmUgZm9yd2FyZFxuIDUzMTpcdCAqIG1lcmdlZCB3aXRoIHRoZSBiYWQgcmFuZ2UgKGZyb20gdGhlIGJhZCB0YWJsZSkgaW5kZXhlZCBieSAmIzM5O3ByZXYmIzM5Oy5cbiA1MzI6XHQgKi9cbiA1MzM6XHRzdGF0aWMgYm9vbCBjYW5fbWVyZ2VfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxuIDUzNDpcdFx0XHRcdCAgICBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgYmFkYmxvY2tzLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgYmFkYmxvY2tzLmNgIGlzIGFjdHVhbGx5IGJ1aWx0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgcGF0aCB0aHJvdWdoIHRoZSBidWlsZCBzeXN0ZW0uIFdoZXJlIGlzIHRoaXMgdGhpbmcgZGVmaW5lZD8gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgYW5kIHRyeSB0byBsb2NhdGUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgaXQmIzM5O3Mgd2l0aGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSBzb3J0cyBvZiB0aGluZ3MgYXJlIGNvbnRyb2xsZWQuIEhvcGVmdWxseSwgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgYnVpbGQgcnVsZSBhbmQgSSB3b24mIzM5O3QgaGF2ZSB0byBjaGFzZSBkb3duIHRvbyBtYW55IGluY2x1ZGUgZGlyZWN0aXZlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT04PW9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG4tLVxuYmxvY2svTWFrZWZpbGUtMTItXHRcdFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcbmJsb2NrL01ha2VmaWxlOjEzOlx0XHRcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXG5ibG9jay9NYWtlZmlsZS0xNC1cdFx0XHRkaXNrLWV2ZW50cy5vIGJsay1pYS1yYW5nZXMubyBlYXJseS1sb29rdXAub1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTQtICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjU6ICogLSBIZWF2aWx5IGJhc2VkIG9uIE1EIGJhZGJsb2NrcyBjb2RlIGZyb20gTmVpbCBCcm93blxuYmxvY2svYmFkYmxvY2tzLmMtNi0gKlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTktXG5ibG9jay9iYWRibG9ja3MuYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuYmxvY2svYmFkYmxvY2tzLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvc2VxbG9jay5oXHUwMDNlXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTktLypcbmJsb2NrL2JhZGJsb2Nrcy5jOjIwOiAqIFRoZSBwdXJwb3NlIG9mIGJhZGJsb2NrcyBzZXQvY2xlYXIgaXMgdG8gbWFuYWdlIGJhZCBibG9ja3MgcmFuZ2VzIHdoaWNoIGFyZVxuYmxvY2svYmFkYmxvY2tzLmMtMjEtICogaWRlbnRpZmllZCBieSBMQkEgYWRkcmVzc2VzLlxuYmxvY2svYmFkYmxvY2tzLmMtMjItICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjIzOiAqIFdoZW4gdGhlIGNhbGxlciBvZiBiYWRibG9ja3Nfc2V0KCkgd2FudHMgdG8gc2V0IGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcywgdGhlXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTI4Mi0gKiAgICAgYmxvY2tzIHRhYmxlIGFyZSBhbGwgYWNrZWQsIG1lcmdpbmcgdGhlbSBpbnRvIGEgbGFyZ2VyIG9uZSByYW5nZSBtYXlcbmJsb2NrL2JhZGJsb2Nrcy5jOjI4MzogKiAgICAgb2NjdXB5IGxlc3MgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZSBhbmQgbWFrZSBiYWRibG9ja3NfY2hlY2soKSBmYXN0ZXIuXG5ibG9jay9iYWRibG9ja3MuYy0yODQtICogICAgIFRoZXJlZm9yZSBpbiBzdWNoIHNpdHVhdGlvbiwgYWZ0ZXIgb3ZlcndyaXRpbmcgcmFuZ2UgUywgdGhlIHByZXZpb3VzIHJhbmdlXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMzIwLSAqIHRoZSBiYWQgYmxvY2sgcmFuZ2Ugc2V0dGluZyBjb25kaXRpb25zLiBNYXliZSB0aGVyZSBpcyBzb21lIHJhcmUgY29ybmVyIGNhc2VcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyMTogKiBpcyBub3QgY29uc2lkZXJlZCBhbmQgb3B0aW1pemVkLCBpdCB3b24mIzM5O3QgaHVydCBpZiBiYWRibG9ja3Nfc2V0KCkgZmFpbHMgZHVlXG5ibG9jay9iYWRibG9ja3MuYy0zMjItICogdG8gbm8gc3BhY2UsIG9yIHNvbWUgcmFuZ2VzIGFyZSBub3QgbWVyZ2VkIHRvIHNhdmUgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZS5cbmJsb2NrL2JhZGJsb2Nrcy5jLTMyMy0gKlxuYmxvY2svYmFkYmxvY2tzLmM6MzI0OiAqIEluc2lkZSBiYWRibG9ja3Nfc2V0KCkgZWFjaCBsb29wIHN0YXJ0cyBieSBqdW1waW5nIHRvIHJlX2luc2VydCBsYWJlbCwgZXZlcnlcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyNTogKiB0aW1lIGZvciB0aGUgbmV3IGxvb3AgcHJldl9iYWRibG9ja3MoKSBpcyBjYWxsZWQgdG8gZmluZCBhbiBhbHJlYWR5IHNldCByYW5nZVxuYmxvY2svYmFkYmxvY2tzLmMtMzI2LSAqIHdoaWNoIHN0YXJ0cyBiZWZvcmUgb3IgYXQgY3VycmVudCBzZXR0aW5nIHJhbmdlLiBTaW5jZSB0aGUgc2V0dGluZyBiYWQgYmxvY2tzXG5ibG9jay9iYWRibG9ja3MuYy0zMjctICogcmFuZ2UgaXMgaGFuZGxlZCBmcm9tIGhlYWQgdG8gdGFpbCwgbW9zdCBvZiB0aGUgY2FzZXMgaXQgaXMgdW5uZWNlc3NhcnkgdG8gZG9cbmJsb2NrL2JhZGJsb2Nrcy5jOjMyODogKiB0aGUgYmluYXJ5IHNlYXJjaCBpbnNpZGUgcHJldl9iYWRibG9ja3MoKSwgaXQgaXMgcG9zc2libGUgdG8gcHJvdmlkZSBhIGhpbnRcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyOTogKiB0byBwcmV2X2JhZGJsb2NrcygpIGZvciBhIGZhc3QgcGF0aCwgdGhlbiB0aGUgZXhwZW5zaXZlIGJpbmFyeSBzZWFyY2ggY2FuIGJlXG5ibG9jay9iYWRibG9ja3MuYzozMzA6ICogYXZvaWRlZC4gSW4gbXkgdGVzdCB3aXRoIHRoZSBoaW50IHRvIHByZXZfYmFkYmxvY2tzKCksIGV4Y2VwdCBmb3IgdGhlIGZpcnN0XG5ibG9jay9iYWRibG9ja3MuYzozMzE6ICogbG9vcCwgYWxsIHJlc3RlZCBjYWxscyB0byBwcmV2X2JhZGJsb2NrcygpIGNhbiBnbyBpbnRvIHRoZSBmYXN0IHBhdGggYW5kXG5ibG9jay9iYWRibG9ja3MuYy0zMzItICogcmV0dXJuIGNvcnJlY3QgYmFkIGJsb2NrcyB0YWJsZSBpbmRleCBpbW1lZGlhdGVseS5cbi0tXG5ibG9jay9iYWRibG9ja3MuYy00NTYtICovXG5ibG9jay9iYWRibG9ja3MuYzo0NTc6c3RhdGljIGludCBwcmV2X2J5X2hpbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIGludCBoaW50KVxuYmxvY2svYmFkYmxvY2tzLmMtNDU4LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy00ODAtICovXG5ibG9jay9iYWRibG9ja3MuYzo0ODE6c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG5ibG9jay9iYWRibG9ja3MuYy00ODItXHRcdFx0ICBpbnQgaGludClcbi0tXG5ibG9jay9iYWRibG9ja3MuYy01MzItICovXG5ibG9jay9iYWRibG9ja3MuYzo1MzM6c3RhdGljIGJvb2wgY2FuX21lcmdlX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbmJsb2NrL2JhZGJsb2Nrcy5jOjUzNDpcdFx0XHQgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXG5ibG9jay9iYWRibG9ja3MuYy01MzUte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTU1MC0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjU1MTpzdGF0aWMgaW50IGZyb250X21lcmdlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXG5ibG9jay9iYWRibG9ja3MuYy01NTIte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTU4Ni0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjU4NzpzdGF0aWMgYm9vbCBjYW5fY29tYmluZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG5ibG9jay9iYWRibG9ja3MuYzo1ODg6XHRcdFx0ICAgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXG5ibG9jay9iYWRibG9ja3MuYy01ODkte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTYwNy0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjYwODpzdGF0aWMgdm9pZCBmcm9udF9jb21iaW5lKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldilcbmJsb2NrL2JhZGJsb2Nrcy5jLTYwOS17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNjI0LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6NjI1OnN0YXRpYyBib29sIG92ZXJsYXBfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBmcm9udCxcbmJsb2NrL2JhZGJsb2Nrcy5jOjYyNjpcdFx0XHQgIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuYmxvY2svYmFkYmxvY2tzLmMtNjI3LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy02MzktICovXG5ibG9jay9iYWRibG9ja3MuYzo2NDA6c3RhdGljIGJvb2wgb3ZlcmxhcF9iZWhpbmQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuYmxvY2svYmFkYmxvY2tzLmMtNjQxLVx0XHRcdCAgIGludCBiZWhpbmQpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNjcxLSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6NjcyOnN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxuYmxvY2svYmFkYmxvY2tzLmM6NjczOlx0XHRcdFx0c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsIGludCAqZXh0cmEpXG5ibG9jay9iYWRibG9ja3MuYy02NzQte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNC0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjcxNTpzdGF0aWMgaW50IGZyb250X292ZXJ3cml0ZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG5ibG9jay9iYWRibG9ja3MuYzo3MTY6XHRcdFx0ICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsIGludCBleHRyYSlcbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNy17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzc2LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6Nzc3OnN0YXRpYyBpbnQgaW5zZXJ0X2F0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgYXQsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuYmxvY2svYmFkYmxvY2tzLmMtNzc4LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy03ODEtXG5ibG9jay9iYWRibG9ja3MuYzo3ODI6XHRXQVJOX09OKGJhZGJsb2Nrc19mdWxsKGJiKSk7XG5ibG9jay9iYWRibG9ja3MuYy03ODMtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzkxLVxuYmxvY2svYmFkYmxvY2tzLmM6NzkyOnN0YXRpYyB2b2lkIGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoc3RydWN0IGJhZGJsb2NrcyAqYmIpXG5ibG9jay9iYWRibG9ja3MuYy03OTMte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgxNS0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjgxNjpzdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXG5ibG9jay9iYWRibG9ja3MuYy04MTcte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgzNy0vKiBEbyBleGFjdCB3b3JrIHRvIHNldCBiYWQgYmxvY2sgcmFuZ2UgaW50byB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzo4Mzg6c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy04MzktXHRcdFx0ICAgaW50IGFja25vd2xlZGdlZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYy04NDEtXHRpbnQgbGVuID0gMCwgYWRkZWQgPSAwO1xuYmxvY2svYmFkYmxvY2tzLmM6ODQyOlx0c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0IGJhZDtcbmJsb2NrL2JhZGJsb2Nrcy5jLTg0My1cdGludCBwcmV2ID0gLTEsIGhpbnQgPSAtMTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy04NDctXHRpZiAoYmItXHUwMDNlc2hpZnQgXHUwMDNjIDApXG5ibG9jay9iYWRibG9ja3MuYzo4NDg6XHRcdC8qIGJhZGJsb2NrcyBhcmUgZGlzYWJsZWQgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jLTg0OS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTg3My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjg3NDpcdGlmIChiYWRibG9ja3NfZnVsbChiYikpXG5ibG9jay9iYWRibG9ja3MuYy04NzUtXHRcdGdvdG8gb3V0O1xuYmxvY2svYmFkYmxvY2tzLmMtODc2LVxuYmxvY2svYmFkYmxvY2tzLmM6ODc3Olx0aWYgKGJhZGJsb2Nrc19lbXB0eShiYikpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTg3OC1cdFx0bGVuID0gaW5zZXJ0X2F0KGJiLCAwLCBcdTAwMjZiYWQpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTg4My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjg4NDpcdHByZXYgPSBwcmV2X2JhZGJsb2NrcyhiYiwgXHUwMDI2YmFkLCBoaW50KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTg4NS1cbmJsb2NrL2JhZGJsb2Nrcy5jOjg4NjpcdC8qIHN0YXJ0IGJlZm9yZSBhbGwgYmFkYmxvY2tzICovXG5ibG9jay9iYWRibG9ja3MuYy04ODctXHRpZiAocHJldiBcdTAwM2MgMCkge1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTk3MS1cdFx0ZWxzZVxuYmxvY2svYmFkYmxvY2tzLmM6OTcyOlx0XHRcdGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoYmIpO1xuYmxvY2svYmFkYmxvY2tzLmMtOTczLVx0fVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTk4Ni0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjk4NzpzdGF0aWMgaW50IGZyb250X2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbmJsb2NrL2JhZGJsb2Nrcy5jOjk4ODpcdFx0ICAgICAgIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLCBpbnQgKmRlbGV0ZWQpXG5ibG9jay9iYWRibG9ja3MuYy05ODkte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEwMjktICovXG5ibG9jay9iYWRibG9ja3MuYzoxMDMwOnN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMzE6XHRcdFx0XHQgIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuYmxvY2svYmFkYmxvY2tzLmMtMTAzMi17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTA0Ny0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjbGVhciBiYWQgYmxvY2sgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzoxMDQ4OnN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG5ibG9jay9iYWRibG9ja3MuYy0xMDQ5LXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwNTA6XHRzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgYmFkO1xuYmxvY2svYmFkYmxvY2tzLmMtMTA1MS1cdGludCBwcmV2ID0gLTEsIGhpbnQgPSAtMTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMDU1LVx0aWYgKGJiLVx1MDAzZXNoaWZ0IFx1MDAzYyAwKVxuYmxvY2svYmFkYmxvY2tzLmM6MTA1NjpcdFx0LyogYmFkYmxvY2tzIGFyZSBkaXNhYmxlZCAqL1xuYmxvY2svYmFkYmxvY2tzLmMtMTA1Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODYtXG5ibG9jay9iYWRibG9ja3MuYzoxMDg3Olx0aWYgKGJhZGJsb2Nrc19lbXB0eShiYikpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODgtXHRcdGxlbiA9IHNlY3RvcnM7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTA5My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEwOTQ6XHRwcmV2ID0gcHJldl9iYWRibG9ja3MoYmIsIFx1MDAyNmJhZCwgaGludCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMDk1LVxuYmxvY2svYmFkYmxvY2tzLmM6MTA5NjpcdC8qIFN0YXJ0IGJlZm9yZSBhbGwgYmFkYmxvY2tzICovXG5ibG9jay9iYWRibG9ja3MuYy0xMDk3LVx0aWYgKHByZXYgXHUwMDNjIDApIHtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTExLVxuYmxvY2svYmFkYmxvY2tzLmM6MTExMjpcdC8qIFN0YXJ0IGFmdGVyIGFsbCBiYWRibG9ja3MgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jLTExMTMtXHRpZiAoKHByZXYgJiM0MzsgMSkgXHUwMDNlPSBiYi1cdTAwM2Vjb3VudCBcdTAwMjZcdTAwMjYgIW92ZXJsYXBfZnJvbnQoYmIsIHByZXYsIFx1MDAyNmJhZCkpIHtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTE5LVx0LyogQ2xlYXIgd2lsbCBzcGxpdCBhIGJhZCByZWNvcmQgYnV0IHRoZSB0YWJsZSBpcyBmdWxsICovXG5ibG9jay9iYWRibG9ja3MuYzoxMTIwOlx0aWYgKGJhZGJsb2Nrc19mdWxsKGJiKSBcdTAwMjZcdTAwMjYgKEJCX09GRlNFVChwW3ByZXZdKSBcdTAwM2MgYmFkLnN0YXJ0KSBcdTAwMjZcdTAwMjZcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMjEtXHQgICAgKEJCX0VORChwW3ByZXZdKSBcdTAwM2UgKGJhZC5zdGFydCAmIzQzOyBzZWN0b3JzKSkpIHtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTU4LVxuYmxvY2svYmFkYmxvY2tzLmM6MTE1OTpcdC8qIE5vdCBjb3ZlciBhbnkgYmFkYmxvY2tzIHJhbmdlIGluIHRoZSB0YWJsZSAqL1xuYmxvY2svYmFkYmxvY2tzLmMtMTE2MC1cdGxlbiA9IHNlY3RvcnM7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTE3MS1cdGlmIChjbGVhcmVkKSB7XG5ibG9jay9iYWRibG9ja3MuYzoxMTcyOlx0XHRiYWRibG9ja3NfdXBkYXRlX2Fja2VkKGJiKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNzMtXHRcdHNldF9jaGFuZ2VkKGJiKTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTg0LS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNoZWNrIGJhZCBibG9ja3MgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzoxMTg1OnN0YXRpYyBpbnQgX2JhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExODYtXHRcdFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTg4LVx0aW50IHByZXYgPSAtMSwgaGludCA9IC0xLCBzZXQgPSAwO1xuYmxvY2svYmFkYmxvY2tzLmM6MTE4OTpcdHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCBiYWQ7XG5ibG9jay9iYWRibG9ja3MuYzoxMTkwOlx0aW50IHVuYWNrZWRfYmFkYmxvY2tzID0gMDtcbmJsb2NrL2JhZGJsb2Nrcy5jOjExOTE6XHRpbnQgYWNrZWRfYmFkYmxvY2tzID0gMDtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExOTItXHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTExOTgtXG5ibG9jay9iYWRibG9ja3MuYzoxMTk5Olx0aWYgKGJhZGJsb2Nrc19lbXB0eShiYikpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDAtXHRcdGxlbiA9IHNlY3RvcnM7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMy1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEyMDQ6XHRwcmV2ID0gcHJldl9iYWRibG9ja3MoYmIsIFx1MDAyNmJhZCwgaGludCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMjA1LVxuYmxvY2svYmFkYmxvY2tzLmM6MTIwNjpcdC8qIHN0YXJ0IGFmdGVyIGFsbCBiYWRibG9ja3MgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDctXHRpZiAoKHByZXYgXHUwMDNlPSAwKSBcdTAwMjZcdTAwMjZcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjEyLVxuYmxvY2svYmFkYmxvY2tzLmM6MTIxMzpcdC8qIE92ZXJsYXBwZWQgd2l0aCBmcm9udCBiYWRibG9ja3MgcmVjb3JkICovXG5ibG9jay9iYWRibG9ja3MuYy0xMjE0LVx0aWYgKChwcmV2IFx1MDAzZT0gMCkgXHUwMDI2XHUwMDI2IG92ZXJsYXBfZnJvbnQoYmIsIHByZXYsIFx1MDAyNmJhZCkpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMTUtXHRcdGlmIChCQl9BQ0socFtwcmV2XSkpXG5ibG9jay9iYWRibG9ja3MuYzoxMjE2Olx0XHRcdGFja2VkX2JhZGJsb2NrcyYjNDM7JiM0Mzs7XG5ibG9jay9iYWRibG9ja3MuYy0xMjE3LVx0XHRlbHNlXG5ibG9jay9iYWRibG9ja3MuYzoxMjE4Olx0XHRcdHVuYWNrZWRfYmFkYmxvY2tzJiM0MzsmIzQzOztcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMTktXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTIzOS1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNDA6XHQvKiBub3QgY292ZXIgYW55IGJhZGJsb2NrcyByYW5nZSBpbiB0aGUgdGFibGUgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNDEtXHRsZW4gPSBzZWN0b3JzO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNTItXG5ibG9jay9iYWRibG9ja3MuYzoxMjUzOlx0aWYgKHVuYWNrZWRfYmFkYmxvY2tzIFx1MDAzZSAwKVxuYmxvY2svYmFkYmxvY2tzLmMtMTI1NC1cdFx0cnYgPSAtMTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNTU6XHRlbHNlIGlmIChhY2tlZF9iYWRibG9ja3MgXHUwMDNlIDApXG5ibG9jay9iYWRibG9ja3MuYy0xMjU2LVx0XHRydiA9IDE7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTI2My0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjQ6ICogYmFkYmxvY2tzX2NoZWNrKCkgLSBjaGVjayBhIGdpdmVuIHJhbmdlIGZvciBiYWQgc2VjdG9yc1xuYmxvY2svYmFkYmxvY2tzLmM6MTI2NTogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYzoxMjY2OiAqIEBzOlx0XHRzZWN0b3IgKHN0YXJ0KSBhdCB3aGljaCB0byBjaGVjayBmb3IgYmFkYmxvY2tzXG5ibG9jay9iYWRibG9ja3MuYzoxMjY3OiAqIEBzZWN0b3JzOlx0bnVtYmVyIG9mIHNlY3RvcnMgdG8gY2hlY2sgZm9yIGJhZGJsb2Nrc1xuYmxvY2svYmFkYmxvY2tzLmMtMTI2OC0gKiBAZmlyc3RfYmFkOlx0cG9pbnRlciB0byBzdG9yZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgYmFkYmxvY2tcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjk6ICogQGJhZF9zZWN0b3JzOiBwb2ludGVyIHRvIHN0b3JlIG51bWJlciBvZiBiYWRibG9ja3MgYWZ0ZXIgQGZpcnN0X2JhZFxuYmxvY2svYmFkYmxvY2tzLmMtMTI3MC0gKlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzktICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyODA6ICogTG9ja2luZyBvZiB0aGUgYmFkLWJsb2NrIHRhYmxlIHVzZXMgYSBzZXFsb2NrIHNvIGJhZGJsb2Nrc19jaGVja1xuYmxvY2svYmFkYmxvY2tzLmMtMTI4MS0gKiBtaWdodCBuZWVkIHRvIHJldHJ5IGlmIGl0IGlzIHZlcnkgdW5sdWNreS5cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjk2LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTI5NzppbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5OC1cdFx0XHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTMxNS1cdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2YmItXHUwMDNlbG9jayk7XG5ibG9jay9iYWRibG9ja3MuYzoxMzE2Olx0cnYgPSBfYmFkYmxvY2tzX2NoZWNrKGJiLCBzLCBzZWN0b3JzLCBmaXJzdF9iYWQsIGJhZF9zZWN0b3JzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMTctXHRpZiAocmVhZF9zZXFyZXRyeShcdTAwMjZiYi1cdTAwM2Vsb2NrLCBzZXEpKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjEtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTMyMjpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2hlY2spO1xuYmxvY2svYmFkYmxvY2tzLmMtMTMyMy1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjQtLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzI1OiAqIGJhZGJsb2Nrc19zZXQoKSAtIEFkZCBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxuYmxvY2svYmFkYmxvY2tzLmM6MTMyNjogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYy0xMzI3LSAqIEBzOlx0XHRmaXJzdCBzZWN0b3IgdG8gbWFyayBhcyBiYWRcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzM2LSAqICB0cnVlOiBzdWNjZXNzXG5ibG9jay9iYWRibG9ja3MuYzoxMzM3OiAqICBmYWxzZTogZmFpbGVkIHRvIHNldCBiYWRibG9ja3MgKG91dCBvZiBzcGFjZSkuIFBhcml0YWwgc2V0dGluZyB3aWxsIGJlXG5ibG9jay9iYWRibG9ja3MuYy0xMzM4LSAqICB0cmVhdGVkIGFzIGZhaWx1cmUuXG5ibG9jay9iYWRibG9ja3MuYy0xMzM5LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM0MDpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy0xMzQxLVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM0Mi17XG5ibG9jay9iYWRibG9ja3MuYzoxMzQzOlx0cmV0dXJuIF9iYWRibG9ja3Nfc2V0KGJiLCBzLCBzZWN0b3JzLCBhY2tub3dsZWRnZWQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM0NC19XG5ibG9jay9iYWRibG9ja3MuYzoxMzQ1OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zZXQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM0Ni1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDctLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzQ4OiAqIGJhZGJsb2Nrc19jbGVhcigpIC0gUmVtb3ZlIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXG5ibG9jay9iYWRibG9ja3MuYzoxMzQ5OiAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNTAtICogQHM6XHRcdGZpcnN0IHNlY3RvciB0byBtYXJrIGFzIGJhZFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNTgtICogIHRydWU6IHN1Y2Nlc3NcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNTk6ICogIGZhbHNlOiBmYWlsZWQgdG8gY2xlYXIgYmFkYmxvY2tzXG5ibG9jay9iYWRibG9ja3MuYy0xMzYwLSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM2MTpib29sIGJhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjIte1xuYmxvY2svYmFkYmxvY2tzLmM6MTM2MzpcdHJldHVybiBfYmFkYmxvY2tzX2NsZWFyKGJiLCBzLCBzZWN0b3JzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjQtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTM2NTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2xlYXIpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM2Ni1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjctLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzY4OiAqIGFja19hbGxfYmFkYmxvY2tzKCkgLSBBY2tub3dsZWRnZSBhbGwgYmFkIGJsb2NrcyBpbiBhIGxpc3QuXG5ibG9jay9iYWRibG9ja3MuYzoxMzY5OiAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzAtICpcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzczLSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM3NDp2b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM3NS17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTQwMS19XG5ibG9jay9iYWRibG9ja3MuYzoxNDAyOkVYUE9SVF9TWU1CT0xfR1BMKGFja19hbGxfYmFkYmxvY2tzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MDMtXG5ibG9jay9iYWRibG9ja3MuYy0xNDA0LS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTQwNTogKiBiYWRibG9ja3Nfc2hvdygpIC0gc3lzZnMgYWNjZXNzIHRvIGJhZC1ibG9ja3MgbGlzdFxuYmxvY2svYmFkYmxvY2tzLmM6MTQwNjogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYy0xNDA3LSAqIEBwYWdlOlx0YnVmZmVyIHJlY2VpdmVkIGZyb20gc3lzZnNcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0MDg6ICogQHVuYWNrOlx0d2VhdGhlciB0byBzaG93IHVuYWNrbm93bGVkZ2VkIGJhZGJsb2Nrc1xuYmxvY2svYmFkYmxvY2tzLmMtMTQwOS0gKlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MTItICovXG5ibG9jay9iYWRibG9ja3MuYzoxNDEzOnNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjaylcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MTQte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTAtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ1MTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2hvdyk7XG5ibG9jay9iYWRibG9ja3MuYy0xNDUyLVxuYmxvY2svYmFkYmxvY2tzLmMtMTQ1My0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NTQ6ICogYmFkYmxvY2tzX3N0b3JlKCkgLSBzeXNmcyBhY2Nlc3MgdG8gYmFkLWJsb2NrcyBsaXN0XG5ibG9jay9iYWRibG9ja3MuYzoxNDU1OiAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTYtICogQHBhZ2U6XHRidWZmZXIgcmVjZWl2ZWQgZnJvbSBzeXNmc1xuYmxvY2svYmFkYmxvY2tzLmMtMTQ1Ny0gKiBAbGVuOlx0bGVuZ3RoIG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSBzeXNmc1xuYmxvY2svYmFkYmxvY2tzLmM6MTQ1ODogKiBAdW5hY2s6XHR3ZWF0aGVyIHRvIHNob3cgdW5hY2tub3dsZWRnZWQgYmFkYmxvY2tzXG5ibG9jay9iYWRibG9ja3MuYy0xNDU5LSAqXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTQ2Mi0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NjM6c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXG5ibG9jay9iYWRibG9ja3MuYy0xNDY0LVx0XHRcdGludCB1bmFjaylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDgyLVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4MzpcdGlmICghYmFkYmxvY2tzX3NldChiYiwgc2VjdG9yLCBsZW5ndGgsICF1bmFjaykpXG5ibG9jay9iYWRibG9ja3MuYy0xNDg0LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDg3LX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0ODg6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3N0b3JlKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktXG5ibG9jay9iYWRibG9ja3MuYzoxNDkwOnN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ5MS1cdFx0aW50IGVuYWJsZSlcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNTEyLS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTUxMzogKiBiYWRibG9ja3NfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZVxuYmxvY2svYmFkYmxvY2tzLmM6MTUxNDogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYzoxNTE1OiAqIEBlbmFibGU6XHR3ZWF0aGVyIHRvIGVuYWJsZSBiYWRibG9ja3MgYWNjb3VudGluZ1xuYmxvY2svYmFkYmxvY2tzLmMtMTUxNi0gKlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjAtICovXG5ibG9jay9iYWRibG9ja3MuYzoxNTIxOmludCBiYWRibG9ja3NfaW5pdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGVuYWJsZSlcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjIte1xuYmxvY2svYmFkYmxvY2tzLmM6MTUyMzpcdHJldHVybiBfX2JhZGJsb2Nrc19pbml0KE5VTEwsIGJiLCBlbmFibGUpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTUyNC19XG5ibG9jay9iYWRibG9ja3MuYzoxNTI1OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19pbml0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjYtXG5ibG9jay9iYWRibG9ja3MuYzoxNTI3OmludCBkZXZtX2luaXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXG5ibG9jay9iYWRibG9ja3MuYy0xNTI4LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNTMwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzE6XHRyZXR1cm4gX19iYWRibG9ja3NfaW5pdChkZXYsIGJiLCAxKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzItfVxuYmxvY2svYmFkYmxvY2tzLmM6MTUzMzpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2luaXRfYmFkYmxvY2tzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzQtXG5ibG9jay9iYWRibG9ja3MuYy0xNTM1LS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTUzNjogKiBiYWRibG9ja3NfZXhpdCgpIC0gZnJlZSB0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZVxuYmxvY2svYmFkYmxvY2tzLmM6MTUzNzogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYy0xNTM4LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTUzOTp2b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuYmxvY2svYmFkYmxvY2tzLmMtMTU0MC17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTU0OC19XG5ibG9jay9iYWRibG9ja3MuYzoxNTQ5OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19leGl0KTtcbi0tXG5ibG9jay9nZW5oZC5jLTI1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuYmxvY2svZ2VuaGQuYzoyNjojaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuYmxvY2svZ2VuaGQuYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuLS1cbmJsb2NrL2dlbmhkLmM9ODUyPUVYUE9SVF9TWU1CT0woaW52YWxpZGF0ZV9kaXNrKTtcbi0tXG5ibG9jay9nZW5oZC5jLTg1NC0vKiBzeXNmcyBhY2Nlc3MgdG8gYmFkLWJsb2NrcyBsaXN0LiAqL1xuYmxvY2svZ2VuaGQuYzo4NTU6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5ibG9jay9nZW5oZC5jLTg1Ni1cdFx0XHRcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuYmxvY2svZ2VuaGQuYy04NjMtXG5ibG9jay9nZW5oZC5jOjg2NDpcdHJldHVybiBiYWRibG9ja3Nfc2hvdyhkaXNrLVx1MDAzZWJiLCBwYWdlLCAwKTtcbmJsb2NrL2dlbmhkLmMtODY1LX1cbmJsb2NrL2dlbmhkLmMtODY2LVxuYmxvY2svZ2VuaGQuYzo4Njc6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuYmxvY2svZ2VuaGQuYy04NjgtXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmJsb2NrL2dlbmhkLmMtODc1LVxuYmxvY2svZ2VuaGQuYzo4NzY6XHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKGRpc2stXHUwMDNlYmIsIHBhZ2UsIGxlbiwgMCk7XG5ibG9jay9nZW5oZC5jLTg3Ny19XG4tLVxuYmxvY2svZ2VuaGQuYz0xMTc2PXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcbmJsb2NrL2dlbmhkLmM6MTE3NzpzdGF0aWMgREVWSUNFX0FUVFIoYmFkYmxvY2tzLCAwNjQ0LCBkaXNrX2JhZGJsb2Nrc19zaG93LCBkaXNrX2JhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9nZW5oZC5jLTExNzgtc3RhdGljIERFVklDRV9BVFRSKGRpc2tzZXEsIDA0NDQsIGRpc2tzZXFfc2hvdywgTlVMTCk7XG4tLVxuYmxvY2svZ2VuaGQuYz0xMjEzPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkaXNrX2F0dHJzW10gPSB7XG4tLVxuYmxvY2svZ2VuaGQuYy0xMjI0LVx0XHUwMDI2ZGV2X2F0dHJfaW5mbGlnaHQuYXR0cixcbmJsb2NrL2dlbmhkLmM6MTIyNTpcdFx1MDAyNmRldl9hdHRyX2JhZGJsb2Nrcy5hdHRyLFxuYmxvY2svZ2VuaGQuYy0xMjI2LVx0XHUwMDI2ZGV2X2F0dHJfZXZlbnRzLmF0dHIsXG4tLVxuYmxvY2svZ2VuaGQuYz0xMjQwPXN0YXRpYyB1bW9kZV90IGRpc2tfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IG4pXG4tLVxuYmxvY2svZ2VuaGQuYy0xMjQ0LVxuYmxvY2svZ2VuaGQuYzoxMjQ1Olx0aWYgKGEgPT0gXHUwMDI2ZGV2X2F0dHJfYmFkYmxvY2tzLmF0dHIgXHUwMDI2XHUwMDI2ICFkaXNrLVx1MDAzZWJiKVxuYmxvY2svZ2VuaGQuYy0xMjQ2LVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgzNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBLZXJuZWwgQmFkIEJsb2NrIE1hbmFnZW1lbnQqKgoKUmlnaHQsIHNvIGBibG9jay9iYWRibG9ja3MuY2AgaXMgZGVmaW5pdGVseSBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBgYmxvY2svTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQ7IGBiYWRibG9ja3Mub2AgaXMgYWx3YXlzIGJlaW5nIGJ1aWx0IHdpdGggdGhlIGJsb2NrIGxheWVyLiBJbnRlcmVzdGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHdobyYjMzk7cyBhY3R1YWxseSAqdXNpbmcqIHRoaXMgY29kZS4KCkhtbSwgUkFJRCwgc3BlY2lmaWNhbGx5IHRoZSBNRCBsYXllciwgZGVmaW5pdGVseSBsZXZlcmFnZXMgYGJhZGJsb2Nrc2AsIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGRhdGEgaW50ZWdyaXR5LiBBbmQgSSBzZWUgYHBtZW0vbnZkaW1tYCBpcyBpbiB0aGUgbWl4IHRvby4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBOVkRJTU1zLCBtYW5hZ2luZyBiYWQgYmxvY2tzIGlzICpjcml0aWNhbCogZm9yIHRob3NlLCBzbyB0aGF0JiMzOTtzIGxvZ2ljYWwuIE51bGxfYmxrIGlzIHVzaW5nIGl0IHRvbz8gSSYjMzk7bSBjdXJpb3VzIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBiYWQgYmxvY2tzIHdoZW4gdGhleSBkb24mIzM5O3QgZXZlbiBoYXZlIGEgcGh5c2ljYWwgYmxvY2sgZGV2aWNlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW50byB0aGF0IG9uZSBmdXJ0aGVyLgoKVGhlIG1vcmUgY3J1Y2lhbCBxdWVzdGlvbiBpczogd2hvICppbml0aWFsaXplcyogdGhlIGBkaXNrLSZndDtiYmAgc3RydWN0dXJlIG9yIGNhbGxzIGBiYWRibG9ja3NfaW5pdGA/IEtub3dpbmcgKndobyogaXMgc2V0dGluZyB1cCB0aGUgYmFkIGJsb2NrIG1hbmFnZW1lbnQgZm9yIGEgZGV2aWNlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyBiZWluZyAqdXNlZCogZWZmZWN0aXZlbHkuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgZG93biB0aG9zZSBjYWxscyB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHdob2xlIGJhZCBibG9jayBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3NfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz0xNDg4PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9iYWRibG9ja3MuYy0xNDg5LVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ5MDpzdGF0aWMgaW50IF9fYmFkYmxvY2tzX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmFkYmxvY2tzICpiYixcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTEtXHRcdGludCBlbmFibGUpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTUxMi0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MTM6ICogYmFkYmxvY2tzX2luaXQoKSAtIGluaXRpYWxpemUgdGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmVcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MTQtICogQGJiOlx0XHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjAtICovXG5ibG9jay9iYWRibG9ja3MuYzoxNTIxOmludCBiYWRibG9ja3NfaW5pdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGVuYWJsZSlcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjIte1xuYmxvY2svYmFkYmxvY2tzLmM6MTUyMzpcdHJldHVybiBfX2JhZGJsb2Nrc19pbml0KE5VTEwsIGJiLCBlbmFibGUpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTUyNC19XG5ibG9jay9iYWRibG9ja3MuYzoxNTI1OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19pbml0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjYtXG5ibG9jay9iYWRibG9ja3MuYz0xNTI3PWludCBkZXZtX2luaXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTUzMC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5ibG9jay9iYWRibG9ja3MuYzoxNTMxOlx0cmV0dXJuIF9fYmFkYmxvY2tzX2luaXQoZGV2LCBiYiwgMSk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTMyLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03ODY9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODAxLVx0SU5JVF9SQURJWF9UUkVFKFx1MDAyNmRldi1cdTAwM2VjYWNoZSwgR0ZQX0FUT01JQyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4MDI6XHRpZiAoYmFkYmxvY2tzX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWJhZGJsb2NrcywgMCkpIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTgwMy1cdFx0a2ZyZWUoZGV2KTtcbi0tXG5kcml2ZXJzL21kL21kLmM9Mzc5Mz1pbnQgbWRfcmRldl9pbml0KHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy0zODE1LVx0ICovXG5kcml2ZXJzL21kL21kLmM6MzgxNjpcdHJldHVybiBiYWRibG9ja3NfaW5pdChcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgMCk7XG5kcml2ZXJzL21kL21kLmMtMzgxNy19XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01OD1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTktXHRcdFx0aW50IHVuYWNrKTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NjA6aW50IGJhZGJsb2Nrc19pbml0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZW5hYmxlKTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNjEtdm9pZCBiYWRibG9ja3NfZXhpdChzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjoKCioqQmFkIEJsb2NrIEluaXRpYWxpemF0aW9uOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJhZCBibG9jayBtYW5hZ2VtZW50IGlzIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBtdWx0aXBsZSBpbml0aWFsaXphdGlvbiBwb2ludHMuIEZpcnN0LCBgbnVsbF9ibGtgIGluaXRpYWxpemVzIGAmYW1wO2Rldi0mZ3Q7YmFkYmxvY2tzYC4gVGhhdCYjMzk7cyBleHBlY3RlZCwgYSBiYXNpYyBibG9jayBkZXZpY2UgbmVlZHMgdG8ga25vdyBhYm91dCBiYWQgc2VjdG9ycy4gVGhlbiwgaW4gdGhlIE1EIHJhaWQgc2V0dXAsIHdlIGhhdmUgYG1kX3JkZXZfaW5pdGAgaW5pdGlhbGl6aW5nIGAmYW1wO3JkZXYtJmd0O2JhZGJsb2Nrc2AuIFRoaXMgbWFrZXMgc2Vuc2U7IFJBSUQgZGV2aWNlcywgYnVpbHQgb24gbXVsdGlwbGUgdW5kZXJseWluZyBkZXZpY2VzLCB3b3VsZCBhbHNvIG5lZWQgdGhlaXIgb3duIGJhZCBibG9jayBoYW5kbGluZywgbGlrZWx5IHRvIGFjY291bnQgZm9yIGZhaWx1cmVzIGluIHRoZSBjb25zdGl0dWVudCBkcml2ZXMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGFuZCBhbnkgcG90ZW50aWFsIG92ZXJsYXAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCB3aGF0IG90aGVyIG1vZHVsZXMgYXJlIG1ha2luZyB1c2Ugb2YgdGhpcz8gTXkgdGhvdWdodCBub3cgaXMgdG8gY2hlY2sgZm9yIHRoZSBjYWxscyB0byBgZGV2bV9pbml0X2JhZGJsb2Nrc2AsIGFzIGl0IGlzIGxpa2VseSBhIHNoYXJlZCBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIHNlZSB3aG8mIzM5O3MgY2FsbGluZyBpdCB0byBncmFzcCB0aGUgb3ZlcmFsbCBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgYmFkIGJsb2NrIHN5c3RlbXMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9pbml0X2JhZGJsb2NrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz0xNTI1PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19pbml0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjYtXG5ibG9jay9iYWRibG9ja3MuYzoxNTI3OmludCBkZXZtX2luaXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXG5ibG9jay9iYWRibG9ja3MuYy0xNTI4LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNTMyLX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9pbml0X2JhZGJsb2Nrcyk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTM0LVxuLS1cbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9Mjg1PWludCBkZXZtX25zaW9fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG5kX25hbWVzcGFjZV9pbyAqbnNpbyxcbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTMwMS1cdG5kbnMtXHUwMDNlcndfYnl0ZXMgPSBuc2lvX3J3X2J5dGVzO1xuZHJpdmVycy9udmRpbW0vY2xhaW0uYzozMDI6XHRpZiAoZGV2bV9pbml0X2JhZGJsb2NrcyhkZXYsIFx1MDAyNm5zaW8tXHUwMDNlYmIpKVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0zMDMtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NjM9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTY1LVx0XHRcdC8gNTEyKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1NjY6XHRpZiAoZGV2bV9pbml0X2JhZGJsb2NrcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlYmIpKVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU2Ny1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmM9MTM9c3RhdGljIGludCBuZF9yZWdpb25fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbi5jLTM3LVxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmM6Mzg6XHRpZiAoZGV2bV9pbml0X2JhZGJsb2NrcyhkZXYsIFx1MDAyNm5kX3JlZ2lvbi1cdTAwM2ViYikpXG5kcml2ZXJzL252ZGltbS9yZWdpb24uYy0zOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD0yOD1zdHJ1Y3QgYmFkYmxvY2tzIHtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6Mjk6XHRzdHJ1Y3QgZGV2aWNlICpkZXY7XHQvKiBzZXQgYnkgZGV2bV9pbml0X2JhZGJsb2NrcyAqL1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC0zMC1cdGludCBjb3VudDtcdFx0LyogY291bnQgb2YgYmFkIGJsb2NrcyAqL1xuLS1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NjI9c3RydWN0IGRldmljZTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NjM6aW50IGRldm1faW5pdF9iYWRibG9ja3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTY0LXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZtX2V4aXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTE1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVsdmluZyBpbnRvIEJhZCBCbG9jayBIYW5kbGluZyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYmFkIGJsb2NrIG1hbmFnZW1lbnQgd29ya3MgYXQgdGhlIHN5c3RlbSBsZXZlbCwgYW5kIHNwZWNpZmljYWxseSBob3cgd2UmIzM5O3JlIGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCBzeXNmcy4gSXQgc2VlbXMgbGlrZSB0aGUgYGRpc2stJmd0O2JiYCBzdHJ1Y3R1cmUgaXMgY2VudHJhbCB0byB0aGlzLiBJIGtub3cgdGhhdCB0aGUgYGJhZGJsb2Nrc2Agc3lzZnMgYXR0cmlidXRlIGFsbG93cyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGlzIGluZm9ybWF0aW9uLCBhbmQgdGhlIG9idmlvdXMgbGluayB0aGVyZSBpcyB0aHJvdWdoIGBiYWRibG9ja3Nfc3RvcmVgIGFuZCBgYmFkYmxvY2tzX3Nob3dgLiBJdCYjMzk7cyBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIHRoaW5ncyBsaWtlIE1EIGRldmljZXMsIHdoZXJlIHRoZSBgcmRldi0mZ3Q7YmFkYmxvY2tzYCBhdHRyaWJ1dGUgaXMgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLgoKSG1tLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGVyZSBgYmFkYmxvY2tzX3N0b3JlYCBpcyBhY3R1YWxseSAqdXNlZCouIFdoZXJlIGFyZSB3ZSB3cml0aW5nIHRoaXMgYmFkIGJsb2NrIGRhdGEgYW5kIGhvdyBpcyBpdCBiZWluZyBjb25zdW1lZD8gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFkYmxvY2tzX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JhZGJsb2Nrcy5jPTE0NTE9RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3Nob3cpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTMtLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxNDU0OiAqIGJhZGJsb2Nrc19zdG9yZSgpIC0gc3lzZnMgYWNjZXNzIHRvIGJhZC1ibG9ja3MgbGlzdFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ1NS0gKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTQ2Mi0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NjM6c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXG5ibG9jay9iYWRibG9ja3MuYy0xNDY0LVx0XHRcdGludCB1bmFjaylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDg3LX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0ODg6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3N0b3JlKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktXG4tLVxuYmxvY2svZ2VuaGQuYz04NTU9c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy04NjYtXG5ibG9jay9nZW5oZC5jOjg2NzpzdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5ibG9jay9nZW5oZC5jLTg2OC1cdFx0XHRcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuYmxvY2svZ2VuaGQuYy04NzUtXG5ibG9jay9nZW5oZC5jOjg3NjpcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoZGlzay1cdTAwM2ViYiwgcGFnZSwgbGVuLCAwKTtcbmJsb2NrL2dlbmhkLmMtODc3LX1cbi0tXG5ibG9jay9nZW5oZC5jPTExNzY9c3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xuYmxvY2svZ2VuaGQuYzoxMTc3OnN0YXRpYyBERVZJQ0VfQVRUUihiYWRibG9ja3MsIDA2NDQsIGRpc2tfYmFkYmxvY2tzX3Nob3csIGRpc2tfYmFkYmxvY2tzX3N0b3JlKTtcbmJsb2NrL2dlbmhkLmMtMTE3OC1zdGF0aWMgREVWSUNFX0FUVFIoZGlza3NlcSwgMDQ0NCwgZGlza3NlcV9zaG93LCBOVUxMKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzM9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqcGFnZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzktXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NDA6c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NDEtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL21kL21kLmM9MzYxND1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbWQvbWQuYy0zNjE1LXtcbmRyaXZlcnMvbWQvbWQuYzozNjE2Olx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDApO1xuZHJpdmVycy9tZC9tZC5jLTM2MTctXHQvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqL1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0zNjI5PXN0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbWQvbWQuYy0zNjMwLXtcbmRyaXZlcnMvbWQvbWQuYzozNjMxOlx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTtcbmRyaXZlcnMvbWQvbWQuYy0zNjMyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTU3PXNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjayk7XG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oOjU4OnNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01OS1cdFx0XHRpbnQgdW5hY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEzOAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQmxvY2sgTGF5ZXIgQmFkYmxvY2tzIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbW1pdCBjaGFuZ2luZyB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbiBpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiAgYGJhZGJsb2Nrc19zdG9yZWAgd3JpdGVzIGJhZCBibG9ja3MgdG8gbWQgb3IgbnVsbF9ibGsgZGV2aWNlcyB1c2luZyBzeXNmcyBvciBjb25maWdmcywgYW5kIHN5emthbGxlciBpbnRlcmFjdHMgd2l0aCB0aGVzZSBhcyB3ZWxsIGFzIHdpdGggdGhlIGBiYWRibG9ja3NgIHN5c2ZzIGF0dHJpYnV0ZXMsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB3aXRoaW4gdGhlIGZ1enppbmcgc2NvcGUuIFRoZSBjb21taXQgZGlmZiBsb29rcyBsaWtlIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGJpbmFyeSBzZWFyY2ggd2l0aGluIHRoZSBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGhpYCB2YXJpYWJsZSBhbmQgYSByZWR1bmRhbnQgY29uZGl0aW9uYWwgY2hlY2sgaGF2ZSBiZWVuIHJlbW92ZWQuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgb3JpZ2luYWwgY29kZSBpbml0aWFsaXplZCBgaGlgIHRvIGBiYi0mZ3Q7Y291bnRgLiBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIGxvZ2ljIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGZpZ3VyZWQgb3V0IHdoeS4gSW5pdGlhbGx5LCBpdCBwZXJmb3JtZWQgYSBiaW5hcnkgc2VhcmNoIG9uIHRoZSBgYmFkYmxvY2tzYCB0YWJsZSB0byBmaW5kIHRoZSAqcHJldmlvdXMqIGJhZCBibG9jayByZWxhdGl2ZSB0byBhIGdpdmVuIHNlY3RvciBgc2AuIEl0JiMzOTtzIGEgYmluYXJ5IHNlYXJjaCwgc28gd2UgY2FuIHNlZSB0aGF0IGBsb2AgaXMgYWx3YXlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgc2AsIGFuZCBgaGlgIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gYHNgLiBOb3csIHRoZSBjaGFuZ2Ugc2V0cyBgaGkgPSBiYi0mZ3Q7Y291bnQgLSAxYCBhbmQgYWxzbyBzaW1wbGlmaWVzIHRoZSByZXR1cm4gbG9naWMuCgpUaGUgYmluYXJ5IHNlYXJjaCByZWxpZXMgb24gdGhlc2UgaW52YXJpYW50cywgd2hpY2ggaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UuIFRoZSBwYXRjaCBzZXRzIGBoaSA9IGJiLSZndDtjb3VudCAtIDE7YCBzbyBpdCBub3cgY29ycmVjdGx5IGluZGV4ZXMgaW50byB0aGUgYGJiLSZndDtwYWdlYCBhcnJheS4gIFRoZSBvcmlnaW5hbCBjb2RlLCBhbHRob3VnaCBpdCBtaWdodCBoYXZlIHNlZW1lZCBjb3JyZWN0LCBjb3VsZCBoYXZlIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgdGhlIGJpbmFyeSBzZWFyY2ggaW4gY2VydGFpbiBlZGdlIGNhc2VzIHdoZW4gYGJiLSZndDtjb3VudGAgd2FzIHNtYWxsIChsaWtlIDEgb3IgMCkuIE5vdywgaXQgYXBwZWFycyB0byBiZSBtb3JlIHJvYnVzdC4gVGhlIHBhdGNoIG1ha2VzIHRoZSBiaW5hcnkgc2VhcmNoIGNvcnJlY3QgYW5kIGVmZmljaWVudCBiZWNhdXNlIHRoZSBgbG9gIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaCBpcyBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGFwcHJvcHJpYXRlIGluZGV4LgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2xlYW51cC9yZWZhY3RvcmluZyBpbiBgcHJldl9iYWRibG9ja3MoKWAuIFRoaXMgY291bGQgYmUgdG91Y2hlZCBieSBzeXprYWxsZXIuIFNpbmNlIGl0IGlzIGxvY2F0ZWQgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIGFuZCBgYmFkYmxvY2tzYCBpcyB0cmlnZ2VyZWQgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFjY29yZGluZyB0byB0aGUgZ3VpZGFuY2UsIGV2ZW4gYSAmIzM0O3JlZmFjdG9yaW5nJiMzNDsgbGlrZSB0aGlzIHdhcnJhbnRzIGZ1enppbmcsIGJlY2F1c2UgaXQgYWx0ZXJzIHN0YXRlIG1hbmFnZW1lbnQgaW4gYSBjb3JlIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBpbnRlcmFjdHMgd2l0aCBgYmFkYmxvY2tzYCBkaXJlY3RseS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGdyZXBwZXJgIGluIHRoZSBrZXJuZWwgdG8gc2VlIGhvdyBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIGNhbGxlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBhbnkgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZ2l0IGdyZXAgdG8gY2hlY2sgaG93IGJhZGJsb2NrcyBpcyBjYWxsZWQgb3IgcmVhY2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFkYmxvY2tzXyhzZXR8Y2xlYXJ8Y2hlY2spJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JhZGJsb2Nrcy5jLTIyLSAqXG5ibG9jay9iYWRibG9ja3MuYzoyMzogKiBXaGVuIHRoZSBjYWxsZXIgb2YgYmFkYmxvY2tzX3NldCgpIHdhbnRzIHRvIHNldCBhIHJhbmdlIG9mIGJhZCBibG9ja3MsIHRoZVxuYmxvY2svYmFkYmxvY2tzLmMtMjQtICogc2V0dGluZyByYW5nZSBjYW4gYmUgYWNrZWQgb3IgdW5hY2tlZC4gQW5kIHRoZSBzZXR0aW5nIHJhbmdlIG1heSBtZXJnZSxcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0yODItICogICAgIGJsb2NrcyB0YWJsZSBhcmUgYWxsIGFja2VkLCBtZXJnaW5nIHRoZW0gaW50byBhIGxhcmdlciBvbmUgcmFuZ2UgbWF5XG5ibG9jay9iYWRibG9ja3MuYzoyODM6ICogICAgIG9jY3VweSBsZXNzIGJhZCBibG9ja3MgdGFibGUgc3BhY2UgYW5kIG1ha2UgYmFkYmxvY2tzX2NoZWNrKCkgZmFzdGVyLlxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTMyMC0gKiB0aGUgYmFkIGJsb2NrIHJhbmdlIHNldHRpbmcgY29uZGl0aW9ucy4gTWF5YmUgdGhlcmUgaXMgc29tZSByYXJlIGNvcm5lciBjYXNlXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJiMzOTt0IGh1cnQgaWYgYmFkYmxvY2tzX3NldCgpIGZhaWxzIGR1ZVxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXG5ibG9jay9iYWRibG9ja3MuYy0zMjMtICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyNDogKiBJbnNpZGUgYmFkYmxvY2tzX3NldCgpIGVhY2ggbG9vcCBzdGFydHMgYnkganVtcGluZyB0byByZV9pbnNlcnQgbGFiZWwsIGV2ZXJ5XG5ibG9jay9iYWRibG9ja3MuYy0zMjUtICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2Vcbi0tXG5ibG9jay9iYWRibG9ja3MuYz04MTY9c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgzNy0vKiBEbyBleGFjdCB3b3JrIHRvIHNldCBiYWQgYmxvY2sgcmFuZ2UgaW50byB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzo4Mzg6c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy04MzktXHRcdFx0ICAgaW50IGFja25vd2xlZGdlZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDMwPXN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMDQ3LS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNsZWFyIGJhZCBibG9jayByYW5nZSBmcm9tIHRoZSBiYWQgYmxvY2sgdGFibGUgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjEwNDg6c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwNDkte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTExODQtLyogRG8gdGhlIGV4YWN0IHdvcmsgdG8gY2hlY2sgYmFkIGJsb2NrcyByYW5nZSBmcm9tIHRoZSBiYWQgYmxvY2sgdGFibGUgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjExODU6c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuYmxvY2svYmFkYmxvY2tzLmMtMTE4Ni1cdFx0XHQgICAgc2VjdG9yX3QgKmZpcnN0X2JhZCwgc2VjdG9yX3QgKmJhZF9zZWN0b3JzKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNjMtLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMjY0OiAqIGJhZGJsb2Nrc19jaGVjaygpIC0gY2hlY2sgYSBnaXZlbiByYW5nZSBmb3IgYmFkIHNlY3RvcnNcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNjUtICogQGJiOlx0XHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzktICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyODA6ICogTG9ja2luZyBvZiB0aGUgYmFkLWJsb2NrIHRhYmxlIHVzZXMgYSBzZXFsb2NrIHNvIGJhZGJsb2Nrc19jaGVja1xuYmxvY2svYmFkYmxvY2tzLmMtMTI4MS0gKiBtaWdodCBuZWVkIHRvIHJldHJ5IGlmIGl0IGlzIHZlcnkgdW5sdWNreS5cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjk2LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTI5NzppbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5OC1cdFx0XHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTMxNS1cdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2YmItXHUwMDNlbG9jayk7XG5ibG9jay9iYWRibG9ja3MuYzoxMzE2Olx0cnYgPSBfYmFkYmxvY2tzX2NoZWNrKGJiLCBzLCBzZWN0b3JzLCBmaXJzdF9iYWQsIGJhZF9zZWN0b3JzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMTctXHRpZiAocmVhZF9zZXFyZXRyeShcdTAwMjZiYi1cdTAwM2Vsb2NrLCBzZXEpKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjEtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTMyMjpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2hlY2spO1xuYmxvY2svYmFkYmxvY2tzLmMtMTMyMy1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjQtLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzI1OiAqIGJhZGJsb2Nrc19zZXQoKSAtIEFkZCBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNi0gKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTMzOS0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDA6Ym9vbCBiYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0MS1cdFx0ICAgaW50IGFja25vd2xlZGdlZClcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDIte1xuYmxvY2svYmFkYmxvY2tzLmM6MTM0MzpcdHJldHVybiBfYmFkYmxvY2tzX3NldChiYiwgcywgc2VjdG9ycywgYWNrbm93bGVkZ2VkKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDQtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTM0NTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDYtXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ3LS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTM0ODogKiBiYWRibG9ja3NfY2xlYXIoKSAtIFJlbW92ZSBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxuYmxvY2svYmFkYmxvY2tzLmMtMTM0OS0gKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTM2MC0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjE6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG5ibG9jay9iYWRibG9ja3MuYy0xMzYyLXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjM6XHRyZXR1cm4gX2JhZGJsb2Nrc19jbGVhcihiYiwgcywgc2VjdG9ycyk7XG5ibG9jay9iYWRibG9ja3MuYy0xMzY0LX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjU6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NsZWFyKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjYtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTQ2Mz1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDgyLVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4MzpcdGlmICghYmFkYmxvY2tzX3NldChiYiwgc2VjdG9yLCBsZW5ndGgsICF1bmFjaykpXG5ibG9jay9iYWRibG9ja3MuYy0xNDg0LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01NDA9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTcyLVx0aWYgKGJ1ZlswXSA9PSAmIzM5OyYjNDM7JiMzOTspIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU3MzpcdFx0aWYgKGJhZGJsb2Nrc19zZXQoXHUwMDI2dF9kZXYtXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU3NC1cdFx0XHRcdCAgZW5kIC0gc3RhcnQgJiM0MzsgMSwgMSkpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NzUtXHRcdFx0cmV0ID0gY291bnQ7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NzY6XHR9IGVsc2UgaWYgKGJhZGJsb2Nrc19jbGVhcihcdTAwMjZ0X2Rldi1cdTAwM2ViYWRibG9ja3MsIHN0YXJ0LFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc3LVx0XHRcdFx0ICAgZW5kIC0gc3RhcnQgJiM0MzsgMSkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzU0PWJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2Mi1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNjM6XHRpZiAoIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCAqbnJfc2VjdG9ycywgXHUwMDI2Zmlyc3RfYmFkLCBcdTAwMjZiYWRfc2VjdG9ycykpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzY0LVx0XHRyZXR1cm4gQkxLX1NUU19PSztcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzY2LVx0aWYgKGNtZC1cdTAwM2VucS1cdTAwM2VkZXYtXHUwMDNlYmFkYmxvY2tzX29uY2UpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzY3Olx0XHRiYWRibG9ja3NfY2xlYXIoYmIsIGZpcnN0X2JhZCwgYmFkX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2OC1cbi0tXG5kcml2ZXJzL21kL21kLmM9MTgwMz1zdGF0aWMgaW50IHN1cGVyXzFfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXG4tLVxuZHJpdmVycy9tZC9tZC5jLTE5MzMtXHRcdFx0XHRicmVhaztcbmRyaXZlcnMvbWQvbWQuYzoxOTM0Olx0XHRcdGlmICghYmFkYmxvY2tzX3NldChcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcywgc2VjdG9yLCBjb3VudCwgMSkpXG5kcml2ZXJzL21kL21kLmMtMTkzNS1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMDY1OD1ib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmMtMTA2NzctXG5kcml2ZXJzL21kL21kLmM6MTA2Nzg6XHRpZiAoIWJhZGJsb2Nrc19zZXQoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMsIDApKSB7XG5kcml2ZXJzL21kL21kLmMtMTA2NzktXHRcdC8qXG4tLVxuZHJpdmVycy9tZC9tZC5jPTEwNjk4PXZvaWQgcmRldl9jbGVhcl9iYWRibG9ja3Moc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwNzA1LVxuZHJpdmVycy9tZC9tZC5jOjEwNzA2Olx0aWYgKCFiYWRibG9ja3NfY2xlYXIoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMpKVxuZHJpdmVycy9tZC9tZC5jLTEwNzA3LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9tZC9tZC5oPTI5OT1zdGF0aWMgaW5saW5lIGludCBpc19iYWRibG9jayhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmgtMzAyLVx0aWYgKHVubGlrZWx5KHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNvdW50KSkge1xuZHJpdmVycy9tZC9tZC5oOjMwMzpcdFx0aW50IHJ2ID0gYmFkYmxvY2tzX2NoZWNrKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCByZGV2LVx1MDAzZWRhdGFfb2Zmc2V0ICYjNDM7IHMsXG5kcml2ZXJzL21kL21kLmgtMzA0LVx0XHRcdFx0XHRzZWN0b3JzLFxuLS1cbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmM9MTY1PXN0YXRpYyB2b2lkIHNldF9iYWRibG9jayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IG51bSlcbi0tXG5kcml2ZXJzL252ZGltbS9iYWRyYW5nZS5jLTE2OS1cdC8qIHRoaXMgaXNuJiMzOTt0IGFuIGVycm9yIGFzIHRoZSBoYXJkd2FyZSB3aWxsIHN0aWxsIHRocm93IGFuIGV4Y2VwdGlvbiAqL1xuZHJpdmVycy9udmRpbW0vYmFkcmFuZ2UuYzoxNzA6XHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHMsIG51bSwgMSkpXG5kcml2ZXJzL252ZGltbS9iYWRyYW5nZS5jLTE3MS1cdFx0ZGV2X2luZm9fb25jZShiYi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBmYWlsZWQgZm9yIHNlY3RvciAlbGx4XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbnZkaW1tL2J1cy5jPTE2ND1zdGF0aWMgaW50IG52ZGltbV9jbGVhcl9iYWRibG9ja3NfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL252ZGltbS9idXMuYy0xODMtXHRzZWN0b3IgPSAoY3R4LVx1MDAzZXBoeXMgLSBuZF9yZWdpb24tXHUwMDNlbmRyX3N0YXJ0KSAvIDUxMjtcbmRyaXZlcnMvbnZkaW1tL2J1cy5jOjE4NDpcdGJhZGJsb2Nrc19jbGVhcihcdTAwMjZuZF9yZWdpb24tXHUwMDNlYmIsIHNlY3RvciwgY3R4LVx1MDAzZWNsZWFyZWQgLyA1MTIpO1xuZHJpdmVycy9udmRpbW0vYnVzLmMtMTg1LVxuLS1cbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9MjMzPXN0YXRpYyBpbnQgbnNpb19yd19ieXRlcyhzdHJ1Y3QgbmRfbmFtZXNwYWNlX2NvbW1vbiAqbmRucyxcbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI2OS1cdFx0XHRcdGNsZWFyZWQgLz0gNTEyO1xuZHJpdmVycy9udmRpbW0vY2xhaW0uYzoyNzA6XHRcdFx0XHRiYWRibG9ja3NfY2xlYXIoXHUwMDI2bnNpby1cdTAwM2ViYiwgc2VjdG9yLCBjbGVhcmVkKTtcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjcxLVx0XHRcdH1cbi0tXG5kcml2ZXJzL252ZGltbS9uZC5oPTY3Nj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfYmFkX3BtZW0oc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4Mi1cbmRyaXZlcnMvbnZkaW1tL25kLmg6NjgzOlx0XHRyZXR1cm4gISFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbGVuIC8gNTEyLCBcdTAwMjZmaXJzdF9iYWQsXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4NC1cdFx0XHRcdFx1MDAyNm51bV9iYWQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MzUzPXN0YXRpYyBpbnQgbmRfcGZuX2NsZWFyX21lbW1hcF9lcnJvcnMoc3RydWN0IG5kX3BmbiAqbmRfcGZuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMzgzLVxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYzozODQ6XHRcdGJiX3ByZXNlbnQgPSBiYWRibG9ja3NfY2hlY2soXHUwMDI2bmRfcmVnaW9uLVx1MDAzZWJiLCBtZXRhX3N0YXJ0LFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODUtXHRcdFx0XHRtZXRhX251bSwgXHUwMDI2Zmlyc3RfYmFkLCBcdTAwMjZudW1fYmFkKTtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9ODg9c3RhdGljIHZvaWQgcG1lbV9jbGVhcl9iYihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3RvciwgbG9uZyBibGtzKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05MS1cdFx0cmV0dXJuO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjkyOlx0YmFkYmxvY2tzX2NsZWFyKFx1MDAyNnBtZW0tXHUwMDNlYmIsIHNlY3RvciwgYmxrcyk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTMtXHRpZiAocG1lbS1cdTAwM2ViYl9zdGF0ZSlcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MjU3PV9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjczLVx0aWYgKGJiLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNlxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjI3NDpcdCAgICBiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbnVtLCBcdTAwMjZmaXJzdF9iYWQsIFx1MDAyNm51bV9iYWQpKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjc1LVx0XHRsb25nIGFjdHVhbF9ucjtcbi0tXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTQ1PXN0cnVjdCBiYWRibG9ja3NfY29udGV4dCB7XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01MC1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTE6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXHRcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1Mzpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU0LVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTU6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01Ni12b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMDUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nOiBBIENyaXRpY2FsIEV4YW1pbmF0aW9uIG9mIEJhZCBCbG9jayBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9tZC9tZC5jYCBjb2RlIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIGluIHRoZSBiYWQgYmxvY2sgaGFuZGxpbmcgbG9naWMuIEkgc2VlIHRoYXQgTUQgZGV2aWNlcyBoYXZlIGBzeXNmc2AgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggYmFkIGJsb2Nrczogc3BlY2lmaWNhbGx5LCB0aGUgYGRldl9hdHRyX2JhZGJsb2Nrc2AgYXR0cmlidXRlLiBXcml0aW5nIHRvIGAvc3lzL2Jsb2NrL21kWC9tZC9kZXYtWFhYL2JhZF9ibG9ja3NgIChhbmQgc2ltaWxhciBwYXRocyBmb3IgYG51bGxfYmxrYCBhbmQgZGlzayBhdHRyaWJ1dGVzIGxpa2UgYC9zeXMvYmxvY2svJmx0O2Rpc2smZ3Q7L2JhZGJsb2Nrc2ApIHVsdGltYXRlbHkgbGVhZHMgdG8gdGhlIGBiYWRibG9ja3Nfc2V0YCBmdW5jdGlvbiB0aHJvdWdoIGEgY2hhaW4gb2YgY2FsbHMuIEltcG9ydGFudGx5LCB0aGlzIGFsc28gaW1wYWN0cyBJL08gb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBgYmFkYmxvY2tzX2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggY2FsbHMgYF9iYWRibG9ja3NfY2hlY2tgLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgcHJldl9iYWRibG9ja3NgLiBTaW1pbGFybHksIHVwZGF0ZXMgYW5kIGNsZWFycyBhbHNvIGZsb3cgdGhyb3VnaCBgX2JhZGJsb2Nrc19zZXRgIG9yIGBfYmFkYmxvY2tzX2NsZWFyYCB3aGljaCBjYWxscyBgcHJldl9iYWRibG9ja3NgLgoKVGhlIGtleSB0aGluZyBJJiMzOTt2ZSBub3RpY2VkIGlzIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkaXJlY3RseSBhbHRlciB0aGUgYmluYXJ5IHNlYXJjaCBsb2dpYyB3aXRoaW4gdGhlIGBwcmV2X2JhZGJsb2Nrc2AgZnVuY3Rpb24uIFdlIGFyZSBjaGFuZ2luZyBob3cgd2UgZG8gdGhlIGJpbmFyeSBzZWFyY2ggd2hpY2ggaXMgYSBjb3JlIHN1YnN5c3RlbSBhbGdvcml0aG0gd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AuIFNwZWNpZmljYWxseSwgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCByZXR1cm4gdmFsdWVzIGFyZSBiZWluZyBjaGFuZ2VkLiBUaGUgc2VhcmNoJiMzOTtzIGxvZ2ljIGlzIGJlaW5nIG1vZGlmaWVkIGFuZCB0aGUgY2hhbmdlcyBhcmUgbm9udHJpdmlhbC4KCk5vdywgYmFzZWQgb24gdGhlIGtlcm5lbCBmdXp6aW5nIGd1aWRlbGluZXMgKHNwZWNpZmljYWxseSBTZWN0aW9ucyAxIGFuZCAzKSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byB0YWtlIHNlcmlvdXNseS4gVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhcjogYW55IGxvZ2ljIG1vZGlmaWNhdGlvbiBpbiBjb3JlIHN1YnN5c3RlbXMsIGV2ZW4gcmVmYWN0b3JpbmdzLCBhcmUgc3VzcGVjdC4gVGhlIGdvYWwgaXMgdG8gY2F0Y2ggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGV2ZW4gbGF0ZW50IGJ1Z3MuIEFuZCwgdGhleSBzcGVjaWZpY2FsbHkgd2FybiBhZ2FpbnN0IGJsaW5kbHkgdHJ1c3RpbmcgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IGNsYWltcywgZXNwZWNpYWxseSB3aGVuIGNvcmUgc3Vic3lzdGVtcyBhcmUgaW52b2x2ZWQuIENvZGUgcmVmYWN0b3JpbmdzIGFyZSBtZW50aW9uZWQgZXhwbGljaXRseSBhcyBhIHJlYXNvbiB0byBmdXp6IQoKVGhlcmVmb3JlLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBNVVNUIGJlIHNldCB0byBgdHJ1ZWAgaGVyZS4gVGhpcyBpcyBub24tbmVnb3RpYWJsZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSByZXF1aXJlZCBpdGVtcyBmb3IgdGhlIGZ1enppbmcuIFdlIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYCwgYEVuYWJsZUNvbmZpZ3NgLCBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlc2Ugc2VsZWN0aW9ucy4KClRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQuIFRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uIGl0c2VsZiwgd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AsIGlzIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBtZSB0aGluazogY2FuIHN0YXRpYyBmdW5jdGlvbnMgaW4gYSBgLmNgIGZpbGUgYmUgZGlyZWN0bHkgdGFyZ2V0ZWQ/CgpJJiMzOTtsbCBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIGFnYWluLiBBY2NvcmRpbmcgdG8gU2VjdGlvbiA0LCBzdGF0aWMgaW5saW5lcyBpbiBoZWFkZXJzIGFyZSB0aGUgcHJvYmxlbSwgYnV0IGEgYHN0YXRpY2AgZnVuY3Rpb24gaW4gYSBgLmNgIGZpbGUgKnNob3VsZCogaGF2ZSBhIHN5bWJvbCBhZGRyZXNzIHRoYXQgd2UgY2FuIHRhcmdldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSwgdGhvdWdoLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNvbXBpbGVyIGhhc24mIzM5O3QgaW5saW5lZCB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbi4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBwcmV2X2JhZGJsb2Nrc2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgY2FsbGVyIG9mIGBwcmV2X2JhZGJsb2Nrc2AgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJldl9iYWRibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYy0zMjQtICogSW5zaWRlIGJhZGJsb2Nrc19zZXQoKSBlYWNoIGxvb3Agc3RhcnRzIGJ5IGp1bXBpbmcgdG8gcmVfaW5zZXJ0IGxhYmVsLCBldmVyeVxuYmxvY2svYmFkYmxvY2tzLmM6MzI1OiAqIHRpbWUgZm9yIHRoZSBuZXcgbG9vcCBwcmV2X2JhZGJsb2NrcygpIGlzIGNhbGxlZCB0byBmaW5kIGFuIGFscmVhZHkgc2V0IHJhbmdlXG5ibG9jay9iYWRibG9ja3MuYy0zMjYtICogd2hpY2ggc3RhcnRzIGJlZm9yZSBvciBhdCBjdXJyZW50IHNldHRpbmcgcmFuZ2UuIFNpbmNlIHRoZSBzZXR0aW5nIGJhZCBibG9ja3NcbmJsb2NrL2JhZGJsb2Nrcy5jLTMyNy0gKiByYW5nZSBpcyBoYW5kbGVkIGZyb20gaGVhZCB0byB0YWlsLCBtb3N0IG9mIHRoZSBjYXNlcyBpdCBpcyB1bm5lY2Vzc2FyeSB0byBkb1xuYmxvY2svYmFkYmxvY2tzLmM6MzI4OiAqIHRoZSBiaW5hcnkgc2VhcmNoIGluc2lkZSBwcmV2X2JhZGJsb2NrcygpLCBpdCBpcyBwb3NzaWJsZSB0byBwcm92aWRlIGEgaGludFxuYmxvY2svYmFkYmxvY2tzLmM6MzI5OiAqIHRvIHByZXZfYmFkYmxvY2tzKCkgZm9yIGEgZmFzdCBwYXRoLCB0aGVuIHRoZSBleHBlbnNpdmUgYmluYXJ5IHNlYXJjaCBjYW4gYmVcbmJsb2NrL2JhZGJsb2Nrcy5jOjMzMDogKiBhdm9pZGVkLiBJbiBteSB0ZXN0IHdpdGggdGhlIGhpbnQgdG8gcHJldl9iYWRibG9ja3MoKSwgZXhjZXB0IGZvciB0aGUgZmlyc3RcbmJsb2NrL2JhZGJsb2Nrcy5jOjMzMTogKiBsb29wLCBhbGwgcmVzdGVkIGNhbGxzIHRvIHByZXZfYmFkYmxvY2tzKCkgY2FuIGdvIGludG8gdGhlIGZhc3QgcGF0aCBhbmRcbmJsb2NrL2JhZGJsb2Nrcy5jLTMzMi0gKiByZXR1cm4gY29ycmVjdCBiYWQgYmxvY2tzIHRhYmxlIGluZGV4IGltbWVkaWF0ZWx5LlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTQ1Nz1zdGF0aWMgaW50IHByZXZfYnlfaGludChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IGhpbnQpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNDgwLSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6NDgxOnN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuYmxvY2svYmFkYmxvY2tzLmMtNDgyLVx0XHRcdCAgaW50IGhpbnQpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9ODM4PXN0YXRpYyBib29sIF9iYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTg4My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjg4NDpcdHByZXYgPSBwcmV2X2JhZGJsb2NrcyhiYiwgXHUwMDI2YmFkLCBoaW50KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTg4NS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDQ4PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTA5My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEwOTQ6XHRwcmV2ID0gcHJldl9iYWRibG9ja3MoYmIsIFx1MDAyNmJhZCwgaGludCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMDk1LVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTExODU9c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDMtXG5ibG9jay9iYWRibG9ja3MuYzoxMjA0Olx0cHJldiA9IHByZXZfYmFkYmxvY2tzKGJiLCBcdTAwMjZiYWQsIGhpbnQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTIwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgcHJldl9iYWRibG9ja3NgIGlzIHVzZWQsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkgc2VlIHRoYXQgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGJhZCBibG9jayBoYW5kbGluZywgYmVpbmcgY2FsbGVkIGJ5IGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBfYmFkYmxvY2tzX2NoZWNrYC4gVGhlc2UgYXJlIGFsbCBpbnRlcm5hbCwgYnV0IHRob3NlIGFyZSB0aGVuIGNhbGxlZCBieSB0aGUgcHVibGljLWZhY2luZyBBUElzOiBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYW5kIGBiYWRibG9ja3Nfc3RvcmVgLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIGNvbmZpcm1pbmcgaWYgYHByZXZfYmFkYmxvY2tzYCBpcyBzdGF0aWMgYW5kIG5vbi1pbmxpbmUuIFRoZSBjb2RlIGNvbmZpcm1zIHRoYXQgaXQgaXMsIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3MoLi4uKWAgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gQW5kIHllYWgsIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIHRocmVlIGRpc3RpbmN0IGludGVybmFsIGZ1bmN0aW9ucywgd2hpY2ggYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgdGhvc2UgZXh0ZXJuYWwgYGJhZGJsb2Nrc18qYCBBUElzLgoKUHV0dGluZyBgcHJldl9iYWRibG9ja3NgIGludG8gdGhlIEZvY3VzU3ltYm9scyBzZWVtcyBsaWtlIHRoZSBzbWFydCBwbGF5LiBJdCYjMzk7cyB0aGUgZnVuY3Rpb24gYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGludG8gdGhpcyBmdW5jdGlvbmFsaXR5LCBtYWtpbmcgdGhlbSB0aGUgbW9zdCByZWxldmFudC4gSSBkb24mIzM5O3Qgd2FudCB0byBicmluZyBpbiB1bm5lY2Vzc2FyeSBzdHVmZi4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCBgYmFkYmxvY2tzLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBpcyBvbmx5IGVuYWJsZWQgd2l0aCBgQkxPQ0tgIG9yIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXIuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgYmxvY2svTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgZmlyc3QgZmV3IGxpbmVzIGFyZSBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGJsb2NrIGxheWVyXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdENPTlRFWFRfQU5BTFlTSVMgOj0geVxuICAgNzpcdFxuICAgODpcdG9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG4gICA5Olx0XHRcdFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxuICAxMDpcdFx0XHRcdGJsay1tZXJnZS5vIGJsay10aW1lb3V0Lm8gYmxrLWxpYi5vIGJsay1tcS5vIFxcXG4gIDExOlx0XHRcdFx0YmxrLW1xLXRhZy5vIGJsay1tcS1kbWEubyBibGstc3RhdC5vIFxcXG4gIDEyOlx0XHRcdFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcbiAgMTM6XHRcdFx0XHRnZW5oZC5vIGlvcHJpby5vIGJhZGJsb2Nrcy5vIHBhcnRpdGlvbnMvIGJsay1ycS1xb3MubyBcXFxuICAxNDpcdFx0XHRcdGRpc2stZXZlbnRzLm8gYmxrLWlhLXJhbmdlcy5vIGVhcmx5LWxvb2t1cC5vXG4gIDE1Olx0XG4gIDE2Olx0b2JqLSQoQ09ORklHX0JMS19FUlJPUl9JTkpFQ1RJT04pICYjNDM7PSBlcnJvci1pbmplY3Rpb24ub1xuICAxNzpcdG9iai0kKENPTkZJR19CTEtfREVWX0JTR19DT01NT04pICYjNDM7PSBic2cub1xuICAxODpcdG9iai0kKENPTkZJR19CTEtfREVWX0JTR0xJQilcdCYjNDM7PSBic2ctbGliLm9cbiAgMTk6XHRvYmotJChDT05GSUdfQkxLX0NHUk9VUClcdCYjNDM7PSBibGstY2dyb3VwLm9cbiAgMjA6XHRvYmotJChDT05GSUdfQkxLX0NHUk9VUF9SV1NUQVQpXHQmIzQzOz0gYmxrLWNncm91cC1yd3N0YXQub1xuICAyMTpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0ZDX0FQUElEKSAmIzQzOz0gYmxrLWNncm91cC1mYy1hcHBpZC5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX0JMS19ERVZfVEhST1RUTElORylcdCYjNDM7PSBibGstdGhyb3R0bGUub1xuICAyMzpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1kpXHQmIzQzOz0gYmxrLWlvbGF0ZW5jeS5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVx0JiM0Mzs9IGJsay1pb2Nvc3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg1NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgYmFkYmxvY2tzLm9gIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gYGJhZGJsb2Nrcy5vYCBpcyBkZWZpbml0ZWx5IGx1cmtpbmcgaW4gYG9iai15YCB3aXRoaW4gYGJsb2NrL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgY2x1ZS4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBgYmxvY2svYCBkaXJlY3RvcnkgaXRzZWxmIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfQkxPQ0tgIGlzIGVuYWJsZWQuIE15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2Ugb2YgdGhhdCBgQ09ORklHX0JMT0NLYCBkZXBlbmRlbmN5LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByb290IGBNYWtlZmlsZWAgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gdHJhY2UgaG93IHRoZSBibG9jayBsYXllciBpcyBicm91Z2h0IGluLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQkxPQ0tgIHJlcHJlc2VudHMgdGhlIGJsb2NrIGxheWVyIG9wdGlvbiBpdHNlbGYg4oCTIGdvb2QsIHRoYXQgc2F2ZXMgYSBsb29rdXAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGRvd25zdHJlYW0gZGVwZW5kZW5jaWVzLiBJcyBgYmFkYmxvY2tzYCBiZWluZyBwdWxsZWQgaW4gdGhyb3VnaCBhIHNwZWNpZmljIGRldmljZSBkcml2ZXIgb3IgYSBmZWF0dXJlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXI/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzLCBsaWtlIFJBSUQgZnVuY3Rpb25hbGl0eSAoTUQpIG9yIHRoZSBudWxsIGJsb2NrIGRyaXZlciAoTlVMTF9CTEspLCB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIGluY2x1c2lvbiBvZiBgYmFkYmxvY2tzYD8gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGVpciByZXNwZWN0aXZlIGBLY29uZmlnYCBmaWxlcywgZXNwZWNpYWxseSBgZHJpdmVycy9tZC9LY29uZmlnYCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbnVsbF9ibGsvYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBjb25uZWN0aW9ucywgaWYgdGhlcmUgYXJlIGFueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdD0xNTA9YXZhaWxhYmxlIGZvciB0aGUgZW5kcG9pbnQgaGFyZHdhcmUgdXNlZC5cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTE1MS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE1MjpUbyBmYWNpbGl0YXRlIHRlc3RpbmcsIGVuYWJsaW5nIHRoZSBudWxsLWJsayBkcml2ZXIgKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTUzLWlzIGFsc28gcmVjb21tZW5kZWQuIFdpdGggdGhpcywgYSBzaW1wbGUgc2V0dXAgdXNpbmcgYSBudWxsX2JsayBibG9jayBkZXZpY2Vcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9NDUzPUNPTkZJR19CTEtfREVWX05WTUU9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjQ1NDpDT05GSUdfQkxLX0RFVl9OVUxMX0JMSz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctNDU1LUNPTkZJR19FTkNMT1NVUkVfU0VSVklDRVM9bVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz00NDM9Q09ORklHX0JMS19ERVZfTlZNRT1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6NDQ0OkNPTkZJR19CTEtfREVWX05VTExfQkxLPW1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy00NDUtQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUz1tXG4tLVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfQkxLX0RFVl9STkJEKVx0JiM0Mzs9IHJuYmQvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcdCYjNDM7PSBudWxsX2Jsay9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSAmIzQzOz0gcm51bGwvXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTUtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6Njpjb25maWcgQkxLX0RFVl9OVUxMX0JMS1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTktXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6MTA6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctMTEtXHRib29sIFwmIzM0O1N1cHBvcnQgZmF1bHQgaW5qZWN0aW9uIGZvciBOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6MTI6XHRkZXBlbmRzIG9uIEJMS19ERVZfTlVMTF9CTEsgXHUwMDI2XHUwMDI2IEZBVUxUX0lOSkVDVElPTl9DT05GSUdGU1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU9ND1jY2ZsYWdzLXlcdFx0XHQmIzQzOz0gLUkkKHNyYylcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGUtNS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcdCYjNDM7PSBudWxsX2Jsay5vXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTctbnVsbF9ibGstb2Jqc1x0XHRcdDo9IG1haW4ub1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIxLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjI6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjMtc3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihudWxsX3RpbWVvdXRfYXR0cik7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9OTg9TU9EVUxFX1BBUk1fREVTQyhob21lX25vZGUsIFwmIzM0O0hvbWUgbm9kZSBmb3IgdGhlIGRldmljZVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy05OS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEwMDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMDEtLypcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz02NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG51bGxiX2RldmljZV90eXBlID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY2NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjY2NTojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NjYtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9Nzg2PXN0YXRpYyBzdHJ1Y3QgbnVsbGJfZGV2aWNlICpudWxsX2FsbG9jX2Rldih2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTc5My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjc5NDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03OTUtXHRkZXYtXHUwMDNldGltZW91dF9jb25maWcuYXR0ciA9IG51bGxfdGltZW91dF9hdHRyO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE0OTI9c3RhdGljIHZvaWQgbnVsbGJfc2V0dXBfYnd0aW1lcihzdHJ1Y3QgbnVsbGIgKm51bGxiKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE1MDAtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNTAxOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE1MDItXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTg5ND1zdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTkzNi1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5Mzc6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTkzOC1zdGF0aWMgYm9vbCBfX251bGxfc2V0dXBfZmF1bHQoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIGNoYXIgKnN0cilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xOTUxPXN0YXRpYyBib29sIG51bGxfc2V0dXBfZmF1bHQodm9pZClcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NTIte1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk1MzojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTU0LVx0aWYgKCFfX251bGxfc2V0dXBfZmF1bHQoXHUwMDI2bnVsbF90aW1lb3V0X2F0dHIsIGdfdGltZW91dF9zdHIpKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD01Mz1zdHJ1Y3QgbnVsbGJfZGV2aWNlIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtNTUtXHRzdHJ1Y3QgY29uZmlnX2dyb3VwIGdyb3VwO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjU2OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC01Ny1cdHN0cnVjdCBmYXVsdF9jb25maWcgdGltZW91dF9jb25maWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODIwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlIG9mIEJhZCBCbG9jayBIYW5kbGluZyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGJhZCBibG9jayBoYW5kbGluZyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb2J2aW91cyBzdXNwZWN0czogYENPTkZJR19NRGAgYW5kIGBDT05GSUdfQkxLX0RFVl9NRGAuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIGBDT05GSUdfQkxPQ0tgIGp1c3QgdG8gYmUgdGhvcm91Z2guIFRoYXQgc2hvdWxkIGNvdmVyIHRoZSBjb3JlIGJsb2NrIGRldmljZSBsYXllci4KCk5vdywgSSB3YW50IHRvIHNwZWNpZmljYWxseSBpZGVudGlmeSAqaG93KiBgYmxvY2svYmFkYmxvY2tzLmNgIGlzIGNvbXBpbGVkLiBCYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19CTE9DS2AuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBkcml2ZXJzIGFjdHVhbGx5IGV4cG9zZSBiYWQgYmxvY2sgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYENPTkZJR19CTEtfREVWX01EYCB0aGVyZSwgYXMgd2VsbCBhcyBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGxpa2VseS4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIE1EIGNvbXBvbmVudCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZHJpdmVycy9tZC9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX01EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9MTM9aWYgTURcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxuZHJpdmVycy9tZC9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBSQUlEIERyaXZlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFJBSUQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgbW92ZSB3aWxsIGJlIHRvIHVzZSBgcmVhZC1maWxlYCB0byBncmFiIGxpbmVzIDEgdGhyb3VnaCAyMCBvZiBgZHJpdmVycy9tZC9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBiYXNpYyBkZWZpbml0aW9ucyBhbmQgdG9wLWxldmVsIG9wdGlvbnMgd2l0aGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJJiMzOTttIHByaW1hcmlseSBsb29raW5nIGZvciB0aGUgY29yZSBtb2R1bGUgZW5hYmxlcywgYW55IGltbWVkaWF0ZWx5IG9idmlvdXMgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZSBSQUlEIHN5c3RlbSBpcyBhcmNoaXRlY3RlZCBpbiB0ZXJtcyBvZiBjb25maWd1cmFibGUgY29tcG9uZW50cy4gQmFzZWQgb24gdGhpcyBxdWljayBzY2FuLCBJIGNhbiBiZWdpbiB0byBncmFzcCB3aGV0aGVyIGFueSBpbW1lZGlhdGUgY2hhbmdlcyBJIG1heSBiZSBjb250ZW1wbGF0aW5nIGFyZSBhbHJlYWR5IGF2YWlsYWJsZSBpbiB0aGUgY29uZmlnLCBhbmQgaG93IHRvIGVuYWJsZSB0aGVtLiBJIG1heSB0aGVuIGdvIGRlZXBlciBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gSSBmaW5kLCBzdWNoIGFzIGxvb2tpbmcgYXQgYW55IGluY2x1ZGVzIG9yIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBNRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtNdWx0aXBsZSBkZXZpY2VzIGRyaXZlciBzdXBwb3J0IChSQUlEIGFuZCBMVk0pXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFN1cHBvcnQgbXVsdGlwbGUgcGh5c2ljYWwgc3BpbmRsZXMgdGhyb3VnaCBhIHNpbmdsZSBsb2dpY2FsIGRldmljZS5cbiAgMTE6XHRcdCAgUmVxdWlyZWQgZm9yIFJBSUQgYW5kIGxvZ2ljYWwgdm9sdW1lIG1hbmFnZW1lbnQuXG4gIDEyOlx0XG4gIDEzOlx0aWYgTURcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgQkxLX0RFVl9NRFxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7UkFJRCBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQgaWYgU1lTRlNcbiAgMTg6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAxOTpcdFx0IyBCTE9DS19MRUdBQ1lfQVVUT0xPQUQgcmVxdWlyZW1lbnQgc2hvdWxkIGJlIHJlbW92ZWRcbiAgMjA6XHRcdCMgYWZ0ZXIgcmVsZXZhbnQgbWRhZG0gZW5oYW5jZW1lbnRzIC0gdG8gbWFrZSBcJiMzNDtuYW1lcz15ZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MzkKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogNTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBibG9jay9iYWRibG9ja3MuY2AgUGF0Y2gqKgoKT2theSwgc28gdGhlIHByaW1hcnkgZGVwZW5kZW5jeSBmb3IgYGJsb2NrL2JhZGJsb2Nrcy5jYCBpcywgbmF0dXJhbGx5LCBgQ09ORklHX0JMT0NLYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQ7IHllcCwgYEJMT0NLPXlgLCBnb29kLiBOb3csIHRoaXMgYGJhZGJsb2Nrc2AgZnVuY3Rpb25hbGl0eSBzZWVtcyB0byBiZSBleHBvc2VkIHRocm91Z2ggZWl0aGVyIGBDT05GSUdfQkxLX0RFVl9NRGAgb3IgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCwgb3IgZXZlbiBqdXN0IGBDT05GSUdfTURgLiBMZXQmIzM5O3MgY29uZmlybSB0aG9zZSBhcmUgZW5hYmxlZCBhbmQgY29uc2lkZXJlZC4KCkkmIzM5O3ZlIHNjb3BlZCBvdXQgdGhlIGtleSBzeW1ib2xzOiBgcHJldl9iYWRibG9ja3NgLCBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYW5kIGBiYWRibG9ja3Nfc3RvcmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZS4gTG9va2luZyBpbnRvIGl0LCBpdCBhcHBlYXJzIGBwcmV2X2JhZGJsb2Nrc2AgaXMgKm9ubHkqIHVzZWQgd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AsIGNhbGxlZCBkdXJpbmcgc2V0LCBjbGVhciwgb3IgY2hlY2sgb3BlcmF0aW9ucy4gVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgcmVzdCBvZiB0aGUgaWRlbnRpZmllZCBzeW1ib2xzOiB0aGV5IGFyZSBsb2NhbGl6ZWQgYW5kIGRvbiYjMzk7dCBzZWVtIHRvIGJlIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdCBwYXRocy4KClNvLCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSByZWFzb25pbmcuIEZpcnN0LCB3aGF0IGRpZCB0aGUgcGF0Y2ggKmFjdHVhbGx5KiBjaGFuZ2U/IEl0IGFsdGVycyB0aGUgYHByZXZfYmFkYmxvY2tzKClgIGZ1bmN0aW9uIGluIGBibG9jay9iYWRibG9ja3MuY2AuIEl0JiMzOTtzIGEgYmluYXJ5IHNlYXJjaCwgc3BlY2lmaWNhbGx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVwcGVyIGJvdW5kIGluaXRpYWxpemF0aW9uIGFuZCBjb21wYXJpc29uIGR1cmluZyB0aGUgYmluYXJ5IHNlYXJjaCwgYW5kIGl0IGNsZWFucyB1cCBhIGNvbmRpdGlvbmFsIGNoZWNrLgoKU2Vjb25kLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBgYmFkYmxvY2tzYCBpcyBhIGNlbnRyYWwgYmxvY2sgbGF5ZXIgY29tcG9uZW50IHVzZWQgYnkgc2V2ZXJhbCBibG9jayBkZXZpY2UgZHJpdmVycy4gSSBjYW4gYWNjZXNzIGl0IGZyb20gdXNlciBzcGFjZSB2aWEgYHN5c2ZzYCwgYW5kIGl0IGlzIHVzZWQgZHVyaW5nIEkvTyBjaGVjayBvcGVyYXRpb25zLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZXhlcmNpc2VkLgoKVGhpcmQsIGlzIHRoaXMgd29ydGggZnV6emluZz8gRGVmaW5pdGVseS4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSByZWZhY3RvcmluZyBzb21lIGNyaXRpY2FsIGxvZ2ljIHJlZ2FyZGluZyB0aGUgYmluYXJ5IHNlYXJjaCYjMzk7cyBpbmRleGluZywgYm91bmRzLCBhbmQgcmV0dXJuIGNvbmRpdGlvbnMuIENoYW5naW5nIGxvZ2ljIGxpa2UgdGhpcyBpbiBhIGNvcmUgc3Vic3lzdGVtIGNvdWxkIGNlcnRhaW5seSBhZmZlY3QgY29ycmVjdG5lc3MsIGVzcGVjaWFsbHkgaW4gYm91bmRhcnkgY29uZGl0aW9ucyBsaWtlIGVtcHR5IHRhYmxlcywgZnVsbCB0YWJsZXMsIGFuZCBlZGdlIG9mZnNldHMuIFRoaXMgaXMgd29ydGggc3BlbmRpbmcgc29tZSBjeWNsZXMgb24uCgpUaGUgYXNzZXNzbWVudCBpcyBjbGVhci4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXZfYmFkYmxvY2tzJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3Nfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cdTAwM2Vjb3VudCAtIDEgaW5zdGVhZCBvZiBiYi1cdTAwM2Vjb3VudCksIHRoZSB1cHBlci1ib3VuZCBjaGVjayBjb25kaXRpb24sIGFuZCB0aGUgZmFsbGJhY2sgcmV0dXJuIGFzc2lnbm1lbnQgKHJldCA9IGxvIHVuY29uZGl0aW9uYWxseSkuIEJhZCBibG9ja3MgaGFuZGxpbmcgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGV4ZXJjaXNhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBibG9jayBkcml2ZXJzIHN1Y2ggYXMgTUQvUkFJRCAoZHJpdmVycy9tZCkgYW5kIG51bGxfYmxrIChkcml2ZXJzL2Jsb2NrL251bGxfYmxrKSwgYXMgd2VsbCBhcyB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgKGJhZGJsb2Nrc19zdG9yZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmllZCBzZWFyY2ggYm91bmRhcmllcyBhbmQgaW5kZXggaGFuZGxpbmcgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBvZmYtYnktb25lIGVycm9ycyBvbiBlZGdlIGNhc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX01EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmV2X2JhZGJsb2NrcyYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jbGVhciYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2hlY2smIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiaW5hcnkgc2VhcmNoIGxvZ2ljIGluIHByZXZfYmFkYmxvY2tzKCkgd2l0aGluIGJsb2NrL2JhZGJsb2Nrcy5jLCBjaGFuZ2luZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhpZ2ggYm91bmRhcnkgKGhpID0gYmItXHUwMDNlY291bnQgLSAxIGluc3RlYWQgb2YgYmItXHUwMDNlY291bnQpLCB0aGUgdXBwZXItYm91bmQgY2hlY2sgY29uZGl0aW9uLCBhbmQgdGhlIGZhbGxiYWNrIHJldHVybiBhc3NpZ25tZW50IChyZXQgPSBsbyB1bmNvbmRpdGlvbmFsbHkpLiBCYWQgYmxvY2tzIGhhbmRsaW5nIGlzIHBhcnQgb2YgdGhlIGNvcmUgYmxvY2sgc3Vic3lzdGVtIGFuZCBpcyBleGVyY2lzYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgYmxvY2sgZHJpdmVycyBzdWNoIGFzIE1EL1JBSUQgKGRyaXZlcnMvbWQpIGFuZCBudWxsX2JsayAoZHJpdmVycy9ibG9jay9udWxsX2JsayksIGFzIHdlbGwgYXMgdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VzIChiYWRibG9ja3Nfc3RvcmUpLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbW9kaWZpZWQgc2VhcmNoIGJvdW5kYXJpZXMgYW5kIGluZGV4IGhhbmRsaW5nIGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3Igb2ZmLWJ5LW9uZSBlcnJvcnMgb24gZWRnZSBjYXNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiaW5hcnkgc2VhcmNoIGJvdW5kYXJ5IGluaXRpYWxpemF0aW9uIGluIGBwcmV2X2JhZGJsb2NrcygpYCB3aXRoaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgaGkgPSBiYi1cdTAwM2Vjb3VudCAtIDFgIGluc3RlYWQgb2YgYGhpID0gYmItXHUwMDNlY291bnRgLCBhZGp1c3RzIHRoZSB1cHBlci1ib3VuZCBjaGVjayBhY2NvcmRpbmdseSwgYW5kIHNpbXBsaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBhc3NpZ25tZW50LlxuXG5UaGUgYmFkYmxvY2sgYnVmZmVyIChgYmItXHUwMDNlcGFnZWApIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgLyBgZGV2bV9remFsbG9jKClgIGFuZCBlbnRyaWVzIHdpdGhpbiBgWzAsIGJiLVx1MDAzZWNvdW50IC0gMV1gIGFyZSBmdWxseSBpbml0aWFsaXplZCBiYWQgYmxvY2sgZW50cmllcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGluZGV4IGNhbGN1bGF0aW9ucyBhbmQgYm91bmRzIGluIGFuIGludGVybmFsIGJpbmFyeSBzZWFyY2ggcm91dGluZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQsIG5vciBpcyBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGV4cG9zZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGh5cG90aGV0aWNhbCBpbmRleGluZyBkZWZlY3QgaGVyZSB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBieSBLQVNBTiwgbm90IEtNU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTk2MmQwMjE2NjVjYWMxZGNkMmQ0YTQyODcxNGQ0OGQyMTg0YTJkOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDE4OjQwOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuYwppbmRleCBlY2U2NGU3NmZlOGZmLi4xNDNiNDg4YjdmZTY4IDEwMDY0NAotLS0gYS9ibG9jay9iYWRibG9ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iYWRibG9ja3MuYwpAQCAtNDk2LDE0ICYjNDM7NDk2LDE0IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLAogCX0KIAogCWxvID0gMDsKLQloaSA9IGJiLSZndDtjb3VudDsKJiM0MzsJaGkgPSBiYi0mZ3Q7Y291bnQgLSAxOwogCXAgPSBiYi0mZ3Q7cGFnZTsKIAogCS8qIFRoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeSAqLwogCWlmIChCQl9PRkZTRVQocFtsb10pICZndDsgcykKIAkJcmV0dXJuIC0xOwotCWlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSAmbHQ7PSBzKQotCQlyZXR1cm4gaGkgLSAxOwomIzQzOwlpZiAoQkJfT0ZGU0VUKHBbaGldKSAmbHQ7PSBzKQomIzQzOwkJcmV0dXJuIGhpOwogCiAJLyogRG8gYmlzZWN0IHNlYXJjaCBpbiBiYWQgdGFibGUgKi8KIAl3aGlsZSAoaGkgLSBsbyAmZ3Q7IDEpIHsKQEAgLTUyMSw4ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsCiAJCQloaSA9IG1pZDsKIAl9CiAKLQlpZiAoQkJfT0ZGU0VUKHBbbG9dKSAmbHQ7PSBzKQotCQlyZXQgPSBsbzsKJiM0MzsJcmV0ID0gbG87CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9iYWRibG9ja3MuY2AgdGhhdCBuZWVkcyBsb29raW5nIGF0IGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVmZW5zaXZlIGNvZGUgcmV2aWV3L3NvZnR3YXJlIHRlc3Rpbmcvc2FuaXRpemVyIGFuYWx5c2lzIHR5cGUgb2YgdGFzayDigJMgbm90aGluZyB0aGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtjcml0aWNhbCB2dWxuZXJhYmlsaXR5LiYjMzQ7IEkgY2FuIGNsYXNzaWZ5IHRoaXMgYXMgYSBmYWlybHkgYmVuaWduIHJlcXVlc3QuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGUgZGlmZiBmb2N1c2VzIG9uIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBiaXNlY3Qgc2VhcmNoIGxvZ2ljIHdpdGhpbiBpdC4gVGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSB1cHBlciBib3VuZHMgb2YgdGhlIHNlYXJjaCBzcGFjZSB3aXRoIGFkanVzdGluZyB0aGUgYGhpYCBhbmQgc3Vic2VxdWVudCBjb25kaXRpb25hbHMuIExpbmUgNDk2IGluIGBibG9jay9iYWRibG9ja3MuY2AgaXMgdGhlIGtleSBsb2NhdGlvbiwgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBvZmYtYnktb25lIG9yIGFuIGVkZ2UgY2FzZSBmaXggcmVsYXRlZCB0byBob3cgdGhlIHNlYXJjaCBib3VuZHMgYXJlIGhhbmRsZWQgd2l0aGluIGEgc29ydGVkIGJhZCBibG9jayBsaXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgb2YgdGhlIGBwcmV2X2JhZGJsb2Nrc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGF0IGBiYi0mZ3Q7Y291bnRgLCBgQkJfT0ZGU0VUYCwgYGxvYCwgYGhpYCwgYW5kIHRoZSBgcGAgYXJyYXkgcmVwcmVzZW50LiBUaGUgYmlzZWN0IHNlYXJjaCBpcyB1c2VkIHRvIGVmZmljaWVudGx5IGZpbmQgdGhlIGNsb3Nlc3QgYmFkIGJsb2NrIHRvIGEgZ2l2ZW4gc2VjdG9yIGBzYC4gVGhpcyBjb3VsZCBiZSBzZW5zaXRpdmUgdG8gYm91bmRhcnkgY29uZGl0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZml4IGlzIGNvcnJlY3QsIGFuZCB0aGF0IGV4aXN0aW5nIEtNU0FOIGZ1enplcnMgZG9uJiMzOTt0IGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoLiBBZnRlciB0aGlzLCBhIGRlZXBlciBkaXZlIGludG8gZXhpc3RpbmcgZnV6emVycyB3aWxsIGJlIG5lZWRlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNvZGUtcGF0aCBpcyBwcm9wZXJseSB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmFkYmxvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFx0fVxuIDQ3MTpcdFxuIDQ3MjpcdFx0cmV0dXJuIHJldDtcbiA0NzM6XHR9XG4gNDc0Olx0XG4gNDc1Olx0LypcbiA0NzY6XHQgKiBGaW5kIHRoZSByYW5nZSBzdGFydHMgYXQtb3ItYmVmb3JlIGJhZC1cdTAwM2VzdGFydC4gSWYgJiMzOTtoaW50JiMzOTsgaXMgcHJvdmlkZWRcbiA0Nzc6XHQgKiAoaGludCBcdTAwM2U9IDApIHRoZW4gc2VhcmNoIGluIHRoZSBiYWQgdGFibGUgZnJvbSBoaW50IGZpcnN0bHkuIEl0IGlzXG4gNDc4Olx0ICogdmVyeSBwcm9iYWJseSB0aGUgd2FudGVkIGJhZCByYW5nZSBjYW4gYmUgZm91bmQgZnJvbSB0aGUgaGludCBpbmRleCxcbiA0Nzk6XHQgKiB0aGVuIHRoZSB1bm5lY2Vzc2FyeSB3aGlsZS1sb29wIGl0ZXJhdGlvbiBjYW4gYmUgYXZvaWRlZC5cbiA0ODA6XHQgKi9cbiA0ODE6XHRzdGF0aWMgaW50IHByZXZfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCxcbiA0ODI6XHRcdFx0XHQgIGludCBoaW50KVxuIDQ4MzpcdHtcbiA0ODQ6XHRcdHNlY3Rvcl90IHMgPSBiYWQtXHUwMDNlc3RhcnQ7XG4gNDg1Olx0XHRpbnQgcmV0ID0gLTE7XG4gNDg2Olx0XHRpbnQgbG8sIGhpO1xuIDQ4NzpcdFx0dTY0ICpwO1xuIDQ4ODpcdFxuIDQ4OTpcdFx0aWYgKCFiYi1cdTAwM2Vjb3VudClcbiA0OTA6XHRcdFx0Z290byBvdXQ7XG4gNDkxOlx0XG4gNDkyOlx0XHRpZiAoaGludCBcdTAwM2U9IDApIHtcbiA0OTM6XHRcdFx0cmV0ID0gcHJldl9ieV9oaW50KGJiLCBzLCBoaW50KTtcbiA0OTQ6XHRcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4gNDk1Olx0XHRcdFx0Z290byBvdXQ7XG4gNDk2Olx0XHR9XG4gNDk3Olx0XG4gNDk4Olx0XHRsbyA9IDA7XG4gNDk5Olx0XHRoaSA9IGJiLVx1MDAzZWNvdW50IC0gMTtcbiA1MDA6XHRcdHAgPSBiYi1cdTAwM2VwYWdlO1xuIDUwMTpcdFxuIDUwMjpcdFx0LyogVGhlIGZvbGxvd2luZyBiaXNlY3Qgc2VhcmNoIG1pZ2h0IGJlIHVubmVjZXNzYXJ5ICovXG4gNTAzOlx0XHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcdTAwM2UgcylcbiA1MDQ6XHRcdFx0cmV0dXJuIC0xO1xuIDUwNTpcdFx0aWYgKEJCX09GRlNFVChwW2hpXSkgXHUwMDNjPSBzKVxuIDUwNjpcdFx0XHRyZXR1cm4gaGk7XG4gNTA3Olx0XG4gNTA4Olx0XHQvKiBEbyBiaXNlY3Qgc2VhcmNoIGluIGJhZCB0YWJsZSAqL1xuIDUwOTpcdFx0d2hpbGUgKGhpIC0gbG8gXHUwMDNlIDEpIHtcbiA1MTA6XHRcdFx0aW50IG1pZCA9IChsbyAmIzQzOyBoaSkvMjtcbiA1MTE6XHRcdFx0c2VjdG9yX3QgYSA9IEJCX09GRlNFVChwW21pZF0pO1xuIDUxMjpcdFxuIDUxMzpcdFx0XHRpZiAoYSA9PSBzKSB7XG4gNTE0Olx0XHRcdFx0cmV0ID0gbWlkO1xuIDUxNTpcdFx0XHRcdGdvdG8gb3V0O1xuIDUxNjpcdFx0XHR9XG4gNTE3Olx0XG4gNTE4Olx0XHRcdGlmIChhIFx1MDAzYyBzKVxuIDUxOTpcdFx0XHRcdGxvID0gbWlkO1xuIDUyMDpcdFx0XHRlbHNlXG4gNTIxOlx0XHRcdFx0aGkgPSBtaWQ7XG4gNTIyOlx0XHR9XG4gNTIzOlx0XG4gNTI0Olx0XHRyZXQgPSBsbztcbiA1MjU6XHRvdXQ6XG4gNTI2Olx0XHRyZXR1cm4gcmV0O1xuIDUyNzpcdH1cbiA1Mjg6XHRcbiA1Mjk6XHQvKlxuIDUzMDpcdCAqIFJldHVybiAmIzM5O3RydWUmIzM5OyBpZiB0aGUgcmFuZ2UgaW5kaWNhdGVkIGJ5ICYjMzk7YmFkJiMzOTsgY2FuIGJlIGZvcndhcmRcbiA1MzE6XHQgKiBtZXJnZWQgd2l0aCB0aGUgYmFkIHJhbmdlIChmcm9tIHRoZSBiYWQgdGFibGUpIGluZGV4ZWQgYnkgJiMzOTtwcmV2JiMzOTsuXG4gNTMyOlx0ICovXG4gNTMzOlx0c3RhdGljIGJvb2wgY2FuX21lcmdlX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbiA1MzQ6XHRcdFx0XHQgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXG4gNTM1Olx0e1xuIDUzNjpcdFx0c2VjdG9yX3QgcyA9IGJhZC1cdTAwM2VzdGFydDtcbiA1Mzc6XHRcdHU2NCAqcCA9IGJiLVx1MDAzZXBhZ2U7XG4gNTM4Olx0XG4gNTM5Olx0XHRpZiAoQkJfQUNLKHBbcHJldl0pID09IGJhZC1cdTAwM2VhY2sgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgcGF0Y2ggZGV0YWlscy4gRmlyc3QsIEkmIzM5O20gZXhhbWluaW5nIHRoZSBjb2RlIHNuaXBwZXQgc3BlY2lmaWNhbGx5IHdpdGhpbiBgcHJldl9iYWRibG9ja3NgLiBJJiMzOTttIHN0YXJ0aW5nIGJ5IHVuZGVyc3RhbmRpbmcgdGhlICpiZWZvcmUqIHN0YXRlIHRvIGVmZmVjdGl2ZWx5IGdyYXNwIHRoZSBjaGFuZ2UmIzM5O3MgaW1wYWN0LgoKUmlnaHQsIHNvIHByZXZpb3VzbHkgYGhpYCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGJiLSZndDtjb3VudGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgbm90aWNpbmcgYSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBpc3N1ZSBoZXJlLiBUaGUgY29kZSBjaGVja3MgYEJCX09GRlNFVChwW2hpIC0gMV0pICZsdDs9IHNgIGluaXRpYWxseS4gVGhlbiwgd2l0aGluIHRoZSBgd2hpbGUgKGhpIC0gbG8gJmd0OyAxKWAgbG9vcCwgYGhpYCByZW1haW5zIGBiYi0mZ3Q7Y291bnRgIHdoaWxlIGBwYCBpcyBhY2Nlc3NlZCB3aXRoIGBoaSAtIDFgLiBJZiBgQkJfT0ZGU0VUKHBbaGkgLSAxXSkgJmd0OyBzYCwgdGhlbiB0aGUgbG9vcCBpcyBlbnRlcmVkIHdpdGggYGhpYCBlcXVhbCB0byBgYmItJmd0O2NvdW50YC4gVGhpcyBtZWFucyB3ZSBhcmUgc2tpcHBpbmcgdGhlIGxhc3QgZWxlbWVudC4KCk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBjb3JyZWN0IHRoaXMuIElmIGBoaWAgYmVjb21lcyBgYmItJmd0O2NvdW50IC0gMWAgd2UgY2FuIHRoZW4gYWRkcmVzcyB0aGUgbGFzdCBlbGVtZW50LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBsb2dpYyB3aXRoaW4gdGhlIGJpc2VjdCBzZWFyY2ggbm93IGFwcGVhcnMgY2xlYW5lci4gIGBsb2Agc3RhcnRzIGF0IDAsIGBoaWAgaXMgaW5pdGlhbGl6ZWQgdG8gYGJiLSZndDtjb3VudCAtIDFgLiAgQW5kLCBpZiBgYSAmbHQ7IHNgLCB0aGVuIGBsb2AgaXMgc2V0IHRvIGBtaWRgLCBvciBgaGlgIGlzIHNldCB0byBgbWlkYCB3aGVuIGl0IGlzIG5vdC4gVGhpcyBtYWtlcyBzZW5zZS4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGBpZmAgc3RhdGVtZW50OiBgaWYgKEJCX09GRlNFVChwW2xvXSkgJmx0Oz0gcykgcmV0ID0gbG87YCBiZWNhdXNlIGBwW2xvXWAgaXMgZ3VhcmFudGVlZCB0byBiZSBgJmx0Oz0gc2AuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY29kZSBzdGFydHMgd2l0aCBhIGNoZWNrIHRvIHJldHVybiBgLTFgIGlmIHRoZSBmaXJzdCBlbGVtZW50IGlzIGdyZWF0ZXIgdGhhbiBgc2AsIGFuZCB0aGVuIGBsb2AgaXMgb25seSB1cGRhdGVkIHdoZW4gYGEgJmx0OyBzYC4gVGhlcmVmb3JlIHRoZSBjaGVjayBpcyByZWR1bmRhbnQuCgpOb3csIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmUgYmVoaW5kIGBiYi0mZ3Q7cGFnZWAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgYmxvY2svYmFkYmxvY2tzLmNgIHRvIHNlZSBob3cgYGJhZGJsb2Nrc2Agd29ya3MgaW4gZGV0YWlsIHRvIGZ1cnRoZXIgY2xhcmlmeSB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmItXHUwMDNlY291bnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz00NTc9c3RhdGljIGludCBwcmV2X2J5X2hpbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIGludCBoaW50KVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTQ2Mi1cbmJsb2NrL2JhZGJsb2Nrcy5jOjQ2MzpcdHdoaWxlICgoaGludCBcdTAwM2MgaGludF9lbmQpIFx1MDAyNlx1MDAyNiAoKGhpbnQgJiM0MzsgMSkgXHUwMDNjPSBiYi1cdTAwM2Vjb3VudCkgXHUwMDI2XHUwMDI2XG5ibG9jay9iYWRibG9ja3MuYy00NjQtXHQgICAgICAgKEJCX09GRlNFVChwW2hpbnRdKSBcdTAwM2M9IHMpKSB7XG5ibG9jay9iYWRibG9ja3MuYzo0NjU6XHRcdGlmICgoaGludCAmIzQzOyAxKSA9PSBiYi1cdTAwM2Vjb3VudCB8fCBCQl9PRkZTRVQocFtoaW50ICYjNDM7IDFdKSBcdTAwM2Ugcykge1xuYmxvY2svYmFkYmxvY2tzLmMtNDY2LVx0XHRcdHJldCA9IGhpbnQ7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9NDgxPXN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTQ4OC1cbmJsb2NrL2JhZGJsb2Nrcy5jOjQ4OTpcdGlmICghYmItXHUwMDNlY291bnQpXG5ibG9jay9iYWRibG9ja3MuYy00OTAtXHRcdGdvdG8gb3V0O1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTQ5OC1cdGxvID0gMDtcbmJsb2NrL2JhZGJsb2Nrcy5jOjQ5OTpcdGhpID0gYmItXHUwMDNlY291bnQgLSAxO1xuYmxvY2svYmFkYmxvY2tzLmMtNTAwLVx0cCA9IGJiLVx1MDAzZXBhZ2U7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9NTUxPXN0YXRpYyBpbnQgZnJvbnRfbWVyZ2Uoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYy01NjMtXHRcdG1lcmdlZCA9IG1pbl90KHNlY3Rvcl90LCBzZWN0b3JzLCBCQl9NQVhfTEVOIC0gQkJfTEVOKHBbcHJldl0pKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjU2NDpcdFx0aWYgKChwcmV2ICYjNDM7IDEpIFx1MDAzYyBiYi1cdTAwM2Vjb3VudCBcdTAwMjZcdTAwMjZcbmJsb2NrL2JhZGJsb2Nrcy5jLTU2NS1cdFx0ICAgIG1lcmdlZCBcdTAwM2UgKEJCX09GRlNFVChwW3ByZXYgJiM0MzsgMV0pIC0gQkJfRU5EKHBbcHJldl0pKSkge1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTU4Nz1zdGF0aWMgYm9vbCBjYW5fY29tYmluZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNjA0LSAqICYjMzk7cHJldiAtIDEmIzM5Oy5cbmJsb2NrL2JhZGJsb2Nrcy5jOjYwNTogKiBUaGUgY2FsbGVyIG9mIGZyb250X2NvbWJpbmUoKSB3aWxsIGRlY3JlYXNlIGJiLVx1MDAzZWNvdW50LCB0aGVyZWZvcmVcbmJsb2NrL2JhZGJsb2Nrcy5jLTYwNi0gKiBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGVhciBwW3BlcnZdIGFmdGVyIGZyb250IG1lcmdlLlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTYwOD1zdGF0aWMgdm9pZCBmcm9udF9jb21iaW5lKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldilcbi0tXG5ibG9jay9iYWRibG9ja3MuYy02MTQtXHRcdFx0ICAgICAgQkJfQUNLKHBbcHJldl0pKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjYxNTpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2MgYmItXHUwMDNlY291bnQpXG5ibG9jay9iYWRibG9ja3MuYzo2MTY6XHRcdG1lbW1vdmUocCAmIzQzOyBwcmV2LCBwICYjNDM7IHByZXYgJiM0MzsgMSwgKGJiLVx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy02MTctfVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTY3Mj1zdGF0aWMgYm9vbCBjYW5fZnJvbnRfb3ZlcndyaXRlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy03MDEtXG5ibG9jay9iYWRibG9ja3MuYzo3MDI6XHRpZiAoKGJiLVx1MDAzZWNvdW50ICYjNDM7ICgqZXh0cmEpKSBcdTAwM2UgTUFYX0JBREJMT0NLUylcbmJsb2NrL2JhZGJsb2Nrcy5jLTcwMy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTcxNT1zdGF0aWMgaW50IGZyb250X292ZXJ3cml0ZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzMxLVx0XHRcdG1lbW1vdmUocCAmIzQzOyBwcmV2ICYjNDM7IDIsIHAgJiM0MzsgcHJldiAmIzQzOyAxLFxuYmxvY2svYmFkYmxvY2tzLmM6NzMyOlx0XHRcdFx0KGJiLVx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy03MzMtXHRcdFx0cFtwcmV2ICYjNDM7IDFdID0gQkJfTUFLRShiYWQtXHUwMDNlc3RhcnQgJiM0MzsgYmFkLVx1MDAzZWxlbixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy03NDUtXHRcdFx0bWVtbW92ZShwICYjNDM7IHByZXYgJiM0MzsgMiwgcCAmIzQzOyBwcmV2ICYjNDM7IDEsXG5ibG9jay9iYWRibG9ja3MuYzo3NDY6XHRcdFx0XHQoYmItXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTc0Ny1cdFx0XHRwW3ByZXYgJiM0MzsgMV0gPSBCQl9NQUtFKGJhZC1cdTAwM2VzdGFydCwgYmFkLVx1MDAzZWxlbiwgYmFkLVx1MDAzZWFjayk7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzU5LVx0XHRtZW1tb3ZlKHAgJiM0MzsgcHJldiAmIzQzOyAzLCBwICYjNDM7IHByZXYgJiM0MzsgMSxcbmJsb2NrL2JhZGJsb2Nrcy5jOjc2MDpcdFx0XHQoYmItXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTc2MS1cdFx0cFtwcmV2ICYjNDM7IDFdID0gQkJfTUFLRShiYWQtXHUwMDNlc3RhcnQsIGJhZC1cdTAwM2VsZW4sIGJhZC1cdTAwM2VhY2spO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTc3Nz1zdGF0aWMgaW50IGluc2VydF9hdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGF0LCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYy03ODQtXHRsZW4gPSBtaW5fdChzZWN0b3JfdCwgYmFkLVx1MDAzZWxlbiwgQkJfTUFYX0xFTik7XG5ibG9jay9iYWRibG9ja3MuYzo3ODU6XHRpZiAoYXQgXHUwMDNjIGJiLVx1MDAzZWNvdW50KVxuYmxvY2svYmFkYmxvY2tzLmM6Nzg2Olx0XHRtZW1tb3ZlKHAgJiM0MzsgYXQgJiM0MzsgMSwgcCAmIzQzOyBhdCwgKGJiLVx1MDAzZWNvdW50IC0gYXQpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy03ODctXHRwW2F0XSA9IEJCX01BS0UoYmFkLVx1MDAzZXN0YXJ0LCBsZW4sIGJhZC1cdTAwM2VhY2spO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTc5Mj1zdGF0aWMgdm9pZCBiYWRibG9ja3NfdXBkYXRlX2Fja2VkKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgwMC1cbmJsb2NrL2JhZGJsb2Nrcy5jOjgwMTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJiLVx1MDAzZWNvdW50IDsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTgwMi1cdFx0aWYgKCFCQl9BQ0socFtpXSkpIHtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz04MTY9c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgxOS1cbmJsb2NrL2JhZGJsb2Nrcy5jOjgyMDpcdGlmIChwcmV2IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgKHByZXYgJiM0MzsgMSkgXHUwMDNjIGJiLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNlxuYmxvY2svYmFkYmxvY2tzLmMtODIxLVx0ICAgIEJCX0VORChwW3ByZXZdKSA9PSBCQl9PRkZTRVQocFtwcmV2ICYjNDM7IDFdKSBcdTAwMjZcdTAwMjZcbi0tXG5ibG9jay9iYWRibG9ja3MuYy04MjctXG5ibG9jay9iYWRibG9ja3MuYzo4Mjg6XHRcdGlmICgocHJldiAmIzQzOyAyKSBcdTAwM2MgYmItXHUwMDNlY291bnQpXG5ibG9jay9iYWRibG9ja3MuYy04MjktXHRcdFx0bWVtbW92ZShwICYjNDM7IHByZXYgJiM0MzsgMSwgcCAmIzQzOyBwcmV2ICYjNDM7IDIsXG5ibG9jay9iYWRibG9ja3MuYzo4MzA6XHRcdFx0XHQoYmItXHUwMDNlY291bnQgLSAgKHByZXYgJiM0MzsgMikpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYzo4MzE6XHRcdGJiLVx1MDAzZWNvdW50LS07XG5ibG9jay9iYWRibG9ja3MuYy04MzItXHRcdHJldHVybiB0cnVlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTgzOD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbi0tXG5ibG9jay9iYWRibG9ja3MuYy04NzgtXHRcdGxlbiA9IGluc2VydF9hdChiYiwgMCwgXHUwMDI2YmFkKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjg3OTpcdFx0YmItXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuYmxvY2svYmFkYmxvY2tzLmMtODgwLVx0XHRhZGRlZCYjNDM7JiM0Mzs7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtODkxLVx0XHRsZW4gPSBpbnNlcnRfYXQoYmIsIDAsIFx1MDAyNmJhZCk7XG5ibG9jay9iYWRibG9ja3MuYzo4OTI6XHRcdGJiLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbmJsb2NrL2JhZGJsb2Nrcy5jLTg5My1cdFx0YWRkZWQmIzQzOyYjNDM7O1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTkwMC1cdFx0ZnJvbnRfY29tYmluZShiYiwgcHJldik7XG5ibG9jay9iYWRibG9ja3MuYzo5MDE6XHRcdGJiLVx1MDAzZWNvdW50LS07XG5ibG9jay9iYWRibG9ja3MuYy05MDItXHRcdGFkZGVkJiM0MzsmIzQzOztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy05MjgtXHRcdGFkZGVkJiM0MzsmIzQzOztcbmJsb2NrL2JhZGJsb2Nrcy5jOjkyOTpcdFx0YmItXHUwMDNlY291bnQgJiM0Mzs9IGV4dHJhO1xuYmxvY2svYmFkYmxvY2tzLmMtOTMwLVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTkzMi1cdFx0XHRmcm9udF9jb21iaW5lKGJiLCBwcmV2KTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjkzMzpcdFx0XHRiYi1cdTAwM2Vjb3VudC0tO1xuYmxvY2svYmFkYmxvY2tzLmMtOTM0LVx0XHR9XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtOTQwLVx0LyogY2Fubm90IG1lcmdlIGFuZCB0aGVyZSBpcyBzcGFjZSBpbiBiYWQgdGFibGUgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjk0MTpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2MgYmItXHUwMDNlY291bnQgXHUwMDI2XHUwMDI2XG5ibG9jay9iYWRibG9ja3MuYy05NDItXHQgICAgb3ZlcmxhcF9iZWhpbmQoYmIsIFx1MDAyNmJhZCwgcHJldiAmIzQzOyAxKSlcbi0tXG5ibG9jay9iYWRibG9ja3MuYy05NDYtXHRsZW4gPSBpbnNlcnRfYXQoYmIsIHByZXYgJiM0MzsgMSwgXHUwMDI2YmFkKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjk0NzpcdGJiLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbmJsb2NrL2JhZGJsb2Nrcy5jLTk0OC1cdGFkZGVkJiM0MzsmIzQzOztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy05ODQtICogY292ZXJlZCBieSB0aGUgY2xlYXJpbmcgcmFuZ2UgYW5kIGZ1bGx5IGNsZWFyZWQsICYjMzk7ZGVsZXRlJiMzOTsgaXMgc2V0IGFzIDEgZm9yXG5ibG9jay9iYWRibG9ja3MuYzo5ODU6ICogdGhlIGNhbGxlciB0byByZWR1Y2UgYmItXHUwMDNlY291bnQuXG5ibG9jay9iYWRibG9ja3MuYy05ODYtICovXG5ibG9jay9iYWRibG9ja3MuYz05ODc9c3RhdGljIGludCBmcm9udF9jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTAwNC1cdFx0XHRjbGVhcmVkID0gQkJfTEVOKHBbcHJldl0pO1xuYmxvY2svYmFkYmxvY2tzLmM6MTAwNTpcdFx0XHRpZiAoKHByZXYgJiM0MzsgMSkgXHUwMDNjIGJiLVx1MDAzZWNvdW50KVxuYmxvY2svYmFkYmxvY2tzLmMtMTAwNi1cdFx0XHRcdG1lbW1vdmUocCAmIzQzOyBwcmV2LCBwICYjNDM7IHByZXYgJiM0MzsgMSxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMDc6XHRcdFx0XHQgICAgICAgKGJiLVx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMDA4LVx0XHRcdCpkZWxldGVkID0gMTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDMwPXN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMDQxLVx0XHRcdCAgYWNrKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwNDI6XHRtZW1tb3ZlKHAgJiM0MzsgcHJldiAmIzQzOyAyLCBwICYjNDM7IHByZXYgJiM0MzsgMSwgKGJiLVx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMDQzLVx0cFtwcmV2ICYjNDM7IDFdID0gQkJfTUFLRShzICYjNDM7IHNlY3RvcnMsIGVuZCAtIHMgLSBzZWN0b3JzLCBhY2spO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTEwNDg9c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTEyLVx0LyogU3RhcnQgYWZ0ZXIgYWxsIGJhZGJsb2NrcyAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTExMzpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2U9IGJiLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNiAhb3ZlcmxhcF9mcm9udChiYiwgcHJldiwgXHUwMDI2YmFkKSkge1xuYmxvY2svYmFkYmxvY2tzLmMtMTExNC1cdFx0bGVuID0gc2VjdG9ycztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTI5LVx0XHRcdC8qIFNwbGl0dGluZyAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTEzMDpcdFx0XHRpZiAoKGJiLVx1MDAzZWNvdW50ICYjNDM7IDEpIFx1MDAzYz0gTUFYX0JBREJMT0NLUykge1xuYmxvY2svYmFkYmxvY2tzLmMtMTEzMS1cdFx0XHRcdGxlbiA9IGZyb250X3NwbGl0dGluZ19jbGVhcihiYiwgcHJldiwgXHUwMDI2YmFkKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjExMzI6XHRcdFx0XHRiYi1cdTAwM2Vjb3VudCAmIzQzOz0gMTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzMtXHRcdFx0XHRjbGVhcmVkJiM0MzsmIzQzOztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTQxLVx0XHRcdGxlbiA9IGZyb250X2NsZWFyKGJiLCBwcmV2LCBcdTAwMjZiYWQsIFx1MDAyNmRlbGV0ZWQpO1xuYmxvY2svYmFkYmxvY2tzLmM6MTE0MjpcdFx0XHRiYi1cdTAwM2Vjb3VudCAtPSBkZWxldGVkO1xuYmxvY2svYmFkYmxvY2tzLmMtMTE0My1cdFx0XHRjbGVhcmVkJiM0MzsmIzQzOztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTUwLVx0LyogTm90IGZyb250IG92ZXJsYXAsIGJ1dCBiZWhpbmQgb3ZlcmxhcCAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTE1MTpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2MgYmItXHUwMDNlY291bnQgXHUwMDI2XHUwMDI2IG92ZXJsYXBfYmVoaW5kKGJiLCBcdTAwMjZiYWQsIHByZXYgJiM0MzsgMSkpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNTItXHRcdGxlbiA9IEJCX09GRlNFVChwW3ByZXYgJiM0MzsgMV0pIC0gYmFkLnN0YXJ0O1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTExODU9c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDctXHRpZiAoKHByZXYgXHUwMDNlPSAwKSBcdTAwMjZcdTAwMjZcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyMDg6XHQgICAgKChwcmV2ICYjNDM7IDEpIFx1MDAzZT0gYmItXHUwMDNlY291bnQpIFx1MDAyNlx1MDAyNiAhb3ZlcmxhcF9mcm9udChiYiwgcHJldiwgXHUwMDI2YmFkKSkge1xuYmxvY2svYmFkYmxvY2tzLmMtMTIwOS1cdFx0bGVuID0gc2VjdG9ycztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjMzLVx0LyogTm90IGZyb250IG92ZXJsYXAsIGJ1dCBiZWhpbmQgb3ZlcmxhcCAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTIzNDpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2MgYmItXHUwMDNlY291bnQgXHUwMDI2XHUwMDI2IG92ZXJsYXBfYmVoaW5kKGJiLCBcdTAwMjZiYWQsIHByZXYgJiM0MzsgMSkpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMzUtXHRcdGxlbiA9IEJCX09GRlNFVChwW3ByZXYgJiM0MzsgMV0pIC0gYmFkLnN0YXJ0O1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTEzNzQ9dm9pZCBhY2tfYWxsX2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYilcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzg0LVxuYmxvY2svYmFkYmxvY2tzLmM6MTM4NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmItXHUwMDNlY291bnQgOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmFkYmxvY2tzLmMtMTM4Ni1cdFx0XHRpZiAoIUJCX0FDSyhwW2ldKSkge1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzOTMtXG5ibG9jay9iYWRibG9ja3MuYzoxMzk0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBiYi1cdTAwM2Vjb3VudCA7IGkmIzQzOyYjNDM7KVxuYmxvY2svYmFkYmxvY2tzLmMtMTM5NS1cdFx0XHR3aGlsZSAodHJ5X2FkamFjZW50X2NvbWJpbmUoYmIsIGkpKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MTM9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MjgtXG5ibG9jay9iYWRibG9ja3MuYzoxNDI5Olx0d2hpbGUgKGxlbiBcdTAwM2MgUEFHRV9TSVpFIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBiYi1cdTAwM2Vjb3VudCkge1xuYmxvY2svYmFkYmxvY2tzLmMtMTQzMC1cdFx0c2VjdG9yX3QgcyA9IEJCX09GRlNFVChwW2ldKTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xNDkwPXN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTMtXHRiYi1cdTAwM2VkZXYgPSBkZXY7XG5ibG9jay9iYWRibG9ja3MuYzoxNDk0Olx0YmItXHUwMDNlY291bnQgPSAwO1xuYmxvY2svYmFkYmxvY2tzLmMtMTQ5NS1cdGlmIChlbmFibGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHByZXZfYmFkYmxvY2tzYCBCaXNlY3Rpb24gU2VhcmNoIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBibG9jay9iYWRibG9ja3MuY2AgdGhhdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLCBhIGJpc2VjdGlvbiBzZWFyY2ggaGVscGVyLiBJbml0aWFsbHksIEkgd2FudGVkIHRvIGRpZyBpbnRvIHRoZSBnaXQgaGlzdG9yeSBmb3IgdGhlIGNvbnRleHQsIG1heWJlIHVuY292ZXIgdGhlIHNwZWNpZmljIGJ1ZyB0aGlzIHBhdGNoIGZpeGVkIG9yIGl0cyBtb3RpdmF0aW9uLiBCdXQgc2luY2UgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGBnaXQgbG9nYCwgSSBuZWVkIHRvIHJlbHkgb24gY29kZSBhbmFseXNpcy4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgZGlmZmVyZW5jZTogYGhpID0gYmItJmd0O2NvdW50YCBoYXMgYmVjb21lIGBoaSA9IGJiLSZndDtjb3VudCAtIDFgLiBBbmQgdGhlcmUmIzM5O3MgYWxzbyBhIHNpbXBsaWZpY2F0aW9uIGF0IHRoZSBlbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4KClRyYWNpbmcgdGhlIGxvZ2ljLCBiZWZvcmUgdGhlIGNoYW5nZSwgYGhpYCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGJiLSZndDtjb3VudGAuIFRoaXMgbWVhbnQgYHBbaGktMV1gIHdhcyB0aGUgbGFzdCB2YWxpZCBlbGVtZW50LCBhbmQgYHBbaGldYCB3b3VsZCBoYXZlIGJlZW4gb3V0LW9mLWJvdW5kcywgYXMgdGhlIGFycmF5IGhhcyBgYmItJmd0O2NvdW50YCBlbGVtZW50cy4gVGhlIGNoZWNrIGBpZiAoQkJfT0ZGU0VUKHBbaGkgLSAxXSkgJmx0Oz0gcylgIGhhbmRsZWQgdGhpcy4gVGhlIHdoaWxlIGxvb3AgdGhlbiBwZXJmb3JtZWQgYSBiaXNlY3Qgc2VhcmNoLiBUaGUgb3JpZ2luYWwgY29kZSB0aGVuIGNoZWNrcyBmb3IgYGlmIChCQl9PRkZTRVQocFtsb10pICZsdDs9IHMpIHJldCA9IGxvO2AuIFRoZSBjaGFuZ2UgaXMgdGhhdCB0aGlzIGNoZWNrIGlzIHJlbW92ZWQuCgpJdCYjMzk7cyBiZWNvbWluZyBjbGVhcjogU2V0dGluZyBgaGkgPSBiYi0mZ3Q7Y291bnRgIGNyZWF0ZWQgYW4gKm9mZi1ieS1vbmUqIGlzc3VlLCBvciBhbiBlZGdlIGNvbmRpdGlvbi4gQnkgc2V0dGluZyBgaGkgPSBiYi0mZ3Q7Y291bnQgLSAxYCwgd2UmIzM5O3JlIG1ha2luZyB0aGUgYmlzZWN0aW9uIG1vcmUgcHJlY2lzZSBieSBzdGFydGluZyB0aGUgc2VhcmNoIHdpdGggYGhpYCBhcyB0aGUga25vd24gdXBwZXIgYm91bmQgaW5kZXggc3VjaCB0aGF0IGBCQl9PRkZTRVQocFtoaV0pICZndDsgc2AuIFRoZW4gdGhlIGxvb3Agd2lsbCBndWFyYW50ZWUgdGhhdCBgbG9gIGlzIHRoZSBsYXJnZXN0IGluZGV4IHdpdGggYHBbbG9dICZsdDs9IHNgLiBSZW1vdmluZyB0aGUgY2hlY2sgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBpcyBhbiBvcHRpbWl6YXRpb24sIGFzIHRoZSB3aGlsZSBsb29wIGd1YXJhbnRlZXMgdGhhdCBjb25kaXRpb24uCgpTbywgaW4gZXNzZW5jZSwgdGhlIHBhdGNoIGNvcnJlY3RzIGFuIGVkZ2UgY2FzZSBhbmQgc2ltcGxpZmllcyB0aGUgbG9naWMuIE5vLCB0aGlzIGRvZXMgbm90IHNlZW0gdG8gdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIEtNU0FOIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYSBmYWN0b3IgaGVyZS4gYHByZXZfYmFkYmxvY2tzYCBpcyBhbiBpbnRlcm5hbCBoZWxwZXIgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYCBwZXJmb3JtaW5nIGJpc2VjdGlvbiBzZWFyY2ggaW4gYGJiLSZndDtwYWdlYCwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgYHU2NGAsIGFuZCB0aGVyZSYjMzk7cyBubyBkYXRhIHRoYXQgaXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBzaG91bGQgYmUgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmItXHUwMDNlcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2JhZGJsb2Nrcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JhZGJsb2Nrcy5jPTQ1Nz1zdGF0aWMgaW50IHByZXZfYnlfaGludChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IGhpbnQpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNDU5LVx0aW50IGhpbnRfZW5kID0gaGludCAmIzQzOyAyO1xuYmxvY2svYmFkYmxvY2tzLmM6NDYwOlx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ2MS1cdGludCByZXQgPSAtMTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz00ODE9c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNDk5LVx0aGkgPSBiYi1cdTAwM2Vjb3VudCAtIDE7XG5ibG9jay9iYWRibG9ja3MuYzo1MDA6XHRwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTUwMS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz01MzM9c3RhdGljIGJvb2wgY2FuX21lcmdlX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy01MzYtXHRzZWN0b3JfdCBzID0gYmFkLVx1MDAzZXN0YXJ0O1xuYmxvY2svYmFkYmxvY2tzLmM6NTM3Olx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTUzOC1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz01NTE9c3RhdGljIGludCBmcm9udF9tZXJnZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTU1NC1cdHNlY3Rvcl90IHMgPSBiYWQtXHUwMDNlc3RhcnQ7XG5ibG9jay9iYWRibG9ja3MuYzo1NTU6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtNTU2LVx0aW50IG1lcmdlZCA9IDA7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9NTg3PXN0YXRpYyBib29sIGNhbl9jb21iaW5lX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy01ODkte1xuYmxvY2svYmFkYmxvY2tzLmM6NTkwOlx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTU5MS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz02MDg9c3RhdGljIHZvaWQgZnJvbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXG5ibG9jay9iYWRibG9ja3MuYy02MDkte1xuYmxvY2svYmFkYmxvY2tzLmM6NjEwOlx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTYxMS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz02MjU9c3RhdGljIGJvb2wgb3ZlcmxhcF9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGZyb250LFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTYyNy17XG5ibG9jay9iYWRibG9ja3MuYzo2Mjg6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtNjI5LVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTY0MD1zdGF0aWMgYm9vbCBvdmVybGFwX2JlaGluZChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNjQyLXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjY0MzpcdHU2NCAqcCA9IGJiLVx1MDAzZXBhZ2U7XG5ibG9jay9iYWRibG9ja3MuYy02NDQtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9NjcyPXN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTY3NC17XG5ibG9jay9iYWRibG9ja3MuYzo2NzU6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtNjc2LVx0aW50IGxlbjtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz03MTU9c3RhdGljIGludCBmcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNy17XG5ibG9jay9iYWRibG9ja3MuYzo3MTg6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtNzE5LVx0c2VjdG9yX3Qgb3JpZ19lbmQgPSBCQl9FTkQocFtwcmV2XSk7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9Nzc3PXN0YXRpYyBpbnQgaW5zZXJ0X2F0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgYXQsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuYmxvY2svYmFkYmxvY2tzLmMtNzc4LXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjc3OTpcdHU2NCAqcCA9IGJiLVx1MDAzZXBhZ2U7XG5ibG9jay9iYWRibG9ja3MuYy03ODAtXHRpbnQgbGVuO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTc5Mj1zdGF0aWMgdm9pZCBiYWRibG9ja3NfdXBkYXRlX2Fja2VkKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTc5NC1cdGJvb2wgdW5hY2tlZCA9IGZhbHNlO1xuYmxvY2svYmFkYmxvY2tzLmM6Nzk1Olx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTc5Ni1cdGludCBpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTgxNj1zdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXG5ibG9jay9iYWRibG9ja3MuYy04MTcte1xuYmxvY2svYmFkYmxvY2tzLmM6ODE4Olx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTgxOS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz04Mzg9c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtODY2LVx0YmFkLmFjayA9IGFja25vd2xlZGdlZDtcbmJsb2NrL2JhZGJsb2Nrcy5jOjg2NzpcdHAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtODY4LVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTk4Nz1zdGF0aWMgaW50IGZyb250X2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy05OTEtXHRzZWN0b3JfdCBzID0gYmFkLVx1MDAzZXN0YXJ0O1xuYmxvY2svYmFkYmxvY2tzLmM6OTkyOlx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTk5My1cdGludCBjbGVhcmVkID0gMDtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDMwPXN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMDMyLXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMzM6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtMTAzNC1cdHU2NCBlbmQgPSBCQl9FTkQocFtwcmV2XSk7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTA0OD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODAtXHRiYWQuYWNrID0gdHJ1ZTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwODE6XHRwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODItXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTE4NT1zdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTE5MS1cdGludCBhY2tlZF9iYWRibG9ja3MgPSAwO1xuYmxvY2svYmFkYmxvY2tzLmM6MTE5MjpcdHU2NCAqcCA9IGJiLVx1MDAzZXBhZ2U7XG5ibG9jay9iYWRibG9ja3MuYy0xMTkzLVx0aW50IGxlbiwgcnY7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTM3ND12b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM3NS17XG5ibG9jay9iYWRibG9ja3MuYzoxMzc2Olx0aWYgKGJiLVx1MDAzZXBhZ2UgPT0gTlVMTCB8fCBiYi1cdTAwM2VjaGFuZ2VkKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM3Ny1cdFx0Lyogbm8gcG9pbnQgZXZlbiB0cnlpbmcgKi9cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzgxLVx0aWYgKGJiLVx1MDAzZWNoYW5nZWQgPT0gMCBcdTAwMjZcdTAwMjYgYmItXHUwMDNldW5hY2tlZF9leGlzdCkge1xuYmxvY2svYmFkYmxvY2tzLmM6MTM4MjpcdFx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODMtXHRcdGludCBpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MTM9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MTYtXHRpbnQgaTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0MTc6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtMTQxOC1cdHVuc2lnbmVkIHNlcTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xNDkwPXN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTktXHRpZiAoZGV2KVxuYmxvY2svYmFkYmxvY2tzLmM6MTUwMDpcdFx0YmItXHUwMDNlcGFnZSA9IGRldm1fa3phbGxvYyhkZXYsIFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTAxLVx0ZWxzZVxuYmxvY2svYmFkYmxvY2tzLmM6MTUwMjpcdFx0YmItXHUwMDNlcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MDM6XHRpZiAoIWJiLVx1MDAzZXBhZ2UpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDQtXHRcdGJiLVx1MDAzZXNoaWZ0ID0gLTE7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTUzOT12b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NDMtXHRpZiAoYmItXHUwMDNlZGV2KVxuYmxvY2svYmFkYmxvY2tzLmM6MTU0NDpcdFx0ZGV2bV9rZnJlZShiYi1cdTAwM2VkZXYsIGJiLVx1MDAzZXBhZ2UpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTU0NS1cdGVsc2VcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1NDY6XHRcdGtmcmVlKGJiLVx1MDAzZXBhZ2UpO1xuYmxvY2svYmFkYmxvY2tzLmM6MTU0NzpcdGJiLVx1MDAzZXBhZ2UgPSBOVUxMO1xuYmxvY2svYmFkYmxvY2tzLmMtMTU0OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTczCgkJCQkJCQlvdXRwdXQ6IDIxNgoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIEhlcmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGJiLSZndDtwYWdlYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHdoZXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBgZGV2bV9remFsbG9jYCwgbWVhbmluZyBpdCYjMzk7cyBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudCwgdGhhdCB0YWtlcyBjYXJlIG9mIGEgaHVnZSBwb3RlbnRpYWwgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgd2UmIzM5O3JlIGV4cGxpY2l0bHkgdHJhY2tpbmcgdGhlIGBiYi0mZ3Q7Y291bnRgIGVudHJpZXMsIGFuZCB3b3JraW5nIHdpdGhpbiB0aGUgYm91bmRzIG9mIGAwYCB0byBgYmItJmd0O2NvdW50IC0gMWAuCgpUaGUgYmlzZWN0IHNlYXJjaCBsb2dpYyB3aXRoaW4gYHByZXZfYmFkYmxvY2tzYCBpcyBub3cgc291bmQuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBmb3IgYGhpYCB0byBiZSBpbml0aWFsaXplZCB0byBgYmItJmd0O2NvdW50YCwgYnV0IHRoYXQmIzM5O3MgYmVlbiBhZGRyZXNzZWQgYnkgaW5pdGlhbGl6aW5nIGBoaWAgdG8gYGJiLSZndDtjb3VudCAtIDFgIG5vdywgd2hpY2ggZW5zdXJlcyB3ZSBzdGF5IHdpdGhpbiB0aGUgdmFsaWQgYm91bmRzLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBjcmVhdGVkLCByZWFkLCBvciBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBhbnl0aGluZyB1bmluaXRpYWxpemVkLiBBbGwgYWNjZXNzZXMgYXJlIGV4cGxpY2l0bHkgd2l0aGluIHRoZSBpbml0aWFsaXplZCByZWdpb24uIEFueSBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbmRleGluZyBlcnJvcnMgdGhhdCAqbWlnaHQqIGV4aXN0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IGNhdWdodCBieSBLQVNBTi4KCkxldCYjMzk7cyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgc3VyZToKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBmaWVsZHMvcGFkZGluZyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQ/IE5vcGUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3BlLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBEZWZpbml0ZWx5IG5vdC4gVGhlIHdob2xlIHBhZ2UgaXMgemVyby1pbml0aWFsaXplZCwgYW5kIHRoZSB1c2VkIHBvcnRpb24gaXMgdHJhY2tlZC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBLQVNBTiBpcyBwZXJmZWN0bHkgc3VmZmljaWVudCBoZXJlIHRvIGNhdGNoIGFueSBwb3NzaWJsZSBpc3N1ZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcy4gVGhpcyBpcyBub3QgdGhlIHNjZW5hcmlvIHdoZXJlIEtNU0FOIHByb3ZpZGVzIHVuaXF1ZSB2YWx1ZS4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgd2hpY2ggZW1waGFzaXplIHRoYXQgS01TQU4gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgKm9ubHkqIGRldGVjdGVkIGJ5IEtNU0FOLCB0aGlzIGlzIGEgY2xlYXIgJiMzNDtubyYjMzQ7LgpGaW5hbCBjaGVjazogcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggYm91bmRhcnkgaW5pdGlhbGl6YXRpb24gaW4gYHByZXZfYmFkYmxvY2tzKClgIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMWAgaW5zdGVhZCBvZiBgaGkgPSBiYi1cdTAwM2Vjb3VudGAsIGFkanVzdHMgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGFjY29yZGluZ2x5LCBhbmQgc2ltcGxpZmllcyB0aGUgcmV0dXJuIHZhbHVlIGFzc2lnbm1lbnQuXG5cblRoZSBiYWRibG9jayBidWZmZXIgKGBiYi1cdTAwM2VwYWdlYCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCAvIGBkZXZtX2t6YWxsb2MoKWAgYW5kIGVudHJpZXMgd2l0aGluIGBbMCwgYmItXHUwMDNlY291bnQgLSAxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJhZCBibG9jayBlbnRyaWVzLiBUaGUgY2hhbmdlcyBtb2RpZnkgaW5kZXggY2FsY3VsYXRpb25zIGFuZCBib3VuZHMgaW4gYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaCByb3V0aW5lLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZCwgbm9yIGlzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgZXhwb3NlZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgaHlwb3RoZXRpY2FsIGluZGV4aW5nIGRlZmVjdCBoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGJ5IEtBU0FOLCBub3QgS01TQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmluYXJ5IHNlYXJjaCBib3VuZGFyeSBpbml0aWFsaXphdGlvbiBpbiBgcHJldl9iYWRibG9ja3MoKWAgd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AuIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYGhpID0gYmItXHUwMDNlY291bnQgLSAxYCBpbnN0ZWFkIG9mIGBoaSA9IGJiLVx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cblxuVGhlIGJhZGJsb2NrIGJ1ZmZlciAoYGJiLVx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cdTAwM2Vjb3VudCAtIDFdYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmFkIGJsb2NrIGVudHJpZXMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBpbmRleCBjYWxjdWxhdGlvbnMgYW5kIGJvdW5kcyBpbiBhbiBpbnRlcm5hbCBiaW5hcnkgc2VhcmNoIHJvdXRpbmUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciByZWFkLCBub3IgaXMgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBleHBvc2VkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBoeXBvdGhldGljYWwgaW5kZXhpbmcgZGVmZWN0IGhlcmUgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoIGlzIHRyYWNrZWQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDA6MjAuMTE3MDc2OTI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5ODU5NTIzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmV2X2JhZGJsb2Nrc1wiLFxuICAgIFwiYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiYmFkYmxvY2tzX2NsZWFyXCIsXG4gICAgXCJiYWRibG9ja3NfY2hlY2tcIixcbiAgICBcImJhZGJsb2Nrc19zdG9yZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggYm91bmRhcnkgaW5pdGlhbGl6YXRpb24gaW4gYHByZXZfYmFkYmxvY2tzKClgIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGBoaSA9IGJiLVxcdTAwM2Vjb3VudCAtIDFgIGluc3RlYWQgb2YgYGhpID0gYmItXFx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cXG5cXG5UaGUgYmFkYmxvY2sgYnVmZmVyIChgYmItXFx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cXHUwMDNlY291bnQgLSAxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJhZCBibG9jayBlbnRyaWVzLiBUaGUgY2hhbmdlcyBtb2RpZnkgaW5kZXggY2FsY3VsYXRpb25zIGFuZCBib3VuZHMgaW4gYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaCByb3V0aW5lLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZCwgbm9yIGlzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgZXhwb3NlZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgaHlwb3RoZXRpY2FsIGluZGV4aW5nIGRlZmVjdCBoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGJ5IEtBU0FOLCBub3QgS01TQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cXHUwMDNlY291bnQgLSAxIGluc3RlYWQgb2YgYmItXFx1MDAzZWNvdW50KSwgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGNvbmRpdGlvbiwgYW5kIHRoZSBmYWxsYmFjayByZXR1cm4gYXNzaWdubWVudCAocmV0ID0gbG8gdW5jb25kaXRpb25hbGx5KS4gQmFkIGJsb2NrcyBoYW5kbGluZyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZXhlcmNpc2FibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIGJsb2NrIGRyaXZlcnMgc3VjaCBhcyBNRC9SQUlEIChkcml2ZXJzL21kKSBhbmQgbnVsbF9ibGsgKGRyaXZlcnMvYmxvY2svbnVsbF9ibGspLCBhcyB3ZWxsIGFzIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlcyAoYmFkYmxvY2tzX3N0b3JlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG1vZGlmaWVkIHNlYXJjaCBib3VuZGFyaWVzIGFuZCBpbmRleCBoYW5kbGluZyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG9mZi1ieS1vbmUgZXJyb3JzIG9uIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQwOjIwLjExNzA4MTc2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2OTA4MDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5NjJkMDIxNjY1Y2FjMWRjZDJkNGE0Mjg3MTRkNDhkMjE4NGEyZDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTg6NDA6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuY1xcbmluZGV4IGVjZTY0ZTc2ZmU4ZmYuLjE0M2I0ODhiN2ZlNjggMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xcbkBAIC00OTYsMTQgKzQ5NiwxNCBAQCBzdGF0aWMgaW50IHByZXZfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCxcXG4gXFx0fVxcbiBcXG4gXFx0bG8gPSAwO1xcbi1cXHRoaSA9IGJiLVxcdTAwM2Vjb3VudDtcXG4rXFx0aGkgPSBiYi1cXHUwMDNlY291bnQgLSAxO1xcbiBcXHRwID0gYmItXFx1MDAzZXBhZ2U7XFxuIFxcbiBcXHQvKiBUaGUgZm9sbG93aW5nIGJpc2VjdCBzZWFyY2ggbWlnaHQgYmUgdW5uZWNlc3NhcnkgKi9cXG4gXFx0aWYgKEJCX09GRlNFVChwW2xvXSkgXFx1MDAzZSBzKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuLVxcdGlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSBcXHUwMDNjPSBzKVxcbi1cXHRcXHRyZXR1cm4gaGkgLSAxO1xcbitcXHRpZiAoQkJfT0ZGU0VUKHBbaGldKSBcXHUwMDNjPSBzKVxcbitcXHRcXHRyZXR1cm4gaGk7XFxuIFxcbiBcXHQvKiBEbyBiaXNlY3Qgc2VhcmNoIGluIGJhZCB0YWJsZSAqL1xcbiBcXHR3aGlsZSAoaGkgLSBsbyBcXHUwMDNlIDEpIHtcXG5AQCAtNTIxLDggKzUyMSw3IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbiBcXHRcXHRcXHRoaSA9IG1pZDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKEJCX09GRlNFVChwW2xvXSkgXFx1MDAzYz0gcylcXG4tXFx0XFx0cmV0ID0gbG87XFxuK1xcdHJldCA9IGxvO1xcbiBvdXQ6XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDA6MjEuNDg2NzcxNDE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDU0MzM4OTM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiQkxLX0RFVl9NRFwiLFxuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXZfYmFkYmxvY2tzXCIsXG4gICAgXCJiYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJiYWRibG9ja3NfY2xlYXJcIixcbiAgICBcImJhZGJsb2Nrc19jaGVja1wiLFxuICAgIFwiYmFkYmxvY2tzX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cXHUwMDNlY291bnQgLSAxIGluc3RlYWQgb2YgYmItXFx1MDAzZWNvdW50KSwgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGNvbmRpdGlvbiwgYW5kIHRoZSBmYWxsYmFjayByZXR1cm4gYXNzaWdubWVudCAocmV0ID0gbG8gdW5jb25kaXRpb25hbGx5KS4gQmFkIGJsb2NrcyBoYW5kbGluZyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZXhlcmNpc2FibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIGJsb2NrIGRyaXZlcnMgc3VjaCBhcyBNRC9SQUlEIChkcml2ZXJzL21kKSBhbmQgbnVsbF9ibGsgKGRyaXZlcnMvYmxvY2svbnVsbF9ibGspLCBhcyB3ZWxsIGFzIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlcyAoYmFkYmxvY2tzX3N0b3JlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG1vZGlmaWVkIHNlYXJjaCBib3VuZGFyaWVzIGFuZCBpbmRleCBoYW5kbGluZyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG9mZi1ieS1vbmUgZXJyb3JzIG9uIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTk2MmQwMjE2NjVjYWMxZGNkMmQ0YTQyODcxNGQ0OGQyMTg0YTJkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE4OjQwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuY1xuaW5kZXggZWNlNjRlNzZmZThmZi4uMTQzYjQ4OGI3ZmU2OCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JhZGJsb2Nrcy5jXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xuQEAgLTQ5NiwxNCArNDk2LDE0IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuIFx0fVxuIFxuIFx0bG8gPSAwO1xuLVx0aGkgPSBiYi1cdTAwM2Vjb3VudDtcbitcdGhpID0gYmItXHUwMDNlY291bnQgLSAxO1xuIFx0cCA9IGJiLVx1MDAzZXBhZ2U7XG4gXG4gXHQvKiBUaGUgZm9sbG93aW5nIGJpc2VjdCBzZWFyY2ggbWlnaHQgYmUgdW5uZWNlc3NhcnkgKi9cbiBcdGlmIChCQl9PRkZTRVQocFtsb10pIFx1MDAzZSBzKVxuIFx0XHRyZXR1cm4gLTE7XG4tXHRpZiAoQkJfT0ZGU0VUKHBbaGkgLSAxXSkgXHUwMDNjPSBzKVxuLVx0XHRyZXR1cm4gaGkgLSAxO1xuK1x0aWYgKEJCX09GRlNFVChwW2hpXSkgXHUwMDNjPSBzKVxuK1x0XHRyZXR1cm4gaGk7XG4gXG4gXHQvKiBEbyBiaXNlY3Qgc2VhcmNoIGluIGJhZCB0YWJsZSAqL1xuIFx0d2hpbGUgKGhpIC0gbG8gXHUwMDNlIDEpIHtcbkBAIC01MjEsOCArNTIxLDcgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4gXHRcdFx0aGkgPSBtaWQ7XG4gXHR9XG4gXG4tXHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcdTAwM2M9IHMpXG4tXHRcdHJldCA9IGxvO1xuK1x0cmV0ID0gbG87XG4gb3V0OlxuIFx0cmV0dXJuIHJldDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDoyMS40ODY3NzI3MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTMwNjA1NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJhZCBCbG9ja3MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmFkYmxvY2tzLmNgLiAgSSBzZWUgYSBgZGlmZmAgc2hvd2luZyBjaGFuZ2VzLCB3aGljaCBtZWFucyBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHdoYXQncyBiZWVuIG1vZGlmaWVkLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgdGhlIHByZXZpb3VzIGJhZCBibG9jayB0byBhIGdpdmVuIG9mZnNldC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBibG9jay9iYWRibG9ja3MuY2AgZmlsZSB1c2luZyBlaXRoZXIgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIGNvbW1hbmQsIG9yLCBldmVuIGJldHRlciwgYSBgZ3JlcHBlcmAgY2FsbCB0byBmaW5kIHRoZSByZWxldmFudCBjb250ZXh0IHN1cnJvdW5kaW5nIHRoaXMgY2hhbmdlLiBJIHdhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbG9naWMgaGVyZS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgYmluYXJ5IHNlYXJjaCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYHByZXZfYmFkYmxvY2tzYC4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgYGhpYCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGJiLVx1MDAzZWNvdW50YC4gVGhlIGluZGV4IGBoaWAgaXMgdXNlZCB0byBpbmRleCBpbnRvIHRoZSBhcnJheSBgcGAuIFRoZSBmaXJzdCBjaGFuZ2UgSSBzZWUgaXMgY2hhbmdpbmcgYGhpYCB0byBiZSBgYmItXHUwMDNlY291bnQgLTFgLiBUaGUgY29tbWVudCBcIlRoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeVwiIGdpdmVzIG1lIGEgc3Ryb25nIGhpbnQgdGhpcyBpbml0aWFsaXphdGlvbiBjaGFuZ2UgaXMgdmVyeSBsaWtlbHkgcmVsYXRlZC5cblxuQWxzbyBJJ20gbm90aWNpbmcgYSBwb3RlbnRpYWwgYnVnIGZpeC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIHR3byBlZGdlLWNhc2UgY2hlY2tzOiBgaWYgKEJCX09GRlNFVChwW2xvXSkgXHUwMDNlIHMpYCBhbmQgYGlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSBcdTAwM2M9IHMpYC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGhhcyBjaGFuZ2VkIHRoZSBzZWNvbmQgY2hlY2sgZnJvbSBgaGkgLSAxYCB0byBgaGlgLiBUaGlzIGlzIGltbWVkaWF0ZWx5IHN1c3BpY2lvdXMuIFRoZSBzZWNvbmQgY2hhbmdlIGhhcyBhZmZlY3RlZCB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGxpa2VseSBmaXhlcyBhbiBvZmYtYnktb25lIGVycm9yIG9yIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5GdXJ0aGVyIGRvd24sIHRoZSByZXR1cm4gdmFsdWUgYHJldGAgc2VlbXMgdG8gaGF2ZSBhbHNvIGJlZW4gc2ltcGxpZmllZDogbm8gbG9uZ2VyIHBlcmZvcm1pbmcgYW4gYWRkaXRpb25hbCBjaGVjay4gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlc2UgY2hhbmdlcyB0byBlbnN1cmUgdGhleSBhcmUgY29ycmVjdCBhbmQgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgY2hhbmdlIGNvdWxkIHBvdGVudGlhbGx5IGJyZWFrIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIHN0aWxsIGhhbmRsZXMgZWRnZSBjYXNlcyBjb3JyZWN0bHkgYW5kIHJldHVybnMgdGhlIGNvcnJlY3QgaW5kZXggb3IgYW4gZXJyb3IgaW5kaWNhdGlvbi4gVWx0aW1hdGVseSwgbXkgYW5hbHlzaXMgd2lsbCByZXZvbHZlIGFyb3VuZCBlbnN1cmluZyB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGltcHJvdmVzIGNvcnJlY3RuZXNzIGFuZCBlZmZpY2llbmN5LCB3aXRob3V0IGNyZWF0aW5nIG5ldyBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQwOjI3LjAxNzM4NTU3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9iYWRibG9ja3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFx0fVxcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0NzM6XFx0fVxcbiA0NzQ6XFx0XFxuIDQ3NTpcXHQvKlxcbiA0NzY6XFx0ICogRmluZCB0aGUgcmFuZ2Ugc3RhcnRzIGF0LW9yLWJlZm9yZSBiYWQtXFx1MDAzZXN0YXJ0LiBJZiAnaGludCcgaXMgcHJvdmlkZWRcXG4gNDc3OlxcdCAqIChoaW50IFxcdTAwM2U9IDApIHRoZW4gc2VhcmNoIGluIHRoZSBiYWQgdGFibGUgZnJvbSBoaW50IGZpcnN0bHkuIEl0IGlzXFxuIDQ3ODpcXHQgKiB2ZXJ5IHByb2JhYmx5IHRoZSB3YW50ZWQgYmFkIHJhbmdlIGNhbiBiZSBmb3VuZCBmcm9tIHRoZSBoaW50IGluZGV4LFxcbiA0Nzk6XFx0ICogdGhlbiB0aGUgdW5uZWNlc3Nhcnkgd2hpbGUtbG9vcCBpdGVyYXRpb24gY2FuIGJlIGF2b2lkZWQuXFxuIDQ4MDpcXHQgKi9cXG4gNDgxOlxcdHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbiA0ODI6XFx0XFx0XFx0XFx0ICBpbnQgaGludClcXG4gNDgzOlxcdHtcXG4gNDg0OlxcdFxcdHNlY3Rvcl90IHMgPSBiYWQtXFx1MDAzZXN0YXJ0O1xcbiA0ODU6XFx0XFx0aW50IHJldCA9IC0xO1xcbiA0ODY6XFx0XFx0aW50IGxvLCBoaTtcXG4gNDg3OlxcdFxcdHU2NCAqcDtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0aWYgKCFiYi1cXHUwMDNlY291bnQpXFxuIDQ5MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0aWYgKGhpbnQgXFx1MDAzZT0gMCkge1xcbiA0OTM6XFx0XFx0XFx0cmV0ID0gcHJldl9ieV9oaW50KGJiLCBzLCBoaW50KTtcXG4gNDk0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4gNDk1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0OTY6XFx0XFx0fVxcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRsbyA9IDA7XFxuIDQ5OTpcXHRcXHRoaSA9IGJiLVxcdTAwM2Vjb3VudCAtIDE7XFxuIDUwMDpcXHRcXHRwID0gYmItXFx1MDAzZXBhZ2U7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdC8qIFRoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeSAqL1xcbiA1MDM6XFx0XFx0aWYgKEJCX09GRlNFVChwW2xvXSkgXFx1MDAzZSBzKVxcbiA1MDQ6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA1MDU6XFx0XFx0aWYgKEJCX09GRlNFVChwW2hpXSkgXFx1MDAzYz0gcylcXG4gNTA2OlxcdFxcdFxcdHJldHVybiBoaTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LyogRG8gYmlzZWN0IHNlYXJjaCBpbiBiYWQgdGFibGUgKi9cXG4gNTA5OlxcdFxcdHdoaWxlIChoaSAtIGxvIFxcdTAwM2UgMSkge1xcbiA1MTA6XFx0XFx0XFx0aW50IG1pZCA9IChsbyArIGhpKS8yO1xcbiA1MTE6XFx0XFx0XFx0c2VjdG9yX3QgYSA9IEJCX09GRlNFVChwW21pZF0pO1xcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHRcXHRpZiAoYSA9PSBzKSB7XFxuIDUxNDpcXHRcXHRcXHRcXHRyZXQgPSBtaWQ7XFxuIDUxNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTE2OlxcdFxcdFxcdH1cXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0XFx0aWYgKGEgXFx1MDAzYyBzKVxcbiA1MTk6XFx0XFx0XFx0XFx0bG8gPSBtaWQ7XFxuIDUyMDpcXHRcXHRcXHRlbHNlXFxuIDUyMTpcXHRcXHRcXHRcXHRoaSA9IG1pZDtcXG4gNTIyOlxcdFxcdH1cXG4gNTIzOlxcdFxcbiA1MjQ6XFx0XFx0cmV0ID0gbG87XFxuIDUyNTpcXHRvdXQ6XFxuIDUyNjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1Mjc6XFx0fVxcbiA1Mjg6XFx0XFxuIDUyOTpcXHQvKlxcbiA1MzA6XFx0ICogUmV0dXJuICd0cnVlJyBpZiB0aGUgcmFuZ2UgaW5kaWNhdGVkIGJ5ICdiYWQnIGNhbiBiZSBmb3J3YXJkXFxuIDUzMTpcXHQgKiBtZXJnZWQgd2l0aCB0aGUgYmFkIHJhbmdlIChmcm9tIHRoZSBiYWQgdGFibGUpIGluZGV4ZWQgYnkgJ3ByZXYnLlxcbiA1MzI6XFx0ICovXFxuIDUzMzpcXHRzdGF0aWMgYm9vbCBjYW5fbWVyZ2VfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbiA1MzQ6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDoyNy4wMTc1NDc5MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODE1MDYzNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgYGJhZGJsb2Nrcy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgYmFkYmxvY2tzLmNgIGlzIGFjdHVhbGx5IGJ1aWx0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgcGF0aCB0aHJvdWdoIHRoZSBidWlsZCBzeXN0ZW0uIFdoZXJlIGlzIHRoaXMgdGhpbmcgZGVmaW5lZD8gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBhbmQgdHJ5IHRvIGxvY2F0ZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGl0J3Mgd2l0aGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyBhcmUgY29udHJvbGxlZC4gSG9wZWZ1bGx5LCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1aWxkIHJ1bGUgYW5kIEkgd29uJ3QgaGF2ZSB0byBjaGFzZSBkb3duIHRvbyBtYW55IGluY2x1ZGUgZGlyZWN0aXZlcy4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDoyOC44MzI2MTY5MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNjc1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTg9b2JqLXlcXHRcXHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxcXFxuLS1cXG5ibG9jay9NYWtlZmlsZS0xMi1cXHRcXHRcXHRibGstbXEtc3lzZnMubyBibGstbXEtY3B1bWFwLm8gYmxrLW1xLXNjaGVkLm8gaW9jdGwubyBcXFxcXFxuYmxvY2svTWFrZWZpbGU6MTM6XFx0XFx0XFx0Z2VuaGQubyBpb3ByaW8ubyBiYWRibG9ja3MubyBwYXJ0aXRpb25zLyBibGstcnEtcW9zLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTE0LVxcdFxcdFxcdGRpc2stZXZlbnRzLm8gYmxrLWlhLXJhbmdlcy5vIGVhcmx5LWxvb2t1cC5vXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy00LSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6NTogKiAtIEhlYXZpbHkgYmFzZWQgb24gTUQgYmFkYmxvY2tzIGNvZGUgZnJvbSBOZWlsIEJyb3duXFxuYmxvY2svYmFkYmxvY2tzLmMtNi0gKlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtOS1cXG5ibG9jay9iYWRibG9ja3MuYzoxMDojaW5jbHVkZSBcXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcXHUwMDNlXFxuYmxvY2svYmFkYmxvY2tzLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcWxvY2suaFxcdTAwM2VcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE5LS8qXFxuYmxvY2svYmFkYmxvY2tzLmM6MjA6ICogVGhlIHB1cnBvc2Ugb2YgYmFkYmxvY2tzIHNldC9jbGVhciBpcyB0byBtYW5hZ2UgYmFkIGJsb2NrcyByYW5nZXMgd2hpY2ggYXJlXFxuYmxvY2svYmFkYmxvY2tzLmMtMjEtICogaWRlbnRpZmllZCBieSBMQkEgYWRkcmVzc2VzLlxcbmJsb2NrL2JhZGJsb2Nrcy5jLTIyLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MjM6ICogV2hlbiB0aGUgY2FsbGVyIG9mIGJhZGJsb2Nrc19zZXQoKSB3YW50cyB0byBzZXQgYSByYW5nZSBvZiBiYWQgYmxvY2tzLCB0aGVcXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMjgyLSAqICAgICBibG9ja3MgdGFibGUgYXJlIGFsbCBhY2tlZCwgbWVyZ2luZyB0aGVtIGludG8gYSBsYXJnZXIgb25lIHJhbmdlIG1heVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjI4MzogKiAgICAgb2NjdXB5IGxlc3MgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZSBhbmQgbWFrZSBiYWRibG9ja3NfY2hlY2soKSBmYXN0ZXIuXFxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIwLSAqIHRoZSBiYWQgYmxvY2sgcmFuZ2Ugc2V0dGluZyBjb25kaXRpb25zLiBNYXliZSB0aGVyZSBpcyBzb21lIHJhcmUgY29ybmVyIGNhc2VcXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJ3QgaHVydCBpZiBiYWRibG9ja3Nfc2V0KCkgZmFpbHMgZHVlXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIzLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MzI0OiAqIEluc2lkZSBiYWRibG9ja3Nfc2V0KCkgZWFjaCBsb29wIHN0YXJ0cyBieSBqdW1waW5nIHRvIHJlX2luc2VydCBsYWJlbCwgZXZlcnlcXG5ibG9jay9iYWRibG9ja3MuYzozMjU6ICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2VcXG5ibG9jay9iYWRibG9ja3MuYy0zMjYtICogd2hpY2ggc3RhcnRzIGJlZm9yZSBvciBhdCBjdXJyZW50IHNldHRpbmcgcmFuZ2UuIFNpbmNlIHRoZSBzZXR0aW5nIGJhZCBibG9ja3NcXG5ibG9jay9iYWRibG9ja3MuYy0zMjctICogcmFuZ2UgaXMgaGFuZGxlZCBmcm9tIGhlYWQgdG8gdGFpbCwgbW9zdCBvZiB0aGUgY2FzZXMgaXQgaXMgdW5uZWNlc3NhcnkgdG8gZG9cXG5ibG9jay9iYWRibG9ja3MuYzozMjg6ICogdGhlIGJpbmFyeSBzZWFyY2ggaW5zaWRlIHByZXZfYmFkYmxvY2tzKCksIGl0IGlzIHBvc3NpYmxlIHRvIHByb3ZpZGUgYSBoaW50XFxuYmxvY2svYmFkYmxvY2tzLmM6MzI5OiAqIHRvIHByZXZfYmFkYmxvY2tzKCkgZm9yIGEgZmFzdCBwYXRoLCB0aGVuIHRoZSBleHBlbnNpdmUgYmluYXJ5IHNlYXJjaCBjYW4gYmVcXG5ibG9jay9iYWRibG9ja3MuYzozMzA6ICogYXZvaWRlZC4gSW4gbXkgdGVzdCB3aXRoIHRoZSBoaW50IHRvIHByZXZfYmFkYmxvY2tzKCksIGV4Y2VwdCBmb3IgdGhlIGZpcnN0XFxuYmxvY2svYmFkYmxvY2tzLmM6MzMxOiAqIGxvb3AsIGFsbCByZXN0ZWQgY2FsbHMgdG8gcHJldl9iYWRibG9ja3MoKSBjYW4gZ28gaW50byB0aGUgZmFzdCBwYXRoIGFuZFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTMzMi0gKiByZXR1cm4gY29ycmVjdCBiYWQgYmxvY2tzIHRhYmxlIGluZGV4IGltbWVkaWF0ZWx5Llxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNDU2LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjQ1NzpzdGF0aWMgaW50IHByZXZfYnlfaGludChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IGhpbnQpXFxuYmxvY2svYmFkYmxvY2tzLmMtNDU4LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ4MC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo0ODE6c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXFxuYmxvY2svYmFkYmxvY2tzLmMtNDgyLVxcdFxcdFxcdCAgaW50IGhpbnQpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy01MzItICovXFxuYmxvY2svYmFkYmxvY2tzLmM6NTMzOnN0YXRpYyBib29sIGNhbl9tZXJnZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuYmxvY2svYmFkYmxvY2tzLmM6NTM0OlxcdFxcdFxcdCAgICBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcXG5ibG9jay9iYWRibG9ja3MuYy01MzUte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNTUwLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjU1MTpzdGF0aWMgaW50IGZyb250X21lcmdlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtNTUyLXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTU4Ni0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo1ODc6c3RhdGljIGJvb2wgY2FuX2NvbWJpbmVfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjU4ODpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcXG5ibG9jay9iYWRibG9ja3MuYy01ODkte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjA3LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjYwODpzdGF0aWMgdm9pZCBmcm9udF9jb21iaW5lKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldilcXG5ibG9jay9iYWRibG9ja3MuYy02MDkte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjI0LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjYyNTpzdGF0aWMgYm9vbCBvdmVybGFwX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZnJvbnQsXFxuYmxvY2svYmFkYmxvY2tzLmM6NjI2OlxcdFxcdFxcdCAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtNjI3LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTYzOS0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo2NDA6c3RhdGljIGJvb2wgb3ZlcmxhcF9iZWhpbmQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTY0MS1cXHRcXHRcXHQgICBpbnQgYmVoaW5kKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjcxLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjY3MjpzdGF0aWMgYm9vbCBjYW5fZnJvbnRfb3ZlcndyaXRlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcXG5ibG9jay9iYWRibG9ja3MuYzo2NzM6XFx0XFx0XFx0XFx0c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsIGludCAqZXh0cmEpXFxuYmxvY2svYmFkYmxvY2tzLmMtNjc0LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo3MTU6c3RhdGljIGludCBmcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjcxNjpcXHRcXHRcXHQgICBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCwgaW50IGV4dHJhKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNy17XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03NzYtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6Nzc3OnN0YXRpYyBpbnQgaW5zZXJ0X2F0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgYXQsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTc3OC17XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03ODEtXFxuYmxvY2svYmFkYmxvY2tzLmM6NzgyOlxcdFdBUk5fT04oYmFkYmxvY2tzX2Z1bGwoYmIpKTtcXG5ibG9jay9iYWRibG9ja3MuYy03ODMtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03OTEtXFxuYmxvY2svYmFkYmxvY2tzLmM6NzkyOnN0YXRpYyB2b2lkIGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoc3RydWN0IGJhZGJsb2NrcyAqYmIpXFxuYmxvY2svYmFkYmxvY2tzLmMtNzkzLXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTgxNS0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo4MTY6c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTgxNy17XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04MzctLyogRG8gZXhhY3Qgd29yayB0byBzZXQgYmFkIGJsb2NrIHJhbmdlIGludG8gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjgzODpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy04MzktXFx0XFx0XFx0ICAgaW50IGFja25vd2xlZGdlZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg0MS1cXHRpbnQgbGVuID0gMCwgYWRkZWQgPSAwO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjg0MjpcXHRzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgYmFkO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTg0My1cXHRpbnQgcHJldiA9IC0xLCBoaW50ID0gLTE7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04NDctXFx0aWYgKGJiLVxcdTAwM2VzaGlmdCBcXHUwMDNjIDApXFxuYmxvY2svYmFkYmxvY2tzLmM6ODQ4OlxcdFxcdC8qIGJhZGJsb2NrcyBhcmUgZGlzYWJsZWQgKi9cXG5ibG9jay9iYWRibG9ja3MuYy04NDktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtODczLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjg3NDpcXHRpZiAoYmFkYmxvY2tzX2Z1bGwoYmIpKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg3NS1cXHRcXHRnb3RvIG91dDtcXG5ibG9jay9iYWRibG9ja3MuYy04NzYtXFxuYmxvY2svYmFkYmxvY2tzLmM6ODc3OlxcdGlmIChiYWRibG9ja3NfZW1wdHkoYmIpKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtODc4LVxcdFxcdGxlbiA9IGluc2VydF9hdChiYiwgMCwgXFx1MDAyNmJhZCk7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04ODMtXFxuYmxvY2svYmFkYmxvY2tzLmM6ODg0OlxcdHByZXYgPSBwcmV2X2JhZGJsb2NrcyhiYiwgXFx1MDAyNmJhZCwgaGludCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtODg1LVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjg4NjpcXHQvKiBzdGFydCBiZWZvcmUgYWxsIGJhZGJsb2NrcyAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTg4Ny1cXHRpZiAocHJldiBcXHUwMDNjIDApIHtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTk3MS1cXHRcXHRlbHNlXFxuYmxvY2svYmFkYmxvY2tzLmM6OTcyOlxcdFxcdFxcdGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoYmIpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTk3My1cXHR9XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy05ODYtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6OTg3OnN0YXRpYyBpbnQgZnJvbnRfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjk4ODpcXHRcXHQgICAgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsIGludCAqZGVsZXRlZClcXG5ibG9jay9iYWRibG9ja3MuYy05ODkte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTAyOS0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMDMwOnN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcXG5ibG9jay9iYWRibG9ja3MuYzoxMDMxOlxcdFxcdFxcdFxcdCAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTAzMi17XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMDQ3LS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNsZWFyIGJhZCBibG9jayByYW5nZSBmcm9tIHRoZSBiYWQgYmxvY2sgdGFibGUgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMDQ4OnN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA0OS17XFxuYmxvY2svYmFkYmxvY2tzLmM6MTA1MDpcXHRzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgYmFkO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwNTEtXFx0aW50IHByZXYgPSAtMSwgaGludCA9IC0xO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA1NS1cXHRpZiAoYmItXFx1MDAzZXNoaWZ0IFxcdTAwM2MgMClcXG5ibG9jay9iYWRibG9ja3MuYzoxMDU2OlxcdFxcdC8qIGJhZGJsb2NrcyBhcmUgZGlzYWJsZWQgKi9cXG5ibG9jay9iYWRibG9ja3MuYy0xMDU3LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODYtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA4NzpcXHRpZiAoYmFkYmxvY2tzX2VtcHR5KGJiKSkge1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODgtXFx0XFx0bGVuID0gc2VjdG9ycztcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwOTMtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA5NDpcXHRwcmV2ID0gcHJldl9iYWRibG9ja3MoYmIsIFxcdTAwMjZiYWQsIGhpbnQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwOTUtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA5NjpcXHQvKiBTdGFydCBiZWZvcmUgYWxsIGJhZGJsb2NrcyAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwOTctXFx0aWYgKHByZXYgXFx1MDAzYyAwKSB7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMTExLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjExMTI6XFx0LyogU3RhcnQgYWZ0ZXIgYWxsIGJhZGJsb2NrcyAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMTMtXFx0aWYgKChwcmV2ICsgMSkgXFx1MDAzZT0gYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2ICFvdmVybGFwX2Zyb250KGJiLCBwcmV2LCBcXHUwMDI2YmFkKSkge1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTExOS1cXHQvKiBDbGVhciB3aWxsIHNwbGl0IGEgYmFkIHJlY29yZCBidXQgdGhlIHRhYmxlIGlzIGZ1bGwgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMTIwOlxcdGlmIChiYWRibG9ja3NfZnVsbChiYikgXFx1MDAyNlxcdTAwMjYgKEJCX09GRlNFVChwW3ByZXZdKSBcXHUwMDNjIGJhZC5zdGFydCkgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9iYWRibG9ja3MuYy0xMTIxLVxcdCAgICAoQkJfRU5EKHBbcHJldl0pIFxcdTAwM2UgKGJhZC5zdGFydCArIHNlY3RvcnMpKSkge1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE1OC1cXG5ibG9jay9iYWRibG9ja3MuYzoxMTU5OlxcdC8qIE5vdCBjb3ZlciBhbnkgYmFkYmxvY2tzIHJhbmdlIGluIHRoZSB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNjAtXFx0bGVuID0gc2VjdG9ycztcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNzEtXFx0aWYgKGNsZWFyZWQpIHtcXG5ibG9jay9iYWRibG9ja3MuYzoxMTcyOlxcdFxcdGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoYmIpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNzMtXFx0XFx0c2V0X2NoYW5nZWQoYmIpO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE4NC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjaGVjayBiYWQgYmxvY2tzIHJhbmdlIGZyb20gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExODU6c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExODYtXFx0XFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExODgtXFx0aW50IHByZXYgPSAtMSwgaGludCA9IC0xLCBzZXQgPSAwO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExODk6XFx0c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0IGJhZDtcXG5ibG9jay9iYWRibG9ja3MuYzoxMTkwOlxcdGludCB1bmFja2VkX2JhZGJsb2NrcyA9IDA7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTE5MTpcXHRpbnQgYWNrZWRfYmFkYmxvY2tzID0gMDtcXG5ibG9jay9iYWRibG9ja3MuYy0xMTkyLVxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE5OC1cXG5ibG9jay9iYWRibG9ja3MuYzoxMTk5OlxcdGlmIChiYWRibG9ja3NfZW1wdHkoYmIpKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMC1cXHRcXHRsZW4gPSBzZWN0b3JzO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMy1cXG5ibG9jay9iYWRibG9ja3MuYzoxMjA0OlxcdHByZXYgPSBwcmV2X2JhZGJsb2NrcyhiYiwgXFx1MDAyNmJhZCwgaGludCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTIwNS1cXG5ibG9jay9iYWRibG9ja3MuYzoxMjA2OlxcdC8qIHN0YXJ0IGFmdGVyIGFsbCBiYWRibG9ja3MgKi9cXG5ibG9jay9iYWRibG9ja3MuYy0xMjA3LVxcdGlmICgocHJldiBcXHUwMDNlPSAwKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIxMi1cXG5ibG9jay9iYWRibG9ja3MuYzoxMjEzOlxcdC8qIE92ZXJsYXBwZWQgd2l0aCBmcm9udCBiYWRibG9ja3MgcmVjb3JkICovXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIxNC1cXHRpZiAoKHByZXYgXFx1MDAzZT0gMCkgXFx1MDAyNlxcdTAwMjYgb3ZlcmxhcF9mcm9udChiYiwgcHJldiwgXFx1MDAyNmJhZCkpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMjE1LVxcdFxcdGlmIChCQl9BQ0socFtwcmV2XSkpXFxuYmxvY2svYmFkYmxvY2tzLmM6MTIxNjpcXHRcXHRcXHRhY2tlZF9iYWRibG9ja3MrKztcXG5ibG9jay9iYWRibG9ja3MuYy0xMjE3LVxcdFxcdGVsc2VcXG5ibG9jay9iYWRibG9ja3MuYzoxMjE4OlxcdFxcdFxcdHVuYWNrZWRfYmFkYmxvY2tzKys7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTIxOS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMzktXFxuYmxvY2svYmFkYmxvY2tzLmM6MTI0MDpcXHQvKiBub3QgY292ZXIgYW55IGJhZGJsb2NrcyByYW5nZSBpbiB0aGUgdGFibGUgKi9cXG5ibG9jay9iYWRibG9ja3MuYy0xMjQxLVxcdGxlbiA9IHNlY3RvcnM7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMjUyLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNTM6XFx0aWYgKHVuYWNrZWRfYmFkYmxvY2tzIFxcdTAwM2UgMClcXG5ibG9jay9iYWRibG9ja3MuYy0xMjU0LVxcdFxcdHJ2ID0gLTE7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTI1NTpcXHRlbHNlIGlmIChhY2tlZF9iYWRibG9ja3MgXFx1MDAzZSAwKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNTYtXFx0XFx0cnYgPSAxO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI2My0vKipcXG5ibG9jay9iYWRibG9ja3MuYzoxMjY0OiAqIGJhZGJsb2Nrc19jaGVjaygpIC0gY2hlY2sgYSBnaXZlbiByYW5nZSBmb3IgYmFkIHNlY3RvcnNcXG5ibG9jay9iYWRibG9ja3MuYzoxMjY1OiAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjY6ICogQHM6XFx0XFx0c2VjdG9yIChzdGFydCkgYXQgd2hpY2ggdG8gY2hlY2sgZm9yIGJhZGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjc6ICogQHNlY3RvcnM6XFx0bnVtYmVyIG9mIHNlY3RvcnMgdG8gY2hlY2sgZm9yIGJhZGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNjgtICogQGZpcnN0X2JhZDpcXHRwb2ludGVyIHRvIHN0b3JlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBiYWRibG9ja1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjk6ICogQGJhZF9zZWN0b3JzOiBwb2ludGVyIHRvIHN0b3JlIG51bWJlciBvZiBiYWRibG9ja3MgYWZ0ZXIgQGZpcnN0X2JhZFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzAtICpcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzktICpcXG5ibG9jay9iYWRibG9ja3MuYzoxMjgwOiAqIExvY2tpbmcgb2YgdGhlIGJhZC1ibG9jayB0YWJsZSB1c2VzIGEgc2VxbG9jayBzbyBiYWRibG9ja3NfY2hlY2tcXG5ibG9jay9iYWRibG9ja3MuYy0xMjgxLSAqIG1pZ2h0IG5lZWQgdG8gcmV0cnkgaWYgaXQgaXMgdmVyeSB1bmx1Y2t5Llxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5Ni0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMjk3OmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5OC1cXHRcXHRcXHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzE1LVxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzE2OlxcdHJ2ID0gX2JhZGJsb2Nrc19jaGVjayhiYiwgcywgc2VjdG9ycywgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTMxNy1cXHRpZiAocmVhZF9zZXFyZXRyeShcXHUwMDI2YmItXFx1MDAzZWxvY2ssIHNlcSkpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzIxLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxMzIyOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyMy1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzI0LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMjU6ICogYmFkYmxvY2tzX3NldCgpIC0gQWRkIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXFxuYmxvY2svYmFkYmxvY2tzLmM6MTMyNjogKiBAYmI6XFx0XFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cXG5ibG9jay9iYWRibG9ja3MuYy0xMzI3LSAqIEBzOlxcdFxcdGZpcnN0IHNlY3RvciB0byBtYXJrIGFzIGJhZFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMzNi0gKiAgdHJ1ZTogc3VjY2Vzc1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMzc6ICogIGZhbHNlOiBmYWlsZWQgdG8gc2V0IGJhZGJsb2NrcyAob3V0IG9mIHNwYWNlKS4gUGFyaXRhbCBzZXR0aW5nIHdpbGwgYmVcXG5ibG9jay9iYWRibG9ja3MuYy0xMzM4LSAqICB0cmVhdGVkIGFzIGZhaWx1cmUuXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMzOS0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMzQwOmJvb2wgYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy0xMzQxLVxcdFxcdCAgIGludCBhY2tub3dsZWRnZWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0Mi17XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM0MzpcXHRyZXR1cm4gX2JhZGJsb2Nrc19zZXQoYmIsIHMsIHNlY3RvcnMsIGFja25vd2xlZGdlZCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0NC19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM0NTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ2LVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDctLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM0ODogKiBiYWRibG9ja3NfY2xlYXIoKSAtIFJlbW92ZSBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDk6ICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM1MC0gKiBAczpcXHRcXHRmaXJzdCBzZWN0b3IgdG8gbWFyayBhcyBiYWRcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNTgtICogIHRydWU6IHN1Y2Nlc3NcXG5ibG9jay9iYWRibG9ja3MuYzoxMzU5OiAqICBmYWxzZTogZmFpbGVkIHRvIGNsZWFyIGJhZGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjAtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM2MTpib29sIGJhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcXG5ibG9jay9iYWRibG9ja3MuYy0xMzYyLXtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzYzOlxcdHJldHVybiBfYmFkYmxvY2tzX2NsZWFyKGJiLCBzLCBzZWN0b3JzKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzY0LX1cXG5ibG9jay9iYWRibG9ja3MuYzoxMzY1OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jbGVhcik7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2Ni1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzY3LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjg6ICogYWNrX2FsbF9iYWRibG9ja3MoKSAtIEFja25vd2xlZGdlIGFsbCBiYWQgYmxvY2tzIGluIGEgbGlzdC5cXG5ibG9jay9iYWRibG9ja3MuYzoxMzY5OiAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzAtICpcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzMtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM3NDp2b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzUte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQwMS19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTQwMjpFWFBPUlRfU1lNQk9MX0dQTChhY2tfYWxsX2JhZGJsb2Nrcyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTQwMy1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDA0LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0MDU6ICogYmFkYmxvY2tzX3Nob3coKSAtIHN5c2ZzIGFjY2VzcyB0byBiYWQtYmxvY2tzIGxpc3RcXG5ibG9jay9iYWRibG9ja3MuYzoxNDA2OiAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MDctICogQHBhZ2U6XFx0YnVmZmVyIHJlY2VpdmVkIGZyb20gc3lzZnNcXG5ibG9jay9iYWRibG9ja3MuYzoxNDA4OiAqIEB1bmFjazpcXHR3ZWF0aGVyIHRvIHNob3cgdW5hY2tub3dsZWRnZWQgYmFkYmxvY2tzXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQwOS0gKlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQxMi0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxNDEzOnNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjaylcXG5ibG9jay9iYWRibG9ja3MuYy0xNDE0LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTAtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NTE6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3Nob3cpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTItXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ1My0vKipcXG5ibG9jay9iYWRibG9ja3MuYzoxNDU0OiAqIGJhZGJsb2Nrc19zdG9yZSgpIC0gc3lzZnMgYWNjZXNzIHRvIGJhZC1ibG9ja3MgbGlzdFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NTU6ICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ1Ni0gKiBAcGFnZTpcXHRidWZmZXIgcmVjZWl2ZWQgZnJvbSBzeXNmc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTctICogQGxlbjpcXHRsZW5ndGggb2YgZGF0YSByZWNlaXZlZCBmcm9tIHN5c2ZzXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ1ODogKiBAdW5hY2s6XFx0d2VhdGhlciB0byBzaG93IHVuYWNrbm93bGVkZ2VkIGJhZGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTktICpcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NjItICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ2Mzpzc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG5ibG9jay9iYWRibG9ja3MuYy0xNDY0LVxcdFxcdFxcdGludCB1bmFjaylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODItXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4MzpcXHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHNlY3RvciwgbGVuZ3RoLCAhdW5hY2spKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODQtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDg3LX1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDg4OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4OS1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDkwOnN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTEtXFx0XFx0aW50IGVuYWJsZSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MTItLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUxMzogKiBiYWRibG9ja3NfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MTQ6ICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUxNTogKiBAZW5hYmxlOlxcdHdlYXRoZXIgdG8gZW5hYmxlIGJhZGJsb2NrcyBhY2NvdW50aW5nXFxuYmxvY2svYmFkYmxvY2tzLmMtMTUxNi0gKlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTUyMC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxNTIxOmludCBiYWRibG9ja3NfaW5pdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGVuYWJsZSlcXG5ibG9jay9iYWRibG9ja3MuYy0xNTIyLXtcXG5ibG9jay9iYWRibG9ja3MuYzoxNTIzOlxcdHJldHVybiBfX2JhZGJsb2Nrc19pbml0KE5VTEwsIGJiLCBlbmFibGUpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjQtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MjU6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2luaXQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjYtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUyNzppbnQgZGV2bV9pbml0X2JhZGJsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1Mjgte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTUzMC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5ibG9jay9iYWRibG9ja3MuYzoxNTMxOlxcdHJldHVybiBfX2JhZGJsb2Nrc19pbml0KGRldiwgYmIsIDEpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzItfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9pbml0X2JhZGJsb2Nrcyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUzNC1cXG5ibG9jay9iYWRibG9ja3MuYy0xNTM1LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzY6ICogYmFkYmxvY2tzX2V4aXQoKSAtIGZyZWUgdGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmVcXG5ibG9jay9iYWRibG9ja3MuYzoxNTM3OiAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzgtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUzOTp2b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NDAte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTU0OC19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTU0OTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfZXhpdCk7XFxuLS1cXG5ibG9jay9nZW5oZC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuYmxvY2svZ2VuaGQuYzoyNjojaW5jbHVkZSBcXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcXHUwMDNlXFxuYmxvY2svZ2VuaGQuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGFydF9zdGF0LmhcXHUwMDNlXFxuLS1cXG5ibG9jay9nZW5oZC5jPTg1Mj1FWFBPUlRfU1lNQk9MKGludmFsaWRhdGVfZGlzayk7XFxuLS1cXG5ibG9jay9nZW5oZC5jLTg1NC0vKiBzeXNmcyBhY2Nlc3MgdG8gYmFkLWJsb2NrcyBsaXN0LiAqL1xcbmJsb2NrL2dlbmhkLmM6ODU1OnN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL2dlbmhkLmMtODU2LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NjMtXFxuYmxvY2svZ2VuaGQuYzo4NjQ6XFx0cmV0dXJuIGJhZGJsb2Nrc19zaG93KGRpc2stXFx1MDAzZWJiLCBwYWdlLCAwKTtcXG5ibG9jay9nZW5oZC5jLTg2NS19XFxuYmxvY2svZ2VuaGQuYy04NjYtXFxuYmxvY2svZ2VuaGQuYzo4Njc6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL2dlbmhkLmMtODY4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NzUtXFxuYmxvY2svZ2VuaGQuYzo4NzY6XFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShkaXNrLVxcdTAwM2ViYiwgcGFnZSwgbGVuLCAwKTtcXG5ibG9jay9nZW5oZC5jLTg3Ny19XFxuLS1cXG5ibG9jay9nZW5oZC5jPTExNzY9c3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xcbmJsb2NrL2dlbmhkLmM6MTE3NzpzdGF0aWMgREVWSUNFX0FUVFIoYmFkYmxvY2tzLCAwNjQ0LCBkaXNrX2JhZGJsb2Nrc19zaG93LCBkaXNrX2JhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svZ2VuaGQuYy0xMTc4LXN0YXRpYyBERVZJQ0VfQVRUUihkaXNrc2VxLCAwNDQ0LCBkaXNrc2VxX3Nob3csIE5VTEwpO1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMjEzPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkaXNrX2F0dHJzW10gPSB7XFxuLS1cXG5ibG9jay9nZW5oZC5jLTEyMjQtXFx0XFx1MDAyNmRldl9hdHRyX2luZmxpZ2h0LmF0dHIsXFxuYmxvY2svZ2VuaGQuYzoxMjI1OlxcdFxcdTAwMjZkZXZfYXR0cl9iYWRibG9ja3MuYXR0cixcXG5ibG9jay9nZW5oZC5jLTEyMjYtXFx0XFx1MDAyNmRldl9hdHRyX2V2ZW50cy5hdHRyLFxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMjQwPXN0YXRpYyB1bW9kZV90IGRpc2tfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IG4pXFxuLS1cXG5ibG9jay9nZW5oZC5jLTEyNDQtXFxuYmxvY2svZ2VuaGQuYzoxMjQ1OlxcdGlmIChhID09IFxcdTAwMjZkZXZfYXR0cl9iYWRibG9ja3MuYXR0ciBcXHUwMDI2XFx1MDAyNiAhZGlzay1cXHUwMDNlYmIpXFxuYmxvY2svZ2VuaGQuYy0xMjQ2LVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDoyOC44Nzc2ODgyMzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjc4MjUxOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgS2VybmVsIEJhZCBCbG9jayBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIGBibG9jay9iYWRibG9ja3MuY2AgaXMgZGVmaW5pdGVseSBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBgYmxvY2svTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQ7IGBiYWRibG9ja3Mub2AgaXMgYWx3YXlzIGJlaW5nIGJ1aWx0IHdpdGggdGhlIGJsb2NrIGxheWVyLiBJbnRlcmVzdGluZy4gTGV0J3MgZGlnIGludG8gd2hvJ3MgYWN0dWFsbHkgKnVzaW5nKiB0aGlzIGNvZGUuXG5cbkhtbSwgUkFJRCwgc3BlY2lmaWNhbGx5IHRoZSBNRCBsYXllciwgZGVmaW5pdGVseSBsZXZlcmFnZXMgYGJhZGJsb2Nrc2AsIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGRhdGEgaW50ZWdyaXR5LiBBbmQgSSBzZWUgYHBtZW0vbnZkaW1tYCBpcyBpbiB0aGUgbWl4IHRvby4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBOVkRJTU1zLCBtYW5hZ2luZyBiYWQgYmxvY2tzIGlzICpjcml0aWNhbCogZm9yIHRob3NlLCBzbyB0aGF0J3MgbG9naWNhbC4gTnVsbF9ibGsgaXMgdXNpbmcgaXQgdG9vPyBJJ20gY3VyaW91cyBob3cgdGhleSdyZSBoYW5kbGluZyBiYWQgYmxvY2tzIHdoZW4gdGhleSBkb24ndCBldmVuIGhhdmUgYSBwaHlzaWNhbCBibG9jayBkZXZpY2UsIEknbGwgbmVlZCB0byBsb29rIGludG8gdGhhdCBvbmUgZnVydGhlci5cblxuVGhlIG1vcmUgY3J1Y2lhbCBxdWVzdGlvbiBpczogd2hvICppbml0aWFsaXplcyogdGhlIGBkaXNrLVx1MDAzZWJiYCBzdHJ1Y3R1cmUgb3IgY2FsbHMgYGJhZGJsb2Nrc19pbml0YD8gS25vd2luZyAqd2hvKiBpcyBzZXR0aW5nIHVwIHRoZSBiYWQgYmxvY2sgbWFuYWdlbWVudCBmb3IgYSBkZXZpY2UgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgYmVpbmcgKnVzZWQqIGVmZmVjdGl2ZWx5LiBJJ2xsIG5lZWQgdG8gdHJhY2UgZG93biB0aG9zZSBjYWxscyB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHdob2xlIGJhZCBibG9jayBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDozMi4xNTU5NDMzNDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5ODIyMzE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWRibG9ja3NfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYz0xNDg4PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4OS1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDkwOnN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTEtXFx0XFx0aW50IGVuYWJsZSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MTItLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUxMzogKiBiYWRibG9ja3NfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MTQtICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNTIwLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MjE6aW50IGJhZGJsb2Nrc19pbml0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZW5hYmxlKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjIte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MjM6XFx0cmV0dXJuIF9fYmFkYmxvY2tzX2luaXQoTlVMTCwgYmIsIGVuYWJsZSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUyNC19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTUyNTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfaW5pdCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUyNi1cXG5ibG9jay9iYWRibG9ja3MuYz0xNTI3PWludCBkZXZtX2luaXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNTMwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzE6XFx0cmV0dXJuIF9fYmFkYmxvY2tzX2luaXQoZGV2LCBiYiwgMSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUzMi19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03ODY9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04MDEtXFx0SU5JVF9SQURJWF9UUkVFKFxcdTAwMjZkZXYtXFx1MDAzZWNhY2hlLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4MDI6XFx0aWYgKGJhZGJsb2Nrc19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWJhZGJsb2NrcywgMCkpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04MDMtXFx0XFx0a2ZyZWUoZGV2KTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNzkzPWludCBtZF9yZGV2X2luaXQoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMzgxNS1cXHQgKi9cXG5kcml2ZXJzL21kL21kLmM6MzgxNjpcXHRyZXR1cm4gYmFkYmxvY2tzX2luaXQoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgMCk7XFxuZHJpdmVycy9tZC9tZC5jLTM4MTctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01OD1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU5LVxcdFxcdFxcdGludCB1bmFjayk7XFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo2MDppbnQgYmFkYmxvY2tzX2luaXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBlbmFibGUpO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNjEtdm9pZCBiYWRibG9ja3NfZXhpdChzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQwOjMzLjc1NDE3MTk2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxMjM4NDQ1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjpcblxuKipCYWQgQmxvY2sgSW5pdGlhbGl6YXRpb246IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGJhZCBibG9jayBtYW5hZ2VtZW50IGlzIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBtdWx0aXBsZSBpbml0aWFsaXphdGlvbiBwb2ludHMuIEZpcnN0LCBgbnVsbF9ibGtgIGluaXRpYWxpemVzIGBcdTAwMjZkZXYtXHUwMDNlYmFkYmxvY2tzYC4gVGhhdCdzIGV4cGVjdGVkLCBhIGJhc2ljIGJsb2NrIGRldmljZSBuZWVkcyB0byBrbm93IGFib3V0IGJhZCBzZWN0b3JzLiBUaGVuLCBpbiB0aGUgTUQgcmFpZCBzZXR1cCwgd2UgaGF2ZSBgbWRfcmRldl9pbml0YCBpbml0aWFsaXppbmcgYFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzYC4gVGhpcyBtYWtlcyBzZW5zZTsgUkFJRCBkZXZpY2VzLCBidWlsdCBvbiBtdWx0aXBsZSB1bmRlcmx5aW5nIGRldmljZXMsIHdvdWxkIGFsc28gbmVlZCB0aGVpciBvd24gYmFkIGJsb2NrIGhhbmRsaW5nLCBsaWtlbHkgdG8gYWNjb3VudCBmb3IgZmFpbHVyZXMgaW4gdGhlIGNvbnN0aXR1ZW50IGRyaXZlcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgYW5kIGFueSBwb3RlbnRpYWwgb3ZlcmxhcC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIHdoYXQgb3RoZXIgbW9kdWxlcyBhcmUgbWFraW5nIHVzZSBvZiB0aGlzPyBNeSB0aG91Z2h0IG5vdyBpcyB0byBjaGVjayBmb3IgdGhlIGNhbGxzIHRvIGBkZXZtX2luaXRfYmFkYmxvY2tzYCwgYXMgaXQgaXMgbGlrZWx5IGEgc2hhcmVkIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gc2VlIHdobydzIGNhbGxpbmcgaXQgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgcGljdHVyZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGJhZCBibG9jayBzeXN0ZW1zLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDozOC44NzgwMTk5ODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODQ1MDI1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bV9pbml0X2JhZGJsb2Nrc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYz0xNTI1PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19pbml0KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xNTI2LVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1Mjc6aW50IGRldm1faW5pdF9iYWRibG9ja3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmFkYmxvY2tzICpiYilcXG5ibG9jay9iYWRibG9ja3MuYy0xNTI4LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzItfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9pbml0X2JhZGJsb2Nrcyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUzNC1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9Mjg1PWludCBkZXZtX25zaW9fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG5kX25hbWVzcGFjZV9pbyAqbnNpbyxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMzAxLVxcdG5kbnMtXFx1MDAzZXJ3X2J5dGVzID0gbnNpb19yd19ieXRlcztcXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjMwMjpcXHRpZiAoZGV2bV9pbml0X2JhZGJsb2NrcyhkZXYsIFxcdTAwMjZuc2lvLVxcdTAwM2ViYikpXFxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0zMDMtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDYzPXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTY1LVxcdFxcdFxcdC8gNTEyKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTY2OlxcdGlmIChkZXZtX2luaXRfYmFkYmxvY2tzKGRldiwgXFx1MDAyNnBtZW0tXFx1MDAzZWJiKSlcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTY3LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmM9MTM9c3RhdGljIGludCBuZF9yZWdpb25fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmMtMzctXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmM6Mzg6XFx0aWYgKGRldm1faW5pdF9iYWRibG9ja3MoZGV2LCBcXHUwMDI2bmRfcmVnaW9uLVxcdTAwM2ViYikpXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmMtMzktXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTI4PXN0cnVjdCBiYWRibG9ja3Mge1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6Mjk6XFx0c3RydWN0IGRldmljZSAqZGV2O1xcdC8qIHNldCBieSBkZXZtX2luaXRfYmFkYmxvY2tzICovXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC0zMC1cXHRpbnQgY291bnQ7XFx0XFx0LyogY291bnQgb2YgYmFkIGJsb2NrcyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD02Mj1zdHJ1Y3QgZGV2aWNlO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NjM6aW50IGRldm1faW5pdF9iYWRibG9ja3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC02NC1zdGF0aWMgaW5saW5lIHZvaWQgZGV2bV9leGl0X2JhZGJsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDo0MC41NjI1MzA3NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwNzA5Mjg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVsdmluZyBpbnRvIEJhZCBCbG9jayBIYW5kbGluZyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGJhZCBibG9jayBtYW5hZ2VtZW50IHdvcmtzIGF0IHRoZSBzeXN0ZW0gbGV2ZWwsIGFuZCBzcGVjaWZpY2FsbHkgaG93IHdlJ3JlIGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCBzeXNmcy4gSXQgc2VlbXMgbGlrZSB0aGUgYGRpc2stXHUwMDNlYmJgIHN0cnVjdHVyZSBpcyBjZW50cmFsIHRvIHRoaXMuIEkga25vdyB0aGF0IHRoZSBgYmFkYmxvY2tzYCBzeXNmcyBhdHRyaWJ1dGUgYWxsb3dzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoaXMgaW5mb3JtYXRpb24sIGFuZCB0aGUgb2J2aW91cyBsaW5rIHRoZXJlIGlzIHRocm91Z2ggYGJhZGJsb2Nrc19zdG9yZWAgYW5kIGBiYWRibG9ja3Nfc2hvd2AuIEl0J3MgcGFydGljdWxhcmx5IHVzZWZ1bCBvbiB0aGluZ3MgbGlrZSBNRCBkZXZpY2VzLCB3aGVyZSB0aGUgYHJkZXYtXHUwMDNlYmFkYmxvY2tzYCBhdHRyaWJ1dGUgaXMgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLlxuXG5IbW0sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHdoZXJlIGBiYWRibG9ja3Nfc3RvcmVgIGlzIGFjdHVhbGx5ICp1c2VkKi4gV2hlcmUgYXJlIHdlIHdyaXRpbmcgdGhpcyBiYWQgYmxvY2sgZGF0YSBhbmQgaG93IGlzIGl0IGJlaW5nIGNvbnN1bWVkPyBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTE1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDA6NDIuNTY5NjI1ODE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3NTgxMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhZGJsb2Nrc19zdG9yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYz0xNDUxPUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zaG93KTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTMtLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ1NDogKiBiYWRibG9ja3Nfc3RvcmUoKSAtIHN5c2ZzIGFjY2VzcyB0byBiYWQtYmxvY2tzIGxpc3RcXG5ibG9jay9iYWRibG9ja3MuYy0xNDU1LSAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ2Mi0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxNDYzOnNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NjQtXFx0XFx0XFx0aW50IHVuYWNrKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4Ny19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4ODpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc3RvcmUpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktXFxuLS1cXG5ibG9jay9nZW5oZC5jPTg1NT1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODY2LVxcbmJsb2NrL2dlbmhkLmM6ODY3OnN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5ibG9jay9nZW5oZC5jLTg2OC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODc1LVxcbmJsb2NrL2dlbmhkLmM6ODc2OlxcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoZGlzay1cXHUwMDNlYmIsIHBhZ2UsIGxlbiwgMCk7XFxuYmxvY2svZ2VuaGQuYy04NzctfVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMTc2PXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcXG5ibG9jay9nZW5oZC5jOjExNzc6c3RhdGljIERFVklDRV9BVFRSKGJhZGJsb2NrcywgMDY0NCwgZGlza19iYWRibG9ja3Nfc2hvdywgZGlza19iYWRibG9ja3Nfc3RvcmUpO1xcbmJsb2NrL2dlbmhkLmMtMTE3OC1zdGF0aWMgREVWSUNFX0FUVFIoZGlza3NlcSwgMDQ0NCwgZGlza3NlcV9zaG93LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTUzMz1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTM5LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU0MDpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NDEtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MzYxND1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL21kL21kLmMtMzYxNS17XFxuZHJpdmVycy9tZC9tZC5jOjM2MTY6XFx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMCk7XFxuZHJpdmVycy9tZC9tZC5jLTM2MTctXFx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNjI5PXN0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL21kL21kLmMtMzYzMC17XFxuZHJpdmVycy9tZC9tZC5jOjM2MzE6XFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDEpO1xcbmRyaXZlcnMvbWQvbWQuYy0zNjMyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NTc9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKTtcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oOjU4OnNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTktXFx0XFx0XFx0aW50IHVuYWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDA6NDQuMDQ3MjE1NDY5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNDc3MjU4OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJsb2NrIExheWVyIEJhZGJsb2NrcyBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29tbWl0IGNoYW5naW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uIGluIGBibG9jay9iYWRibG9ja3MuY2AuICBgYmFkYmxvY2tzX3N0b3JlYCB3cml0ZXMgYmFkIGJsb2NrcyB0byBtZCBvciBudWxsX2JsayBkZXZpY2VzIHVzaW5nIHN5c2ZzIG9yIGNvbmZpZ2ZzLCBhbmQgc3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIHRoZXNlIGFzIHdlbGwgYXMgd2l0aCB0aGUgYGJhZGJsb2Nrc2Agc3lzZnMgYXR0cmlidXRlcywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgZnV6emluZyBzY29wZS4gVGhlIGNvbW1pdCBkaWZmIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyBvZiB0aGUgYmluYXJ5IHNlYXJjaCB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgaGlgIHZhcmlhYmxlIGFuZCBhIHJlZHVuZGFudCBjb25kaXRpb25hbCBjaGVjayBoYXZlIGJlZW4gcmVtb3ZlZC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgb3JpZ2luYWwgY29kZSBpbml0aWFsaXplZCBgaGlgIHRvIGBiYi1cdTAwM2Vjb3VudGAuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBsb2dpYyBhbmQgSSB0aGluayBJJ3ZlIGZpZ3VyZWQgb3V0IHdoeS4gSW5pdGlhbGx5LCBpdCBwZXJmb3JtZWQgYSBiaW5hcnkgc2VhcmNoIG9uIHRoZSBgYmFkYmxvY2tzYCB0YWJsZSB0byBmaW5kIHRoZSAqcHJldmlvdXMqIGJhZCBibG9jayByZWxhdGl2ZSB0byBhIGdpdmVuIHNlY3RvciBgc2AuIEl0J3MgYSBiaW5hcnkgc2VhcmNoLCBzbyB3ZSBjYW4gc2VlIHRoYXQgYGxvYCBpcyBhbHdheXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBzYCwgYW5kIGBoaWAgaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBgc2AuIE5vdywgdGhlIGNoYW5nZSBzZXRzIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMWAgYW5kIGFsc28gc2ltcGxpZmllcyB0aGUgcmV0dXJuIGxvZ2ljLlxuXG5UaGUgYmluYXJ5IHNlYXJjaCByZWxpZXMgb24gdGhlc2UgaW52YXJpYW50cywgd2hpY2ggaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UuIFRoZSBwYXRjaCBzZXRzIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMTtgIHNvIGl0IG5vdyBjb3JyZWN0bHkgaW5kZXhlcyBpbnRvIHRoZSBgYmItXHUwMDNlcGFnZWAgYXJyYXkuICBUaGUgb3JpZ2luYWwgY29kZSwgYWx0aG91Z2ggaXQgbWlnaHQgaGF2ZSBzZWVtZWQgY29ycmVjdCwgY291bGQgaGF2ZSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIHRoZSBiaW5hcnkgc2VhcmNoIGluIGNlcnRhaW4gZWRnZSBjYXNlcyB3aGVuIGBiYi1cdTAwM2Vjb3VudGAgd2FzIHNtYWxsIChsaWtlIDEgb3IgMCkuIE5vdywgaXQgYXBwZWFycyB0byBiZSBtb3JlIHJvYnVzdC4gVGhlIHBhdGNoIG1ha2VzIHRoZSBiaW5hcnkgc2VhcmNoIGNvcnJlY3QgYW5kIGVmZmljaWVudCBiZWNhdXNlIHRoZSBgbG9gIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaCBpcyBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGFwcHJvcHJpYXRlIGluZGV4LlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBjbGVhbnVwL3JlZmFjdG9yaW5nIGluIGBwcmV2X2JhZGJsb2NrcygpYC4gVGhpcyBjb3VsZCBiZSB0b3VjaGVkIGJ5IHN5emthbGxlci4gU2luY2UgaXQgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBibG9jayBsYXllciwgYW5kIGBiYWRibG9ja3NgIGlzIHRyaWdnZXJlZCB2aWEgc3lzZnMgYXR0cmlidXRlcywgaXQncyB2ZXJ5IGxpa2VseSB0aGF0IHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBBY2NvcmRpbmcgdG8gdGhlIGd1aWRhbmNlLCBldmVuIGEgXCJyZWZhY3RvcmluZ1wiIGxpa2UgdGhpcyB3YXJyYW50cyBmdXp6aW5nLCBiZWNhdXNlIGl0IGFsdGVycyBzdGF0ZSBtYW5hZ2VtZW50IGluIGEgY29yZSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgaW50ZXJhY3RzIHdpdGggYGJhZGJsb2Nrc2AgZGlyZWN0bHkuIExldCdzIHN0YXJ0IHdpdGggYGdyZXBwZXJgIGluIHRoZSBrZXJuZWwgdG8gc2VlIGhvdyBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIGNhbGxlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBhbnkgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZ2l0IGdyZXAgdG8gY2hlY2sgaG93IGJhZGJsb2NrcyBpcyBjYWxsZWQgb3IgcmVhY2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMzgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQwOjU0LjUyNDQ3NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTQwNjc5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzXyhzZXR8Y2xlYXJ8Y2hlY2spXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jLTIyLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MjM6ICogV2hlbiB0aGUgY2FsbGVyIG9mIGJhZGJsb2Nrc19zZXQoKSB3YW50cyB0byBzZXQgYSByYW5nZSBvZiBiYWQgYmxvY2tzLCB0aGVcXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMjgyLSAqICAgICBibG9ja3MgdGFibGUgYXJlIGFsbCBhY2tlZCwgbWVyZ2luZyB0aGVtIGludG8gYSBsYXJnZXIgb25lIHJhbmdlIG1heVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjI4MzogKiAgICAgb2NjdXB5IGxlc3MgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZSBhbmQgbWFrZSBiYWRibG9ja3NfY2hlY2soKSBmYXN0ZXIuXFxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIwLSAqIHRoZSBiYWQgYmxvY2sgcmFuZ2Ugc2V0dGluZyBjb25kaXRpb25zLiBNYXliZSB0aGVyZSBpcyBzb21lIHJhcmUgY29ybmVyIGNhc2VcXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJ3QgaHVydCBpZiBiYWRibG9ja3Nfc2V0KCkgZmFpbHMgZHVlXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIzLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MzI0OiAqIEluc2lkZSBiYWRibG9ja3Nfc2V0KCkgZWFjaCBsb29wIHN0YXJ0cyBieSBqdW1waW5nIHRvIHJlX2luc2VydCBsYWJlbCwgZXZlcnlcXG5ibG9jay9iYWRibG9ja3MuYy0zMjUtICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2VcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgxNj1zdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04MzctLyogRG8gZXhhY3Qgd29yayB0byBzZXQgYmFkIGJsb2NrIHJhbmdlIGludG8gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjgzODpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy04MzktXFx0XFx0XFx0ICAgaW50IGFja25vd2xlZGdlZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEwMzA9c3RhdGljIGludCBmcm9udF9zcGxpdHRpbmdfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA0Ny0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjbGVhciBiYWQgYmxvY2sgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA0ODpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwNDkte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE4NC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjaGVjayBiYWQgYmxvY2tzIHJhbmdlIGZyb20gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExODU6c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExODYtXFx0XFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNjMtLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTI2NDogKiBiYWRibG9ja3NfY2hlY2soKSAtIGNoZWNrIGEgZ2l2ZW4gcmFuZ2UgZm9yIGJhZCBzZWN0b3JzXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI2NS0gKiBAYmI6XFx0XFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzktICpcXG5ibG9jay9iYWRibG9ja3MuYzoxMjgwOiAqIExvY2tpbmcgb2YgdGhlIGJhZC1ibG9jayB0YWJsZSB1c2VzIGEgc2VxbG9jayBzbyBiYWRibG9ja3NfY2hlY2tcXG5ibG9jay9iYWRibG9ja3MuYy0xMjgxLSAqIG1pZ2h0IG5lZWQgdG8gcmV0cnkgaWYgaXQgaXMgdmVyeSB1bmx1Y2t5Llxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5Ni0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMjk3OmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5OC1cXHRcXHRcXHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzE1LVxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzE2OlxcdHJ2ID0gX2JhZGJsb2Nrc19jaGVjayhiYiwgcywgc2VjdG9ycywgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTMxNy1cXHRpZiAocmVhZF9zZXFyZXRyeShcXHUwMDI2YmItXFx1MDAzZWxvY2ssIHNlcSkpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzIxLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxMzIyOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyMy1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzI0LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMjU6ICogYmFkYmxvY2tzX3NldCgpIC0gQWRkIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNi0gKiBAYmI6XFx0XFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMzktICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM0MDpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0MS1cXHRcXHQgICBpbnQgYWNrbm93bGVkZ2VkKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDIte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDM6XFx0cmV0dXJuIF9iYWRibG9ja3Nfc2V0KGJiLCBzLCBzZWN0b3JzLCBhY2tub3dsZWRnZWQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDQtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDU6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3NldCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0Ni1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ3LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDg6ICogYmFkYmxvY2tzX2NsZWFyKCkgLSBSZW1vdmUgYSByYW5nZSBvZiBiYWQgYmxvY2tzIHRvIHRoZSB0YWJsZS5cXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ5LSAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2MC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMzYxOmJvb2wgYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjIte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjM6XFx0cmV0dXJuIF9iYWRibG9ja3NfY2xlYXIoYmIsIHMsIHNlY3RvcnMpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjQtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjU6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NsZWFyKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzY2LVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTQ2Mz1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODItXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4MzpcXHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHNlY3RvciwgbGVuZ3RoLCAhdW5hY2spKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODQtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01NDA9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NzItXFx0aWYgKGJ1ZlswXSA9PSAnKycpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NzM6XFx0XFx0aWYgKGJhZGJsb2Nrc19zZXQoXFx1MDAyNnRfZGV2LVxcdTAwM2ViYWRibG9ja3MsIHN0YXJ0LFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU3NC1cXHRcXHRcXHRcXHQgIGVuZCAtIHN0YXJ0ICsgMSwgMSkpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc1LVxcdFxcdFxcdHJldCA9IGNvdW50O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU3NjpcXHR9IGVsc2UgaWYgKGJhZGJsb2Nrc19jbGVhcihcXHUwMDI2dF9kZXYtXFx1MDAzZWJhZGJsb2Nrcywgc3RhcnQsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc3LVxcdFxcdFxcdFxcdCAgIGVuZCAtIHN0YXJ0ICsgMSkpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzNTQ9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNjItXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM2MzpcXHRpZiAoIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCAqbnJfc2VjdG9ycywgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNmJhZF9zZWN0b3JzKSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzY0LVxcdFxcdHJldHVybiBCTEtfU1RTX09LO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2Ni1cXHRpZiAoY21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3Nfb25jZSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzY3OlxcdFxcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2OC1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xODAzPXN0YXRpYyBpbnQgc3VwZXJfMV9sb2FkKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmVmZGV2LCBpbnQgbWlub3JfdmVyc2lvbilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xOTMzLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbWQvbWQuYzoxOTM0OlxcdFxcdFxcdGlmICghYmFkYmxvY2tzX3NldChcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBzZWN0b3IsIGNvdW50LCAxKSlcXG5kcml2ZXJzL21kL21kLmMtMTkzNS1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xMDY1OD1ib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDY3Ny1cXG5kcml2ZXJzL21kL21kLmM6MTA2Nzg6XFx0aWYgKCFiYWRibG9ja3Nfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMsIDApKSB7XFxuZHJpdmVycy9tZC9tZC5jLTEwNjc5LVxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MTA2OTg9dm9pZCByZGV2X2NsZWFyX2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDcwNS1cXG5kcml2ZXJzL21kL21kLmM6MTA3MDY6XFx0aWYgKCFiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycykpXFxuZHJpdmVycy9tZC9tZC5jLTEwNzA3LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuaD0yOTk9c3RhdGljIGlubGluZSBpbnQgaXNfYmFkYmxvY2soc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMzAyLVxcdGlmICh1bmxpa2VseShyZGV2LVxcdTAwM2ViYWRibG9ja3MuY291bnQpKSB7XFxuZHJpdmVycy9tZC9tZC5oOjMwMzpcXHRcXHRpbnQgcnYgPSBiYWRibG9ja3NfY2hlY2soXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcmRldi1cXHUwMDNlZGF0YV9vZmZzZXQgKyBzLFxcbmRyaXZlcnMvbWQvbWQuaC0zMDQtXFx0XFx0XFx0XFx0XFx0c2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmM9MTY1PXN0YXRpYyB2b2lkIHNldF9iYWRibG9jayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IG51bSlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmMtMTY5LVxcdC8qIHRoaXMgaXNuJ3QgYW4gZXJyb3IgYXMgdGhlIGhhcmR3YXJlIHdpbGwgc3RpbGwgdGhyb3cgYW4gZXhjZXB0aW9uICovXFxuZHJpdmVycy9udmRpbW0vYmFkcmFuZ2UuYzoxNzA6XFx0aWYgKCFiYWRibG9ja3Nfc2V0KGJiLCBzLCBudW0sIDEpKVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmMtMTcxLVxcdFxcdGRldl9pbmZvX29uY2UoYmItXFx1MDAzZWRldiwgXFxcIiVzOiBmYWlsZWQgZm9yIHNlY3RvciAlbGx4XFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnVzLmM9MTY0PXN0YXRpYyBpbnQgbnZkaW1tX2NsZWFyX2JhZGJsb2Nrc19yZWdpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnVzLmMtMTgzLVxcdHNlY3RvciA9IChjdHgtXFx1MDAzZXBoeXMgLSBuZF9yZWdpb24tXFx1MDAzZW5kcl9zdGFydCkgLyA1MTI7XFxuZHJpdmVycy9udmRpbW0vYnVzLmM6MTg0OlxcdGJhZGJsb2Nrc19jbGVhcihcXHUwMDI2bmRfcmVnaW9uLVxcdTAwM2ViYiwgc2VjdG9yLCBjdHgtXFx1MDAzZWNsZWFyZWQgLyA1MTIpO1xcbmRyaXZlcnMvbnZkaW1tL2J1cy5jLTE4NS1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9MjMzPXN0YXRpYyBpbnQgbnNpb19yd19ieXRlcyhzdHJ1Y3QgbmRfbmFtZXNwYWNlX2NvbW1vbiAqbmRucyxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjY5LVxcdFxcdFxcdFxcdGNsZWFyZWQgLz0gNTEyO1xcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM6MjcwOlxcdFxcdFxcdFxcdGJhZGJsb2Nrc19jbGVhcihcXHUwMDI2bnNpby1cXHUwMDNlYmIsIHNlY3RvciwgY2xlYXJlZCk7XFxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzEtXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9udmRpbW0vbmQuaD02NzY9c3RhdGljIGlubGluZSBib29sIGlzX2JhZF9wbWVtKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4Mi1cXG5kcml2ZXJzL252ZGltbS9uZC5oOjY4MzpcXHRcXHRyZXR1cm4gISFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbGVuIC8gNTEyLCBcXHUwMDI2Zmlyc3RfYmFkLFxcbmRyaXZlcnMvbnZkaW1tL25kLmgtNjg0LVxcdFxcdFxcdFxcdFxcdTAwMjZudW1fYmFkKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MzUzPXN0YXRpYyBpbnQgbmRfcGZuX2NsZWFyX21lbW1hcF9lcnJvcnMoc3RydWN0IG5kX3BmbiAqbmRfcGZuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODMtXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYzozODQ6XFx0XFx0YmJfcHJlc2VudCA9IGJhZGJsb2Nrc19jaGVjayhcXHUwMDI2bmRfcmVnaW9uLVxcdTAwM2ViYiwgbWV0YV9zdGFydCxcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTM4NS1cXHRcXHRcXHRcXHRtZXRhX251bSwgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNm51bV9iYWQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTg4PXN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05MS1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjkyOlxcdGJhZGJsb2Nrc19jbGVhcihcXHUwMDI2cG1lbS1cXHUwMDNlYmIsIHNlY3RvciwgYmxrcyk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTkzLVxcdGlmIChwbWVtLVxcdTAwM2ViYl9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz0yNTc9X193ZWFrIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTI3My1cXHRpZiAoYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjI3NDpcXHQgICAgYmFkYmxvY2tzX2NoZWNrKGJiLCBzZWN0b3IsIG51bSwgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNm51bV9iYWQpKSB7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTI3NS1cXHRcXHRsb25nIGFjdHVhbF9ucjtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NDU9c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTAtXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1MTppbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycyk7XFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1Mzpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01NC1cXHRcXHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oOjU1OmJvb2wgYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKTtcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU2LXZvaWQgYWNrX2FsbF9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDo1Ni40MTg1NDkzODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzE5NzM4MDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc6IEEgQ3JpdGljYWwgRXhhbWluYXRpb24gb2YgQmFkIEJsb2NrIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9tZC9tZC5jYCBjb2RlIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gaW4gdGhlIGJhZCBibG9jayBoYW5kbGluZyBsb2dpYy4gSSBzZWUgdGhhdCBNRCBkZXZpY2VzIGhhdmUgYHN5c2ZzYCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBiYWQgYmxvY2tzOiBzcGVjaWZpY2FsbHksIHRoZSBgZGV2X2F0dHJfYmFkYmxvY2tzYCBhdHRyaWJ1dGUuIFdyaXRpbmcgdG8gYC9zeXMvYmxvY2svbWRYL21kL2Rldi1YWFgvYmFkX2Jsb2Nrc2AgKGFuZCBzaW1pbGFyIHBhdGhzIGZvciBgbnVsbF9ibGtgIGFuZCBkaXNrIGF0dHJpYnV0ZXMgbGlrZSBgL3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL2JhZGJsb2Nrc2ApIHVsdGltYXRlbHkgbGVhZHMgdG8gdGhlIGBiYWRibG9ja3Nfc2V0YCBmdW5jdGlvbiB0aHJvdWdoIGEgY2hhaW4gb2YgY2FsbHMuIEltcG9ydGFudGx5LCB0aGlzIGFsc28gaW1wYWN0cyBJL08gb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBgYmFkYmxvY2tzX2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggY2FsbHMgYF9iYWRibG9ja3NfY2hlY2tgLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgcHJldl9iYWRibG9ja3NgLiBTaW1pbGFybHksIHVwZGF0ZXMgYW5kIGNsZWFycyBhbHNvIGZsb3cgdGhyb3VnaCBgX2JhZGJsb2Nrc19zZXRgIG9yIGBfYmFkYmxvY2tzX2NsZWFyYCB3aGljaCBjYWxscyBgcHJldl9iYWRibG9ja3NgLlxuXG5UaGUga2V5IHRoaW5nIEkndmUgbm90aWNlZCBpcyB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgYWx0ZXIgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgd2l0aGluIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLiBXZSBhcmUgY2hhbmdpbmcgaG93IHdlIGRvIHRoZSBiaW5hcnkgc2VhcmNoIHdoaWNoIGlzIGEgY29yZSBzdWJzeXN0ZW0gYWxnb3JpdGhtIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBib3VuZGFyeSBjb25kaXRpb25zLCBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgYmVpbmcgY2hhbmdlZC4gVGhlIHNlYXJjaCdzIGxvZ2ljIGlzIGJlaW5nIG1vZGlmaWVkIGFuZCB0aGUgY2hhbmdlcyBhcmUgbm9udHJpdmlhbC5cblxuTm93LCBiYXNlZCBvbiB0aGUga2VybmVsIGZ1enppbmcgZ3VpZGVsaW5lcyAoc3BlY2lmaWNhbGx5IFNlY3Rpb25zIDEgYW5kIDMpLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHRha2Ugc2VyaW91c2x5LiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyOiBhbnkgbG9naWMgbW9kaWZpY2F0aW9uIGluIGNvcmUgc3Vic3lzdGVtcywgZXZlbiByZWZhY3RvcmluZ3MsIGFyZSBzdXNwZWN0LiBUaGUgZ29hbCBpcyB0byBjYXRjaCBjcmFzaGVzLCByZWdyZXNzaW9ucywgb3IgZXZlbiBsYXRlbnQgYnVncy4gQW5kLCB0aGV5IHNwZWNpZmljYWxseSB3YXJuIGFnYWluc3QgYmxpbmRseSB0cnVzdGluZyBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgY2xhaW1zLCBlc3BlY2lhbGx5IHdoZW4gY29yZSBzdWJzeXN0ZW1zIGFyZSBpbnZvbHZlZC4gQ29kZSByZWZhY3RvcmluZ3MgYXJlIG1lbnRpb25lZCBleHBsaWNpdGx5IGFzIGEgcmVhc29uIHRvIGZ1enohXG5cblRoZXJlZm9yZSwgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgTVVTVCBiZSBzZXQgdG8gYHRydWVgIGhlcmUuIFRoaXMgaXMgbm9uLW5lZ290aWFibGUuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHJlcXVpcmVkIGl0ZW1zIGZvciB0aGUgZnV6emluZy4gV2UgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVzZSBzZWxlY3Rpb25zLlxuXG5UaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBpcyB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGRpcmVjdGx5IGltcGFjdGVkLiBUaGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbiBpdHNlbGYsIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLCBpcyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZS4gSXQncyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBtZSB0aGluazogY2FuIHN0YXRpYyBmdW5jdGlvbnMgaW4gYSBgLmNgIGZpbGUgYmUgZGlyZWN0bHkgdGFyZ2V0ZWQ/XG5cbkknbGwgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBhZ2Fpbi4gQWNjb3JkaW5nIHRvIFNlY3Rpb24gNCwgc3RhdGljIGlubGluZXMgaW4gaGVhZGVycyBhcmUgdGhlIHByb2JsZW0sIGJ1dCBhIGBzdGF0aWNgIGZ1bmN0aW9uIGluIGEgYC5jYCBmaWxlICpzaG91bGQqIGhhdmUgYSBzeW1ib2wgYWRkcmVzcyB0aGF0IHdlIGNhbiB0YXJnZXQuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHRob3VnaCwgYW5kIHZlcmlmeSB0aGF0IHRoZSBjb21waWxlciBoYXNuJ3QgaW5saW5lZCB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbi4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBwcmV2X2JhZGJsb2Nrc2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgY2FsbGVyIG9mIGBwcmV2X2JhZGJsb2Nrc2AgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MDMuNjE1OTMxNzc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk0ODM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmV2X2JhZGJsb2Nrc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iYWRibG9ja3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYy0zMjQtICogSW5zaWRlIGJhZGJsb2Nrc19zZXQoKSBlYWNoIGxvb3Agc3RhcnRzIGJ5IGp1bXBpbmcgdG8gcmVfaW5zZXJ0IGxhYmVsLCBldmVyeVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyNTogKiB0aW1lIGZvciB0aGUgbmV3IGxvb3AgcHJldl9iYWRibG9ja3MoKSBpcyBjYWxsZWQgdG8gZmluZCBhbiBhbHJlYWR5IHNldCByYW5nZVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTMyNi0gKiB3aGljaCBzdGFydHMgYmVmb3JlIG9yIGF0IGN1cnJlbnQgc2V0dGluZyByYW5nZS4gU2luY2UgdGhlIHNldHRpbmcgYmFkIGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTMyNy0gKiByYW5nZSBpcyBoYW5kbGVkIGZyb20gaGVhZCB0byB0YWlsLCBtb3N0IG9mIHRoZSBjYXNlcyBpdCBpcyB1bm5lY2Vzc2FyeSB0byBkb1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyODogKiB0aGUgYmluYXJ5IHNlYXJjaCBpbnNpZGUgcHJldl9iYWRibG9ja3MoKSwgaXQgaXMgcG9zc2libGUgdG8gcHJvdmlkZSBhIGhpbnRcXG5ibG9jay9iYWRibG9ja3MuYzozMjk6ICogdG8gcHJldl9iYWRibG9ja3MoKSBmb3IgYSBmYXN0IHBhdGgsIHRoZW4gdGhlIGV4cGVuc2l2ZSBiaW5hcnkgc2VhcmNoIGNhbiBiZVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjMzMDogKiBhdm9pZGVkLiBJbiBteSB0ZXN0IHdpdGggdGhlIGhpbnQgdG8gcHJldl9iYWRibG9ja3MoKSwgZXhjZXB0IGZvciB0aGUgZmlyc3RcXG5ibG9jay9iYWRibG9ja3MuYzozMzE6ICogbG9vcCwgYWxsIHJlc3RlZCBjYWxscyB0byBwcmV2X2JhZGJsb2NrcygpIGNhbiBnbyBpbnRvIHRoZSBmYXN0IHBhdGggYW5kXFxuYmxvY2svYmFkYmxvY2tzLmMtMzMyLSAqIHJldHVybiBjb3JyZWN0IGJhZCBibG9ja3MgdGFibGUgaW5kZXggaW1tZWRpYXRlbHkuXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz00NTc9c3RhdGljIGludCBwcmV2X2J5X2hpbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIGludCBoaW50KVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNDgwLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjQ4MTpzdGF0aWMgaW50IHByZXZfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCxcXG5ibG9jay9iYWRibG9ja3MuYy00ODItXFx0XFx0XFx0ICBpbnQgaGludClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgzOD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg4My1cXG5ibG9jay9iYWRibG9ja3MuYzo4ODQ6XFx0cHJldiA9IHByZXZfYmFkYmxvY2tzKGJiLCBcXHUwMDI2YmFkLCBoaW50KTtcXG5ibG9jay9iYWRibG9ja3MuYy04ODUtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMDQ4PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMDkzLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwOTQ6XFx0cHJldiA9IHByZXZfYmFkYmxvY2tzKGJiLCBcXHUwMDI2YmFkLCBoaW50KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMDk1LVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTE4NT1zdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMjAzLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyMDQ6XFx0cHJldiA9IHByZXZfYmFkYmxvY2tzKGJiLCBcXHUwMDI2YmFkLCBoaW50KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMjA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MTowMy42NjI4ODY5MTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDIyODAwNTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBwcmV2X2JhZGJsb2Nrc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgcHJldl9iYWRibG9ja3NgIGlzIHVzZWQsIGFuZCBpdCdzIGxvb2tpbmcgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBzZWUgdGhhdCBpdCdzIHRoZSBjb3JlIG9mIHRoZSBiYWQgYmxvY2sgaGFuZGxpbmcsIGJlaW5nIGNhbGxlZCBieSBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgX2JhZGJsb2Nrc19jaGVja2AuIFRoZXNlIGFyZSBhbGwgaW50ZXJuYWwsIGJ1dCB0aG9zZSBhcmUgdGhlbiBjYWxsZWQgYnkgdGhlIHB1YmxpYy1mYWNpbmcgQVBJczogYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYGJhZGJsb2Nrc19jaGVja2AsIGFuZCBgYmFkYmxvY2tzX3N0b3JlYC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIGNvbmZpcm1pbmcgaWYgYHByZXZfYmFkYmxvY2tzYCBpcyBzdGF0aWMgYW5kIG5vbi1pbmxpbmUuIFRoZSBjb2RlIGNvbmZpcm1zIHRoYXQgaXQgaXMsIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3MoLi4uKWAgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gQW5kIHllYWgsIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIHRocmVlIGRpc3RpbmN0IGludGVybmFsIGZ1bmN0aW9ucywgd2hpY2ggYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgdGhvc2UgZXh0ZXJuYWwgYGJhZGJsb2Nrc18qYCBBUElzLlxuXG5QdXR0aW5nIGBwcmV2X2JhZGJsb2Nrc2AgaW50byB0aGUgRm9jdXNTeW1ib2xzIHNlZW1zIGxpa2UgdGhlIHNtYXJ0IHBsYXkuIEl0J3MgdGhlIGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgZnVuY3Rpb25hbGl0eSwgbWFraW5nIHRoZW0gdGhlIG1vc3QgcmVsZXZhbnQuIEkgZG9uJ3Qgd2FudCB0byBicmluZyBpbiB1bm5lY2Vzc2FyeSBzdHVmZi5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIGBiYWRibG9ja3MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGlzIG9ubHkgZW5hYmxlZCB3aXRoIGBCTE9DS2Agb3IgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyB0byBjb25zaWRlci4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGJsb2NrL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgaG93IHRoZSBmaXJzdCBmZXcgbGluZXMgYXJlIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTMyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjA3Ljg5MDg5NTMyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgYmxvY2sgbGF5ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Q09OVEVYVF9BTkFMWVNJUyA6PSB5XFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbiAgIDk6XFx0XFx0XFx0XFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRibGstbWVyZ2UubyBibGstdGltZW91dC5vIGJsay1saWIubyBibGstbXEubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRibGstbXEtdGFnLm8gYmxrLW1xLWRtYS5vIGJsay1zdGF0Lm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0XFx0Z2VuaGQubyBpb3ByaW8ubyBiYWRibG9ja3MubyBwYXJ0aXRpb25zLyBibGstcnEtcW9zLm8gXFxcXFxcbiAgMTQ6XFx0XFx0XFx0XFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cXG4gIDE1OlxcdFxcbiAgMTY6XFx0b2JqLSQoQ09ORklHX0JMS19FUlJPUl9JTkpFQ1RJT04pICs9IGVycm9yLWluamVjdGlvbi5vXFxuICAxNzpcXHRvYmotJChDT05GSUdfQkxLX0RFVl9CU0dfQ09NTU9OKSArPSBic2cub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVxcdCs9IGJzZy1saWIub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVApXFx0Kz0gYmxrLWNncm91cC5vXFxuICAyMDpcXHRvYmotJChDT05GSUdfQkxLX0NHUk9VUF9SV1NUQVQpXFx0Kz0gYmxrLWNncm91cC1yd3N0YXQub1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICs9IGJsay1jZ3JvdXAtZmMtYXBwaWQub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfVEhST1RUTElORylcXHQrPSBibGstdGhyb3R0bGUub1xcbiAgMjM6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVxcdCs9IGJsay1pb3ByaW8ub1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZKVxcdCs9IGJsay1pb2xhdGVuY3kub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVxcdCs9IGJsay1pb2Nvc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MTowNy44OTA5NTcyNTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAxNTMyOTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgYmFkYmxvY2tzLm9gIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBgYmFkYmxvY2tzLm9gIGlzIGRlZmluaXRlbHkgbHVya2luZyBpbiBgb2JqLXlgIHdpdGhpbiBgYmxvY2svTWFrZWZpbGVgLiBUaGF0J3MgdGhlIGZpcnN0IGNsdWUuIEFuZCwgb2YgY291cnNlLCB0aGUgYGJsb2NrL2AgZGlyZWN0b3J5IGl0c2VsZiBnZXRzIGJ1aWx0IG9ubHkgd2hlbiBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgc291cmNlIG9mIHRoYXQgYENPTkZJR19CTE9DS2AgZGVwZW5kZW5jeS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByb290IGBNYWtlZmlsZWAgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gdHJhY2UgaG93IHRoZSBibG9jayBsYXllciBpcyBicm91Z2h0IGluLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQkxPQ0tgIHJlcHJlc2VudHMgdGhlIGJsb2NrIGxheWVyIG9wdGlvbiBpdHNlbGYg4oCTIGdvb2QsIHRoYXQgc2F2ZXMgYSBsb29rdXAuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBkb3duc3RyZWFtIGRlcGVuZGVuY2llcy4gSXMgYGJhZGJsb2Nrc2AgYmVpbmcgcHVsbGVkIGluIHRocm91Z2ggYSBzcGVjaWZpYyBkZXZpY2UgZHJpdmVyIG9yIGEgZmVhdHVyZSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY2FuZGlkYXRlcywgbGlrZSBSQUlEIGZ1bmN0aW9uYWxpdHkgKE1EKSBvciB0aGUgbnVsbCBibG9jayBkcml2ZXIgKE5VTExfQkxLKSwgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZSBpbmNsdXNpb24gb2YgYGJhZGJsb2Nrc2A/IEl0J3MgdGltZSB0byBjaGVjayB0aGVpciByZXNwZWN0aXZlIGBLY29uZmlnYCBmaWxlcywgZXNwZWNpYWxseSBgZHJpdmVycy9tZC9LY29uZmlnYCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbnVsbF9ibGsvYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgY29ubmVjdGlvbnMsIGlmIHRoZXJlIGFyZSBhbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODU2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MTAuOTA2Mjg5ODA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY1OTU4ODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJMS19ERVZfTlVMTF9CTEtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q9MTUwPWF2YWlsYWJsZSBmb3IgdGhlIGVuZHBvaW50IGhhcmR3YXJlIHVzZWQuXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTUxLVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE1MjpUbyBmYWNpbGl0YXRlIHRlc3RpbmcsIGVuYWJsaW5nIHRoZSBudWxsLWJsayBkcml2ZXIgKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTE1My1pcyBhbHNvIHJlY29tbWVuZGVkLiBXaXRoIHRoaXMsIGEgc2ltcGxlIHNldHVwIHVzaW5nIGEgbnVsbF9ibGsgYmxvY2sgZGV2aWNlXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9NDUzPUNPTkZJR19CTEtfREVWX05WTUU9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo0NTQ6Q09ORklHX0JMS19ERVZfTlVMTF9CTEs9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy00NTUtQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUz1tXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9NDQzPUNPTkZJR19CTEtfREVWX05WTUU9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzo0NDQ6Q09ORklHX0JMS19ERVZfTlVMTF9CTEs9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy00NDUtQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUz1tXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19CTEtfREVWX1JOQkQpXFx0Kz0gcm5iZC9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXFx0Kz0gbnVsbF9ibGsvXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfQkxLX0RFVl9SVVNUX05VTEwpICs9IHJudWxsL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTUtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gQkxLX0RFVl9OVUxMX0JMSyBcXHUwMDI2XFx1MDAyNiBGQVVMVF9JTkpFQ1RJT05fQ09ORklHRlNcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU9ND1jY2ZsYWdzLXlcXHRcXHRcXHQrPSAtSSQoc3JjKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXFx0Kz0gbnVsbF9ibGsub1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGUtNy1udWxsX2Jsay1vYmpzXFx0XFx0XFx0Oj0gbWFpbi5vXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMjojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjMtc3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihudWxsX3RpbWVvdXRfYXR0cik7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz05OD1NT0RVTEVfUEFSTV9ERVNDKGhvbWVfbm9kZSwgXFxcIkhvbWUgbm9kZSBmb3IgdGhlIGRldmljZVxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTk5LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEwMDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTAxLS8qXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz02NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG51bGxiX2RldmljZV90eXBlID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNjY0LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjY2NTojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNjY2LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9Nzg2PXN0YXRpYyBzdHJ1Y3QgbnVsbGJfZGV2aWNlICpudWxsX2FsbG9jX2Rldih2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzkzLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjc5NDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzk1LVxcdGRldi1cXHUwMDNldGltZW91dF9jb25maWcuYXR0ciA9IG51bGxfdGltZW91dF9hdHRyO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTQ5Mj1zdGF0aWMgdm9pZCBudWxsYl9zZXR1cF9id3RpbWVyKHN0cnVjdCBudWxsYiAqbnVsbGIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNTAwLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE1MDE6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE1MDItXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xODk0PXN0YXRpYyBpbnQgbnVsbF92YWxpZGF0ZV9jb25mKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5MzYtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTkzNzojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTkzOC1zdGF0aWMgYm9vbCBfX251bGxfc2V0dXBfZmF1bHQoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIGNoYXIgKnN0cilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE5NTE9c3RhdGljIGJvb2wgbnVsbF9zZXR1cF9mYXVsdCh2b2lkKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NTIte1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5NTM6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NTQtXFx0aWYgKCFfX251bGxfc2V0dXBfZmF1bHQoXFx1MDAyNm51bGxfdGltZW91dF9hdHRyLCBnX3RpbWVvdXRfc3RyKSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD01Mz1zdHJ1Y3QgbnVsbGJfZGV2aWNlIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC01NS1cXHRzdHJ1Y3QgY29uZmlnX2dyb3VwIGdyb3VwO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo1NjojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTU3LVxcdHN0cnVjdCBmYXVsdF9jb25maWcgdGltZW91dF9jb25maWc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjEyLjM3MjI1NTUwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ1NTkwNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUgb2YgQmFkIEJsb2NrIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBiYWQgYmxvY2sgaGFuZGxpbmcgd2l0aGluIHRoaXMgY29kZWJhc2UuIEZpcnN0LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb2J2aW91cyBzdXNwZWN0czogYENPTkZJR19NRGAgYW5kIGBDT05GSUdfQkxLX0RFVl9NRGAuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgYENPTkZJR19CTE9DS2AganVzdCB0byBiZSB0aG9yb3VnaC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGNvcmUgYmxvY2sgZGV2aWNlIGxheWVyLlxuXG5Ob3csIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgaWRlbnRpZnkgKmhvdyogYGJsb2NrL2JhZGJsb2Nrcy5jYCBpcyBjb21waWxlZC4gQmFzZWQgb24gcHJpb3IgZXhwZXJpZW5jZSwgSSdtIHByZXR0eSBzdXJlIGl0J3MgY29udHJvbGxlZCBieSBgQ09ORklHX0JMT0NLYC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZHJpdmVycyBhY3R1YWxseSBleHBvc2UgYmFkIGJsb2NrIGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgYENPTkZJR19CTEtfREVWX01EYCB0aGVyZSwgYXMgd2VsbCBhcyBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGxpa2VseS5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgTUQgY29tcG9uZW50LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGRyaXZlcnMvbWQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgyMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjE0LjYxNzg0ODA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ2MDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9NRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZz0xMz1pZiBNRFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL21kL0tjb25maWc6MTU6Y29uZmlnIEJMS19ERVZfTURcXG5kcml2ZXJzL21kL0tjb25maWctMTYtXFx0dHJpc3RhdGUgXFxcIlJBSUQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MTQuNjY4MzExNDUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODc2Nzc1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgYEtjb25maWdgIGZvciB0aGUgUkFJRCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgUkFJRCBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBtb3ZlIHdpbGwgYmUgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgbGluZXMgMSB0aHJvdWdoIDIwIG9mIGBkcml2ZXJzL21kL0tjb25maWdgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGJhc2ljIGRlZmluaXRpb25zIGFuZCB0b3AtbGV2ZWwgb3B0aW9ucyB3aXRoaW4gdGhhdCBLY29uZmlnIGZpbGUuIEknbSBwcmltYXJpbHkgbG9va2luZyBmb3IgdGhlIGNvcmUgbW9kdWxlIGVuYWJsZXMsIGFueSBpbW1lZGlhdGVseSBvYnZpb3VzIGRlcGVuZGVuY2llcywgYW5kIGhvdyB0aGUgUkFJRCBzeXN0ZW0gaXMgYXJjaGl0ZWN0ZWQgaW4gdGVybXMgb2YgY29uZmlndXJhYmxlIGNvbXBvbmVudHMuIEJhc2VkIG9uIHRoaXMgcXVpY2sgc2NhbiwgSSBjYW4gYmVnaW4gdG8gZ3Jhc3Agd2hldGhlciBhbnkgaW1tZWRpYXRlIGNoYW5nZXMgSSBtYXkgYmUgY29udGVtcGxhdGluZyBhcmUgYWxyZWFkeSBhdmFpbGFibGUgaW4gdGhlIGNvbmZpZywgYW5kIGhvdyB0byBlbmFibGUgdGhlbS4gSSBtYXkgdGhlbiBnbyBkZWVwZXIgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIEkgZmluZCwgc3VjaCBhcyBsb29raW5nIGF0IGFueSBpbmNsdWRlcyBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MTYuNjU1OTkyNTMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBNRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiTXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgc3VwcG9ydCAoUkFJRCBhbmQgTFZNKVxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgU3VwcG9ydCBtdWx0aXBsZSBwaHlzaWNhbCBzcGluZGxlcyB0aHJvdWdoIGEgc2luZ2xlIGxvZ2ljYWwgZGV2aWNlLlxcbiAgMTE6XFx0XFx0ICBSZXF1aXJlZCBmb3IgUkFJRCBhbmQgbG9naWNhbCB2b2x1bWUgbWFuYWdlbWVudC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgTURcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIEJMS19ERVZfTURcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJSQUlEIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQgaWYgU1lTRlNcXG4gIDE4OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgMTk6XFx0XFx0IyBCTE9DS19MRUdBQ1lfQVVUT0xPQUQgcmVxdWlyZW1lbnQgc2hvdWxkIGJlIHJlbW92ZWRcXG4gIDIwOlxcdFxcdCMgYWZ0ZXIgcmVsZXZhbnQgbWRhZG0gZW5oYW5jZW1lbnRzIC0gdG8gbWFrZSBcXFwibmFtZXM9eWVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MToxNi42NTYwNzQ5NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI5NTQ2NTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgYmxvY2svYmFkYmxvY2tzLmNgIFBhdGNoKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgZGVwZW5kZW5jeSBmb3IgYGJsb2NrL2JhZGJsb2Nrcy5jYCBpcywgbmF0dXJhbGx5LCBgQ09ORklHX0JMT0NLYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0J3MgZW5hYmxlZDsgeWVwLCBgQkxPQ0s9eWAsIGdvb2QuIE5vdywgdGhpcyBgYmFkYmxvY2tzYCBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIGV4cG9zZWQgdGhyb3VnaCBlaXRoZXIgYENPTkZJR19CTEtfREVWX01EYCBvciBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgLCBvciBldmVuIGp1c3QgYENPTkZJR19NRGAuIExldCdzIGNvbmZpcm0gdGhvc2UgYXJlIGVuYWJsZWQgYW5kIGNvbnNpZGVyZWQuXG5cbkkndmUgc2NvcGVkIG91dCB0aGUga2V5IHN5bWJvbHM6IGBwcmV2X2JhZGJsb2Nrc2AsIGBiYWRibG9ja3Nfc2V0YCwgYGJhZGJsb2Nrc19jbGVhcmAsIGBiYWRibG9ja3NfY2hlY2tgLCBhbmQgYGJhZGJsb2Nrc19zdG9yZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHNjb3BlLiBMb29raW5nIGludG8gaXQsIGl0IGFwcGVhcnMgYHByZXZfYmFkYmxvY2tzYCBpcyAqb25seSogdXNlZCB3aXRoaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYCwgY2FsbGVkIGR1cmluZyBzZXQsIGNsZWFyLCBvciBjaGVjayBvcGVyYXRpb25zLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSByZXN0IG9mIHRoZSBpZGVudGlmaWVkIHN5bWJvbHM6IHRoZXkgYXJlIGxvY2FsaXplZCBhbmQgZG9uJ3Qgc2VlbSB0byBiZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QgcGF0aHMuXG5cblNvLCBsZXQncyBzdGVwIHRocm91Z2ggdGhlIHJlYXNvbmluZy4gRmlyc3QsIHdoYXQgZGlkIHRoZSBwYXRjaCAqYWN0dWFsbHkqIGNoYW5nZT8gSXQgYWx0ZXJzIHRoZSBgcHJldl9iYWRibG9ja3MoKWAgZnVuY3Rpb24gaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gSXQncyBhIGJpbmFyeSBzZWFyY2gsIHNwZWNpZmljYWxseS4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1cHBlciBib3VuZCBpbml0aWFsaXphdGlvbiBhbmQgY29tcGFyaXNvbiBkdXJpbmcgdGhlIGJpbmFyeSBzZWFyY2gsIGFuZCBpdCBjbGVhbnMgdXAgYSBjb25kaXRpb25hbCBjaGVjay5cblxuU2Vjb25kLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBgYmFkYmxvY2tzYCBpcyBhIGNlbnRyYWwgYmxvY2sgbGF5ZXIgY29tcG9uZW50IHVzZWQgYnkgc2V2ZXJhbCBibG9jayBkZXZpY2UgZHJpdmVycy4gSSBjYW4gYWNjZXNzIGl0IGZyb20gdXNlciBzcGFjZSB2aWEgYHN5c2ZzYCwgYW5kIGl0IGlzIHVzZWQgZHVyaW5nIEkvTyBjaGVjayBvcGVyYXRpb25zLiBTbywgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBleGVyY2lzZWQuXG5cblRoaXJkLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIFRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgcmVmYWN0b3Jpbmcgc29tZSBjcml0aWNhbCBsb2dpYyByZWdhcmRpbmcgdGhlIGJpbmFyeSBzZWFyY2gncyBpbmRleGluZywgYm91bmRzLCBhbmQgcmV0dXJuIGNvbmRpdGlvbnMuIENoYW5naW5nIGxvZ2ljIGxpa2UgdGhpcyBpbiBhIGNvcmUgc3Vic3lzdGVtIGNvdWxkIGNlcnRhaW5seSBhZmZlY3QgY29ycmVjdG5lc3MsIGVzcGVjaWFsbHkgaW4gYm91bmRhcnkgY29uZGl0aW9ucyBsaWtlIGVtcHR5IHRhYmxlcywgZnVsbCB0YWJsZXMsIGFuZCBlZGdlIG9mZnNldHMuIFRoaXMgaXMgd29ydGggc3BlbmRpbmcgc29tZSBjeWNsZXMgb24uXG5cblRoZSBhc3Nlc3NtZW50IGlzIGNsZWFyLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzM5LCJPdXRwdXRUb2tlbnMiOjIzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjIxLjk1MTU0MzIzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjEyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiQkxLX0RFVl9NRFwiLFxuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXZfYmFkYmxvY2tzXCIsXG4gICAgXCJiYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJiYWRibG9ja3NfY2xlYXJcIixcbiAgICBcImJhZGJsb2Nrc19jaGVja1wiLFxuICAgIFwiYmFkYmxvY2tzX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cXHUwMDNlY291bnQgLSAxIGluc3RlYWQgb2YgYmItXFx1MDAzZWNvdW50KSwgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGNvbmRpdGlvbiwgYW5kIHRoZSBmYWxsYmFjayByZXR1cm4gYXNzaWdubWVudCAocmV0ID0gbG8gdW5jb25kaXRpb25hbGx5KS4gQmFkIGJsb2NrcyBoYW5kbGluZyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZXhlcmNpc2FibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIGJsb2NrIGRyaXZlcnMgc3VjaCBhcyBNRC9SQUlEIChkcml2ZXJzL21kKSBhbmQgbnVsbF9ibGsgKGRyaXZlcnMvYmxvY2svbnVsbF9ibGspLCBhcyB3ZWxsIGFzIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlcyAoYmFkYmxvY2tzX3N0b3JlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG1vZGlmaWVkIHNlYXJjaCBib3VuZGFyaWVzIGFuZCBpbmRleCBoYW5kbGluZyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG9mZi1ieS1vbmUgZXJyb3JzIG9uIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmV2X2JhZGJsb2Nrc1wiLFxuICAgIFwiYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiYmFkYmxvY2tzX2NsZWFyXCIsXG4gICAgXCJiYWRibG9ja3NfY2hlY2tcIixcbiAgICBcImJhZGJsb2Nrc19zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiaW5hcnkgc2VhcmNoIGxvZ2ljIGluIHByZXZfYmFkYmxvY2tzKCkgd2l0aGluIGJsb2NrL2JhZGJsb2Nrcy5jLCBjaGFuZ2luZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhpZ2ggYm91bmRhcnkgKGhpID0gYmItXFx1MDAzZWNvdW50IC0gMSBpbnN0ZWFkIG9mIGJiLVxcdTAwM2Vjb3VudCksIHRoZSB1cHBlci1ib3VuZCBjaGVjayBjb25kaXRpb24sIGFuZCB0aGUgZmFsbGJhY2sgcmV0dXJuIGFzc2lnbm1lbnQgKHJldCA9IGxvIHVuY29uZGl0aW9uYWxseSkuIEJhZCBibG9ja3MgaGFuZGxpbmcgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGV4ZXJjaXNhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBibG9jayBkcml2ZXJzIHN1Y2ggYXMgTUQvUkFJRCAoZHJpdmVycy9tZCkgYW5kIG51bGxfYmxrIChkcml2ZXJzL2Jsb2NrL251bGxfYmxrKSwgYXMgd2VsbCBhcyB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgKGJhZGJsb2Nrc19zdG9yZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmllZCBzZWFyY2ggYm91bmRhcmllcyBhbmQgaW5kZXggaGFuZGxpbmcgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBvZmYtYnktb25lIGVycm9ycyBvbiBlZGdlIGNhc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MToyMi4wMzAxNjM5ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMDcyODU2MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MjIuMDMwNTcxNDY1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzMwNzI0NDQ1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiaW5hcnkgc2VhcmNoIGJvdW5kYXJ5IGluaXRpYWxpemF0aW9uIGluIGBwcmV2X2JhZGJsb2NrcygpYCB3aXRoaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgaGkgPSBiYi1cXHUwMDNlY291bnQgLSAxYCBpbnN0ZWFkIG9mIGBoaSA9IGJiLVxcdTAwM2Vjb3VudGAsIGFkanVzdHMgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGFjY29yZGluZ2x5LCBhbmQgc2ltcGxpZmllcyB0aGUgcmV0dXJuIHZhbHVlIGFzc2lnbm1lbnQuXFxuXFxuVGhlIGJhZGJsb2NrIGJ1ZmZlciAoYGJiLVxcdTAwM2VwYWdlYCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCAvIGBkZXZtX2t6YWxsb2MoKWAgYW5kIGVudHJpZXMgd2l0aGluIGBbMCwgYmItXFx1MDAzZWNvdW50IC0gMV1gIGFyZSBmdWxseSBpbml0aWFsaXplZCBiYWQgYmxvY2sgZW50cmllcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGluZGV4IGNhbGN1bGF0aW9ucyBhbmQgYm91bmRzIGluIGFuIGludGVybmFsIGJpbmFyeSBzZWFyY2ggcm91dGluZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQsIG5vciBpcyBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGV4cG9zZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGh5cG90aGV0aWNhbCBpbmRleGluZyBkZWZlY3QgaGVyZSB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBieSBLQVNBTiwgbm90IEtNU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk5NjJkMDIxNjY1Y2FjMWRjZDJkNGE0Mjg3MTRkNDhkMjE4NGEyZDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxODo0MDoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcbmluZGV4IGVjZTY0ZTc2ZmU4ZmYuLjE0M2I0ODhiN2ZlNjggMTAwNjQ0XG4tLS0gYS9ibG9jay9iYWRibG9ja3MuY1xuKysrIGIvYmxvY2svYmFkYmxvY2tzLmNcbkBAIC00OTYsMTQgKzQ5NiwxNCBAQCBzdGF0aWMgaW50IHByZXZfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCxcbiBcdH1cbiBcbiBcdGxvID0gMDtcbi1cdGhpID0gYmItXHUwMDNlY291bnQ7XG4rXHRoaSA9IGJiLVx1MDAzZWNvdW50IC0gMTtcbiBcdHAgPSBiYi1cdTAwM2VwYWdlO1xuIFxuIFx0LyogVGhlIGZvbGxvd2luZyBiaXNlY3Qgc2VhcmNoIG1pZ2h0IGJlIHVubmVjZXNzYXJ5ICovXG4gXHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcdTAwM2UgcylcbiBcdFx0cmV0dXJuIC0xO1xuLVx0aWYgKEJCX09GRlNFVChwW2hpIC0gMV0pIFx1MDAzYz0gcylcbi1cdFx0cmV0dXJuIGhpIC0gMTtcbitcdGlmIChCQl9PRkZTRVQocFtoaV0pIFx1MDAzYz0gcylcbitcdFx0cmV0dXJuIGhpO1xuIFxuIFx0LyogRG8gYmlzZWN0IHNlYXJjaCBpbiBiYWQgdGFibGUgKi9cbiBcdHdoaWxlIChoaSAtIGxvIFx1MDAzZSAxKSB7XG5AQCAtNTIxLDggKzUyMSw3IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuIFx0XHRcdGhpID0gbWlkO1xuIFx0fVxuIFxuLVx0aWYgKEJCX09GRlNFVChwW2xvXSkgXHUwMDNjPSBzKVxuLVx0XHRyZXQgPSBsbztcbitcdHJldCA9IGxvO1xuIG91dDpcbiBcdHJldHVybiByZXQ7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MjIuMDMwNTczNzM2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMDMxMzM0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGJsb2NrL2JhZGJsb2Nrcy5jYCB0aGF0IG5lZWRzIGxvb2tpbmcgYXQgYW5kIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWZlbnNpdmUgY29kZSByZXZpZXcvc29mdHdhcmUgdGVzdGluZy9zYW5pdGl6ZXIgYW5hbHlzaXMgdHlwZSBvZiB0YXNrIOKAkyBub3RoaW5nIHRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBcImNyaXRpY2FsIHZ1bG5lcmFiaWxpdHkuXCIgSSBjYW4gY2xhc3NpZnkgdGhpcyBhcyBhIGZhaXJseSBiZW5pZ24gcmVxdWVzdC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGUgZGlmZiBmb2N1c2VzIG9uIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBiaXNlY3Qgc2VhcmNoIGxvZ2ljIHdpdGhpbiBpdC4gVGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSB1cHBlciBib3VuZHMgb2YgdGhlIHNlYXJjaCBzcGFjZSB3aXRoIGFkanVzdGluZyB0aGUgYGhpYCBhbmQgc3Vic2VxdWVudCBjb25kaXRpb25hbHMuIExpbmUgNDk2IGluIGBibG9jay9iYWRibG9ja3MuY2AgaXMgdGhlIGtleSBsb2NhdGlvbiwgYW5kIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG9mZi1ieS1vbmUgb3IgYW4gZWRnZSBjYXNlIGZpeCByZWxhdGVkIHRvIGhvdyB0aGUgc2VhcmNoIGJvdW5kcyBhcmUgaGFuZGxlZCB3aXRoaW4gYSBzb3J0ZWQgYmFkIGJsb2NrIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBvZiB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoYXQgYGJiLVx1MDAzZWNvdW50YCwgYEJCX09GRlNFVGAsIGBsb2AsIGBoaWAsIGFuZCB0aGUgYHBgIGFycmF5IHJlcHJlc2VudC4gVGhlIGJpc2VjdCBzZWFyY2ggaXMgdXNlZCB0byBlZmZpY2llbnRseSBmaW5kIHRoZSBjbG9zZXN0IGJhZCBibG9jayB0byBhIGdpdmVuIHNlY3RvciBgc2AuIFRoaXMgY291bGQgYmUgc2Vuc2l0aXZlIHRvIGJvdW5kYXJ5IGNvbmRpdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0LCBhbmQgdGhhdCBleGlzdGluZyBLTVNBTiBmdXp6ZXJzIGRvbid0IGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoLiBBZnRlciB0aGlzLCBhIGRlZXBlciBkaXZlIGludG8gZXhpc3RpbmcgZnV6emVycyB3aWxsIGJlIG5lZWRlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNvZGUtcGF0aCBpcyBwcm9wZXJseSB0ZXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MTozNC4wNjE5MTEyNDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHR9XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdHJldHVybiByZXQ7XFxuIDQ3MzpcXHR9XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdC8qXFxuIDQ3NjpcXHQgKiBGaW5kIHRoZSByYW5nZSBzdGFydHMgYXQtb3ItYmVmb3JlIGJhZC1cXHUwMDNlc3RhcnQuIElmICdoaW50JyBpcyBwcm92aWRlZFxcbiA0Nzc6XFx0ICogKGhpbnQgXFx1MDAzZT0gMCkgdGhlbiBzZWFyY2ggaW4gdGhlIGJhZCB0YWJsZSBmcm9tIGhpbnQgZmlyc3RseS4gSXQgaXNcXG4gNDc4OlxcdCAqIHZlcnkgcHJvYmFibHkgdGhlIHdhbnRlZCBiYWQgcmFuZ2UgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGhpbnQgaW5kZXgsXFxuIDQ3OTpcXHQgKiB0aGVuIHRoZSB1bm5lY2Vzc2FyeSB3aGlsZS1sb29wIGl0ZXJhdGlvbiBjYW4gYmUgYXZvaWRlZC5cXG4gNDgwOlxcdCAqL1xcbiA0ODE6XFx0c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXFxuIDQ4MjpcXHRcXHRcXHRcXHQgIGludCBoaW50KVxcbiA0ODM6XFx0e1xcbiA0ODQ6XFx0XFx0c2VjdG9yX3QgcyA9IGJhZC1cXHUwMDNlc3RhcnQ7XFxuIDQ4NTpcXHRcXHRpbnQgcmV0ID0gLTE7XFxuIDQ4NjpcXHRcXHRpbnQgbG8sIGhpO1xcbiA0ODc6XFx0XFx0dTY0ICpwO1xcbiA0ODg6XFx0XFxuIDQ4OTpcXHRcXHRpZiAoIWJiLVxcdTAwM2Vjb3VudClcXG4gNDkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0OTE6XFx0XFxuIDQ5MjpcXHRcXHRpZiAoaGludCBcXHUwMDNlPSAwKSB7XFxuIDQ5MzpcXHRcXHRcXHRyZXQgPSBwcmV2X2J5X2hpbnQoYmIsIHMsIGhpbnQpO1xcbiA0OTQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbiA0OTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ5NjpcXHRcXHR9XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdGxvID0gMDtcXG4gNDk5OlxcdFxcdGhpID0gYmItXFx1MDAzZWNvdW50IC0gMTtcXG4gNTAwOlxcdFxcdHAgPSBiYi1cXHUwMDNlcGFnZTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0LyogVGhlIGZvbGxvd2luZyBiaXNlY3Qgc2VhcmNoIG1pZ2h0IGJlIHVubmVjZXNzYXJ5ICovXFxuIDUwMzpcXHRcXHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcXHUwMDNlIHMpXFxuIDUwNDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDUwNTpcXHRcXHRpZiAoQkJfT0ZGU0VUKHBbaGldKSBcXHUwMDNjPSBzKVxcbiA1MDY6XFx0XFx0XFx0cmV0dXJuIGhpO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHQvKiBEbyBiaXNlY3Qgc2VhcmNoIGluIGJhZCB0YWJsZSAqL1xcbiA1MDk6XFx0XFx0d2hpbGUgKGhpIC0gbG8gXFx1MDAzZSAxKSB7XFxuIDUxMDpcXHRcXHRcXHRpbnQgbWlkID0gKGxvICsgaGkpLzI7XFxuIDUxMTpcXHRcXHRcXHRzZWN0b3JfdCBhID0gQkJfT0ZGU0VUKHBbbWlkXSk7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdFxcdGlmIChhID09IHMpIHtcXG4gNTE0OlxcdFxcdFxcdFxcdHJldCA9IG1pZDtcXG4gNTE1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1MTY6XFx0XFx0XFx0fVxcbiA1MTc6XFx0XFxuIDUxODpcXHRcXHRcXHRpZiAoYSBcXHUwMDNjIHMpXFxuIDUxOTpcXHRcXHRcXHRcXHRsbyA9IG1pZDtcXG4gNTIwOlxcdFxcdFxcdGVsc2VcXG4gNTIxOlxcdFxcdFxcdFxcdGhpID0gbWlkO1xcbiA1MjI6XFx0XFx0fVxcbiA1MjM6XFx0XFxuIDUyNDpcXHRcXHRyZXQgPSBsbztcXG4gNTI1OlxcdG91dDpcXG4gNTI2OlxcdFxcdHJldHVybiByZXQ7XFxuIDUyNzpcXHR9XFxuIDUyODpcXHRcXG4gNTI5OlxcdC8qXFxuIDUzMDpcXHQgKiBSZXR1cm4gJ3RydWUnIGlmIHRoZSByYW5nZSBpbmRpY2F0ZWQgYnkgJ2JhZCcgY2FuIGJlIGZvcndhcmRcXG4gNTMxOlxcdCAqIG1lcmdlZCB3aXRoIHRoZSBiYWQgcmFuZ2UgKGZyb20gdGhlIGJhZCB0YWJsZSkgaW5kZXhlZCBieSAncHJldicuXFxuIDUzMjpcXHQgKi9cXG4gNTMzOlxcdHN0YXRpYyBib29sIGNhbl9tZXJnZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuIDUzNDpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXFxuIDUzNTpcXHR7XFxuIDUzNjpcXHRcXHRzZWN0b3JfdCBzID0gYmFkLVxcdTAwM2VzdGFydDtcXG4gNTM3OlxcdFxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRpZiAoQkJfQUNLKHBbcHJldl0pID09IGJhZC1cXHUwMDNlYWNrIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjM0LjA2MjAyNjY4NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDQ3MDAwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHByZXZfYmFkYmxvY2tzYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBwYXRjaCBkZXRhaWxzLiBGaXJzdCwgSSdtIGV4YW1pbmluZyB0aGUgY29kZSBzbmlwcGV0IHNwZWNpZmljYWxseSB3aXRoaW4gYHByZXZfYmFkYmxvY2tzYC4gSSdtIHN0YXJ0aW5nIGJ5IHVuZGVyc3RhbmRpbmcgdGhlICpiZWZvcmUqIHN0YXRlIHRvIGVmZmVjdGl2ZWx5IGdyYXNwIHRoZSBjaGFuZ2UncyBpbXBhY3QuXG5cblJpZ2h0LCBzbyBwcmV2aW91c2x5IGBoaWAgd2FzIGluaXRpYWxpemVkIHRvIGBiYi1cdTAwM2Vjb3VudGAuIEknbSBpbW1lZGlhdGVseSBub3RpY2luZyBhIHBvdGVudGlhbCBvZmYtYnktb25lIGlzc3VlIGhlcmUuIFRoZSBjb2RlIGNoZWNrcyBgQkJfT0ZGU0VUKHBbaGkgLSAxXSkgXHUwMDNjPSBzYCBpbml0aWFsbHkuIFRoZW4sIHdpdGhpbiB0aGUgYHdoaWxlIChoaSAtIGxvIFx1MDAzZSAxKWAgbG9vcCwgYGhpYCByZW1haW5zIGBiYi1cdTAwM2Vjb3VudGAgd2hpbGUgYHBgIGlzIGFjY2Vzc2VkIHdpdGggYGhpIC0gMWAuIElmIGBCQl9PRkZTRVQocFtoaSAtIDFdKSBcdTAwM2Ugc2AsIHRoZW4gdGhlIGxvb3AgaXMgZW50ZXJlZCB3aXRoIGBoaWAgZXF1YWwgdG8gYGJiLVx1MDAzZWNvdW50YC4gVGhpcyBtZWFucyB3ZSBhcmUgc2tpcHBpbmcgdGhlIGxhc3QgZWxlbWVudC5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGNvcnJlY3QgdGhpcy4gSWYgYGhpYCBiZWNvbWVzIGBiYi1cdTAwM2Vjb3VudCAtIDFgIHdlIGNhbiB0aGVuIGFkZHJlc3MgdGhlIGxhc3QgZWxlbWVudC4gTGV0J3Mgc2VlLi4uIHRoZSBsb2dpYyB3aXRoaW4gdGhlIGJpc2VjdCBzZWFyY2ggbm93IGFwcGVhcnMgY2xlYW5lci4gIGBsb2Agc3RhcnRzIGF0IDAsIGBoaWAgaXMgaW5pdGlhbGl6ZWQgdG8gYGJiLVx1MDAzZWNvdW50IC0gMWAuICBBbmQsIGlmIGBhIFx1MDAzYyBzYCwgdGhlbiBgbG9gIGlzIHNldCB0byBgbWlkYCwgb3IgYGhpYCBpcyBzZXQgdG8gYG1pZGAgd2hlbiBpdCBpcyBub3QuIFRoaXMgbWFrZXMgc2Vuc2UuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGBpZmAgc3RhdGVtZW50OiBgaWYgKEJCX09GRlNFVChwW2xvXSkgXHUwMDNjPSBzKSByZXQgPSBsbztgIGJlY2F1c2UgYHBbbG9dYCBpcyBndWFyYW50ZWVkIHRvIGJlIGBcdTAwM2M9IHNgLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvZGUgc3RhcnRzIHdpdGggYSBjaGVjayB0byByZXR1cm4gYC0xYCBpZiB0aGUgZmlyc3QgZWxlbWVudCBpcyBncmVhdGVyIHRoYW4gYHNgLCBhbmQgdGhlbiBgbG9gIGlzIG9ubHkgdXBkYXRlZCB3aGVuIGBhIFx1MDAzYyBzYC4gVGhlcmVmb3JlIHRoZSBjaGVjayBpcyByZWR1bmRhbnQuXG5cbk5vdywgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlIGJlaGluZCBgYmItXHUwMDNlcGFnZWAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBibG9jay9iYWRibG9ja3MuY2AgdG8gc2VlIGhvdyBgYmFkYmxvY2tzYCB3b3JrcyBpbiBkZXRhaWwgdG8gZnVydGhlciBjbGFyaWZ5IHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MzguNTA5MDI5NDQ5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMyMjk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYi1cXHUwMDNlY291bnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmFkYmxvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmFkYmxvY2tzLmM9NDU3PXN0YXRpYyBpbnQgcHJldl9ieV9oaW50KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBpbnQgaGludClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ2Mi1cXG5ibG9jay9iYWRibG9ja3MuYzo0NjM6XFx0d2hpbGUgKChoaW50IFxcdTAwM2MgaGludF9lbmQpIFxcdTAwMjZcXHUwMDI2ICgoaGludCArIDEpIFxcdTAwM2M9IGJiLVxcdTAwM2Vjb3VudCkgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9iYWRibG9ja3MuYy00NjQtXFx0ICAgICAgIChCQl9PRkZTRVQocFtoaW50XSkgXFx1MDAzYz0gcykpIHtcXG5ibG9jay9iYWRibG9ja3MuYzo0NjU6XFx0XFx0aWYgKChoaW50ICsgMSkgPT0gYmItXFx1MDAzZWNvdW50IHx8IEJCX09GRlNFVChwW2hpbnQgKyAxXSkgXFx1MDAzZSBzKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtNDY2LVxcdFxcdFxcdHJldCA9IGhpbnQ7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz00ODE9c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy00ODgtXFxuYmxvY2svYmFkYmxvY2tzLmM6NDg5OlxcdGlmICghYmItXFx1MDAzZWNvdW50KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ5MC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ5OC1cXHRsbyA9IDA7XFxuYmxvY2svYmFkYmxvY2tzLmM6NDk5OlxcdGhpID0gYmItXFx1MDAzZWNvdW50IC0gMTtcXG5ibG9jay9iYWRibG9ja3MuYy01MDAtXFx0cCA9IGJiLVxcdTAwM2VwYWdlO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NTUxPXN0YXRpYyBpbnQgZnJvbnRfbWVyZ2Uoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTU2My1cXHRcXHRtZXJnZWQgPSBtaW5fdChzZWN0b3JfdCwgc2VjdG9ycywgQkJfTUFYX0xFTiAtIEJCX0xFTihwW3ByZXZdKSk7XFxuYmxvY2svYmFkYmxvY2tzLmM6NTY0OlxcdFxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmFkYmxvY2tzLmMtNTY1LVxcdFxcdCAgICBtZXJnZWQgXFx1MDAzZSAoQkJfT0ZGU0VUKHBbcHJldiArIDFdKSAtIEJCX0VORChwW3ByZXZdKSkpIHtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTU4Nz1zdGF0aWMgYm9vbCBjYW5fY29tYmluZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy02MDQtICogJ3ByZXYgLSAxJy5cXG5ibG9jay9iYWRibG9ja3MuYzo2MDU6ICogVGhlIGNhbGxlciBvZiBmcm9udF9jb21iaW5lKCkgd2lsbCBkZWNyZWFzZSBiYi1cXHUwMDNlY291bnQsIHRoZXJlZm9yZVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTYwNi0gKiBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGVhciBwW3BlcnZdIGFmdGVyIGZyb250IG1lcmdlLlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjA4PXN0YXRpYyB2b2lkIGZyb250X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjE0LVxcdFxcdFxcdCAgICAgIEJCX0FDSyhwW3ByZXZdKSk7XFxuYmxvY2svYmFkYmxvY2tzLmM6NjE1OlxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50KVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjYxNjpcXHRcXHRtZW1tb3ZlKHAgKyBwcmV2LCBwICsgcHJldiArIDEsIChiYi1cXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcXG5ibG9jay9iYWRibG9ja3MuYy02MTctfVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjcyPXN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNzAxLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjcwMjpcXHRpZiAoKGJiLVxcdTAwM2Vjb3VudCArICgqZXh0cmEpKSBcXHUwMDNlIE1BWF9CQURCTE9DS1MpXFxuYmxvY2svYmFkYmxvY2tzLmMtNzAzLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTcxNT1zdGF0aWMgaW50IGZyb250X292ZXJ3cml0ZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03MzEtXFx0XFx0XFx0bWVtbW92ZShwICsgcHJldiArIDIsIHAgKyBwcmV2ICsgMSxcXG5ibG9jay9iYWRibG9ja3MuYzo3MzI6XFx0XFx0XFx0XFx0KGJiLVxcdTAwM2Vjb3VudCAtIHByZXYgLSAxKSAqIDgpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTczMy1cXHRcXHRcXHRwW3ByZXYgKyAxXSA9IEJCX01BS0UoYmFkLVxcdTAwM2VzdGFydCArIGJhZC1cXHUwMDNlbGVuLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNzQ1LVxcdFxcdFxcdG1lbW1vdmUocCArIHByZXYgKyAyLCBwICsgcHJldiArIDEsXFxuYmxvY2svYmFkYmxvY2tzLmM6NzQ2OlxcdFxcdFxcdFxcdChiYi1cXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcXG5ibG9jay9iYWRibG9ja3MuYy03NDctXFx0XFx0XFx0cFtwcmV2ICsgMV0gPSBCQl9NQUtFKGJhZC1cXHUwMDNlc3RhcnQsIGJhZC1cXHUwMDNlbGVuLCBiYWQtXFx1MDAzZWFjayk7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03NTktXFx0XFx0bWVtbW92ZShwICsgcHJldiArIDMsIHAgKyBwcmV2ICsgMSxcXG5ibG9jay9iYWRibG9ja3MuYzo3NjA6XFx0XFx0XFx0KGJiLVxcdTAwM2Vjb3VudCAtIHByZXYgLSAxKSAqIDgpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTc2MS1cXHRcXHRwW3ByZXYgKyAxXSA9IEJCX01BS0UoYmFkLVxcdTAwM2VzdGFydCwgYmFkLVxcdTAwM2VsZW4sIGJhZC1cXHUwMDNlYWNrKTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTc3Nz1zdGF0aWMgaW50IGluc2VydF9hdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGF0LCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTc4NC1cXHRsZW4gPSBtaW5fdChzZWN0b3JfdCwgYmFkLVxcdTAwM2VsZW4sIEJCX01BWF9MRU4pO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjc4NTpcXHRpZiAoYXQgXFx1MDAzYyBiYi1cXHUwMDNlY291bnQpXFxuYmxvY2svYmFkYmxvY2tzLmM6Nzg2OlxcdFxcdG1lbW1vdmUocCArIGF0ICsgMSwgcCArIGF0LCAoYmItXFx1MDAzZWNvdW50IC0gYXQpICogOCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtNzg3LVxcdHBbYXRdID0gQkJfTUFLRShiYWQtXFx1MDAzZXN0YXJ0LCBsZW4sIGJhZC1cXHUwMDNlYWNrKTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTc5Mj1zdGF0aWMgdm9pZCBiYWRibG9ja3NfdXBkYXRlX2Fja2VkKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtODAwLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjgwMTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IDsgaSsrKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtODAyLVxcdFxcdGlmICghQkJfQUNLKHBbaV0pKSB7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz04MTY9c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtODE5LVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjgyMDpcXHRpZiAocHJldiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IChwcmV2ICsgMSkgXFx1MDAzYyBiYi1cXHUwMDNlY291bnQgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9iYWRibG9ja3MuYy04MjEtXFx0ICAgIEJCX0VORChwW3ByZXZdKSA9PSBCQl9PRkZTRVQocFtwcmV2ICsgMV0pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04MjctXFxuYmxvY2svYmFkYmxvY2tzLmM6ODI4OlxcdFxcdGlmICgocHJldiArIDIpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTgyOS1cXHRcXHRcXHRtZW1tb3ZlKHAgKyBwcmV2ICsgMSwgcCArIHByZXYgKyAyLFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjgzMDpcXHRcXHRcXHRcXHQoYmItXFx1MDAzZWNvdW50IC0gIChwcmV2ICsgMikpICogOCk7XFxuYmxvY2svYmFkYmxvY2tzLmM6ODMxOlxcdFxcdGJiLVxcdTAwM2Vjb3VudC0tO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTgzMi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgzOD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg3OC1cXHRcXHRsZW4gPSBpbnNlcnRfYXQoYmIsIDAsIFxcdTAwMjZiYWQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjg3OTpcXHRcXHRiYi1cXHUwMDNlY291bnQrKztcXG5ibG9jay9iYWRibG9ja3MuYy04ODAtXFx0XFx0YWRkZWQrKztcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg5MS1cXHRcXHRsZW4gPSBpbnNlcnRfYXQoYmIsIDAsIFxcdTAwMjZiYWQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjg5MjpcXHRcXHRiYi1cXHUwMDNlY291bnQrKztcXG5ibG9jay9iYWRibG9ja3MuYy04OTMtXFx0XFx0YWRkZWQrKztcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTkwMC1cXHRcXHRmcm9udF9jb21iaW5lKGJiLCBwcmV2KTtcXG5ibG9jay9iYWRibG9ja3MuYzo5MDE6XFx0XFx0YmItXFx1MDAzZWNvdW50LS07XFxuYmxvY2svYmFkYmxvY2tzLmMtOTAyLVxcdFxcdGFkZGVkKys7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy05MjgtXFx0XFx0YWRkZWQrKztcXG5ibG9jay9iYWRibG9ja3MuYzo5Mjk6XFx0XFx0YmItXFx1MDAzZWNvdW50ICs9IGV4dHJhO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTkzMC1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTkzMi1cXHRcXHRcXHRmcm9udF9jb21iaW5lKGJiLCBwcmV2KTtcXG5ibG9jay9iYWRibG9ja3MuYzo5MzM6XFx0XFx0XFx0YmItXFx1MDAzZWNvdW50LS07XFxuYmxvY2svYmFkYmxvY2tzLmMtOTM0LVxcdFxcdH1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTk0MC1cXHQvKiBjYW5ub3QgbWVyZ2UgYW5kIHRoZXJlIGlzIHNwYWNlIGluIGJhZCB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjk0MTpcXHRpZiAoKHByZXYgKyAxKSBcXHUwMDNjIGJiLVxcdTAwM2Vjb3VudCBcXHUwMDI2XFx1MDAyNlxcbmJsb2NrL2JhZGJsb2Nrcy5jLTk0Mi1cXHQgICAgb3ZlcmxhcF9iZWhpbmQoYmIsIFxcdTAwMjZiYWQsIHByZXYgKyAxKSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTk0Ni1cXHRsZW4gPSBpbnNlcnRfYXQoYmIsIHByZXYgKyAxLCBcXHUwMDI2YmFkKTtcXG5ibG9jay9iYWRibG9ja3MuYzo5NDc6XFx0YmItXFx1MDAzZWNvdW50Kys7XFxuYmxvY2svYmFkYmxvY2tzLmMtOTQ4LVxcdGFkZGVkKys7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy05ODQtICogY292ZXJlZCBieSB0aGUgY2xlYXJpbmcgcmFuZ2UgYW5kIGZ1bGx5IGNsZWFyZWQsICdkZWxldGUnIGlzIHNldCBhcyAxIGZvclxcbmJsb2NrL2JhZGJsb2Nrcy5jOjk4NTogKiB0aGUgY2FsbGVyIHRvIHJlZHVjZSBiYi1cXHUwMDNlY291bnQuXFxuYmxvY2svYmFkYmxvY2tzLmMtOTg2LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jPTk4Nz1zdGF0aWMgaW50IGZyb250X2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwMDQtXFx0XFx0XFx0Y2xlYXJlZCA9IEJCX0xFTihwW3ByZXZdKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMDA1OlxcdFxcdFxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwMDYtXFx0XFx0XFx0XFx0bWVtbW92ZShwICsgcHJldiwgcCArIHByZXYgKyAxLFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMDc6XFx0XFx0XFx0XFx0ICAgICAgIChiYi1cXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMDA4LVxcdFxcdFxcdCpkZWxldGVkID0gMTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEwMzA9c3RhdGljIGludCBmcm9udF9zcGxpdHRpbmdfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA0MS1cXHRcXHRcXHQgIGFjayk7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTA0MjpcXHRtZW1tb3ZlKHAgKyBwcmV2ICsgMiwgcCArIHByZXYgKyAxLCAoYmItXFx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTA0My1cXHRwW3ByZXYgKyAxXSA9IEJCX01BS0UocyArIHNlY3RvcnMsIGVuZCAtIHMgLSBzZWN0b3JzLCBhY2spO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTA0OD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTExMi1cXHQvKiBTdGFydCBhZnRlciBhbGwgYmFkYmxvY2tzICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTExMzpcXHRpZiAoKHByZXYgKyAxKSBcXHUwMDNlPSBiYi1cXHUwMDNlY291bnQgXFx1MDAyNlxcdTAwMjYgIW92ZXJsYXBfZnJvbnQoYmIsIHByZXYsIFxcdTAwMjZiYWQpKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTExNC1cXHRcXHRsZW4gPSBzZWN0b3JzO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTEyOS1cXHRcXHRcXHQvKiBTcGxpdHRpbmcgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMTMwOlxcdFxcdFxcdGlmICgoYmItXFx1MDAzZWNvdW50ICsgMSkgXFx1MDAzYz0gTUFYX0JBREJMT0NLUykge1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzEtXFx0XFx0XFx0XFx0bGVuID0gZnJvbnRfc3BsaXR0aW5nX2NsZWFyKGJiLCBwcmV2LCBcXHUwMDI2YmFkKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMTMyOlxcdFxcdFxcdFxcdGJiLVxcdTAwM2Vjb3VudCArPSAxO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzMtXFx0XFx0XFx0XFx0Y2xlYXJlZCsrO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE0MS1cXHRcXHRcXHRsZW4gPSBmcm9udF9jbGVhcihiYiwgcHJldiwgXFx1MDAyNmJhZCwgXFx1MDAyNmRlbGV0ZWQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExNDI6XFx0XFx0XFx0YmItXFx1MDAzZWNvdW50IC09IGRlbGV0ZWQ7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTE0My1cXHRcXHRcXHRjbGVhcmVkKys7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMTUwLVxcdC8qIE5vdCBmcm9udCBvdmVybGFwLCBidXQgYmVoaW5kIG92ZXJsYXAgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMTUxOlxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2IG92ZXJsYXBfYmVoaW5kKGJiLCBcXHUwMDI2YmFkLCBwcmV2ICsgMSkpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMTUyLVxcdFxcdGxlbiA9IEJCX09GRlNFVChwW3ByZXYgKyAxXSkgLSBiYWQuc3RhcnQ7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMTg1PXN0YXRpYyBpbnQgX2JhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDctXFx0aWYgKChwcmV2IFxcdTAwM2U9IDApIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmFkYmxvY2tzLmM6MTIwODpcXHQgICAgKChwcmV2ICsgMSkgXFx1MDAzZT0gYmItXFx1MDAzZWNvdW50KSBcXHUwMDI2XFx1MDAyNiAhb3ZlcmxhcF9mcm9udChiYiwgcHJldiwgXFx1MDAyNmJhZCkpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMjA5LVxcdFxcdGxlbiA9IHNlY3RvcnM7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMjMzLVxcdC8qIE5vdCBmcm9udCBvdmVybGFwLCBidXQgYmVoaW5kIG92ZXJsYXAgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMjM0OlxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2IG92ZXJsYXBfYmVoaW5kKGJiLCBcXHUwMDI2YmFkLCBwcmV2ICsgMSkpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMjM1LVxcdFxcdGxlbiA9IEJCX09GRlNFVChwW3ByZXYgKyAxXSkgLSBiYWQuc3RhcnQ7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMzc0PXZvaWQgYWNrX2FsbF9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzg0LVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzODU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJiLVxcdTAwM2Vjb3VudCA7IGkrKykge1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODYtXFx0XFx0XFx0aWYgKCFCQl9BQ0socFtpXSkpIHtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzOTMtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM5NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IDsgaSsrKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzOTUtXFx0XFx0XFx0d2hpbGUgKHRyeV9hZGphY2VudF9jb21iaW5lKGJiLCBpKSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MTM9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQyOC1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDI5OlxcdHdoaWxlIChsZW4gXFx1MDAzYyBQQUdFX1NJWkUgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIGJiLVxcdTAwM2Vjb3VudCkge1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MzAtXFx0XFx0c2VjdG9yX3QgcyA9IEJCX09GRlNFVChwW2ldKTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0OTA9c3RhdGljIGludCBfX2JhZGJsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDkzLVxcdGJiLVxcdTAwM2VkZXYgPSBkZXY7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ5NDpcXHRiYi1cXHUwMDNlY291bnQgPSAwO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTUtXFx0aWYgKGVuYWJsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MzguNTU1MzU5MjgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMzAzMzE4NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHByZXZfYmFkYmxvY2tzYCBCaXNlY3Rpb24gU2VhcmNoIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBibG9jay9iYWRibG9ja3MuY2AgdGhhdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLCBhIGJpc2VjdGlvbiBzZWFyY2ggaGVscGVyLiBJbml0aWFsbHksIEkgd2FudGVkIHRvIGRpZyBpbnRvIHRoZSBnaXQgaGlzdG9yeSBmb3IgdGhlIGNvbnRleHQsIG1heWJlIHVuY292ZXIgdGhlIHNwZWNpZmljIGJ1ZyB0aGlzIHBhdGNoIGZpeGVkIG9yIGl0cyBtb3RpdmF0aW9uLiBCdXQgc2luY2UgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gYGdpdCBsb2dgLCBJIG5lZWQgdG8gcmVseSBvbiBjb2RlIGFuYWx5c2lzLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGRpZmZlcmVuY2U6IGBoaSA9IGJiLVx1MDAzZWNvdW50YCBoYXMgYmVjb21lIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMWAuIEFuZCB0aGVyZSdzIGFsc28gYSBzaW1wbGlmaWNhdGlvbiBhdCB0aGUgZW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuXG5cblRyYWNpbmcgdGhlIGxvZ2ljLCBiZWZvcmUgdGhlIGNoYW5nZSwgYGhpYCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGJiLVx1MDAzZWNvdW50YC4gVGhpcyBtZWFudCBgcFtoaS0xXWAgd2FzIHRoZSBsYXN0IHZhbGlkIGVsZW1lbnQsIGFuZCBgcFtoaV1gIHdvdWxkIGhhdmUgYmVlbiBvdXQtb2YtYm91bmRzLCBhcyB0aGUgYXJyYXkgaGFzIGBiYi1cdTAwM2Vjb3VudGAgZWxlbWVudHMuIFRoZSBjaGVjayBgaWYgKEJCX09GRlNFVChwW2hpIC0gMV0pIFx1MDAzYz0gcylgIGhhbmRsZWQgdGhpcy4gVGhlIHdoaWxlIGxvb3AgdGhlbiBwZXJmb3JtZWQgYSBiaXNlY3Qgc2VhcmNoLiBUaGUgb3JpZ2luYWwgY29kZSB0aGVuIGNoZWNrcyBmb3IgYGlmIChCQl9PRkZTRVQocFtsb10pIFx1MDAzYz0gcykgcmV0ID0gbG87YC4gVGhlIGNoYW5nZSBpcyB0aGF0IHRoaXMgY2hlY2sgaXMgcmVtb3ZlZC5cblxuSXQncyBiZWNvbWluZyBjbGVhcjogU2V0dGluZyBgaGkgPSBiYi1cdTAwM2Vjb3VudGAgY3JlYXRlZCBhbiAqb2ZmLWJ5LW9uZSogaXNzdWUsIG9yIGFuIGVkZ2UgY29uZGl0aW9uLiBCeSBzZXR0aW5nIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMWAsIHdlJ3JlIG1ha2luZyB0aGUgYmlzZWN0aW9uIG1vcmUgcHJlY2lzZSBieSBzdGFydGluZyB0aGUgc2VhcmNoIHdpdGggYGhpYCBhcyB0aGUga25vd24gdXBwZXIgYm91bmQgaW5kZXggc3VjaCB0aGF0IGBCQl9PRkZTRVQocFtoaV0pIFx1MDAzZSBzYC4gVGhlbiB0aGUgbG9vcCB3aWxsIGd1YXJhbnRlZSB0aGF0IGBsb2AgaXMgdGhlIGxhcmdlc3QgaW5kZXggd2l0aCBgcFtsb10gXHUwMDNjPSBzYC4gUmVtb3ZpbmcgdGhlIGNoZWNrIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgaXMgYW4gb3B0aW1pemF0aW9uLCBhcyB0aGUgd2hpbGUgbG9vcCBndWFyYW50ZWVzIHRoYXQgY29uZGl0aW9uLlxuXG5TbywgaW4gZXNzZW5jZSwgdGhlIHBhdGNoIGNvcnJlY3RzIGFuIGVkZ2UgY2FzZSBhbmQgc2ltcGxpZmllcyB0aGUgbG9naWMuIE5vLCB0aGlzIGRvZXMgbm90IHNlZW0gdG8gdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIEtNU0FOIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGZhY3RvciBoZXJlLiBgcHJldl9iYWRibG9ja3NgIGlzIGFuIGludGVybmFsIGhlbHBlciBpbiBgYmxvY2svYmFkYmxvY2tzLmNgIHBlcmZvcm1pbmcgYmlzZWN0aW9uIHNlYXJjaCBpbiBgYmItXHUwMDNlcGFnZWAsIHdoaWNoIGlzIGFuIGFycmF5IG9mIGB1NjRgLCBhbmQgdGhlcmUncyBubyBkYXRhIHRoYXQgaXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBzaG91bGQgYmUgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM4NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6NDkuODU4NjgxMzA5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgzMjIyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYi1cXHUwMDNlcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iYWRibG9ja3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYz00NTc9c3RhdGljIGludCBwcmV2X2J5X2hpbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIGludCBoaW50KVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNDU5LVxcdGludCBoaW50X2VuZCA9IGhpbnQgKyAyO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjQ2MDpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy00NjEtXFx0aW50IHJldCA9IC0xO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NDgxPXN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNDk5LVxcdGhpID0gYmItXFx1MDAzZWNvdW50IC0gMTtcXG5ibG9jay9iYWRibG9ja3MuYzo1MDA6XFx0cCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTUwMS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTUzMz1zdGF0aWMgYm9vbCBjYW5fbWVyZ2VfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNTM2LVxcdHNlY3Rvcl90IHMgPSBiYWQtXFx1MDAzZXN0YXJ0O1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjUzNzpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy01MzgtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz01NTE9c3RhdGljIGludCBmcm9udF9tZXJnZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNTU0LVxcdHNlY3Rvcl90IHMgPSBiYWQtXFx1MDAzZXN0YXJ0O1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjU1NTpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy01NTYtXFx0aW50IG1lcmdlZCA9IDA7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz01ODc9c3RhdGljIGJvb2wgY2FuX2NvbWJpbmVfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNTg5LXtcXG5ibG9jay9iYWRibG9ja3MuYzo1OTA6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtNTkxLVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjA4PXN0YXRpYyB2b2lkIGZyb250X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTYwOS17XFxuYmxvY2svYmFkYmxvY2tzLmM6NjEwOlxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTYxMS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTYyNT1zdGF0aWMgYm9vbCBvdmVybGFwX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZnJvbnQsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy02Mjcte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjYyODpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy02MjktXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz02NDA9c3RhdGljIGJvb2wgb3ZlcmxhcF9iZWhpbmQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjQyLXtcXG5ibG9jay9iYWRibG9ja3MuYzo2NDM6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtNjQ0LVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjcyPXN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjc0LXtcXG5ibG9jay9iYWRibG9ja3MuYzo2NzU6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtNjc2LVxcdGludCBsZW47XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz03MTU9c3RhdGljIGludCBmcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNzE3LXtcXG5ibG9jay9iYWRibG9ja3MuYzo3MTg6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtNzE5LVxcdHNlY3Rvcl90IG9yaWdfZW5kID0gQkJfRU5EKHBbcHJldl0pO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9Nzc3PXN0YXRpYyBpbnQgaW5zZXJ0X2F0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgYXQsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTc3OC17XFxuYmxvY2svYmFkYmxvY2tzLmM6Nzc5OlxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTc4MC1cXHRpbnQgbGVuO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NzkyPXN0YXRpYyB2b2lkIGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoc3RydWN0IGJhZGJsb2NrcyAqYmIpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03OTQtXFx0Ym9vbCB1bmFja2VkID0gZmFsc2U7XFxuYmxvY2svYmFkYmxvY2tzLmM6Nzk1OlxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTc5Ni1cXHRpbnQgaTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgxNj1zdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXFxuYmxvY2svYmFkYmxvY2tzLmMtODE3LXtcXG5ibG9jay9iYWRibG9ja3MuYzo4MTg6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtODE5LVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9ODM4PXN0YXRpYyBib29sIF9iYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtODY2LVxcdGJhZC5hY2sgPSBhY2tub3dsZWRnZWQ7XFxuYmxvY2svYmFkYmxvY2tzLmM6ODY3OlxcdHAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy04NjgtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz05ODc9c3RhdGljIGludCBmcm9udF9jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy05OTEtXFx0c2VjdG9yX3QgcyA9IGJhZC1cXHUwMDNlc3RhcnQ7XFxuYmxvY2svYmFkYmxvY2tzLmM6OTkyOlxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTk5My1cXHRpbnQgY2xlYXJlZCA9IDA7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMDMwPXN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwMzIte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMzM6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTAzNC1cXHR1NjQgZW5kID0gQkJfRU5EKHBbcHJldl0pO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTA0OD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA4MC1cXHRiYWQuYWNrID0gdHJ1ZTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMDgxOlxcdHAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMDgyLVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTE4NT1zdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMTkxLVxcdGludCBhY2tlZF9iYWRibG9ja3MgPSAwO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExOTI6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTE5My1cXHRpbnQgbGVuLCBydjtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEzNzQ9dm9pZCBhY2tfYWxsX2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYilcXG5ibG9jay9iYWRibG9ja3MuYy0xMzc1LXtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzc2OlxcdGlmIChiYi1cXHUwMDNlcGFnZSA9PSBOVUxMIHx8IGJiLVxcdTAwM2VjaGFuZ2VkKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzctXFx0XFx0Lyogbm8gcG9pbnQgZXZlbiB0cnlpbmcgKi9cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODEtXFx0aWYgKGJiLVxcdTAwM2VjaGFuZ2VkID09IDAgXFx1MDAyNlxcdTAwMjYgYmItXFx1MDAzZXVuYWNrZWRfZXhpc3QpIHtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzgyOlxcdFxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODMtXFx0XFx0aW50IGk7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xNDEzPXNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjaylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MTYtXFx0aW50IGk7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTQxNzpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy0xNDE4LVxcdHVuc2lnbmVkIHNlcTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0OTA9c3RhdGljIGludCBfX2JhZGJsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDk5LVxcdGlmIChkZXYpXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUwMDpcXHRcXHRiYi1cXHUwMDNlcGFnZSA9IGRldm1fa3phbGxvYyhkZXYsIFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUwMS1cXHRlbHNlXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUwMjpcXHRcXHRiYi1cXHUwMDNlcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxNTAzOlxcdGlmICghYmItXFx1MDAzZXBhZ2UpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xNTA0LVxcdFxcdGJiLVxcdTAwM2VzaGlmdCA9IC0xO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTUzOT12b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTU0My1cXHRpZiAoYmItXFx1MDAzZWRldilcXG5ibG9jay9iYWRibG9ja3MuYzoxNTQ0OlxcdFxcdGRldm1fa2ZyZWUoYmItXFx1MDAzZWRldiwgYmItXFx1MDAzZXBhZ2UpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NDUtXFx0ZWxzZVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1NDY6XFx0XFx0a2ZyZWUoYmItXFx1MDAzZXBhZ2UpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1NDc6XFx0YmItXFx1MDAzZXBhZ2UgPSBOVUxMO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NDgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MTo0OS45MDU1MTkxMjFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE5NzQ3NTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBiYi1cdTAwM2VwYWdlYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHdoZXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBgZGV2bV9remFsbG9jYCwgbWVhbmluZyBpdCdzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZC4gRXhjZWxsZW50LCB0aGF0IHRha2VzIGNhcmUgb2YgYSBodWdlIHBvdGVudGlhbCBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEZ1cnRoZXJtb3JlLCB3ZSdyZSBleHBsaWNpdGx5IHRyYWNraW5nIHRoZSBgYmItXHUwMDNlY291bnRgIGVudHJpZXMsIGFuZCB3b3JraW5nIHdpdGhpbiB0aGUgYm91bmRzIG9mIGAwYCB0byBgYmItXHUwMDNlY291bnQgLSAxYC5cblxuVGhlIGJpc2VjdCBzZWFyY2ggbG9naWMgd2l0aGluIGBwcmV2X2JhZGJsb2Nrc2AgaXMgbm93IHNvdW5kLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgZm9yIGBoaWAgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gYGJiLVx1MDAzZWNvdW50YCwgYnV0IHRoYXQncyBiZWVuIGFkZHJlc3NlZCBieSBpbml0aWFsaXppbmcgYGhpYCB0byBgYmItXHUwMDNlY291bnQgLSAxYCBub3csIHdoaWNoIGVuc3VyZXMgd2Ugc3RheSB3aXRoaW4gdGhlIHZhbGlkIGJvdW5kcy4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBjcmVhdGVkLCByZWFkLCBvciBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBhbnl0aGluZyB1bmluaXRpYWxpemVkLiBBbGwgYWNjZXNzZXMgYXJlIGV4cGxpY2l0bHkgd2l0aGluIHRoZSBpbml0aWFsaXplZCByZWdpb24uIEFueSBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbmRleGluZyBlcnJvcnMgdGhhdCAqbWlnaHQqIGV4aXN0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IGNhdWdodCBieSBLQVNBTi5cblxuTGV0J3MgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IHRvIGJlIHN1cmU6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBmaWVsZHMvcGFkZGluZyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQ/IE5vcGUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBEZWZpbml0ZWx5IG5vdC4gVGhlIHdob2xlIHBhZ2UgaXMgemVyby1pbml0aWFsaXplZCwgYW5kIHRoZSB1c2VkIHBvcnRpb24gaXMgdHJhY2tlZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIEtBU0FOIGlzIHBlcmZlY3RseSBzdWZmaWNpZW50IGhlcmUgdG8gY2F0Y2ggYW55IHBvc3NpYmxlIGlzc3VlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLiBUaGlzIGlzIG5vdCB0aGUgc2NlbmFyaW8gd2hlcmUgS01TQU4gcHJvdmlkZXMgdW5pcXVlIHZhbHVlLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCB3aGljaCBlbXBoYXNpemUgdGhhdCBLTVNBTiBzaG91bGQgb25seSBiZSB1c2VkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSAqb25seSogZGV0ZWN0ZWQgYnkgS01TQU4sIHRoaXMgaXMgYSBjbGVhciBcIm5vXCIuXG5GaW5hbCBjaGVjazogcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzMsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjU1LjEwMjk5NzgwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggYm91bmRhcnkgaW5pdGlhbGl6YXRpb24gaW4gYHByZXZfYmFkYmxvY2tzKClgIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGBoaSA9IGJiLVxcdTAwM2Vjb3VudCAtIDFgIGluc3RlYWQgb2YgYGhpID0gYmItXFx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cXG5cXG5UaGUgYmFkYmxvY2sgYnVmZmVyIChgYmItXFx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cXHUwMDNlY291bnQgLSAxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJhZCBibG9jayBlbnRyaWVzLiBUaGUgY2hhbmdlcyBtb2RpZnkgaW5kZXggY2FsY3VsYXRpb25zIGFuZCBib3VuZHMgaW4gYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaCByb3V0aW5lLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZCwgbm9yIGlzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgZXhwb3NlZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgaHlwb3RoZXRpY2FsIGluZGV4aW5nIGRlZmVjdCBoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGJ5IEtBU0FOLCBub3QgS01TQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggYm91bmRhcnkgaW5pdGlhbGl6YXRpb24gaW4gYHByZXZfYmFkYmxvY2tzKClgIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGBoaSA9IGJiLVxcdTAwM2Vjb3VudCAtIDFgIGluc3RlYWQgb2YgYGhpID0gYmItXFx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cXG5cXG5UaGUgYmFkYmxvY2sgYnVmZmVyIChgYmItXFx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cXHUwMDNlY291bnQgLSAxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJhZCBibG9jayBlbnRyaWVzLiBUaGUgY2hhbmdlcyBtb2RpZnkgaW5kZXggY2FsY3VsYXRpb25zIGFuZCBib3VuZHMgaW4gYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaCByb3V0aW5lLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZCwgbm9yIGlzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgZXhwb3NlZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgaHlwb3RoZXRpY2FsIGluZGV4aW5nIGRlZmVjdCBoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGJ5IEtBU0FOLCBub3QgS01TQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow45w9x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 17:34:39 +0000 UTC FinishedAt: 2026-09-13 18:41:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ab5dc9daf73212125eb846404e1499a9e06679a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "BLK_DEV_MD", "BLK_DEV_NULL_BLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ab5dc9daf73212125eb846404e1499a9e06679a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "BLK_DEV_MD", "BLK_DEV_NULL_BLK" ], "series_id": "dd7a9d80-42b9-4fa4-8b95-03faa9e35005" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "prev_badblocks", "badblocks_set", "badblocks_clear", "badblocks_check", "badblocks_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ab5dc9daf73212125eb846404e1499a9e06679a1", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXZfYmFkYmxvY2tzJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3Nfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmluYXJ5IHNlYXJjaCBib3VuZGFyeSBpbml0aWFsaXphdGlvbiBpbiBgcHJldl9iYWRibG9ja3MoKWAgd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AuIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYGhpID0gYmItXHUwMDNlY291bnQgLSAxYCBpbnN0ZWFkIG9mIGBoaSA9IGJiLVx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cblxuVGhlIGJhZGJsb2NrIGJ1ZmZlciAoYGJiLVx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cdTAwM2Vjb3VudCAtIDFdYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmFkIGJsb2NrIGVudHJpZXMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBpbmRleCBjYWxjdWxhdGlvbnMgYW5kIGJvdW5kcyBpbiBhbiBpbnRlcm5hbCBiaW5hcnkgc2VhcmNoIHJvdXRpbmUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciByZWFkLCBub3IgaXMgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBleHBvc2VkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBoeXBvdGhldGljYWwgaW5kZXhpbmcgZGVmZWN0IGhlcmUgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoIGlzIHRyYWNrZWQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cdTAwM2Vjb3VudCAtIDEgaW5zdGVhZCBvZiBiYi1cdTAwM2Vjb3VudCksIHRoZSB1cHBlci1ib3VuZCBjaGVjayBjb25kaXRpb24sIGFuZCB0aGUgZmFsbGJhY2sgcmV0dXJuIGFzc2lnbm1lbnQgKHJldCA9IGxvIHVuY29uZGl0aW9uYWxseSkuIEJhZCBibG9ja3MgaGFuZGxpbmcgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGV4ZXJjaXNhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBibG9jayBkcml2ZXJzIHN1Y2ggYXMgTUQvUkFJRCAoZHJpdmVycy9tZCkgYW5kIG51bGxfYmxrIChkcml2ZXJzL2Jsb2NrL251bGxfYmxrKSwgYXMgd2VsbCBhcyB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgKGJhZGJsb2Nrc19zdG9yZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmllZCBzZWFyY2ggYm91bmRhcmllcyBhbmQgaW5kZXggaGFuZGxpbmcgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBvZmYtYnktb25lIGVycm9ycyBvbiBlZGdlIGNhc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTk2MmQwMjE2NjVjYWMxZGNkMmQ0YTQyODcxNGQ0OGQyMTg0YTJkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE4OjQwOjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcbmluZGV4IGVjZTY0ZTc2ZmU4ZmYuLjE0M2I0ODhiN2ZlNjggMTAwNjQ0XG4tLS0gYS9ibG9jay9iYWRibG9ja3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmFkYmxvY2tzLmNcbkBAIC00OTYsMTQgJiM0Mzs0OTYsMTQgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4gXHR9XG4gXG4gXHRsbyA9IDA7XG4tXHRoaSA9IGJiLVx1MDAzZWNvdW50O1xuJiM0MztcdGhpID0gYmItXHUwMDNlY291bnQgLSAxO1xuIFx0cCA9IGJiLVx1MDAzZXBhZ2U7XG4gXG4gXHQvKiBUaGUgZm9sbG93aW5nIGJpc2VjdCBzZWFyY2ggbWlnaHQgYmUgdW5uZWNlc3NhcnkgKi9cbiBcdGlmIChCQl9PRkZTRVQocFtsb10pIFx1MDAzZSBzKVxuIFx0XHRyZXR1cm4gLTE7XG4tXHRpZiAoQkJfT0ZGU0VUKHBbaGkgLSAxXSkgXHUwMDNjPSBzKVxuLVx0XHRyZXR1cm4gaGkgLSAxO1xuJiM0MztcdGlmIChCQl9PRkZTRVQocFtoaV0pIFx1MDAzYz0gcylcbiYjNDM7XHRcdHJldHVybiBoaTtcbiBcbiBcdC8qIERvIGJpc2VjdCBzZWFyY2ggaW4gYmFkIHRhYmxlICovXG4gXHR3aGlsZSAoaGkgLSBsbyBcdTAwM2UgMSkge1xuQEAgLTUyMSw4ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4gXHRcdFx0aGkgPSBtaWQ7XG4gXHR9XG4gXG4tXHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcdTAwM2M9IHMpXG4tXHRcdHJldCA9IGxvO1xuJiM0MztcdHJldCA9IGxvO1xuIG91dDpcbiBcdHJldHVybiByZXQ7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXZfYmFkYmxvY2tzJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3Nfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cdTAwM2Vjb3VudCAtIDEgaW5zdGVhZCBvZiBiYi1cdTAwM2Vjb3VudCksIHRoZSB1cHBlci1ib3VuZCBjaGVjayBjb25kaXRpb24sIGFuZCB0aGUgZmFsbGJhY2sgcmV0dXJuIGFzc2lnbm1lbnQgKHJldCA9IGxvIHVuY29uZGl0aW9uYWxseSkuIEJhZCBibG9ja3MgaGFuZGxpbmcgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGV4ZXJjaXNhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBibG9jayBkcml2ZXJzIHN1Y2ggYXMgTUQvUkFJRCAoZHJpdmVycy9tZCkgYW5kIG51bGxfYmxrIChkcml2ZXJzL2Jsb2NrL251bGxfYmxrKSwgYXMgd2VsbCBhcyB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgKGJhZGJsb2Nrc19zdG9yZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmllZCBzZWFyY2ggYm91bmRhcmllcyBhbmQgaW5kZXggaGFuZGxpbmcgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBvZmYtYnktb25lIGVycm9ycyBvbiBlZGdlIGNhc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTk2MmQwMjE2NjVjYWMxZGNkMmQ0YTQyODcxNGQ0OGQyMTg0YTJkOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDE4OjQwOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuYwppbmRleCBlY2U2NGU3NmZlOGZmLi4xNDNiNDg4YjdmZTY4IDEwMDY0NAotLS0gYS9ibG9jay9iYWRibG9ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iYWRibG9ja3MuYwpAQCAtNDk2LDE0ICYjNDM7NDk2LDE0IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLAogCX0KIAogCWxvID0gMDsKLQloaSA9IGJiLSZndDtjb3VudDsKJiM0MzsJaGkgPSBiYi0mZ3Q7Y291bnQgLSAxOwogCXAgPSBiYi0mZ3Q7cGFnZTsKIAogCS8qIFRoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeSAqLwogCWlmIChCQl9PRkZTRVQocFtsb10pICZndDsgcykKIAkJcmV0dXJuIC0xOwotCWlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSAmbHQ7PSBzKQotCQlyZXR1cm4gaGkgLSAxOwomIzQzOwlpZiAoQkJfT0ZGU0VUKHBbaGldKSAmbHQ7PSBzKQomIzQzOwkJcmV0dXJuIGhpOwogCiAJLyogRG8gYmlzZWN0IHNlYXJjaCBpbiBiYWQgdGFibGUgKi8KIAl3aGlsZSAoaGkgLSBsbyAmZ3Q7IDEpIHsKQEAgLTUyMSw4ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsCiAJCQloaSA9IG1pZDsKIAl9CiAKLQlpZiAoQkJfT0ZGU0VUKHBbbG9dKSAmbHQ7PSBzKQotCQlyZXQgPSBsbzsKJiM0MzsJcmV0ID0gbG87CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCYWQgQmxvY2tzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmFkYmxvY2tzLmNgLiAgSSBzZWUgYSBgZGlmZmAgc2hvd2luZyBjaGFuZ2VzLCB3aGljaCBtZWFucyBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGhlIHBhdGNoIGZvY3VzZXMgb24gdGhlIGBwcmV2X2JhZGJsb2Nrc2AgZnVuY3Rpb24sIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHRoZSBwcmV2aW91cyBiYWQgYmxvY2sgdG8gYSBnaXZlbiBvZmZzZXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGJsb2NrL2JhZGJsb2Nrcy5jYCBmaWxlIHVzaW5nIGVpdGhlciBteSB0cnVzdHkgYHJlYWQtZmlsZWAgY29tbWFuZCwgb3IsIGV2ZW4gYmV0dGVyLCBhIGBncmVwcGVyYCBjYWxsIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIEkgd2FudCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsb2dpYyBoZXJlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhlIGJpbmFyeSBzZWFyY2ggaW1wbGVtZW50YXRpb24gd2l0aGluIGBwcmV2X2JhZGJsb2Nrc2AuIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGBoaWAgd2FzIGluaXRpYWxpemVkIHRvIGBiYi0mZ3Q7Y291bnRgLiBUaGUgaW5kZXggYGhpYCBpcyB1c2VkIHRvIGluZGV4IGludG8gdGhlIGFycmF5IGBwYC4gVGhlIGZpcnN0IGNoYW5nZSBJIHNlZSBpcyBjaGFuZ2luZyBgaGlgIHRvIGJlIGBiYi0mZ3Q7Y291bnQgLTFgLiBUaGUgY29tbWVudCAmIzM0O1RoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeSYjMzQ7IGdpdmVzIG1lIGEgc3Ryb25nIGhpbnQgdGhpcyBpbml0aWFsaXphdGlvbiBjaGFuZ2UgaXMgdmVyeSBsaWtlbHkgcmVsYXRlZC4KCkFsc28gSSYjMzk7bSBub3RpY2luZyBhIHBvdGVudGlhbCBidWcgZml4LiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgdHdvIGVkZ2UtY2FzZSBjaGVja3M6IGBpZiAoQkJfT0ZGU0VUKHBbbG9dKSAmZ3Q7IHMpYCBhbmQgYGlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSAmbHQ7PSBzKWAuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBoYXMgY2hhbmdlZCB0aGUgc2Vjb25kIGNoZWNrIGZyb20gYGhpIC0gMWAgdG8gYGhpYC4gVGhpcyBpcyBpbW1lZGlhdGVseSBzdXNwaWNpb3VzLiBUaGUgc2Vjb25kIGNoYW5nZSBoYXMgYWZmZWN0ZWQgdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBsaWtlbHkgZml4ZXMgYW4gb2ZmLWJ5LW9uZSBlcnJvciBvciBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCkZ1cnRoZXIgZG93biwgdGhlIHJldHVybiB2YWx1ZSBgcmV0YCBzZWVtcyB0byBoYXZlIGFsc28gYmVlbiBzaW1wbGlmaWVkOiBubyBsb25nZXIgcGVyZm9ybWluZyBhbiBhZGRpdGlvbmFsIGNoZWNrLiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSB0aGV5IGFyZSBjb3JyZWN0IGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGNoYW5nZSBjb3VsZCBwb3RlbnRpYWxseSBicmVhayBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbW9kaWZpZWQgY29kZSBzdGlsbCBoYW5kbGVzIGVkZ2UgY2FzZXMgY29ycmVjdGx5IGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IGluZGV4IG9yIGFuIGVycm9yIGluZGljYXRpb24uIFVsdGltYXRlbHksIG15IGFuYWx5c2lzIHdpbGwgcmV2b2x2ZSBhcm91bmQgZW5zdXJpbmcgdGhhdCB0aGlzIG1vZGlmaWNhdGlvbiBpbXByb3ZlcyBjb3JyZWN0bmVzcyBhbmQgZWZmaWNpZW5jeSwgd2l0aG91dCBjcmVhdGluZyBuZXcgcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHR9XG4gNDcxOlx0XG4gNDcyOlx0XHRyZXR1cm4gcmV0O1xuIDQ3MzpcdH1cbiA0NzQ6XHRcbiA0NzU6XHQvKlxuIDQ3NjpcdCAqIEZpbmQgdGhlIHJhbmdlIHN0YXJ0cyBhdC1vci1iZWZvcmUgYmFkLVx1MDAzZXN0YXJ0LiBJZiAmIzM5O2hpbnQmIzM5OyBpcyBwcm92aWRlZFxuIDQ3NzpcdCAqIChoaW50IFx1MDAzZT0gMCkgdGhlbiBzZWFyY2ggaW4gdGhlIGJhZCB0YWJsZSBmcm9tIGhpbnQgZmlyc3RseS4gSXQgaXNcbiA0Nzg6XHQgKiB2ZXJ5IHByb2JhYmx5IHRoZSB3YW50ZWQgYmFkIHJhbmdlIGNhbiBiZSBmb3VuZCBmcm9tIHRoZSBoaW50IGluZGV4LFxuIDQ3OTpcdCAqIHRoZW4gdGhlIHVubmVjZXNzYXJ5IHdoaWxlLWxvb3AgaXRlcmF0aW9uIGNhbiBiZSBhdm9pZGVkLlxuIDQ4MDpcdCAqL1xuIDQ4MTpcdHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuIDQ4MjpcdFx0XHRcdCAgaW50IGhpbnQpXG4gNDgzOlx0e1xuIDQ4NDpcdFx0c2VjdG9yX3QgcyA9IGJhZC1cdTAwM2VzdGFydDtcbiA0ODU6XHRcdGludCByZXQgPSAtMTtcbiA0ODY6XHRcdGludCBsbywgaGk7XG4gNDg3Olx0XHR1NjQgKnA7XG4gNDg4Olx0XG4gNDg5Olx0XHRpZiAoIWJiLVx1MDAzZWNvdW50KVxuIDQ5MDpcdFx0XHRnb3RvIG91dDtcbiA0OTE6XHRcbiA0OTI6XHRcdGlmIChoaW50IFx1MDAzZT0gMCkge1xuIDQ5MzpcdFx0XHRyZXQgPSBwcmV2X2J5X2hpbnQoYmIsIHMsIGhpbnQpO1xuIDQ5NDpcdFx0XHRpZiAocmV0IFx1MDAzZT0gMClcbiA0OTU6XHRcdFx0XHRnb3RvIG91dDtcbiA0OTY6XHRcdH1cbiA0OTc6XHRcbiA0OTg6XHRcdGxvID0gMDtcbiA0OTk6XHRcdGhpID0gYmItXHUwMDNlY291bnQgLSAxO1xuIDUwMDpcdFx0cCA9IGJiLVx1MDAzZXBhZ2U7XG4gNTAxOlx0XG4gNTAyOlx0XHQvKiBUaGUgZm9sbG93aW5nIGJpc2VjdCBzZWFyY2ggbWlnaHQgYmUgdW5uZWNlc3NhcnkgKi9cbiA1MDM6XHRcdGlmIChCQl9PRkZTRVQocFtsb10pIFx1MDAzZSBzKVxuIDUwNDpcdFx0XHRyZXR1cm4gLTE7XG4gNTA1Olx0XHRpZiAoQkJfT0ZGU0VUKHBbaGldKSBcdTAwM2M9IHMpXG4gNTA2Olx0XHRcdHJldHVybiBoaTtcbiA1MDc6XHRcbiA1MDg6XHRcdC8qIERvIGJpc2VjdCBzZWFyY2ggaW4gYmFkIHRhYmxlICovXG4gNTA5Olx0XHR3aGlsZSAoaGkgLSBsbyBcdTAwM2UgMSkge1xuIDUxMDpcdFx0XHRpbnQgbWlkID0gKGxvICYjNDM7IGhpKS8yO1xuIDUxMTpcdFx0XHRzZWN0b3JfdCBhID0gQkJfT0ZGU0VUKHBbbWlkXSk7XG4gNTEyOlx0XG4gNTEzOlx0XHRcdGlmIChhID09IHMpIHtcbiA1MTQ6XHRcdFx0XHRyZXQgPSBtaWQ7XG4gNTE1Olx0XHRcdFx0Z290byBvdXQ7XG4gNTE2Olx0XHRcdH1cbiA1MTc6XHRcbiA1MTg6XHRcdFx0aWYgKGEgXHUwMDNjIHMpXG4gNTE5Olx0XHRcdFx0bG8gPSBtaWQ7XG4gNTIwOlx0XHRcdGVsc2VcbiA1MjE6XHRcdFx0XHRoaSA9IG1pZDtcbiA1MjI6XHRcdH1cbiA1MjM6XHRcbiA1MjQ6XHRcdHJldCA9IGxvO1xuIDUyNTpcdG91dDpcbiA1MjY6XHRcdHJldHVybiByZXQ7XG4gNTI3Olx0fVxuIDUyODpcdFxuIDUyOTpcdC8qXG4gNTMwOlx0ICogUmV0dXJuICYjMzk7dHJ1ZSYjMzk7IGlmIHRoZSByYW5nZSBpbmRpY2F0ZWQgYnkgJiMzOTtiYWQmIzM5OyBjYW4gYmUgZm9yd2FyZFxuIDUzMTpcdCAqIG1lcmdlZCB3aXRoIHRoZSBiYWQgcmFuZ2UgKGZyb20gdGhlIGJhZCB0YWJsZSkgaW5kZXhlZCBieSAmIzM5O3ByZXYmIzM5Oy5cbiA1MzI6XHQgKi9cbiA1MzM6XHRzdGF0aWMgYm9vbCBjYW5fbWVyZ2VfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxuIDUzNDpcdFx0XHRcdCAgICBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgYmFkYmxvY2tzLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgYmFkYmxvY2tzLmNgIGlzIGFjdHVhbGx5IGJ1aWx0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgcGF0aCB0aHJvdWdoIHRoZSBidWlsZCBzeXN0ZW0uIFdoZXJlIGlzIHRoaXMgdGhpbmcgZGVmaW5lZD8gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgYW5kIHRyeSB0byBsb2NhdGUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgaXQmIzM5O3Mgd2l0aGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSBzb3J0cyBvZiB0aGluZ3MgYXJlIGNvbnRyb2xsZWQuIEhvcGVmdWxseSwgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgYnVpbGQgcnVsZSBhbmQgSSB3b24mIzM5O3QgaGF2ZSB0byBjaGFzZSBkb3duIHRvbyBtYW55IGluY2x1ZGUgZGlyZWN0aXZlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT04PW9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG4tLVxuYmxvY2svTWFrZWZpbGUtMTItXHRcdFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcbmJsb2NrL01ha2VmaWxlOjEzOlx0XHRcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXG5ibG9jay9NYWtlZmlsZS0xNC1cdFx0XHRkaXNrLWV2ZW50cy5vIGJsay1pYS1yYW5nZXMubyBlYXJseS1sb29rdXAub1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTQtICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjU6ICogLSBIZWF2aWx5IGJhc2VkIG9uIE1EIGJhZGJsb2NrcyBjb2RlIGZyb20gTmVpbCBCcm93blxuYmxvY2svYmFkYmxvY2tzLmMtNi0gKlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTktXG5ibG9jay9iYWRibG9ja3MuYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuYmxvY2svYmFkYmxvY2tzLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvc2VxbG9jay5oXHUwMDNlXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTktLypcbmJsb2NrL2JhZGJsb2Nrcy5jOjIwOiAqIFRoZSBwdXJwb3NlIG9mIGJhZGJsb2NrcyBzZXQvY2xlYXIgaXMgdG8gbWFuYWdlIGJhZCBibG9ja3MgcmFuZ2VzIHdoaWNoIGFyZVxuYmxvY2svYmFkYmxvY2tzLmMtMjEtICogaWRlbnRpZmllZCBieSBMQkEgYWRkcmVzc2VzLlxuYmxvY2svYmFkYmxvY2tzLmMtMjItICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjIzOiAqIFdoZW4gdGhlIGNhbGxlciBvZiBiYWRibG9ja3Nfc2V0KCkgd2FudHMgdG8gc2V0IGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcywgdGhlXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTI4Mi0gKiAgICAgYmxvY2tzIHRhYmxlIGFyZSBhbGwgYWNrZWQsIG1lcmdpbmcgdGhlbSBpbnRvIGEgbGFyZ2VyIG9uZSByYW5nZSBtYXlcbmJsb2NrL2JhZGJsb2Nrcy5jOjI4MzogKiAgICAgb2NjdXB5IGxlc3MgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZSBhbmQgbWFrZSBiYWRibG9ja3NfY2hlY2soKSBmYXN0ZXIuXG5ibG9jay9iYWRibG9ja3MuYy0yODQtICogICAgIFRoZXJlZm9yZSBpbiBzdWNoIHNpdHVhdGlvbiwgYWZ0ZXIgb3ZlcndyaXRpbmcgcmFuZ2UgUywgdGhlIHByZXZpb3VzIHJhbmdlXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMzIwLSAqIHRoZSBiYWQgYmxvY2sgcmFuZ2Ugc2V0dGluZyBjb25kaXRpb25zLiBNYXliZSB0aGVyZSBpcyBzb21lIHJhcmUgY29ybmVyIGNhc2VcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyMTogKiBpcyBub3QgY29uc2lkZXJlZCBhbmQgb3B0aW1pemVkLCBpdCB3b24mIzM5O3QgaHVydCBpZiBiYWRibG9ja3Nfc2V0KCkgZmFpbHMgZHVlXG5ibG9jay9iYWRibG9ja3MuYy0zMjItICogdG8gbm8gc3BhY2UsIG9yIHNvbWUgcmFuZ2VzIGFyZSBub3QgbWVyZ2VkIHRvIHNhdmUgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZS5cbmJsb2NrL2JhZGJsb2Nrcy5jLTMyMy0gKlxuYmxvY2svYmFkYmxvY2tzLmM6MzI0OiAqIEluc2lkZSBiYWRibG9ja3Nfc2V0KCkgZWFjaCBsb29wIHN0YXJ0cyBieSBqdW1waW5nIHRvIHJlX2luc2VydCBsYWJlbCwgZXZlcnlcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyNTogKiB0aW1lIGZvciB0aGUgbmV3IGxvb3AgcHJldl9iYWRibG9ja3MoKSBpcyBjYWxsZWQgdG8gZmluZCBhbiBhbHJlYWR5IHNldCByYW5nZVxuYmxvY2svYmFkYmxvY2tzLmMtMzI2LSAqIHdoaWNoIHN0YXJ0cyBiZWZvcmUgb3IgYXQgY3VycmVudCBzZXR0aW5nIHJhbmdlLiBTaW5jZSB0aGUgc2V0dGluZyBiYWQgYmxvY2tzXG5ibG9jay9iYWRibG9ja3MuYy0zMjctICogcmFuZ2UgaXMgaGFuZGxlZCBmcm9tIGhlYWQgdG8gdGFpbCwgbW9zdCBvZiB0aGUgY2FzZXMgaXQgaXMgdW5uZWNlc3NhcnkgdG8gZG9cbmJsb2NrL2JhZGJsb2Nrcy5jOjMyODogKiB0aGUgYmluYXJ5IHNlYXJjaCBpbnNpZGUgcHJldl9iYWRibG9ja3MoKSwgaXQgaXMgcG9zc2libGUgdG8gcHJvdmlkZSBhIGhpbnRcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyOTogKiB0byBwcmV2X2JhZGJsb2NrcygpIGZvciBhIGZhc3QgcGF0aCwgdGhlbiB0aGUgZXhwZW5zaXZlIGJpbmFyeSBzZWFyY2ggY2FuIGJlXG5ibG9jay9iYWRibG9ja3MuYzozMzA6ICogYXZvaWRlZC4gSW4gbXkgdGVzdCB3aXRoIHRoZSBoaW50IHRvIHByZXZfYmFkYmxvY2tzKCksIGV4Y2VwdCBmb3IgdGhlIGZpcnN0XG5ibG9jay9iYWRibG9ja3MuYzozMzE6ICogbG9vcCwgYWxsIHJlc3RlZCBjYWxscyB0byBwcmV2X2JhZGJsb2NrcygpIGNhbiBnbyBpbnRvIHRoZSBmYXN0IHBhdGggYW5kXG5ibG9jay9iYWRibG9ja3MuYy0zMzItICogcmV0dXJuIGNvcnJlY3QgYmFkIGJsb2NrcyB0YWJsZSBpbmRleCBpbW1lZGlhdGVseS5cbi0tXG5ibG9jay9iYWRibG9ja3MuYy00NTYtICovXG5ibG9jay9iYWRibG9ja3MuYzo0NTc6c3RhdGljIGludCBwcmV2X2J5X2hpbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIGludCBoaW50KVxuYmxvY2svYmFkYmxvY2tzLmMtNDU4LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy00ODAtICovXG5ibG9jay9iYWRibG9ja3MuYzo0ODE6c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG5ibG9jay9iYWRibG9ja3MuYy00ODItXHRcdFx0ICBpbnQgaGludClcbi0tXG5ibG9jay9iYWRibG9ja3MuYy01MzItICovXG5ibG9jay9iYWRibG9ja3MuYzo1MzM6c3RhdGljIGJvb2wgY2FuX21lcmdlX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbmJsb2NrL2JhZGJsb2Nrcy5jOjUzNDpcdFx0XHQgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXG5ibG9jay9iYWRibG9ja3MuYy01MzUte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTU1MC0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjU1MTpzdGF0aWMgaW50IGZyb250X21lcmdlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXG5ibG9jay9iYWRibG9ja3MuYy01NTIte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTU4Ni0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjU4NzpzdGF0aWMgYm9vbCBjYW5fY29tYmluZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG5ibG9jay9iYWRibG9ja3MuYzo1ODg6XHRcdFx0ICAgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXG5ibG9jay9iYWRibG9ja3MuYy01ODkte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTYwNy0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjYwODpzdGF0aWMgdm9pZCBmcm9udF9jb21iaW5lKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldilcbmJsb2NrL2JhZGJsb2Nrcy5jLTYwOS17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNjI0LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6NjI1OnN0YXRpYyBib29sIG92ZXJsYXBfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBmcm9udCxcbmJsb2NrL2JhZGJsb2Nrcy5jOjYyNjpcdFx0XHQgIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuYmxvY2svYmFkYmxvY2tzLmMtNjI3LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy02MzktICovXG5ibG9jay9iYWRibG9ja3MuYzo2NDA6c3RhdGljIGJvb2wgb3ZlcmxhcF9iZWhpbmQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuYmxvY2svYmFkYmxvY2tzLmMtNjQxLVx0XHRcdCAgIGludCBiZWhpbmQpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNjcxLSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6NjcyOnN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxuYmxvY2svYmFkYmxvY2tzLmM6NjczOlx0XHRcdFx0c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsIGludCAqZXh0cmEpXG5ibG9jay9iYWRibG9ja3MuYy02NzQte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNC0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjcxNTpzdGF0aWMgaW50IGZyb250X292ZXJ3cml0ZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG5ibG9jay9iYWRibG9ja3MuYzo3MTY6XHRcdFx0ICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsIGludCBleHRyYSlcbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNy17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzc2LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6Nzc3OnN0YXRpYyBpbnQgaW5zZXJ0X2F0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgYXQsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuYmxvY2svYmFkYmxvY2tzLmMtNzc4LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy03ODEtXG5ibG9jay9iYWRibG9ja3MuYzo3ODI6XHRXQVJOX09OKGJhZGJsb2Nrc19mdWxsKGJiKSk7XG5ibG9jay9iYWRibG9ja3MuYy03ODMtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzkxLVxuYmxvY2svYmFkYmxvY2tzLmM6NzkyOnN0YXRpYyB2b2lkIGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoc3RydWN0IGJhZGJsb2NrcyAqYmIpXG5ibG9jay9iYWRibG9ja3MuYy03OTMte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgxNS0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjgxNjpzdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXG5ibG9jay9iYWRibG9ja3MuYy04MTcte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgzNy0vKiBEbyBleGFjdCB3b3JrIHRvIHNldCBiYWQgYmxvY2sgcmFuZ2UgaW50byB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzo4Mzg6c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy04MzktXHRcdFx0ICAgaW50IGFja25vd2xlZGdlZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYy04NDEtXHRpbnQgbGVuID0gMCwgYWRkZWQgPSAwO1xuYmxvY2svYmFkYmxvY2tzLmM6ODQyOlx0c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0IGJhZDtcbmJsb2NrL2JhZGJsb2Nrcy5jLTg0My1cdGludCBwcmV2ID0gLTEsIGhpbnQgPSAtMTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy04NDctXHRpZiAoYmItXHUwMDNlc2hpZnQgXHUwMDNjIDApXG5ibG9jay9iYWRibG9ja3MuYzo4NDg6XHRcdC8qIGJhZGJsb2NrcyBhcmUgZGlzYWJsZWQgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jLTg0OS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTg3My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjg3NDpcdGlmIChiYWRibG9ja3NfZnVsbChiYikpXG5ibG9jay9iYWRibG9ja3MuYy04NzUtXHRcdGdvdG8gb3V0O1xuYmxvY2svYmFkYmxvY2tzLmMtODc2LVxuYmxvY2svYmFkYmxvY2tzLmM6ODc3Olx0aWYgKGJhZGJsb2Nrc19lbXB0eShiYikpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTg3OC1cdFx0bGVuID0gaW5zZXJ0X2F0KGJiLCAwLCBcdTAwMjZiYWQpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTg4My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjg4NDpcdHByZXYgPSBwcmV2X2JhZGJsb2NrcyhiYiwgXHUwMDI2YmFkLCBoaW50KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTg4NS1cbmJsb2NrL2JhZGJsb2Nrcy5jOjg4NjpcdC8qIHN0YXJ0IGJlZm9yZSBhbGwgYmFkYmxvY2tzICovXG5ibG9jay9iYWRibG9ja3MuYy04ODctXHRpZiAocHJldiBcdTAwM2MgMCkge1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTk3MS1cdFx0ZWxzZVxuYmxvY2svYmFkYmxvY2tzLmM6OTcyOlx0XHRcdGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoYmIpO1xuYmxvY2svYmFkYmxvY2tzLmMtOTczLVx0fVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTk4Ni0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjk4NzpzdGF0aWMgaW50IGZyb250X2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbmJsb2NrL2JhZGJsb2Nrcy5jOjk4ODpcdFx0ICAgICAgIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLCBpbnQgKmRlbGV0ZWQpXG5ibG9jay9iYWRibG9ja3MuYy05ODkte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEwMjktICovXG5ibG9jay9iYWRibG9ja3MuYzoxMDMwOnN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMzE6XHRcdFx0XHQgIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuYmxvY2svYmFkYmxvY2tzLmMtMTAzMi17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTA0Ny0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjbGVhciBiYWQgYmxvY2sgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzoxMDQ4OnN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG5ibG9jay9iYWRibG9ja3MuYy0xMDQ5LXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwNTA6XHRzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgYmFkO1xuYmxvY2svYmFkYmxvY2tzLmMtMTA1MS1cdGludCBwcmV2ID0gLTEsIGhpbnQgPSAtMTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMDU1LVx0aWYgKGJiLVx1MDAzZXNoaWZ0IFx1MDAzYyAwKVxuYmxvY2svYmFkYmxvY2tzLmM6MTA1NjpcdFx0LyogYmFkYmxvY2tzIGFyZSBkaXNhYmxlZCAqL1xuYmxvY2svYmFkYmxvY2tzLmMtMTA1Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODYtXG5ibG9jay9iYWRibG9ja3MuYzoxMDg3Olx0aWYgKGJhZGJsb2Nrc19lbXB0eShiYikpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODgtXHRcdGxlbiA9IHNlY3RvcnM7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTA5My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEwOTQ6XHRwcmV2ID0gcHJldl9iYWRibG9ja3MoYmIsIFx1MDAyNmJhZCwgaGludCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMDk1LVxuYmxvY2svYmFkYmxvY2tzLmM6MTA5NjpcdC8qIFN0YXJ0IGJlZm9yZSBhbGwgYmFkYmxvY2tzICovXG5ibG9jay9iYWRibG9ja3MuYy0xMDk3LVx0aWYgKHByZXYgXHUwMDNjIDApIHtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTExLVxuYmxvY2svYmFkYmxvY2tzLmM6MTExMjpcdC8qIFN0YXJ0IGFmdGVyIGFsbCBiYWRibG9ja3MgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jLTExMTMtXHRpZiAoKHByZXYgJiM0MzsgMSkgXHUwMDNlPSBiYi1cdTAwM2Vjb3VudCBcdTAwMjZcdTAwMjYgIW92ZXJsYXBfZnJvbnQoYmIsIHByZXYsIFx1MDAyNmJhZCkpIHtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTE5LVx0LyogQ2xlYXIgd2lsbCBzcGxpdCBhIGJhZCByZWNvcmQgYnV0IHRoZSB0YWJsZSBpcyBmdWxsICovXG5ibG9jay9iYWRibG9ja3MuYzoxMTIwOlx0aWYgKGJhZGJsb2Nrc19mdWxsKGJiKSBcdTAwMjZcdTAwMjYgKEJCX09GRlNFVChwW3ByZXZdKSBcdTAwM2MgYmFkLnN0YXJ0KSBcdTAwMjZcdTAwMjZcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMjEtXHQgICAgKEJCX0VORChwW3ByZXZdKSBcdTAwM2UgKGJhZC5zdGFydCAmIzQzOyBzZWN0b3JzKSkpIHtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTU4LVxuYmxvY2svYmFkYmxvY2tzLmM6MTE1OTpcdC8qIE5vdCBjb3ZlciBhbnkgYmFkYmxvY2tzIHJhbmdlIGluIHRoZSB0YWJsZSAqL1xuYmxvY2svYmFkYmxvY2tzLmMtMTE2MC1cdGxlbiA9IHNlY3RvcnM7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTE3MS1cdGlmIChjbGVhcmVkKSB7XG5ibG9jay9iYWRibG9ja3MuYzoxMTcyOlx0XHRiYWRibG9ja3NfdXBkYXRlX2Fja2VkKGJiKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNzMtXHRcdHNldF9jaGFuZ2VkKGJiKTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTg0LS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNoZWNrIGJhZCBibG9ja3MgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzoxMTg1OnN0YXRpYyBpbnQgX2JhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExODYtXHRcdFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTg4LVx0aW50IHByZXYgPSAtMSwgaGludCA9IC0xLCBzZXQgPSAwO1xuYmxvY2svYmFkYmxvY2tzLmM6MTE4OTpcdHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCBiYWQ7XG5ibG9jay9iYWRibG9ja3MuYzoxMTkwOlx0aW50IHVuYWNrZWRfYmFkYmxvY2tzID0gMDtcbmJsb2NrL2JhZGJsb2Nrcy5jOjExOTE6XHRpbnQgYWNrZWRfYmFkYmxvY2tzID0gMDtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExOTItXHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTExOTgtXG5ibG9jay9iYWRibG9ja3MuYzoxMTk5Olx0aWYgKGJhZGJsb2Nrc19lbXB0eShiYikpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDAtXHRcdGxlbiA9IHNlY3RvcnM7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMy1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEyMDQ6XHRwcmV2ID0gcHJldl9iYWRibG9ja3MoYmIsIFx1MDAyNmJhZCwgaGludCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMjA1LVxuYmxvY2svYmFkYmxvY2tzLmM6MTIwNjpcdC8qIHN0YXJ0IGFmdGVyIGFsbCBiYWRibG9ja3MgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDctXHRpZiAoKHByZXYgXHUwMDNlPSAwKSBcdTAwMjZcdTAwMjZcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjEyLVxuYmxvY2svYmFkYmxvY2tzLmM6MTIxMzpcdC8qIE92ZXJsYXBwZWQgd2l0aCBmcm9udCBiYWRibG9ja3MgcmVjb3JkICovXG5ibG9jay9iYWRibG9ja3MuYy0xMjE0LVx0aWYgKChwcmV2IFx1MDAzZT0gMCkgXHUwMDI2XHUwMDI2IG92ZXJsYXBfZnJvbnQoYmIsIHByZXYsIFx1MDAyNmJhZCkpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMTUtXHRcdGlmIChCQl9BQ0socFtwcmV2XSkpXG5ibG9jay9iYWRibG9ja3MuYzoxMjE2Olx0XHRcdGFja2VkX2JhZGJsb2NrcyYjNDM7JiM0Mzs7XG5ibG9jay9iYWRibG9ja3MuYy0xMjE3LVx0XHRlbHNlXG5ibG9jay9iYWRibG9ja3MuYzoxMjE4Olx0XHRcdHVuYWNrZWRfYmFkYmxvY2tzJiM0MzsmIzQzOztcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMTktXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTIzOS1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNDA6XHQvKiBub3QgY292ZXIgYW55IGJhZGJsb2NrcyByYW5nZSBpbiB0aGUgdGFibGUgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNDEtXHRsZW4gPSBzZWN0b3JzO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNTItXG5ibG9jay9iYWRibG9ja3MuYzoxMjUzOlx0aWYgKHVuYWNrZWRfYmFkYmxvY2tzIFx1MDAzZSAwKVxuYmxvY2svYmFkYmxvY2tzLmMtMTI1NC1cdFx0cnYgPSAtMTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNTU6XHRlbHNlIGlmIChhY2tlZF9iYWRibG9ja3MgXHUwMDNlIDApXG5ibG9jay9iYWRibG9ja3MuYy0xMjU2LVx0XHRydiA9IDE7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTI2My0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjQ6ICogYmFkYmxvY2tzX2NoZWNrKCkgLSBjaGVjayBhIGdpdmVuIHJhbmdlIGZvciBiYWQgc2VjdG9yc1xuYmxvY2svYmFkYmxvY2tzLmM6MTI2NTogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYzoxMjY2OiAqIEBzOlx0XHRzZWN0b3IgKHN0YXJ0KSBhdCB3aGljaCB0byBjaGVjayBmb3IgYmFkYmxvY2tzXG5ibG9jay9iYWRibG9ja3MuYzoxMjY3OiAqIEBzZWN0b3JzOlx0bnVtYmVyIG9mIHNlY3RvcnMgdG8gY2hlY2sgZm9yIGJhZGJsb2Nrc1xuYmxvY2svYmFkYmxvY2tzLmMtMTI2OC0gKiBAZmlyc3RfYmFkOlx0cG9pbnRlciB0byBzdG9yZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgYmFkYmxvY2tcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjk6ICogQGJhZF9zZWN0b3JzOiBwb2ludGVyIHRvIHN0b3JlIG51bWJlciBvZiBiYWRibG9ja3MgYWZ0ZXIgQGZpcnN0X2JhZFxuYmxvY2svYmFkYmxvY2tzLmMtMTI3MC0gKlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzktICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyODA6ICogTG9ja2luZyBvZiB0aGUgYmFkLWJsb2NrIHRhYmxlIHVzZXMgYSBzZXFsb2NrIHNvIGJhZGJsb2Nrc19jaGVja1xuYmxvY2svYmFkYmxvY2tzLmMtMTI4MS0gKiBtaWdodCBuZWVkIHRvIHJldHJ5IGlmIGl0IGlzIHZlcnkgdW5sdWNreS5cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjk2LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTI5NzppbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5OC1cdFx0XHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTMxNS1cdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2YmItXHUwMDNlbG9jayk7XG5ibG9jay9iYWRibG9ja3MuYzoxMzE2Olx0cnYgPSBfYmFkYmxvY2tzX2NoZWNrKGJiLCBzLCBzZWN0b3JzLCBmaXJzdF9iYWQsIGJhZF9zZWN0b3JzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMTctXHRpZiAocmVhZF9zZXFyZXRyeShcdTAwMjZiYi1cdTAwM2Vsb2NrLCBzZXEpKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjEtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTMyMjpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2hlY2spO1xuYmxvY2svYmFkYmxvY2tzLmMtMTMyMy1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjQtLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzI1OiAqIGJhZGJsb2Nrc19zZXQoKSAtIEFkZCBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxuYmxvY2svYmFkYmxvY2tzLmM6MTMyNjogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYy0xMzI3LSAqIEBzOlx0XHRmaXJzdCBzZWN0b3IgdG8gbWFyayBhcyBiYWRcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzM2LSAqICB0cnVlOiBzdWNjZXNzXG5ibG9jay9iYWRibG9ja3MuYzoxMzM3OiAqICBmYWxzZTogZmFpbGVkIHRvIHNldCBiYWRibG9ja3MgKG91dCBvZiBzcGFjZSkuIFBhcml0YWwgc2V0dGluZyB3aWxsIGJlXG5ibG9jay9iYWRibG9ja3MuYy0xMzM4LSAqICB0cmVhdGVkIGFzIGZhaWx1cmUuXG5ibG9jay9iYWRibG9ja3MuYy0xMzM5LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM0MDpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy0xMzQxLVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM0Mi17XG5ibG9jay9iYWRibG9ja3MuYzoxMzQzOlx0cmV0dXJuIF9iYWRibG9ja3Nfc2V0KGJiLCBzLCBzZWN0b3JzLCBhY2tub3dsZWRnZWQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM0NC19XG5ibG9jay9iYWRibG9ja3MuYzoxMzQ1OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zZXQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM0Ni1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDctLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzQ4OiAqIGJhZGJsb2Nrc19jbGVhcigpIC0gUmVtb3ZlIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXG5ibG9jay9iYWRibG9ja3MuYzoxMzQ5OiAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNTAtICogQHM6XHRcdGZpcnN0IHNlY3RvciB0byBtYXJrIGFzIGJhZFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNTgtICogIHRydWU6IHN1Y2Nlc3NcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNTk6ICogIGZhbHNlOiBmYWlsZWQgdG8gY2xlYXIgYmFkYmxvY2tzXG5ibG9jay9iYWRibG9ja3MuYy0xMzYwLSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM2MTpib29sIGJhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjIte1xuYmxvY2svYmFkYmxvY2tzLmM6MTM2MzpcdHJldHVybiBfYmFkYmxvY2tzX2NsZWFyKGJiLCBzLCBzZWN0b3JzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjQtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTM2NTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2xlYXIpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM2Ni1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjctLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzY4OiAqIGFja19hbGxfYmFkYmxvY2tzKCkgLSBBY2tub3dsZWRnZSBhbGwgYmFkIGJsb2NrcyBpbiBhIGxpc3QuXG5ibG9jay9iYWRibG9ja3MuYzoxMzY5OiAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzAtICpcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzczLSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM3NDp2b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM3NS17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTQwMS19XG5ibG9jay9iYWRibG9ja3MuYzoxNDAyOkVYUE9SVF9TWU1CT0xfR1BMKGFja19hbGxfYmFkYmxvY2tzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MDMtXG5ibG9jay9iYWRibG9ja3MuYy0xNDA0LS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTQwNTogKiBiYWRibG9ja3Nfc2hvdygpIC0gc3lzZnMgYWNjZXNzIHRvIGJhZC1ibG9ja3MgbGlzdFxuYmxvY2svYmFkYmxvY2tzLmM6MTQwNjogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYy0xNDA3LSAqIEBwYWdlOlx0YnVmZmVyIHJlY2VpdmVkIGZyb20gc3lzZnNcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0MDg6ICogQHVuYWNrOlx0d2VhdGhlciB0byBzaG93IHVuYWNrbm93bGVkZ2VkIGJhZGJsb2Nrc1xuYmxvY2svYmFkYmxvY2tzLmMtMTQwOS0gKlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MTItICovXG5ibG9jay9iYWRibG9ja3MuYzoxNDEzOnNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjaylcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MTQte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTAtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ1MTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2hvdyk7XG5ibG9jay9iYWRibG9ja3MuYy0xNDUyLVxuYmxvY2svYmFkYmxvY2tzLmMtMTQ1My0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NTQ6ICogYmFkYmxvY2tzX3N0b3JlKCkgLSBzeXNmcyBhY2Nlc3MgdG8gYmFkLWJsb2NrcyBsaXN0XG5ibG9jay9iYWRibG9ja3MuYzoxNDU1OiAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTYtICogQHBhZ2U6XHRidWZmZXIgcmVjZWl2ZWQgZnJvbSBzeXNmc1xuYmxvY2svYmFkYmxvY2tzLmMtMTQ1Ny0gKiBAbGVuOlx0bGVuZ3RoIG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSBzeXNmc1xuYmxvY2svYmFkYmxvY2tzLmM6MTQ1ODogKiBAdW5hY2s6XHR3ZWF0aGVyIHRvIHNob3cgdW5hY2tub3dsZWRnZWQgYmFkYmxvY2tzXG5ibG9jay9iYWRibG9ja3MuYy0xNDU5LSAqXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTQ2Mi0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NjM6c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXG5ibG9jay9iYWRibG9ja3MuYy0xNDY0LVx0XHRcdGludCB1bmFjaylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDgyLVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4MzpcdGlmICghYmFkYmxvY2tzX3NldChiYiwgc2VjdG9yLCBsZW5ndGgsICF1bmFjaykpXG5ibG9jay9iYWRibG9ja3MuYy0xNDg0LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDg3LX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0ODg6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3N0b3JlKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktXG5ibG9jay9iYWRibG9ja3MuYzoxNDkwOnN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ5MS1cdFx0aW50IGVuYWJsZSlcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNTEyLS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTUxMzogKiBiYWRibG9ja3NfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZVxuYmxvY2svYmFkYmxvY2tzLmM6MTUxNDogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYzoxNTE1OiAqIEBlbmFibGU6XHR3ZWF0aGVyIHRvIGVuYWJsZSBiYWRibG9ja3MgYWNjb3VudGluZ1xuYmxvY2svYmFkYmxvY2tzLmMtMTUxNi0gKlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjAtICovXG5ibG9jay9iYWRibG9ja3MuYzoxNTIxOmludCBiYWRibG9ja3NfaW5pdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGVuYWJsZSlcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjIte1xuYmxvY2svYmFkYmxvY2tzLmM6MTUyMzpcdHJldHVybiBfX2JhZGJsb2Nrc19pbml0KE5VTEwsIGJiLCBlbmFibGUpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTUyNC19XG5ibG9jay9iYWRibG9ja3MuYzoxNTI1OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19pbml0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjYtXG5ibG9jay9iYWRibG9ja3MuYzoxNTI3OmludCBkZXZtX2luaXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXG5ibG9jay9iYWRibG9ja3MuYy0xNTI4LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNTMwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzE6XHRyZXR1cm4gX19iYWRibG9ja3NfaW5pdChkZXYsIGJiLCAxKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzItfVxuYmxvY2svYmFkYmxvY2tzLmM6MTUzMzpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2luaXRfYmFkYmxvY2tzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzQtXG5ibG9jay9iYWRibG9ja3MuYy0xNTM1LS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTUzNjogKiBiYWRibG9ja3NfZXhpdCgpIC0gZnJlZSB0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZVxuYmxvY2svYmFkYmxvY2tzLmM6MTUzNzogKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG5ibG9jay9iYWRibG9ja3MuYy0xNTM4LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTUzOTp2b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuYmxvY2svYmFkYmxvY2tzLmMtMTU0MC17XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTU0OC19XG5ibG9jay9iYWRibG9ja3MuYzoxNTQ5OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19leGl0KTtcbi0tXG5ibG9jay9nZW5oZC5jLTI1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuYmxvY2svZ2VuaGQuYzoyNjojaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuYmxvY2svZ2VuaGQuYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuLS1cbmJsb2NrL2dlbmhkLmM9ODUyPUVYUE9SVF9TWU1CT0woaW52YWxpZGF0ZV9kaXNrKTtcbi0tXG5ibG9jay9nZW5oZC5jLTg1NC0vKiBzeXNmcyBhY2Nlc3MgdG8gYmFkLWJsb2NrcyBsaXN0LiAqL1xuYmxvY2svZ2VuaGQuYzo4NTU6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5ibG9jay9nZW5oZC5jLTg1Ni1cdFx0XHRcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuYmxvY2svZ2VuaGQuYy04NjMtXG5ibG9jay9nZW5oZC5jOjg2NDpcdHJldHVybiBiYWRibG9ja3Nfc2hvdyhkaXNrLVx1MDAzZWJiLCBwYWdlLCAwKTtcbmJsb2NrL2dlbmhkLmMtODY1LX1cbmJsb2NrL2dlbmhkLmMtODY2LVxuYmxvY2svZ2VuaGQuYzo4Njc6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuYmxvY2svZ2VuaGQuYy04NjgtXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmJsb2NrL2dlbmhkLmMtODc1LVxuYmxvY2svZ2VuaGQuYzo4NzY6XHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKGRpc2stXHUwMDNlYmIsIHBhZ2UsIGxlbiwgMCk7XG5ibG9jay9nZW5oZC5jLTg3Ny19XG4tLVxuYmxvY2svZ2VuaGQuYz0xMTc2PXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcbmJsb2NrL2dlbmhkLmM6MTE3NzpzdGF0aWMgREVWSUNFX0FUVFIoYmFkYmxvY2tzLCAwNjQ0LCBkaXNrX2JhZGJsb2Nrc19zaG93LCBkaXNrX2JhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9nZW5oZC5jLTExNzgtc3RhdGljIERFVklDRV9BVFRSKGRpc2tzZXEsIDA0NDQsIGRpc2tzZXFfc2hvdywgTlVMTCk7XG4tLVxuYmxvY2svZ2VuaGQuYz0xMjEzPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkaXNrX2F0dHJzW10gPSB7XG4tLVxuYmxvY2svZ2VuaGQuYy0xMjI0LVx0XHUwMDI2ZGV2X2F0dHJfaW5mbGlnaHQuYXR0cixcbmJsb2NrL2dlbmhkLmM6MTIyNTpcdFx1MDAyNmRldl9hdHRyX2JhZGJsb2Nrcy5hdHRyLFxuYmxvY2svZ2VuaGQuYy0xMjI2LVx0XHUwMDI2ZGV2X2F0dHJfZXZlbnRzLmF0dHIsXG4tLVxuYmxvY2svZ2VuaGQuYz0xMjQwPXN0YXRpYyB1bW9kZV90IGRpc2tfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IG4pXG4tLVxuYmxvY2svZ2VuaGQuYy0xMjQ0LVxuYmxvY2svZ2VuaGQuYzoxMjQ1Olx0aWYgKGEgPT0gXHUwMDI2ZGV2X2F0dHJfYmFkYmxvY2tzLmF0dHIgXHUwMDI2XHUwMDI2ICFkaXNrLVx1MDAzZWJiKVxuYmxvY2svZ2VuaGQuYy0xMjQ2LVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgzNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBLZXJuZWwgQmFkIEJsb2NrIE1hbmFnZW1lbnQqKgoKUmlnaHQsIHNvIGBibG9jay9iYWRibG9ja3MuY2AgaXMgZGVmaW5pdGVseSBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBgYmxvY2svTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQ7IGBiYWRibG9ja3Mub2AgaXMgYWx3YXlzIGJlaW5nIGJ1aWx0IHdpdGggdGhlIGJsb2NrIGxheWVyLiBJbnRlcmVzdGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHdobyYjMzk7cyBhY3R1YWxseSAqdXNpbmcqIHRoaXMgY29kZS4KCkhtbSwgUkFJRCwgc3BlY2lmaWNhbGx5IHRoZSBNRCBsYXllciwgZGVmaW5pdGVseSBsZXZlcmFnZXMgYGJhZGJsb2Nrc2AsIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGRhdGEgaW50ZWdyaXR5LiBBbmQgSSBzZWUgYHBtZW0vbnZkaW1tYCBpcyBpbiB0aGUgbWl4IHRvby4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBOVkRJTU1zLCBtYW5hZ2luZyBiYWQgYmxvY2tzIGlzICpjcml0aWNhbCogZm9yIHRob3NlLCBzbyB0aGF0JiMzOTtzIGxvZ2ljYWwuIE51bGxfYmxrIGlzIHVzaW5nIGl0IHRvbz8gSSYjMzk7bSBjdXJpb3VzIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBiYWQgYmxvY2tzIHdoZW4gdGhleSBkb24mIzM5O3QgZXZlbiBoYXZlIGEgcGh5c2ljYWwgYmxvY2sgZGV2aWNlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW50byB0aGF0IG9uZSBmdXJ0aGVyLgoKVGhlIG1vcmUgY3J1Y2lhbCBxdWVzdGlvbiBpczogd2hvICppbml0aWFsaXplcyogdGhlIGBkaXNrLSZndDtiYmAgc3RydWN0dXJlIG9yIGNhbGxzIGBiYWRibG9ja3NfaW5pdGA/IEtub3dpbmcgKndobyogaXMgc2V0dGluZyB1cCB0aGUgYmFkIGJsb2NrIG1hbmFnZW1lbnQgZm9yIGEgZGV2aWNlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyBiZWluZyAqdXNlZCogZWZmZWN0aXZlbHkuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgZG93biB0aG9zZSBjYWxscyB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHdob2xlIGJhZCBibG9jayBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3NfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz0xNDg4PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9iYWRibG9ja3MuYy0xNDg5LVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ5MDpzdGF0aWMgaW50IF9fYmFkYmxvY2tzX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmFkYmxvY2tzICpiYixcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTEtXHRcdGludCBlbmFibGUpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTUxMi0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MTM6ICogYmFkYmxvY2tzX2luaXQoKSAtIGluaXRpYWxpemUgdGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmVcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MTQtICogQGJiOlx0XHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjAtICovXG5ibG9jay9iYWRibG9ja3MuYzoxNTIxOmludCBiYWRibG9ja3NfaW5pdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGVuYWJsZSlcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjIte1xuYmxvY2svYmFkYmxvY2tzLmM6MTUyMzpcdHJldHVybiBfX2JhZGJsb2Nrc19pbml0KE5VTEwsIGJiLCBlbmFibGUpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTUyNC19XG5ibG9jay9iYWRibG9ja3MuYzoxNTI1OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19pbml0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjYtXG5ibG9jay9iYWRibG9ja3MuYz0xNTI3PWludCBkZXZtX2luaXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTUzMC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5ibG9jay9iYWRibG9ja3MuYzoxNTMxOlx0cmV0dXJuIF9fYmFkYmxvY2tzX2luaXQoZGV2LCBiYiwgMSk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTMyLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03ODY9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODAxLVx0SU5JVF9SQURJWF9UUkVFKFx1MDAyNmRldi1cdTAwM2VjYWNoZSwgR0ZQX0FUT01JQyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4MDI6XHRpZiAoYmFkYmxvY2tzX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWJhZGJsb2NrcywgMCkpIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTgwMy1cdFx0a2ZyZWUoZGV2KTtcbi0tXG5kcml2ZXJzL21kL21kLmM9Mzc5Mz1pbnQgbWRfcmRldl9pbml0KHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy0zODE1LVx0ICovXG5kcml2ZXJzL21kL21kLmM6MzgxNjpcdHJldHVybiBiYWRibG9ja3NfaW5pdChcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgMCk7XG5kcml2ZXJzL21kL21kLmMtMzgxNy19XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01OD1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTktXHRcdFx0aW50IHVuYWNrKTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NjA6aW50IGJhZGJsb2Nrc19pbml0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZW5hYmxlKTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNjEtdm9pZCBiYWRibG9ja3NfZXhpdChzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjoKCioqQmFkIEJsb2NrIEluaXRpYWxpemF0aW9uOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJhZCBibG9jayBtYW5hZ2VtZW50IGlzIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBtdWx0aXBsZSBpbml0aWFsaXphdGlvbiBwb2ludHMuIEZpcnN0LCBgbnVsbF9ibGtgIGluaXRpYWxpemVzIGAmYW1wO2Rldi0mZ3Q7YmFkYmxvY2tzYC4gVGhhdCYjMzk7cyBleHBlY3RlZCwgYSBiYXNpYyBibG9jayBkZXZpY2UgbmVlZHMgdG8ga25vdyBhYm91dCBiYWQgc2VjdG9ycy4gVGhlbiwgaW4gdGhlIE1EIHJhaWQgc2V0dXAsIHdlIGhhdmUgYG1kX3JkZXZfaW5pdGAgaW5pdGlhbGl6aW5nIGAmYW1wO3JkZXYtJmd0O2JhZGJsb2Nrc2AuIFRoaXMgbWFrZXMgc2Vuc2U7IFJBSUQgZGV2aWNlcywgYnVpbHQgb24gbXVsdGlwbGUgdW5kZXJseWluZyBkZXZpY2VzLCB3b3VsZCBhbHNvIG5lZWQgdGhlaXIgb3duIGJhZCBibG9jayBoYW5kbGluZywgbGlrZWx5IHRvIGFjY291bnQgZm9yIGZhaWx1cmVzIGluIHRoZSBjb25zdGl0dWVudCBkcml2ZXMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGFuZCBhbnkgcG90ZW50aWFsIG92ZXJsYXAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCB3aGF0IG90aGVyIG1vZHVsZXMgYXJlIG1ha2luZyB1c2Ugb2YgdGhpcz8gTXkgdGhvdWdodCBub3cgaXMgdG8gY2hlY2sgZm9yIHRoZSBjYWxscyB0byBgZGV2bV9pbml0X2JhZGJsb2Nrc2AsIGFzIGl0IGlzIGxpa2VseSBhIHNoYXJlZCBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIHNlZSB3aG8mIzM5O3MgY2FsbGluZyBpdCB0byBncmFzcCB0aGUgb3ZlcmFsbCBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgYmFkIGJsb2NrIHN5c3RlbXMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9pbml0X2JhZGJsb2NrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz0xNTI1PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19pbml0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjYtXG5ibG9jay9iYWRibG9ja3MuYzoxNTI3OmludCBkZXZtX2luaXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXG5ibG9jay9iYWRibG9ja3MuYy0xNTI4LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNTMyLX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9pbml0X2JhZGJsb2Nrcyk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTM0LVxuLS1cbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9Mjg1PWludCBkZXZtX25zaW9fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG5kX25hbWVzcGFjZV9pbyAqbnNpbyxcbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTMwMS1cdG5kbnMtXHUwMDNlcndfYnl0ZXMgPSBuc2lvX3J3X2J5dGVzO1xuZHJpdmVycy9udmRpbW0vY2xhaW0uYzozMDI6XHRpZiAoZGV2bV9pbml0X2JhZGJsb2NrcyhkZXYsIFx1MDAyNm5zaW8tXHUwMDNlYmIpKVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0zMDMtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NjM9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTY1LVx0XHRcdC8gNTEyKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1NjY6XHRpZiAoZGV2bV9pbml0X2JhZGJsb2NrcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlYmIpKVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU2Ny1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmM9MTM9c3RhdGljIGludCBuZF9yZWdpb25fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbi5jLTM3LVxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmM6Mzg6XHRpZiAoZGV2bV9pbml0X2JhZGJsb2NrcyhkZXYsIFx1MDAyNm5kX3JlZ2lvbi1cdTAwM2ViYikpXG5kcml2ZXJzL252ZGltbS9yZWdpb24uYy0zOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD0yOD1zdHJ1Y3QgYmFkYmxvY2tzIHtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6Mjk6XHRzdHJ1Y3QgZGV2aWNlICpkZXY7XHQvKiBzZXQgYnkgZGV2bV9pbml0X2JhZGJsb2NrcyAqL1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC0zMC1cdGludCBjb3VudDtcdFx0LyogY291bnQgb2YgYmFkIGJsb2NrcyAqL1xuLS1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NjI9c3RydWN0IGRldmljZTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NjM6aW50IGRldm1faW5pdF9iYWRibG9ja3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTY0LXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZtX2V4aXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTE1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVsdmluZyBpbnRvIEJhZCBCbG9jayBIYW5kbGluZyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYmFkIGJsb2NrIG1hbmFnZW1lbnQgd29ya3MgYXQgdGhlIHN5c3RlbSBsZXZlbCwgYW5kIHNwZWNpZmljYWxseSBob3cgd2UmIzM5O3JlIGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCBzeXNmcy4gSXQgc2VlbXMgbGlrZSB0aGUgYGRpc2stJmd0O2JiYCBzdHJ1Y3R1cmUgaXMgY2VudHJhbCB0byB0aGlzLiBJIGtub3cgdGhhdCB0aGUgYGJhZGJsb2Nrc2Agc3lzZnMgYXR0cmlidXRlIGFsbG93cyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGlzIGluZm9ybWF0aW9uLCBhbmQgdGhlIG9idmlvdXMgbGluayB0aGVyZSBpcyB0aHJvdWdoIGBiYWRibG9ja3Nfc3RvcmVgIGFuZCBgYmFkYmxvY2tzX3Nob3dgLiBJdCYjMzk7cyBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIHRoaW5ncyBsaWtlIE1EIGRldmljZXMsIHdoZXJlIHRoZSBgcmRldi0mZ3Q7YmFkYmxvY2tzYCBhdHRyaWJ1dGUgaXMgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLgoKSG1tLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGVyZSBgYmFkYmxvY2tzX3N0b3JlYCBpcyBhY3R1YWxseSAqdXNlZCouIFdoZXJlIGFyZSB3ZSB3cml0aW5nIHRoaXMgYmFkIGJsb2NrIGRhdGEgYW5kIGhvdyBpcyBpdCBiZWluZyBjb25zdW1lZD8gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFkYmxvY2tzX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JhZGJsb2Nrcy5jPTE0NTE9RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3Nob3cpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTMtLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxNDU0OiAqIGJhZGJsb2Nrc19zdG9yZSgpIC0gc3lzZnMgYWNjZXNzIHRvIGJhZC1ibG9ja3MgbGlzdFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ1NS0gKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTQ2Mi0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NjM6c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXG5ibG9jay9iYWRibG9ja3MuYy0xNDY0LVx0XHRcdGludCB1bmFjaylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDg3LX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjE0ODg6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3N0b3JlKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktXG4tLVxuYmxvY2svZ2VuaGQuYz04NTU9c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy04NjYtXG5ibG9jay9nZW5oZC5jOjg2NzpzdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5ibG9jay9nZW5oZC5jLTg2OC1cdFx0XHRcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuYmxvY2svZ2VuaGQuYy04NzUtXG5ibG9jay9nZW5oZC5jOjg3NjpcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoZGlzay1cdTAwM2ViYiwgcGFnZSwgbGVuLCAwKTtcbmJsb2NrL2dlbmhkLmMtODc3LX1cbi0tXG5ibG9jay9nZW5oZC5jPTExNzY9c3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xuYmxvY2svZ2VuaGQuYzoxMTc3OnN0YXRpYyBERVZJQ0VfQVRUUihiYWRibG9ja3MsIDA2NDQsIGRpc2tfYmFkYmxvY2tzX3Nob3csIGRpc2tfYmFkYmxvY2tzX3N0b3JlKTtcbmJsb2NrL2dlbmhkLmMtMTE3OC1zdGF0aWMgREVWSUNFX0FUVFIoZGlza3NlcSwgMDQ0NCwgZGlza3NlcV9zaG93LCBOVUxMKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzM9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqcGFnZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzktXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NDA6c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NDEtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL21kL21kLmM9MzYxND1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbWQvbWQuYy0zNjE1LXtcbmRyaXZlcnMvbWQvbWQuYzozNjE2Olx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDApO1xuZHJpdmVycy9tZC9tZC5jLTM2MTctXHQvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqL1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0zNjI5PXN0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbWQvbWQuYy0zNjMwLXtcbmRyaXZlcnMvbWQvbWQuYzozNjMxOlx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTtcbmRyaXZlcnMvbWQvbWQuYy0zNjMyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTU3PXNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjayk7XG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oOjU4OnNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01OS1cdFx0XHRpbnQgdW5hY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEzOAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQmxvY2sgTGF5ZXIgQmFkYmxvY2tzIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbW1pdCBjaGFuZ2luZyB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbiBpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiAgYGJhZGJsb2Nrc19zdG9yZWAgd3JpdGVzIGJhZCBibG9ja3MgdG8gbWQgb3IgbnVsbF9ibGsgZGV2aWNlcyB1c2luZyBzeXNmcyBvciBjb25maWdmcywgYW5kIHN5emthbGxlciBpbnRlcmFjdHMgd2l0aCB0aGVzZSBhcyB3ZWxsIGFzIHdpdGggdGhlIGBiYWRibG9ja3NgIHN5c2ZzIGF0dHJpYnV0ZXMsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB3aXRoaW4gdGhlIGZ1enppbmcgc2NvcGUuIFRoZSBjb21taXQgZGlmZiBsb29rcyBsaWtlIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGJpbmFyeSBzZWFyY2ggd2l0aGluIHRoZSBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGhpYCB2YXJpYWJsZSBhbmQgYSByZWR1bmRhbnQgY29uZGl0aW9uYWwgY2hlY2sgaGF2ZSBiZWVuIHJlbW92ZWQuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgb3JpZ2luYWwgY29kZSBpbml0aWFsaXplZCBgaGlgIHRvIGBiYi0mZ3Q7Y291bnRgLiBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIGxvZ2ljIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGZpZ3VyZWQgb3V0IHdoeS4gSW5pdGlhbGx5LCBpdCBwZXJmb3JtZWQgYSBiaW5hcnkgc2VhcmNoIG9uIHRoZSBgYmFkYmxvY2tzYCB0YWJsZSB0byBmaW5kIHRoZSAqcHJldmlvdXMqIGJhZCBibG9jayByZWxhdGl2ZSB0byBhIGdpdmVuIHNlY3RvciBgc2AuIEl0JiMzOTtzIGEgYmluYXJ5IHNlYXJjaCwgc28gd2UgY2FuIHNlZSB0aGF0IGBsb2AgaXMgYWx3YXlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgc2AsIGFuZCBgaGlgIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gYHNgLiBOb3csIHRoZSBjaGFuZ2Ugc2V0cyBgaGkgPSBiYi0mZ3Q7Y291bnQgLSAxYCBhbmQgYWxzbyBzaW1wbGlmaWVzIHRoZSByZXR1cm4gbG9naWMuCgpUaGUgYmluYXJ5IHNlYXJjaCByZWxpZXMgb24gdGhlc2UgaW52YXJpYW50cywgd2hpY2ggaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UuIFRoZSBwYXRjaCBzZXRzIGBoaSA9IGJiLSZndDtjb3VudCAtIDE7YCBzbyBpdCBub3cgY29ycmVjdGx5IGluZGV4ZXMgaW50byB0aGUgYGJiLSZndDtwYWdlYCBhcnJheS4gIFRoZSBvcmlnaW5hbCBjb2RlLCBhbHRob3VnaCBpdCBtaWdodCBoYXZlIHNlZW1lZCBjb3JyZWN0LCBjb3VsZCBoYXZlIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgdGhlIGJpbmFyeSBzZWFyY2ggaW4gY2VydGFpbiBlZGdlIGNhc2VzIHdoZW4gYGJiLSZndDtjb3VudGAgd2FzIHNtYWxsIChsaWtlIDEgb3IgMCkuIE5vdywgaXQgYXBwZWFycyB0byBiZSBtb3JlIHJvYnVzdC4gVGhlIHBhdGNoIG1ha2VzIHRoZSBiaW5hcnkgc2VhcmNoIGNvcnJlY3QgYW5kIGVmZmljaWVudCBiZWNhdXNlIHRoZSBgbG9gIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaCBpcyBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGFwcHJvcHJpYXRlIGluZGV4LgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2xlYW51cC9yZWZhY3RvcmluZyBpbiBgcHJldl9iYWRibG9ja3MoKWAuIFRoaXMgY291bGQgYmUgdG91Y2hlZCBieSBzeXprYWxsZXIuIFNpbmNlIGl0IGlzIGxvY2F0ZWQgaW4gdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIGFuZCBgYmFkYmxvY2tzYCBpcyB0cmlnZ2VyZWQgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFjY29yZGluZyB0byB0aGUgZ3VpZGFuY2UsIGV2ZW4gYSAmIzM0O3JlZmFjdG9yaW5nJiMzNDsgbGlrZSB0aGlzIHdhcnJhbnRzIGZ1enppbmcsIGJlY2F1c2UgaXQgYWx0ZXJzIHN0YXRlIG1hbmFnZW1lbnQgaW4gYSBjb3JlIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBpbnRlcmFjdHMgd2l0aCBgYmFkYmxvY2tzYCBkaXJlY3RseS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGdyZXBwZXJgIGluIHRoZSBrZXJuZWwgdG8gc2VlIGhvdyBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIGNhbGxlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBhbnkgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZ2l0IGdyZXAgdG8gY2hlY2sgaG93IGJhZGJsb2NrcyBpcyBjYWxsZWQgb3IgcmVhY2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFkYmxvY2tzXyhzZXR8Y2xlYXJ8Y2hlY2spJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JhZGJsb2Nrcy5jLTIyLSAqXG5ibG9jay9iYWRibG9ja3MuYzoyMzogKiBXaGVuIHRoZSBjYWxsZXIgb2YgYmFkYmxvY2tzX3NldCgpIHdhbnRzIHRvIHNldCBhIHJhbmdlIG9mIGJhZCBibG9ja3MsIHRoZVxuYmxvY2svYmFkYmxvY2tzLmMtMjQtICogc2V0dGluZyByYW5nZSBjYW4gYmUgYWNrZWQgb3IgdW5hY2tlZC4gQW5kIHRoZSBzZXR0aW5nIHJhbmdlIG1heSBtZXJnZSxcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0yODItICogICAgIGJsb2NrcyB0YWJsZSBhcmUgYWxsIGFja2VkLCBtZXJnaW5nIHRoZW0gaW50byBhIGxhcmdlciBvbmUgcmFuZ2UgbWF5XG5ibG9jay9iYWRibG9ja3MuYzoyODM6ICogICAgIG9jY3VweSBsZXNzIGJhZCBibG9ja3MgdGFibGUgc3BhY2UgYW5kIG1ha2UgYmFkYmxvY2tzX2NoZWNrKCkgZmFzdGVyLlxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTMyMC0gKiB0aGUgYmFkIGJsb2NrIHJhbmdlIHNldHRpbmcgY29uZGl0aW9ucy4gTWF5YmUgdGhlcmUgaXMgc29tZSByYXJlIGNvcm5lciBjYXNlXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJiMzOTt0IGh1cnQgaWYgYmFkYmxvY2tzX3NldCgpIGZhaWxzIGR1ZVxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXG5ibG9jay9iYWRibG9ja3MuYy0zMjMtICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyNDogKiBJbnNpZGUgYmFkYmxvY2tzX3NldCgpIGVhY2ggbG9vcCBzdGFydHMgYnkganVtcGluZyB0byByZV9pbnNlcnQgbGFiZWwsIGV2ZXJ5XG5ibG9jay9iYWRibG9ja3MuYy0zMjUtICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2Vcbi0tXG5ibG9jay9iYWRibG9ja3MuYz04MTY9c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgzNy0vKiBEbyBleGFjdCB3b3JrIHRvIHNldCBiYWQgYmxvY2sgcmFuZ2UgaW50byB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzo4Mzg6c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy04MzktXHRcdFx0ICAgaW50IGFja25vd2xlZGdlZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDMwPXN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMDQ3LS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNsZWFyIGJhZCBibG9jayByYW5nZSBmcm9tIHRoZSBiYWQgYmxvY2sgdGFibGUgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjEwNDg6c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwNDkte1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTExODQtLyogRG8gdGhlIGV4YWN0IHdvcmsgdG8gY2hlY2sgYmFkIGJsb2NrcyByYW5nZSBmcm9tIHRoZSBiYWQgYmxvY2sgdGFibGUgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjExODU6c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuYmxvY2svYmFkYmxvY2tzLmMtMTE4Ni1cdFx0XHQgICAgc2VjdG9yX3QgKmZpcnN0X2JhZCwgc2VjdG9yX3QgKmJhZF9zZWN0b3JzKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNjMtLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMjY0OiAqIGJhZGJsb2Nrc19jaGVjaygpIC0gY2hlY2sgYSBnaXZlbiByYW5nZSBmb3IgYmFkIHNlY3RvcnNcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNjUtICogQGJiOlx0XHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzktICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyODA6ICogTG9ja2luZyBvZiB0aGUgYmFkLWJsb2NrIHRhYmxlIHVzZXMgYSBzZXFsb2NrIHNvIGJhZGJsb2Nrc19jaGVja1xuYmxvY2svYmFkYmxvY2tzLmMtMTI4MS0gKiBtaWdodCBuZWVkIHRvIHJldHJ5IGlmIGl0IGlzIHZlcnkgdW5sdWNreS5cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjk2LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTI5NzppbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5OC1cdFx0XHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTMxNS1cdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2YmItXHUwMDNlbG9jayk7XG5ibG9jay9iYWRibG9ja3MuYzoxMzE2Olx0cnYgPSBfYmFkYmxvY2tzX2NoZWNrKGJiLCBzLCBzZWN0b3JzLCBmaXJzdF9iYWQsIGJhZF9zZWN0b3JzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMTctXHRpZiAocmVhZF9zZXFyZXRyeShcdTAwMjZiYi1cdTAwM2Vsb2NrLCBzZXEpKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjEtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTMyMjpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2hlY2spO1xuYmxvY2svYmFkYmxvY2tzLmMtMTMyMy1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMjQtLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzI1OiAqIGJhZGJsb2Nrc19zZXQoKSAtIEFkZCBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNi0gKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTMzOS0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDA6Ym9vbCBiYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0MS1cdFx0ICAgaW50IGFja25vd2xlZGdlZClcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDIte1xuYmxvY2svYmFkYmxvY2tzLmM6MTM0MzpcdHJldHVybiBfYmFkYmxvY2tzX3NldChiYiwgcywgc2VjdG9ycywgYWNrbm93bGVkZ2VkKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDQtfVxuYmxvY2svYmFkYmxvY2tzLmM6MTM0NTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDYtXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ3LS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTM0ODogKiBiYWRibG9ja3NfY2xlYXIoKSAtIFJlbW92ZSBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxuYmxvY2svYmFkYmxvY2tzLmMtMTM0OS0gKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTM2MC0gKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjE6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG5ibG9jay9iYWRibG9ja3MuYy0xMzYyLXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjM6XHRyZXR1cm4gX2JhZGJsb2Nrc19jbGVhcihiYiwgcywgc2VjdG9ycyk7XG5ibG9jay9iYWRibG9ja3MuYy0xMzY0LX1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjU6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NsZWFyKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjYtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTQ2Mz1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDgyLVxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4MzpcdGlmICghYmFkYmxvY2tzX3NldChiYiwgc2VjdG9yLCBsZW5ndGgsICF1bmFjaykpXG5ibG9jay9iYWRibG9ja3MuYy0xNDg0LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01NDA9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTcyLVx0aWYgKGJ1ZlswXSA9PSAmIzM5OyYjNDM7JiMzOTspIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU3MzpcdFx0aWYgKGJhZGJsb2Nrc19zZXQoXHUwMDI2dF9kZXYtXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU3NC1cdFx0XHRcdCAgZW5kIC0gc3RhcnQgJiM0MzsgMSwgMSkpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NzUtXHRcdFx0cmV0ID0gY291bnQ7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NzY6XHR9IGVsc2UgaWYgKGJhZGJsb2Nrc19jbGVhcihcdTAwMjZ0X2Rldi1cdTAwM2ViYWRibG9ja3MsIHN0YXJ0LFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc3LVx0XHRcdFx0ICAgZW5kIC0gc3RhcnQgJiM0MzsgMSkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzU0PWJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2Mi1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNjM6XHRpZiAoIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCAqbnJfc2VjdG9ycywgXHUwMDI2Zmlyc3RfYmFkLCBcdTAwMjZiYWRfc2VjdG9ycykpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzY0LVx0XHRyZXR1cm4gQkxLX1NUU19PSztcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzY2LVx0aWYgKGNtZC1cdTAwM2VucS1cdTAwM2VkZXYtXHUwMDNlYmFkYmxvY2tzX29uY2UpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzY3Olx0XHRiYWRibG9ja3NfY2xlYXIoYmIsIGZpcnN0X2JhZCwgYmFkX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2OC1cbi0tXG5kcml2ZXJzL21kL21kLmM9MTgwMz1zdGF0aWMgaW50IHN1cGVyXzFfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXG4tLVxuZHJpdmVycy9tZC9tZC5jLTE5MzMtXHRcdFx0XHRicmVhaztcbmRyaXZlcnMvbWQvbWQuYzoxOTM0Olx0XHRcdGlmICghYmFkYmxvY2tzX3NldChcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcywgc2VjdG9yLCBjb3VudCwgMSkpXG5kcml2ZXJzL21kL21kLmMtMTkzNS1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMDY1OD1ib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmMtMTA2NzctXG5kcml2ZXJzL21kL21kLmM6MTA2Nzg6XHRpZiAoIWJhZGJsb2Nrc19zZXQoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMsIDApKSB7XG5kcml2ZXJzL21kL21kLmMtMTA2NzktXHRcdC8qXG4tLVxuZHJpdmVycy9tZC9tZC5jPTEwNjk4PXZvaWQgcmRldl9jbGVhcl9iYWRibG9ja3Moc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwNzA1LVxuZHJpdmVycy9tZC9tZC5jOjEwNzA2Olx0aWYgKCFiYWRibG9ja3NfY2xlYXIoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMpKVxuZHJpdmVycy9tZC9tZC5jLTEwNzA3LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9tZC9tZC5oPTI5OT1zdGF0aWMgaW5saW5lIGludCBpc19iYWRibG9jayhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmgtMzAyLVx0aWYgKHVubGlrZWx5KHJkZXYtXHUwMDNlYmFkYmxvY2tzLmNvdW50KSkge1xuZHJpdmVycy9tZC9tZC5oOjMwMzpcdFx0aW50IHJ2ID0gYmFkYmxvY2tzX2NoZWNrKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCByZGV2LVx1MDAzZWRhdGFfb2Zmc2V0ICYjNDM7IHMsXG5kcml2ZXJzL21kL21kLmgtMzA0LVx0XHRcdFx0XHRzZWN0b3JzLFxuLS1cbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmM9MTY1PXN0YXRpYyB2b2lkIHNldF9iYWRibG9jayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IG51bSlcbi0tXG5kcml2ZXJzL252ZGltbS9iYWRyYW5nZS5jLTE2OS1cdC8qIHRoaXMgaXNuJiMzOTt0IGFuIGVycm9yIGFzIHRoZSBoYXJkd2FyZSB3aWxsIHN0aWxsIHRocm93IGFuIGV4Y2VwdGlvbiAqL1xuZHJpdmVycy9udmRpbW0vYmFkcmFuZ2UuYzoxNzA6XHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHMsIG51bSwgMSkpXG5kcml2ZXJzL252ZGltbS9iYWRyYW5nZS5jLTE3MS1cdFx0ZGV2X2luZm9fb25jZShiYi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBmYWlsZWQgZm9yIHNlY3RvciAlbGx4XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbnZkaW1tL2J1cy5jPTE2ND1zdGF0aWMgaW50IG52ZGltbV9jbGVhcl9iYWRibG9ja3NfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL252ZGltbS9idXMuYy0xODMtXHRzZWN0b3IgPSAoY3R4LVx1MDAzZXBoeXMgLSBuZF9yZWdpb24tXHUwMDNlbmRyX3N0YXJ0KSAvIDUxMjtcbmRyaXZlcnMvbnZkaW1tL2J1cy5jOjE4NDpcdGJhZGJsb2Nrc19jbGVhcihcdTAwMjZuZF9yZWdpb24tXHUwMDNlYmIsIHNlY3RvciwgY3R4LVx1MDAzZWNsZWFyZWQgLyA1MTIpO1xuZHJpdmVycy9udmRpbW0vYnVzLmMtMTg1LVxuLS1cbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9MjMzPXN0YXRpYyBpbnQgbnNpb19yd19ieXRlcyhzdHJ1Y3QgbmRfbmFtZXNwYWNlX2NvbW1vbiAqbmRucyxcbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI2OS1cdFx0XHRcdGNsZWFyZWQgLz0gNTEyO1xuZHJpdmVycy9udmRpbW0vY2xhaW0uYzoyNzA6XHRcdFx0XHRiYWRibG9ja3NfY2xlYXIoXHUwMDI2bnNpby1cdTAwM2ViYiwgc2VjdG9yLCBjbGVhcmVkKTtcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjcxLVx0XHRcdH1cbi0tXG5kcml2ZXJzL252ZGltbS9uZC5oPTY3Nj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfYmFkX3BtZW0oc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4Mi1cbmRyaXZlcnMvbnZkaW1tL25kLmg6NjgzOlx0XHRyZXR1cm4gISFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbGVuIC8gNTEyLCBcdTAwMjZmaXJzdF9iYWQsXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4NC1cdFx0XHRcdFx1MDAyNm51bV9iYWQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MzUzPXN0YXRpYyBpbnQgbmRfcGZuX2NsZWFyX21lbW1hcF9lcnJvcnMoc3RydWN0IG5kX3BmbiAqbmRfcGZuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMzgzLVxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYzozODQ6XHRcdGJiX3ByZXNlbnQgPSBiYWRibG9ja3NfY2hlY2soXHUwMDI2bmRfcmVnaW9uLVx1MDAzZWJiLCBtZXRhX3N0YXJ0LFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODUtXHRcdFx0XHRtZXRhX251bSwgXHUwMDI2Zmlyc3RfYmFkLCBcdTAwMjZudW1fYmFkKTtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9ODg9c3RhdGljIHZvaWQgcG1lbV9jbGVhcl9iYihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3RvciwgbG9uZyBibGtzKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05MS1cdFx0cmV0dXJuO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjkyOlx0YmFkYmxvY2tzX2NsZWFyKFx1MDAyNnBtZW0tXHUwMDNlYmIsIHNlY3RvciwgYmxrcyk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTMtXHRpZiAocG1lbS1cdTAwM2ViYl9zdGF0ZSlcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MjU3PV9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjczLVx0aWYgKGJiLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNlxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjI3NDpcdCAgICBiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbnVtLCBcdTAwMjZmaXJzdF9iYWQsIFx1MDAyNm51bV9iYWQpKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjc1LVx0XHRsb25nIGFjdHVhbF9ucjtcbi0tXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTQ1PXN0cnVjdCBiYWRibG9ja3NfY29udGV4dCB7XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01MC1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTE6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXHRcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1Mzpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU0LVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTU6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01Ni12b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMDUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nOiBBIENyaXRpY2FsIEV4YW1pbmF0aW9uIG9mIEJhZCBCbG9jayBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9tZC9tZC5jYCBjb2RlIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIGluIHRoZSBiYWQgYmxvY2sgaGFuZGxpbmcgbG9naWMuIEkgc2VlIHRoYXQgTUQgZGV2aWNlcyBoYXZlIGBzeXNmc2AgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggYmFkIGJsb2Nrczogc3BlY2lmaWNhbGx5LCB0aGUgYGRldl9hdHRyX2JhZGJsb2Nrc2AgYXR0cmlidXRlLiBXcml0aW5nIHRvIGAvc3lzL2Jsb2NrL21kWC9tZC9kZXYtWFhYL2JhZF9ibG9ja3NgIChhbmQgc2ltaWxhciBwYXRocyBmb3IgYG51bGxfYmxrYCBhbmQgZGlzayBhdHRyaWJ1dGVzIGxpa2UgYC9zeXMvYmxvY2svJmx0O2Rpc2smZ3Q7L2JhZGJsb2Nrc2ApIHVsdGltYXRlbHkgbGVhZHMgdG8gdGhlIGBiYWRibG9ja3Nfc2V0YCBmdW5jdGlvbiB0aHJvdWdoIGEgY2hhaW4gb2YgY2FsbHMuIEltcG9ydGFudGx5LCB0aGlzIGFsc28gaW1wYWN0cyBJL08gb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBgYmFkYmxvY2tzX2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggY2FsbHMgYF9iYWRibG9ja3NfY2hlY2tgLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgcHJldl9iYWRibG9ja3NgLiBTaW1pbGFybHksIHVwZGF0ZXMgYW5kIGNsZWFycyBhbHNvIGZsb3cgdGhyb3VnaCBgX2JhZGJsb2Nrc19zZXRgIG9yIGBfYmFkYmxvY2tzX2NsZWFyYCB3aGljaCBjYWxscyBgcHJldl9iYWRibG9ja3NgLgoKVGhlIGtleSB0aGluZyBJJiMzOTt2ZSBub3RpY2VkIGlzIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkaXJlY3RseSBhbHRlciB0aGUgYmluYXJ5IHNlYXJjaCBsb2dpYyB3aXRoaW4gdGhlIGBwcmV2X2JhZGJsb2Nrc2AgZnVuY3Rpb24uIFdlIGFyZSBjaGFuZ2luZyBob3cgd2UgZG8gdGhlIGJpbmFyeSBzZWFyY2ggd2hpY2ggaXMgYSBjb3JlIHN1YnN5c3RlbSBhbGdvcml0aG0gd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AuIFNwZWNpZmljYWxseSwgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCByZXR1cm4gdmFsdWVzIGFyZSBiZWluZyBjaGFuZ2VkLiBUaGUgc2VhcmNoJiMzOTtzIGxvZ2ljIGlzIGJlaW5nIG1vZGlmaWVkIGFuZCB0aGUgY2hhbmdlcyBhcmUgbm9udHJpdmlhbC4KCk5vdywgYmFzZWQgb24gdGhlIGtlcm5lbCBmdXp6aW5nIGd1aWRlbGluZXMgKHNwZWNpZmljYWxseSBTZWN0aW9ucyAxIGFuZCAzKSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byB0YWtlIHNlcmlvdXNseS4gVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhcjogYW55IGxvZ2ljIG1vZGlmaWNhdGlvbiBpbiBjb3JlIHN1YnN5c3RlbXMsIGV2ZW4gcmVmYWN0b3JpbmdzLCBhcmUgc3VzcGVjdC4gVGhlIGdvYWwgaXMgdG8gY2F0Y2ggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGV2ZW4gbGF0ZW50IGJ1Z3MuIEFuZCwgdGhleSBzcGVjaWZpY2FsbHkgd2FybiBhZ2FpbnN0IGJsaW5kbHkgdHJ1c3RpbmcgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IGNsYWltcywgZXNwZWNpYWxseSB3aGVuIGNvcmUgc3Vic3lzdGVtcyBhcmUgaW52b2x2ZWQuIENvZGUgcmVmYWN0b3JpbmdzIGFyZSBtZW50aW9uZWQgZXhwbGljaXRseSBhcyBhIHJlYXNvbiB0byBmdXp6IQoKVGhlcmVmb3JlLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBNVVNUIGJlIHNldCB0byBgdHJ1ZWAgaGVyZS4gVGhpcyBpcyBub24tbmVnb3RpYWJsZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSByZXF1aXJlZCBpdGVtcyBmb3IgdGhlIGZ1enppbmcuIFdlIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYCwgYEVuYWJsZUNvbmZpZ3NgLCBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlc2Ugc2VsZWN0aW9ucy4KClRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQuIFRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uIGl0c2VsZiwgd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AsIGlzIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBtZSB0aGluazogY2FuIHN0YXRpYyBmdW5jdGlvbnMgaW4gYSBgLmNgIGZpbGUgYmUgZGlyZWN0bHkgdGFyZ2V0ZWQ/CgpJJiMzOTtsbCBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIGFnYWluLiBBY2NvcmRpbmcgdG8gU2VjdGlvbiA0LCBzdGF0aWMgaW5saW5lcyBpbiBoZWFkZXJzIGFyZSB0aGUgcHJvYmxlbSwgYnV0IGEgYHN0YXRpY2AgZnVuY3Rpb24gaW4gYSBgLmNgIGZpbGUgKnNob3VsZCogaGF2ZSBhIHN5bWJvbCBhZGRyZXNzIHRoYXQgd2UgY2FuIHRhcmdldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSwgdGhvdWdoLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNvbXBpbGVyIGhhc24mIzM5O3QgaW5saW5lZCB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbi4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBwcmV2X2JhZGJsb2Nrc2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgY2FsbGVyIG9mIGBwcmV2X2JhZGJsb2Nrc2AgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJldl9iYWRibG9ja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYy0zMjQtICogSW5zaWRlIGJhZGJsb2Nrc19zZXQoKSBlYWNoIGxvb3Agc3RhcnRzIGJ5IGp1bXBpbmcgdG8gcmVfaW5zZXJ0IGxhYmVsLCBldmVyeVxuYmxvY2svYmFkYmxvY2tzLmM6MzI1OiAqIHRpbWUgZm9yIHRoZSBuZXcgbG9vcCBwcmV2X2JhZGJsb2NrcygpIGlzIGNhbGxlZCB0byBmaW5kIGFuIGFscmVhZHkgc2V0IHJhbmdlXG5ibG9jay9iYWRibG9ja3MuYy0zMjYtICogd2hpY2ggc3RhcnRzIGJlZm9yZSBvciBhdCBjdXJyZW50IHNldHRpbmcgcmFuZ2UuIFNpbmNlIHRoZSBzZXR0aW5nIGJhZCBibG9ja3NcbmJsb2NrL2JhZGJsb2Nrcy5jLTMyNy0gKiByYW5nZSBpcyBoYW5kbGVkIGZyb20gaGVhZCB0byB0YWlsLCBtb3N0IG9mIHRoZSBjYXNlcyBpdCBpcyB1bm5lY2Vzc2FyeSB0byBkb1xuYmxvY2svYmFkYmxvY2tzLmM6MzI4OiAqIHRoZSBiaW5hcnkgc2VhcmNoIGluc2lkZSBwcmV2X2JhZGJsb2NrcygpLCBpdCBpcyBwb3NzaWJsZSB0byBwcm92aWRlIGEgaGludFxuYmxvY2svYmFkYmxvY2tzLmM6MzI5OiAqIHRvIHByZXZfYmFkYmxvY2tzKCkgZm9yIGEgZmFzdCBwYXRoLCB0aGVuIHRoZSBleHBlbnNpdmUgYmluYXJ5IHNlYXJjaCBjYW4gYmVcbmJsb2NrL2JhZGJsb2Nrcy5jOjMzMDogKiBhdm9pZGVkLiBJbiBteSB0ZXN0IHdpdGggdGhlIGhpbnQgdG8gcHJldl9iYWRibG9ja3MoKSwgZXhjZXB0IGZvciB0aGUgZmlyc3RcbmJsb2NrL2JhZGJsb2Nrcy5jOjMzMTogKiBsb29wLCBhbGwgcmVzdGVkIGNhbGxzIHRvIHByZXZfYmFkYmxvY2tzKCkgY2FuIGdvIGludG8gdGhlIGZhc3QgcGF0aCBhbmRcbmJsb2NrL2JhZGJsb2Nrcy5jLTMzMi0gKiByZXR1cm4gY29ycmVjdCBiYWQgYmxvY2tzIHRhYmxlIGluZGV4IGltbWVkaWF0ZWx5LlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTQ1Nz1zdGF0aWMgaW50IHByZXZfYnlfaGludChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IGhpbnQpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNDgwLSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6NDgxOnN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuYmxvY2svYmFkYmxvY2tzLmMtNDgyLVx0XHRcdCAgaW50IGhpbnQpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9ODM4PXN0YXRpYyBib29sIF9iYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTg4My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjg4NDpcdHByZXYgPSBwcmV2X2JhZGJsb2NrcyhiYiwgXHUwMDI2YmFkLCBoaW50KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTg4NS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDQ4PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTA5My1cbmJsb2NrL2JhZGJsb2Nrcy5jOjEwOTQ6XHRwcmV2ID0gcHJldl9iYWRibG9ja3MoYmIsIFx1MDAyNmJhZCwgaGludCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMDk1LVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTExODU9c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDMtXG5ibG9jay9iYWRibG9ja3MuYzoxMjA0Olx0cHJldiA9IHByZXZfYmFkYmxvY2tzKGJiLCBcdTAwMjZiYWQsIGhpbnQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTIwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgcHJldl9iYWRibG9ja3NgIGlzIHVzZWQsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkgc2VlIHRoYXQgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGJhZCBibG9jayBoYW5kbGluZywgYmVpbmcgY2FsbGVkIGJ5IGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBfYmFkYmxvY2tzX2NoZWNrYC4gVGhlc2UgYXJlIGFsbCBpbnRlcm5hbCwgYnV0IHRob3NlIGFyZSB0aGVuIGNhbGxlZCBieSB0aGUgcHVibGljLWZhY2luZyBBUElzOiBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYW5kIGBiYWRibG9ja3Nfc3RvcmVgLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIGNvbmZpcm1pbmcgaWYgYHByZXZfYmFkYmxvY2tzYCBpcyBzdGF0aWMgYW5kIG5vbi1pbmxpbmUuIFRoZSBjb2RlIGNvbmZpcm1zIHRoYXQgaXQgaXMsIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3MoLi4uKWAgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gQW5kIHllYWgsIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIHRocmVlIGRpc3RpbmN0IGludGVybmFsIGZ1bmN0aW9ucywgd2hpY2ggYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgdGhvc2UgZXh0ZXJuYWwgYGJhZGJsb2Nrc18qYCBBUElzLgoKUHV0dGluZyBgcHJldl9iYWRibG9ja3NgIGludG8gdGhlIEZvY3VzU3ltYm9scyBzZWVtcyBsaWtlIHRoZSBzbWFydCBwbGF5LiBJdCYjMzk7cyB0aGUgZnVuY3Rpb24gYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGludG8gdGhpcyBmdW5jdGlvbmFsaXR5LCBtYWtpbmcgdGhlbSB0aGUgbW9zdCByZWxldmFudC4gSSBkb24mIzM5O3Qgd2FudCB0byBicmluZyBpbiB1bm5lY2Vzc2FyeSBzdHVmZi4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCBgYmFkYmxvY2tzLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBpcyBvbmx5IGVuYWJsZWQgd2l0aCBgQkxPQ0tgIG9yIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMgdG8gY29uc2lkZXIuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgYmxvY2svTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgZmlyc3QgZmV3IGxpbmVzIGFyZSBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGJsb2NrIGxheWVyXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdENPTlRFWFRfQU5BTFlTSVMgOj0geVxuICAgNzpcdFxuICAgODpcdG9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG4gICA5Olx0XHRcdFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxuICAxMDpcdFx0XHRcdGJsay1tZXJnZS5vIGJsay10aW1lb3V0Lm8gYmxrLWxpYi5vIGJsay1tcS5vIFxcXG4gIDExOlx0XHRcdFx0YmxrLW1xLXRhZy5vIGJsay1tcS1kbWEubyBibGstc3RhdC5vIFxcXG4gIDEyOlx0XHRcdFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcbiAgMTM6XHRcdFx0XHRnZW5oZC5vIGlvcHJpby5vIGJhZGJsb2Nrcy5vIHBhcnRpdGlvbnMvIGJsay1ycS1xb3MubyBcXFxuICAxNDpcdFx0XHRcdGRpc2stZXZlbnRzLm8gYmxrLWlhLXJhbmdlcy5vIGVhcmx5LWxvb2t1cC5vXG4gIDE1Olx0XG4gIDE2Olx0b2JqLSQoQ09ORklHX0JMS19FUlJPUl9JTkpFQ1RJT04pICYjNDM7PSBlcnJvci1pbmplY3Rpb24ub1xuICAxNzpcdG9iai0kKENPTkZJR19CTEtfREVWX0JTR19DT01NT04pICYjNDM7PSBic2cub1xuICAxODpcdG9iai0kKENPTkZJR19CTEtfREVWX0JTR0xJQilcdCYjNDM7PSBic2ctbGliLm9cbiAgMTk6XHRvYmotJChDT05GSUdfQkxLX0NHUk9VUClcdCYjNDM7PSBibGstY2dyb3VwLm9cbiAgMjA6XHRvYmotJChDT05GSUdfQkxLX0NHUk9VUF9SV1NUQVQpXHQmIzQzOz0gYmxrLWNncm91cC1yd3N0YXQub1xuICAyMTpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0ZDX0FQUElEKSAmIzQzOz0gYmxrLWNncm91cC1mYy1hcHBpZC5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX0JMS19ERVZfVEhST1RUTElORylcdCYjNDM7PSBibGstdGhyb3R0bGUub1xuICAyMzpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcdCYjNDM7PSBibGstaW9wcmlvLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1kpXHQmIzQzOz0gYmxrLWlvbGF0ZW5jeS5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVx0JiM0Mzs9IGJsay1pb2Nvc3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg1NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgYmFkYmxvY2tzLm9gIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gYGJhZGJsb2Nrcy5vYCBpcyBkZWZpbml0ZWx5IGx1cmtpbmcgaW4gYG9iai15YCB3aXRoaW4gYGJsb2NrL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgY2x1ZS4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBgYmxvY2svYCBkaXJlY3RvcnkgaXRzZWxmIGdldHMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfQkxPQ0tgIGlzIGVuYWJsZWQuIE15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2Ugb2YgdGhhdCBgQ09ORklHX0JMT0NLYCBkZXBlbmRlbmN5LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByb290IGBNYWtlZmlsZWAgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gdHJhY2UgaG93IHRoZSBibG9jayBsYXllciBpcyBicm91Z2h0IGluLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQkxPQ0tgIHJlcHJlc2VudHMgdGhlIGJsb2NrIGxheWVyIG9wdGlvbiBpdHNlbGYg4oCTIGdvb2QsIHRoYXQgc2F2ZXMgYSBsb29rdXAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGRvd25zdHJlYW0gZGVwZW5kZW5jaWVzLiBJcyBgYmFkYmxvY2tzYCBiZWluZyBwdWxsZWQgaW4gdGhyb3VnaCBhIHNwZWNpZmljIGRldmljZSBkcml2ZXIgb3IgYSBmZWF0dXJlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXI/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzLCBsaWtlIFJBSUQgZnVuY3Rpb25hbGl0eSAoTUQpIG9yIHRoZSBudWxsIGJsb2NrIGRyaXZlciAoTlVMTF9CTEspLCB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIGluY2x1c2lvbiBvZiBgYmFkYmxvY2tzYD8gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGVpciByZXNwZWN0aXZlIGBLY29uZmlnYCBmaWxlcywgZXNwZWNpYWxseSBgZHJpdmVycy9tZC9LY29uZmlnYCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbnVsbF9ibGsvYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBjb25uZWN0aW9ucywgaWYgdGhlcmUgYXJlIGFueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdD0xNTA9YXZhaWxhYmxlIGZvciB0aGUgZW5kcG9pbnQgaGFyZHdhcmUgdXNlZC5cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTE1MS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE1MjpUbyBmYWNpbGl0YXRlIHRlc3RpbmcsIGVuYWJsaW5nIHRoZSBudWxsLWJsayBkcml2ZXIgKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTUzLWlzIGFsc28gcmVjb21tZW5kZWQuIFdpdGggdGhpcywgYSBzaW1wbGUgc2V0dXAgdXNpbmcgYSBudWxsX2JsayBibG9jayBkZXZpY2Vcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9NDUzPUNPTkZJR19CTEtfREVWX05WTUU9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjQ1NDpDT05GSUdfQkxLX0RFVl9OVUxMX0JMSz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctNDU1LUNPTkZJR19FTkNMT1NVUkVfU0VSVklDRVM9bVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz00NDM9Q09ORklHX0JMS19ERVZfTlZNRT1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6NDQ0OkNPTkZJR19CTEtfREVWX05VTExfQkxLPW1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy00NDUtQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUz1tXG4tLVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfQkxLX0RFVl9STkJEKVx0JiM0Mzs9IHJuYmQvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcdCYjNDM7PSBudWxsX2Jsay9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSAmIzQzOz0gcm51bGwvXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTUtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6Njpjb25maWcgQkxLX0RFVl9OVUxMX0JMS1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTktXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6MTA6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctMTEtXHRib29sIFwmIzM0O1N1cHBvcnQgZmF1bHQgaW5qZWN0aW9uIGZvciBOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6MTI6XHRkZXBlbmRzIG9uIEJMS19ERVZfTlVMTF9CTEsgXHUwMDI2XHUwMDI2IEZBVUxUX0lOSkVDVElPTl9DT05GSUdGU1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU9ND1jY2ZsYWdzLXlcdFx0XHQmIzQzOz0gLUkkKHNyYylcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGUtNS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcdCYjNDM7PSBudWxsX2Jsay5vXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTctbnVsbF9ibGstb2Jqc1x0XHRcdDo9IG1haW4ub1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIxLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjI6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjMtc3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihudWxsX3RpbWVvdXRfYXR0cik7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9OTg9TU9EVUxFX1BBUk1fREVTQyhob21lX25vZGUsIFwmIzM0O0hvbWUgbm9kZSBmb3IgdGhlIGRldmljZVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy05OS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEwMDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMDEtLypcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz02NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG51bGxiX2RldmljZV90eXBlID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY2NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjY2NTojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NjYtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9Nzg2PXN0YXRpYyBzdHJ1Y3QgbnVsbGJfZGV2aWNlICpudWxsX2FsbG9jX2Rldih2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTc5My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjc5NDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03OTUtXHRkZXYtXHUwMDNldGltZW91dF9jb25maWcuYXR0ciA9IG51bGxfdGltZW91dF9hdHRyO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE0OTI9c3RhdGljIHZvaWQgbnVsbGJfc2V0dXBfYnd0aW1lcihzdHJ1Y3QgbnVsbGIgKm51bGxiKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE1MDAtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNTAxOiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE1MDItXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTg5ND1zdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTkzNi1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5Mzc6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTkzOC1zdGF0aWMgYm9vbCBfX251bGxfc2V0dXBfZmF1bHQoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIGNoYXIgKnN0cilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xOTUxPXN0YXRpYyBib29sIG51bGxfc2V0dXBfZmF1bHQodm9pZClcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NTIte1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk1MzojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTU0LVx0aWYgKCFfX251bGxfc2V0dXBfZmF1bHQoXHUwMDI2bnVsbF90aW1lb3V0X2F0dHIsIGdfdGltZW91dF9zdHIpKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD01Mz1zdHJ1Y3QgbnVsbGJfZGV2aWNlIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtNTUtXHRzdHJ1Y3QgY29uZmlnX2dyb3VwIGdyb3VwO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjU2OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC01Ny1cdHN0cnVjdCBmYXVsdF9jb25maWcgdGltZW91dF9jb25maWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODIwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlIG9mIEJhZCBCbG9jayBIYW5kbGluZyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGJhZCBibG9jayBoYW5kbGluZyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb2J2aW91cyBzdXNwZWN0czogYENPTkZJR19NRGAgYW5kIGBDT05GSUdfQkxLX0RFVl9NRGAuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIGBDT05GSUdfQkxPQ0tgIGp1c3QgdG8gYmUgdGhvcm91Z2guIFRoYXQgc2hvdWxkIGNvdmVyIHRoZSBjb3JlIGJsb2NrIGRldmljZSBsYXllci4KCk5vdywgSSB3YW50IHRvIHNwZWNpZmljYWxseSBpZGVudGlmeSAqaG93KiBgYmxvY2svYmFkYmxvY2tzLmNgIGlzIGNvbXBpbGVkLiBCYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19CTE9DS2AuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBkcml2ZXJzIGFjdHVhbGx5IGV4cG9zZSBiYWQgYmxvY2sgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYENPTkZJR19CTEtfREVWX01EYCB0aGVyZSwgYXMgd2VsbCBhcyBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGxpa2VseS4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIE1EIGNvbXBvbmVudCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZHJpdmVycy9tZC9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgb3B0aW9ucywgYW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX01EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9MTM9aWYgTURcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxuZHJpdmVycy9tZC9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBSQUlEIERyaXZlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFJBSUQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgbW92ZSB3aWxsIGJlIHRvIHVzZSBgcmVhZC1maWxlYCB0byBncmFiIGxpbmVzIDEgdGhyb3VnaCAyMCBvZiBgZHJpdmVycy9tZC9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBiYXNpYyBkZWZpbml0aW9ucyBhbmQgdG9wLWxldmVsIG9wdGlvbnMgd2l0aGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJJiMzOTttIHByaW1hcmlseSBsb29raW5nIGZvciB0aGUgY29yZSBtb2R1bGUgZW5hYmxlcywgYW55IGltbWVkaWF0ZWx5IG9idmlvdXMgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZSBSQUlEIHN5c3RlbSBpcyBhcmNoaXRlY3RlZCBpbiB0ZXJtcyBvZiBjb25maWd1cmFibGUgY29tcG9uZW50cy4gQmFzZWQgb24gdGhpcyBxdWljayBzY2FuLCBJIGNhbiBiZWdpbiB0byBncmFzcCB3aGV0aGVyIGFueSBpbW1lZGlhdGUgY2hhbmdlcyBJIG1heSBiZSBjb250ZW1wbGF0aW5nIGFyZSBhbHJlYWR5IGF2YWlsYWJsZSBpbiB0aGUgY29uZmlnLCBhbmQgaG93IHRvIGVuYWJsZSB0aGVtLiBJIG1heSB0aGVuIGdvIGRlZXBlciBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gSSBmaW5kLCBzdWNoIGFzIGxvb2tpbmcgYXQgYW55IGluY2x1ZGVzIG9yIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBNRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtNdWx0aXBsZSBkZXZpY2VzIGRyaXZlciBzdXBwb3J0IChSQUlEIGFuZCBMVk0pXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFN1cHBvcnQgbXVsdGlwbGUgcGh5c2ljYWwgc3BpbmRsZXMgdGhyb3VnaCBhIHNpbmdsZSBsb2dpY2FsIGRldmljZS5cbiAgMTE6XHRcdCAgUmVxdWlyZWQgZm9yIFJBSUQgYW5kIGxvZ2ljYWwgdm9sdW1lIG1hbmFnZW1lbnQuXG4gIDEyOlx0XG4gIDEzOlx0aWYgTURcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgQkxLX0RFVl9NRFxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7UkFJRCBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQgaWYgU1lTRlNcbiAgMTg6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAxOTpcdFx0IyBCTE9DS19MRUdBQ1lfQVVUT0xPQUQgcmVxdWlyZW1lbnQgc2hvdWxkIGJlIHJlbW92ZWRcbiAgMjA6XHRcdCMgYWZ0ZXIgcmVsZXZhbnQgbWRhZG0gZW5oYW5jZW1lbnRzIC0gdG8gbWFrZSBcJiMzNDtuYW1lcz15ZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MzkKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogNTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBibG9jay9iYWRibG9ja3MuY2AgUGF0Y2gqKgoKT2theSwgc28gdGhlIHByaW1hcnkgZGVwZW5kZW5jeSBmb3IgYGJsb2NrL2JhZGJsb2Nrcy5jYCBpcywgbmF0dXJhbGx5LCBgQ09ORklHX0JMT0NLYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQ7IHllcCwgYEJMT0NLPXlgLCBnb29kLiBOb3csIHRoaXMgYGJhZGJsb2Nrc2AgZnVuY3Rpb25hbGl0eSBzZWVtcyB0byBiZSBleHBvc2VkIHRocm91Z2ggZWl0aGVyIGBDT05GSUdfQkxLX0RFVl9NRGAgb3IgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCwgb3IgZXZlbiBqdXN0IGBDT05GSUdfTURgLiBMZXQmIzM5O3MgY29uZmlybSB0aG9zZSBhcmUgZW5hYmxlZCBhbmQgY29uc2lkZXJlZC4KCkkmIzM5O3ZlIHNjb3BlZCBvdXQgdGhlIGtleSBzeW1ib2xzOiBgcHJldl9iYWRibG9ja3NgLCBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYW5kIGBiYWRibG9ja3Nfc3RvcmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZS4gTG9va2luZyBpbnRvIGl0LCBpdCBhcHBlYXJzIGBwcmV2X2JhZGJsb2Nrc2AgaXMgKm9ubHkqIHVzZWQgd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AsIGNhbGxlZCBkdXJpbmcgc2V0LCBjbGVhciwgb3IgY2hlY2sgb3BlcmF0aW9ucy4gVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgcmVzdCBvZiB0aGUgaWRlbnRpZmllZCBzeW1ib2xzOiB0aGV5IGFyZSBsb2NhbGl6ZWQgYW5kIGRvbiYjMzk7dCBzZWVtIHRvIGJlIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdCBwYXRocy4KClNvLCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSByZWFzb25pbmcuIEZpcnN0LCB3aGF0IGRpZCB0aGUgcGF0Y2ggKmFjdHVhbGx5KiBjaGFuZ2U/IEl0IGFsdGVycyB0aGUgYHByZXZfYmFkYmxvY2tzKClgIGZ1bmN0aW9uIGluIGBibG9jay9iYWRibG9ja3MuY2AuIEl0JiMzOTtzIGEgYmluYXJ5IHNlYXJjaCwgc3BlY2lmaWNhbGx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVwcGVyIGJvdW5kIGluaXRpYWxpemF0aW9uIGFuZCBjb21wYXJpc29uIGR1cmluZyB0aGUgYmluYXJ5IHNlYXJjaCwgYW5kIGl0IGNsZWFucyB1cCBhIGNvbmRpdGlvbmFsIGNoZWNrLgoKU2Vjb25kLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBgYmFkYmxvY2tzYCBpcyBhIGNlbnRyYWwgYmxvY2sgbGF5ZXIgY29tcG9uZW50IHVzZWQgYnkgc2V2ZXJhbCBibG9jayBkZXZpY2UgZHJpdmVycy4gSSBjYW4gYWNjZXNzIGl0IGZyb20gdXNlciBzcGFjZSB2aWEgYHN5c2ZzYCwgYW5kIGl0IGlzIHVzZWQgZHVyaW5nIEkvTyBjaGVjayBvcGVyYXRpb25zLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZXhlcmNpc2VkLgoKVGhpcmQsIGlzIHRoaXMgd29ydGggZnV6emluZz8gRGVmaW5pdGVseS4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSByZWZhY3RvcmluZyBzb21lIGNyaXRpY2FsIGxvZ2ljIHJlZ2FyZGluZyB0aGUgYmluYXJ5IHNlYXJjaCYjMzk7cyBpbmRleGluZywgYm91bmRzLCBhbmQgcmV0dXJuIGNvbmRpdGlvbnMuIENoYW5naW5nIGxvZ2ljIGxpa2UgdGhpcyBpbiBhIGNvcmUgc3Vic3lzdGVtIGNvdWxkIGNlcnRhaW5seSBhZmZlY3QgY29ycmVjdG5lc3MsIGVzcGVjaWFsbHkgaW4gYm91bmRhcnkgY29uZGl0aW9ucyBsaWtlIGVtcHR5IHRhYmxlcywgZnVsbCB0YWJsZXMsIGFuZCBlZGdlIG9mZnNldHMuIFRoaXMgaXMgd29ydGggc3BlbmRpbmcgc29tZSBjeWNsZXMgb24uCgpUaGUgYXNzZXNzbWVudCBpcyBjbGVhci4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXZfYmFkYmxvY2tzJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19zZXQmIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3Nfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cdTAwM2Vjb3VudCAtIDEgaW5zdGVhZCBvZiBiYi1cdTAwM2Vjb3VudCksIHRoZSB1cHBlci1ib3VuZCBjaGVjayBjb25kaXRpb24sIGFuZCB0aGUgZmFsbGJhY2sgcmV0dXJuIGFzc2lnbm1lbnQgKHJldCA9IGxvIHVuY29uZGl0aW9uYWxseSkuIEJhZCBibG9ja3MgaGFuZGxpbmcgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGV4ZXJjaXNhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBibG9jayBkcml2ZXJzIHN1Y2ggYXMgTUQvUkFJRCAoZHJpdmVycy9tZCkgYW5kIG51bGxfYmxrIChkcml2ZXJzL2Jsb2NrL251bGxfYmxrKSwgYXMgd2VsbCBhcyB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgKGJhZGJsb2Nrc19zdG9yZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmllZCBzZWFyY2ggYm91bmRhcmllcyBhbmQgaW5kZXggaGFuZGxpbmcgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBvZmYtYnktb25lIGVycm9ycyBvbiBlZGdlIGNhc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX01EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmV2X2JhZGJsb2NrcyYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jbGVhciYjMzQ7LAogICAgJiMzNDtiYWRibG9ja3NfY2hlY2smIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiaW5hcnkgc2VhcmNoIGxvZ2ljIGluIHByZXZfYmFkYmxvY2tzKCkgd2l0aGluIGJsb2NrL2JhZGJsb2Nrcy5jLCBjaGFuZ2luZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhpZ2ggYm91bmRhcnkgKGhpID0gYmItXHUwMDNlY291bnQgLSAxIGluc3RlYWQgb2YgYmItXHUwMDNlY291bnQpLCB0aGUgdXBwZXItYm91bmQgY2hlY2sgY29uZGl0aW9uLCBhbmQgdGhlIGZhbGxiYWNrIHJldHVybiBhc3NpZ25tZW50IChyZXQgPSBsbyB1bmNvbmRpdGlvbmFsbHkpLiBCYWQgYmxvY2tzIGhhbmRsaW5nIGlzIHBhcnQgb2YgdGhlIGNvcmUgYmxvY2sgc3Vic3lzdGVtIGFuZCBpcyBleGVyY2lzYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB2aWEgYmxvY2sgZHJpdmVycyBzdWNoIGFzIE1EL1JBSUQgKGRyaXZlcnMvbWQpIGFuZCBudWxsX2JsayAoZHJpdmVycy9ibG9jay9udWxsX2JsayksIGFzIHdlbGwgYXMgdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VzIChiYWRibG9ja3Nfc3RvcmUpLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbW9kaWZpZWQgc2VhcmNoIGJvdW5kYXJpZXMgYW5kIGluZGV4IGhhbmRsaW5nIGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3Igb2ZmLWJ5LW9uZSBlcnJvcnMgb24gZWRnZSBjYXNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiaW5hcnkgc2VhcmNoIGJvdW5kYXJ5IGluaXRpYWxpemF0aW9uIGluIGBwcmV2X2JhZGJsb2NrcygpYCB3aXRoaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgaGkgPSBiYi1cdTAwM2Vjb3VudCAtIDFgIGluc3RlYWQgb2YgYGhpID0gYmItXHUwMDNlY291bnRgLCBhZGp1c3RzIHRoZSB1cHBlci1ib3VuZCBjaGVjayBhY2NvcmRpbmdseSwgYW5kIHNpbXBsaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBhc3NpZ25tZW50LlxuXG5UaGUgYmFkYmxvY2sgYnVmZmVyIChgYmItXHUwMDNlcGFnZWApIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgLyBgZGV2bV9remFsbG9jKClgIGFuZCBlbnRyaWVzIHdpdGhpbiBgWzAsIGJiLVx1MDAzZWNvdW50IC0gMV1gIGFyZSBmdWxseSBpbml0aWFsaXplZCBiYWQgYmxvY2sgZW50cmllcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGluZGV4IGNhbGN1bGF0aW9ucyBhbmQgYm91bmRzIGluIGFuIGludGVybmFsIGJpbmFyeSBzZWFyY2ggcm91dGluZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQsIG5vciBpcyBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGV4cG9zZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGh5cG90aGV0aWNhbCBpbmRleGluZyBkZWZlY3QgaGVyZSB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBieSBLQVNBTiwgbm90IEtNU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTk2MmQwMjE2NjVjYWMxZGNkMmQ0YTQyODcxNGQ0OGQyMTg0YTJkOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDE4OjQwOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuYwppbmRleCBlY2U2NGU3NmZlOGZmLi4xNDNiNDg4YjdmZTY4IDEwMDY0NAotLS0gYS9ibG9jay9iYWRibG9ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iYWRibG9ja3MuYwpAQCAtNDk2LDE0ICYjNDM7NDk2LDE0IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLAogCX0KIAogCWxvID0gMDsKLQloaSA9IGJiLSZndDtjb3VudDsKJiM0MzsJaGkgPSBiYi0mZ3Q7Y291bnQgLSAxOwogCXAgPSBiYi0mZ3Q7cGFnZTsKIAogCS8qIFRoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeSAqLwogCWlmIChCQl9PRkZTRVQocFtsb10pICZndDsgcykKIAkJcmV0dXJuIC0xOwotCWlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSAmbHQ7PSBzKQotCQlyZXR1cm4gaGkgLSAxOwomIzQzOwlpZiAoQkJfT0ZGU0VUKHBbaGldKSAmbHQ7PSBzKQomIzQzOwkJcmV0dXJuIGhpOwogCiAJLyogRG8gYmlzZWN0IHNlYXJjaCBpbiBiYWQgdGFibGUgKi8KIAl3aGlsZSAoaGkgLSBsbyAmZ3Q7IDEpIHsKQEAgLTUyMSw4ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsCiAJCQloaSA9IG1pZDsKIAl9CiAKLQlpZiAoQkJfT0ZGU0VUKHBbbG9dKSAmbHQ7PSBzKQotCQlyZXQgPSBsbzsKJiM0MzsJcmV0ID0gbG87CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9iYWRibG9ja3MuY2AgdGhhdCBuZWVkcyBsb29raW5nIGF0IGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVmZW5zaXZlIGNvZGUgcmV2aWV3L3NvZnR3YXJlIHRlc3Rpbmcvc2FuaXRpemVyIGFuYWx5c2lzIHR5cGUgb2YgdGFzayDigJMgbm90aGluZyB0aGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtjcml0aWNhbCB2dWxuZXJhYmlsaXR5LiYjMzQ7IEkgY2FuIGNsYXNzaWZ5IHRoaXMgYXMgYSBmYWlybHkgYmVuaWduIHJlcXVlc3QuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGUgZGlmZiBmb2N1c2VzIG9uIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBiaXNlY3Qgc2VhcmNoIGxvZ2ljIHdpdGhpbiBpdC4gVGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSB1cHBlciBib3VuZHMgb2YgdGhlIHNlYXJjaCBzcGFjZSB3aXRoIGFkanVzdGluZyB0aGUgYGhpYCBhbmQgc3Vic2VxdWVudCBjb25kaXRpb25hbHMuIExpbmUgNDk2IGluIGBibG9jay9iYWRibG9ja3MuY2AgaXMgdGhlIGtleSBsb2NhdGlvbiwgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBvZmYtYnktb25lIG9yIGFuIGVkZ2UgY2FzZSBmaXggcmVsYXRlZCB0byBob3cgdGhlIHNlYXJjaCBib3VuZHMgYXJlIGhhbmRsZWQgd2l0aGluIGEgc29ydGVkIGJhZCBibG9jayBsaXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgb2YgdGhlIGBwcmV2X2JhZGJsb2Nrc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGF0IGBiYi0mZ3Q7Y291bnRgLCBgQkJfT0ZGU0VUYCwgYGxvYCwgYGhpYCwgYW5kIHRoZSBgcGAgYXJyYXkgcmVwcmVzZW50LiBUaGUgYmlzZWN0IHNlYXJjaCBpcyB1c2VkIHRvIGVmZmljaWVudGx5IGZpbmQgdGhlIGNsb3Nlc3QgYmFkIGJsb2NrIHRvIGEgZ2l2ZW4gc2VjdG9yIGBzYC4gVGhpcyBjb3VsZCBiZSBzZW5zaXRpdmUgdG8gYm91bmRhcnkgY29uZGl0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZml4IGlzIGNvcnJlY3QsIGFuZCB0aGF0IGV4aXN0aW5nIEtNU0FOIGZ1enplcnMgZG9uJiMzOTt0IGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoLiBBZnRlciB0aGlzLCBhIGRlZXBlciBkaXZlIGludG8gZXhpc3RpbmcgZnV6emVycyB3aWxsIGJlIG5lZWRlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNvZGUtcGF0aCBpcyBwcm9wZXJseSB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svYmFkYmxvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFx0fVxuIDQ3MTpcdFxuIDQ3MjpcdFx0cmV0dXJuIHJldDtcbiA0NzM6XHR9XG4gNDc0Olx0XG4gNDc1Olx0LypcbiA0NzY6XHQgKiBGaW5kIHRoZSByYW5nZSBzdGFydHMgYXQtb3ItYmVmb3JlIGJhZC1cdTAwM2VzdGFydC4gSWYgJiMzOTtoaW50JiMzOTsgaXMgcHJvdmlkZWRcbiA0Nzc6XHQgKiAoaGludCBcdTAwM2U9IDApIHRoZW4gc2VhcmNoIGluIHRoZSBiYWQgdGFibGUgZnJvbSBoaW50IGZpcnN0bHkuIEl0IGlzXG4gNDc4Olx0ICogdmVyeSBwcm9iYWJseSB0aGUgd2FudGVkIGJhZCByYW5nZSBjYW4gYmUgZm91bmQgZnJvbSB0aGUgaGludCBpbmRleCxcbiA0Nzk6XHQgKiB0aGVuIHRoZSB1bm5lY2Vzc2FyeSB3aGlsZS1sb29wIGl0ZXJhdGlvbiBjYW4gYmUgYXZvaWRlZC5cbiA0ODA6XHQgKi9cbiA0ODE6XHRzdGF0aWMgaW50IHByZXZfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCxcbiA0ODI6XHRcdFx0XHQgIGludCBoaW50KVxuIDQ4MzpcdHtcbiA0ODQ6XHRcdHNlY3Rvcl90IHMgPSBiYWQtXHUwMDNlc3RhcnQ7XG4gNDg1Olx0XHRpbnQgcmV0ID0gLTE7XG4gNDg2Olx0XHRpbnQgbG8sIGhpO1xuIDQ4NzpcdFx0dTY0ICpwO1xuIDQ4ODpcdFxuIDQ4OTpcdFx0aWYgKCFiYi1cdTAwM2Vjb3VudClcbiA0OTA6XHRcdFx0Z290byBvdXQ7XG4gNDkxOlx0XG4gNDkyOlx0XHRpZiAoaGludCBcdTAwM2U9IDApIHtcbiA0OTM6XHRcdFx0cmV0ID0gcHJldl9ieV9oaW50KGJiLCBzLCBoaW50KTtcbiA0OTQ6XHRcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4gNDk1Olx0XHRcdFx0Z290byBvdXQ7XG4gNDk2Olx0XHR9XG4gNDk3Olx0XG4gNDk4Olx0XHRsbyA9IDA7XG4gNDk5Olx0XHRoaSA9IGJiLVx1MDAzZWNvdW50IC0gMTtcbiA1MDA6XHRcdHAgPSBiYi1cdTAwM2VwYWdlO1xuIDUwMTpcdFxuIDUwMjpcdFx0LyogVGhlIGZvbGxvd2luZyBiaXNlY3Qgc2VhcmNoIG1pZ2h0IGJlIHVubmVjZXNzYXJ5ICovXG4gNTAzOlx0XHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcdTAwM2UgcylcbiA1MDQ6XHRcdFx0cmV0dXJuIC0xO1xuIDUwNTpcdFx0aWYgKEJCX09GRlNFVChwW2hpXSkgXHUwMDNjPSBzKVxuIDUwNjpcdFx0XHRyZXR1cm4gaGk7XG4gNTA3Olx0XG4gNTA4Olx0XHQvKiBEbyBiaXNlY3Qgc2VhcmNoIGluIGJhZCB0YWJsZSAqL1xuIDUwOTpcdFx0d2hpbGUgKGhpIC0gbG8gXHUwMDNlIDEpIHtcbiA1MTA6XHRcdFx0aW50IG1pZCA9IChsbyAmIzQzOyBoaSkvMjtcbiA1MTE6XHRcdFx0c2VjdG9yX3QgYSA9IEJCX09GRlNFVChwW21pZF0pO1xuIDUxMjpcdFxuIDUxMzpcdFx0XHRpZiAoYSA9PSBzKSB7XG4gNTE0Olx0XHRcdFx0cmV0ID0gbWlkO1xuIDUxNTpcdFx0XHRcdGdvdG8gb3V0O1xuIDUxNjpcdFx0XHR9XG4gNTE3Olx0XG4gNTE4Olx0XHRcdGlmIChhIFx1MDAzYyBzKVxuIDUxOTpcdFx0XHRcdGxvID0gbWlkO1xuIDUyMDpcdFx0XHRlbHNlXG4gNTIxOlx0XHRcdFx0aGkgPSBtaWQ7XG4gNTIyOlx0XHR9XG4gNTIzOlx0XG4gNTI0Olx0XHRyZXQgPSBsbztcbiA1MjU6XHRvdXQ6XG4gNTI2Olx0XHRyZXR1cm4gcmV0O1xuIDUyNzpcdH1cbiA1Mjg6XHRcbiA1Mjk6XHQvKlxuIDUzMDpcdCAqIFJldHVybiAmIzM5O3RydWUmIzM5OyBpZiB0aGUgcmFuZ2UgaW5kaWNhdGVkIGJ5ICYjMzk7YmFkJiMzOTsgY2FuIGJlIGZvcndhcmRcbiA1MzE6XHQgKiBtZXJnZWQgd2l0aCB0aGUgYmFkIHJhbmdlIChmcm9tIHRoZSBiYWQgdGFibGUpIGluZGV4ZWQgYnkgJiMzOTtwcmV2JiMzOTsuXG4gNTMyOlx0ICovXG4gNTMzOlx0c3RhdGljIGJvb2wgY2FuX21lcmdlX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbiA1MzQ6XHRcdFx0XHQgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXG4gNTM1Olx0e1xuIDUzNjpcdFx0c2VjdG9yX3QgcyA9IGJhZC1cdTAwM2VzdGFydDtcbiA1Mzc6XHRcdHU2NCAqcCA9IGJiLVx1MDAzZXBhZ2U7XG4gNTM4Olx0XG4gNTM5Olx0XHRpZiAoQkJfQUNLKHBbcHJldl0pID09IGJhZC1cdTAwM2VhY2sgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgcGF0Y2ggZGV0YWlscy4gRmlyc3QsIEkmIzM5O20gZXhhbWluaW5nIHRoZSBjb2RlIHNuaXBwZXQgc3BlY2lmaWNhbGx5IHdpdGhpbiBgcHJldl9iYWRibG9ja3NgLiBJJiMzOTttIHN0YXJ0aW5nIGJ5IHVuZGVyc3RhbmRpbmcgdGhlICpiZWZvcmUqIHN0YXRlIHRvIGVmZmVjdGl2ZWx5IGdyYXNwIHRoZSBjaGFuZ2UmIzM5O3MgaW1wYWN0LgoKUmlnaHQsIHNvIHByZXZpb3VzbHkgYGhpYCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGJiLSZndDtjb3VudGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgbm90aWNpbmcgYSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBpc3N1ZSBoZXJlLiBUaGUgY29kZSBjaGVja3MgYEJCX09GRlNFVChwW2hpIC0gMV0pICZsdDs9IHNgIGluaXRpYWxseS4gVGhlbiwgd2l0aGluIHRoZSBgd2hpbGUgKGhpIC0gbG8gJmd0OyAxKWAgbG9vcCwgYGhpYCByZW1haW5zIGBiYi0mZ3Q7Y291bnRgIHdoaWxlIGBwYCBpcyBhY2Nlc3NlZCB3aXRoIGBoaSAtIDFgLiBJZiBgQkJfT0ZGU0VUKHBbaGkgLSAxXSkgJmd0OyBzYCwgdGhlbiB0aGUgbG9vcCBpcyBlbnRlcmVkIHdpdGggYGhpYCBlcXVhbCB0byBgYmItJmd0O2NvdW50YC4gVGhpcyBtZWFucyB3ZSBhcmUgc2tpcHBpbmcgdGhlIGxhc3QgZWxlbWVudC4KCk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBjb3JyZWN0IHRoaXMuIElmIGBoaWAgYmVjb21lcyBgYmItJmd0O2NvdW50IC0gMWAgd2UgY2FuIHRoZW4gYWRkcmVzcyB0aGUgbGFzdCBlbGVtZW50LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBsb2dpYyB3aXRoaW4gdGhlIGJpc2VjdCBzZWFyY2ggbm93IGFwcGVhcnMgY2xlYW5lci4gIGBsb2Agc3RhcnRzIGF0IDAsIGBoaWAgaXMgaW5pdGlhbGl6ZWQgdG8gYGJiLSZndDtjb3VudCAtIDFgLiAgQW5kLCBpZiBgYSAmbHQ7IHNgLCB0aGVuIGBsb2AgaXMgc2V0IHRvIGBtaWRgLCBvciBgaGlgIGlzIHNldCB0byBgbWlkYCB3aGVuIGl0IGlzIG5vdC4gVGhpcyBtYWtlcyBzZW5zZS4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGBpZmAgc3RhdGVtZW50OiBgaWYgKEJCX09GRlNFVChwW2xvXSkgJmx0Oz0gcykgcmV0ID0gbG87YCBiZWNhdXNlIGBwW2xvXWAgaXMgZ3VhcmFudGVlZCB0byBiZSBgJmx0Oz0gc2AuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY29kZSBzdGFydHMgd2l0aCBhIGNoZWNrIHRvIHJldHVybiBgLTFgIGlmIHRoZSBmaXJzdCBlbGVtZW50IGlzIGdyZWF0ZXIgdGhhbiBgc2AsIGFuZCB0aGVuIGBsb2AgaXMgb25seSB1cGRhdGVkIHdoZW4gYGEgJmx0OyBzYC4gVGhlcmVmb3JlIHRoZSBjaGVjayBpcyByZWR1bmRhbnQuCgpOb3csIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmUgYmVoaW5kIGBiYi0mZ3Q7cGFnZWAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgYmxvY2svYmFkYmxvY2tzLmNgIHRvIHNlZSBob3cgYGJhZGJsb2Nrc2Agd29ya3MgaW4gZGV0YWlsIHRvIGZ1cnRoZXIgY2xhcmlmeSB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmItXHUwMDNlY291bnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz00NTc9c3RhdGljIGludCBwcmV2X2J5X2hpbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIGludCBoaW50KVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTQ2Mi1cbmJsb2NrL2JhZGJsb2Nrcy5jOjQ2MzpcdHdoaWxlICgoaGludCBcdTAwM2MgaGludF9lbmQpIFx1MDAyNlx1MDAyNiAoKGhpbnQgJiM0MzsgMSkgXHUwMDNjPSBiYi1cdTAwM2Vjb3VudCkgXHUwMDI2XHUwMDI2XG5ibG9jay9iYWRibG9ja3MuYy00NjQtXHQgICAgICAgKEJCX09GRlNFVChwW2hpbnRdKSBcdTAwM2M9IHMpKSB7XG5ibG9jay9iYWRibG9ja3MuYzo0NjU6XHRcdGlmICgoaGludCAmIzQzOyAxKSA9PSBiYi1cdTAwM2Vjb3VudCB8fCBCQl9PRkZTRVQocFtoaW50ICYjNDM7IDFdKSBcdTAwM2Ugcykge1xuYmxvY2svYmFkYmxvY2tzLmMtNDY2LVx0XHRcdHJldCA9IGhpbnQ7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9NDgxPXN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTQ4OC1cbmJsb2NrL2JhZGJsb2Nrcy5jOjQ4OTpcdGlmICghYmItXHUwMDNlY291bnQpXG5ibG9jay9iYWRibG9ja3MuYy00OTAtXHRcdGdvdG8gb3V0O1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTQ5OC1cdGxvID0gMDtcbmJsb2NrL2JhZGJsb2Nrcy5jOjQ5OTpcdGhpID0gYmItXHUwMDNlY291bnQgLSAxO1xuYmxvY2svYmFkYmxvY2tzLmMtNTAwLVx0cCA9IGJiLVx1MDAzZXBhZ2U7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9NTUxPXN0YXRpYyBpbnQgZnJvbnRfbWVyZ2Uoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYy01NjMtXHRcdG1lcmdlZCA9IG1pbl90KHNlY3Rvcl90LCBzZWN0b3JzLCBCQl9NQVhfTEVOIC0gQkJfTEVOKHBbcHJldl0pKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjU2NDpcdFx0aWYgKChwcmV2ICYjNDM7IDEpIFx1MDAzYyBiYi1cdTAwM2Vjb3VudCBcdTAwMjZcdTAwMjZcbmJsb2NrL2JhZGJsb2Nrcy5jLTU2NS1cdFx0ICAgIG1lcmdlZCBcdTAwM2UgKEJCX09GRlNFVChwW3ByZXYgJiM0MzsgMV0pIC0gQkJfRU5EKHBbcHJldl0pKSkge1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTU4Nz1zdGF0aWMgYm9vbCBjYW5fY29tYmluZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNjA0LSAqICYjMzk7cHJldiAtIDEmIzM5Oy5cbmJsb2NrL2JhZGJsb2Nrcy5jOjYwNTogKiBUaGUgY2FsbGVyIG9mIGZyb250X2NvbWJpbmUoKSB3aWxsIGRlY3JlYXNlIGJiLVx1MDAzZWNvdW50LCB0aGVyZWZvcmVcbmJsb2NrL2JhZGJsb2Nrcy5jLTYwNi0gKiBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGVhciBwW3BlcnZdIGFmdGVyIGZyb250IG1lcmdlLlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTYwOD1zdGF0aWMgdm9pZCBmcm9udF9jb21iaW5lKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldilcbi0tXG5ibG9jay9iYWRibG9ja3MuYy02MTQtXHRcdFx0ICAgICAgQkJfQUNLKHBbcHJldl0pKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjYxNTpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2MgYmItXHUwMDNlY291bnQpXG5ibG9jay9iYWRibG9ja3MuYzo2MTY6XHRcdG1lbW1vdmUocCAmIzQzOyBwcmV2LCBwICYjNDM7IHByZXYgJiM0MzsgMSwgKGJiLVx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy02MTctfVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTY3Mj1zdGF0aWMgYm9vbCBjYW5fZnJvbnRfb3ZlcndyaXRlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy03MDEtXG5ibG9jay9iYWRibG9ja3MuYzo3MDI6XHRpZiAoKGJiLVx1MDAzZWNvdW50ICYjNDM7ICgqZXh0cmEpKSBcdTAwM2UgTUFYX0JBREJMT0NLUylcbmJsb2NrL2JhZGJsb2Nrcy5jLTcwMy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTcxNT1zdGF0aWMgaW50IGZyb250X292ZXJ3cml0ZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzMxLVx0XHRcdG1lbW1vdmUocCAmIzQzOyBwcmV2ICYjNDM7IDIsIHAgJiM0MzsgcHJldiAmIzQzOyAxLFxuYmxvY2svYmFkYmxvY2tzLmM6NzMyOlx0XHRcdFx0KGJiLVx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy03MzMtXHRcdFx0cFtwcmV2ICYjNDM7IDFdID0gQkJfTUFLRShiYWQtXHUwMDNlc3RhcnQgJiM0MzsgYmFkLVx1MDAzZWxlbixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy03NDUtXHRcdFx0bWVtbW92ZShwICYjNDM7IHByZXYgJiM0MzsgMiwgcCAmIzQzOyBwcmV2ICYjNDM7IDEsXG5ibG9jay9iYWRibG9ja3MuYzo3NDY6XHRcdFx0XHQoYmItXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTc0Ny1cdFx0XHRwW3ByZXYgJiM0MzsgMV0gPSBCQl9NQUtFKGJhZC1cdTAwM2VzdGFydCwgYmFkLVx1MDAzZWxlbiwgYmFkLVx1MDAzZWFjayk7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzU5LVx0XHRtZW1tb3ZlKHAgJiM0MzsgcHJldiAmIzQzOyAzLCBwICYjNDM7IHByZXYgJiM0MzsgMSxcbmJsb2NrL2JhZGJsb2Nrcy5jOjc2MDpcdFx0XHQoYmItXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTc2MS1cdFx0cFtwcmV2ICYjNDM7IDFdID0gQkJfTUFLRShiYWQtXHUwMDNlc3RhcnQsIGJhZC1cdTAwM2VsZW4sIGJhZC1cdTAwM2VhY2spO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTc3Nz1zdGF0aWMgaW50IGluc2VydF9hdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGF0LCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYy03ODQtXHRsZW4gPSBtaW5fdChzZWN0b3JfdCwgYmFkLVx1MDAzZWxlbiwgQkJfTUFYX0xFTik7XG5ibG9jay9iYWRibG9ja3MuYzo3ODU6XHRpZiAoYXQgXHUwMDNjIGJiLVx1MDAzZWNvdW50KVxuYmxvY2svYmFkYmxvY2tzLmM6Nzg2Olx0XHRtZW1tb3ZlKHAgJiM0MzsgYXQgJiM0MzsgMSwgcCAmIzQzOyBhdCwgKGJiLVx1MDAzZWNvdW50IC0gYXQpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy03ODctXHRwW2F0XSA9IEJCX01BS0UoYmFkLVx1MDAzZXN0YXJ0LCBsZW4sIGJhZC1cdTAwM2VhY2spO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTc5Mj1zdGF0aWMgdm9pZCBiYWRibG9ja3NfdXBkYXRlX2Fja2VkKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgwMC1cbmJsb2NrL2JhZGJsb2Nrcy5jOjgwMTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJiLVx1MDAzZWNvdW50IDsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTgwMi1cdFx0aWYgKCFCQl9BQ0socFtpXSkpIHtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz04MTY9c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgxOS1cbmJsb2NrL2JhZGJsb2Nrcy5jOjgyMDpcdGlmIChwcmV2IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgKHByZXYgJiM0MzsgMSkgXHUwMDNjIGJiLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNlxuYmxvY2svYmFkYmxvY2tzLmMtODIxLVx0ICAgIEJCX0VORChwW3ByZXZdKSA9PSBCQl9PRkZTRVQocFtwcmV2ICYjNDM7IDFdKSBcdTAwMjZcdTAwMjZcbi0tXG5ibG9jay9iYWRibG9ja3MuYy04MjctXG5ibG9jay9iYWRibG9ja3MuYzo4Mjg6XHRcdGlmICgocHJldiAmIzQzOyAyKSBcdTAwM2MgYmItXHUwMDNlY291bnQpXG5ibG9jay9iYWRibG9ja3MuYy04MjktXHRcdFx0bWVtbW92ZShwICYjNDM7IHByZXYgJiM0MzsgMSwgcCAmIzQzOyBwcmV2ICYjNDM7IDIsXG5ibG9jay9iYWRibG9ja3MuYzo4MzA6XHRcdFx0XHQoYmItXHUwMDNlY291bnQgLSAgKHByZXYgJiM0MzsgMikpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYzo4MzE6XHRcdGJiLVx1MDAzZWNvdW50LS07XG5ibG9jay9iYWRibG9ja3MuYy04MzItXHRcdHJldHVybiB0cnVlO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTgzOD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbi0tXG5ibG9jay9iYWRibG9ja3MuYy04NzgtXHRcdGxlbiA9IGluc2VydF9hdChiYiwgMCwgXHUwMDI2YmFkKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjg3OTpcdFx0YmItXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuYmxvY2svYmFkYmxvY2tzLmMtODgwLVx0XHRhZGRlZCYjNDM7JiM0Mzs7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtODkxLVx0XHRsZW4gPSBpbnNlcnRfYXQoYmIsIDAsIFx1MDAyNmJhZCk7XG5ibG9jay9iYWRibG9ja3MuYzo4OTI6XHRcdGJiLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbmJsb2NrL2JhZGJsb2Nrcy5jLTg5My1cdFx0YWRkZWQmIzQzOyYjNDM7O1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTkwMC1cdFx0ZnJvbnRfY29tYmluZShiYiwgcHJldik7XG5ibG9jay9iYWRibG9ja3MuYzo5MDE6XHRcdGJiLVx1MDAzZWNvdW50LS07XG5ibG9jay9iYWRibG9ja3MuYy05MDItXHRcdGFkZGVkJiM0MzsmIzQzOztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy05MjgtXHRcdGFkZGVkJiM0MzsmIzQzOztcbmJsb2NrL2JhZGJsb2Nrcy5jOjkyOTpcdFx0YmItXHUwMDNlY291bnQgJiM0Mzs9IGV4dHJhO1xuYmxvY2svYmFkYmxvY2tzLmMtOTMwLVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTkzMi1cdFx0XHRmcm9udF9jb21iaW5lKGJiLCBwcmV2KTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjkzMzpcdFx0XHRiYi1cdTAwM2Vjb3VudC0tO1xuYmxvY2svYmFkYmxvY2tzLmMtOTM0LVx0XHR9XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtOTQwLVx0LyogY2Fubm90IG1lcmdlIGFuZCB0aGVyZSBpcyBzcGFjZSBpbiBiYWQgdGFibGUgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjk0MTpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2MgYmItXHUwMDNlY291bnQgXHUwMDI2XHUwMDI2XG5ibG9jay9iYWRibG9ja3MuYy05NDItXHQgICAgb3ZlcmxhcF9iZWhpbmQoYmIsIFx1MDAyNmJhZCwgcHJldiAmIzQzOyAxKSlcbi0tXG5ibG9jay9iYWRibG9ja3MuYy05NDYtXHRsZW4gPSBpbnNlcnRfYXQoYmIsIHByZXYgJiM0MzsgMSwgXHUwMDI2YmFkKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjk0NzpcdGJiLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbmJsb2NrL2JhZGJsb2Nrcy5jLTk0OC1cdGFkZGVkJiM0MzsmIzQzOztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy05ODQtICogY292ZXJlZCBieSB0aGUgY2xlYXJpbmcgcmFuZ2UgYW5kIGZ1bGx5IGNsZWFyZWQsICYjMzk7ZGVsZXRlJiMzOTsgaXMgc2V0IGFzIDEgZm9yXG5ibG9jay9iYWRibG9ja3MuYzo5ODU6ICogdGhlIGNhbGxlciB0byByZWR1Y2UgYmItXHUwMDNlY291bnQuXG5ibG9jay9iYWRibG9ja3MuYy05ODYtICovXG5ibG9jay9iYWRibG9ja3MuYz05ODc9c3RhdGljIGludCBmcm9udF9jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTAwNC1cdFx0XHRjbGVhcmVkID0gQkJfTEVOKHBbcHJldl0pO1xuYmxvY2svYmFkYmxvY2tzLmM6MTAwNTpcdFx0XHRpZiAoKHByZXYgJiM0MzsgMSkgXHUwMDNjIGJiLVx1MDAzZWNvdW50KVxuYmxvY2svYmFkYmxvY2tzLmMtMTAwNi1cdFx0XHRcdG1lbW1vdmUocCAmIzQzOyBwcmV2LCBwICYjNDM7IHByZXYgJiM0MzsgMSxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMDc6XHRcdFx0XHQgICAgICAgKGJiLVx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMDA4LVx0XHRcdCpkZWxldGVkID0gMTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDMwPXN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMDQxLVx0XHRcdCAgYWNrKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwNDI6XHRtZW1tb3ZlKHAgJiM0MzsgcHJldiAmIzQzOyAyLCBwICYjNDM7IHByZXYgJiM0MzsgMSwgKGJiLVx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XG5ibG9jay9iYWRibG9ja3MuYy0xMDQzLVx0cFtwcmV2ICYjNDM7IDFdID0gQkJfTUFLRShzICYjNDM7IHNlY3RvcnMsIGVuZCAtIHMgLSBzZWN0b3JzLCBhY2spO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTEwNDg9c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTEyLVx0LyogU3RhcnQgYWZ0ZXIgYWxsIGJhZGJsb2NrcyAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTExMzpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2U9IGJiLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNiAhb3ZlcmxhcF9mcm9udChiYiwgcHJldiwgXHUwMDI2YmFkKSkge1xuYmxvY2svYmFkYmxvY2tzLmMtMTExNC1cdFx0bGVuID0gc2VjdG9ycztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTI5LVx0XHRcdC8qIFNwbGl0dGluZyAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTEzMDpcdFx0XHRpZiAoKGJiLVx1MDAzZWNvdW50ICYjNDM7IDEpIFx1MDAzYz0gTUFYX0JBREJMT0NLUykge1xuYmxvY2svYmFkYmxvY2tzLmMtMTEzMS1cdFx0XHRcdGxlbiA9IGZyb250X3NwbGl0dGluZ19jbGVhcihiYiwgcHJldiwgXHUwMDI2YmFkKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjExMzI6XHRcdFx0XHRiYi1cdTAwM2Vjb3VudCAmIzQzOz0gMTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzMtXHRcdFx0XHRjbGVhcmVkJiM0MzsmIzQzOztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTQxLVx0XHRcdGxlbiA9IGZyb250X2NsZWFyKGJiLCBwcmV2LCBcdTAwMjZiYWQsIFx1MDAyNmRlbGV0ZWQpO1xuYmxvY2svYmFkYmxvY2tzLmM6MTE0MjpcdFx0XHRiYi1cdTAwM2Vjb3VudCAtPSBkZWxldGVkO1xuYmxvY2svYmFkYmxvY2tzLmMtMTE0My1cdFx0XHRjbGVhcmVkJiM0MzsmIzQzOztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMTUwLVx0LyogTm90IGZyb250IG92ZXJsYXAsIGJ1dCBiZWhpbmQgb3ZlcmxhcCAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTE1MTpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2MgYmItXHUwMDNlY291bnQgXHUwMDI2XHUwMDI2IG92ZXJsYXBfYmVoaW5kKGJiLCBcdTAwMjZiYWQsIHByZXYgJiM0MzsgMSkpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNTItXHRcdGxlbiA9IEJCX09GRlNFVChwW3ByZXYgJiM0MzsgMV0pIC0gYmFkLnN0YXJ0O1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTExODU9c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDctXHRpZiAoKHByZXYgXHUwMDNlPSAwKSBcdTAwMjZcdTAwMjZcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyMDg6XHQgICAgKChwcmV2ICYjNDM7IDEpIFx1MDAzZT0gYmItXHUwMDNlY291bnQpIFx1MDAyNlx1MDAyNiAhb3ZlcmxhcF9mcm9udChiYiwgcHJldiwgXHUwMDI2YmFkKSkge1xuYmxvY2svYmFkYmxvY2tzLmMtMTIwOS1cdFx0bGVuID0gc2VjdG9ycztcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMjMzLVx0LyogTm90IGZyb250IG92ZXJsYXAsIGJ1dCBiZWhpbmQgb3ZlcmxhcCAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTIzNDpcdGlmICgocHJldiAmIzQzOyAxKSBcdTAwM2MgYmItXHUwMDNlY291bnQgXHUwMDI2XHUwMDI2IG92ZXJsYXBfYmVoaW5kKGJiLCBcdTAwMjZiYWQsIHByZXYgJiM0MzsgMSkpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMzUtXHRcdGxlbiA9IEJCX09GRlNFVChwW3ByZXYgJiM0MzsgMV0pIC0gYmFkLnN0YXJ0O1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTEzNzQ9dm9pZCBhY2tfYWxsX2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYilcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzg0LVxuYmxvY2svYmFkYmxvY2tzLmM6MTM4NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmItXHUwMDNlY291bnQgOyBpJiM0MzsmIzQzOykge1xuYmxvY2svYmFkYmxvY2tzLmMtMTM4Ni1cdFx0XHRpZiAoIUJCX0FDSyhwW2ldKSkge1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzOTMtXG5ibG9jay9iYWRibG9ja3MuYzoxMzk0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBiYi1cdTAwM2Vjb3VudCA7IGkmIzQzOyYjNDM7KVxuYmxvY2svYmFkYmxvY2tzLmMtMTM5NS1cdFx0XHR3aGlsZSAodHJ5X2FkamFjZW50X2NvbWJpbmUoYmIsIGkpKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MTM9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MjgtXG5ibG9jay9iYWRibG9ja3MuYzoxNDI5Olx0d2hpbGUgKGxlbiBcdTAwM2MgUEFHRV9TSVpFIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBiYi1cdTAwM2Vjb3VudCkge1xuYmxvY2svYmFkYmxvY2tzLmMtMTQzMC1cdFx0c2VjdG9yX3QgcyA9IEJCX09GRlNFVChwW2ldKTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xNDkwPXN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTMtXHRiYi1cdTAwM2VkZXYgPSBkZXY7XG5ibG9jay9iYWRibG9ja3MuYzoxNDk0Olx0YmItXHUwMDNlY291bnQgPSAwO1xuYmxvY2svYmFkYmxvY2tzLmMtMTQ5NS1cdGlmIChlbmFibGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHByZXZfYmFkYmxvY2tzYCBCaXNlY3Rpb24gU2VhcmNoIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBibG9jay9iYWRibG9ja3MuY2AgdGhhdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLCBhIGJpc2VjdGlvbiBzZWFyY2ggaGVscGVyLiBJbml0aWFsbHksIEkgd2FudGVkIHRvIGRpZyBpbnRvIHRoZSBnaXQgaGlzdG9yeSBmb3IgdGhlIGNvbnRleHQsIG1heWJlIHVuY292ZXIgdGhlIHNwZWNpZmljIGJ1ZyB0aGlzIHBhdGNoIGZpeGVkIG9yIGl0cyBtb3RpdmF0aW9uLiBCdXQgc2luY2UgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGBnaXQgbG9nYCwgSSBuZWVkIHRvIHJlbHkgb24gY29kZSBhbmFseXNpcy4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgZGlmZmVyZW5jZTogYGhpID0gYmItJmd0O2NvdW50YCBoYXMgYmVjb21lIGBoaSA9IGJiLSZndDtjb3VudCAtIDFgLiBBbmQgdGhlcmUmIzM5O3MgYWxzbyBhIHNpbXBsaWZpY2F0aW9uIGF0IHRoZSBlbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4KClRyYWNpbmcgdGhlIGxvZ2ljLCBiZWZvcmUgdGhlIGNoYW5nZSwgYGhpYCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGJiLSZndDtjb3VudGAuIFRoaXMgbWVhbnQgYHBbaGktMV1gIHdhcyB0aGUgbGFzdCB2YWxpZCBlbGVtZW50LCBhbmQgYHBbaGldYCB3b3VsZCBoYXZlIGJlZW4gb3V0LW9mLWJvdW5kcywgYXMgdGhlIGFycmF5IGhhcyBgYmItJmd0O2NvdW50YCBlbGVtZW50cy4gVGhlIGNoZWNrIGBpZiAoQkJfT0ZGU0VUKHBbaGkgLSAxXSkgJmx0Oz0gcylgIGhhbmRsZWQgdGhpcy4gVGhlIHdoaWxlIGxvb3AgdGhlbiBwZXJmb3JtZWQgYSBiaXNlY3Qgc2VhcmNoLiBUaGUgb3JpZ2luYWwgY29kZSB0aGVuIGNoZWNrcyBmb3IgYGlmIChCQl9PRkZTRVQocFtsb10pICZsdDs9IHMpIHJldCA9IGxvO2AuIFRoZSBjaGFuZ2UgaXMgdGhhdCB0aGlzIGNoZWNrIGlzIHJlbW92ZWQuCgpJdCYjMzk7cyBiZWNvbWluZyBjbGVhcjogU2V0dGluZyBgaGkgPSBiYi0mZ3Q7Y291bnRgIGNyZWF0ZWQgYW4gKm9mZi1ieS1vbmUqIGlzc3VlLCBvciBhbiBlZGdlIGNvbmRpdGlvbi4gQnkgc2V0dGluZyBgaGkgPSBiYi0mZ3Q7Y291bnQgLSAxYCwgd2UmIzM5O3JlIG1ha2luZyB0aGUgYmlzZWN0aW9uIG1vcmUgcHJlY2lzZSBieSBzdGFydGluZyB0aGUgc2VhcmNoIHdpdGggYGhpYCBhcyB0aGUga25vd24gdXBwZXIgYm91bmQgaW5kZXggc3VjaCB0aGF0IGBCQl9PRkZTRVQocFtoaV0pICZndDsgc2AuIFRoZW4gdGhlIGxvb3Agd2lsbCBndWFyYW50ZWUgdGhhdCBgbG9gIGlzIHRoZSBsYXJnZXN0IGluZGV4IHdpdGggYHBbbG9dICZsdDs9IHNgLiBSZW1vdmluZyB0aGUgY2hlY2sgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBpcyBhbiBvcHRpbWl6YXRpb24sIGFzIHRoZSB3aGlsZSBsb29wIGd1YXJhbnRlZXMgdGhhdCBjb25kaXRpb24uCgpTbywgaW4gZXNzZW5jZSwgdGhlIHBhdGNoIGNvcnJlY3RzIGFuIGVkZ2UgY2FzZSBhbmQgc2ltcGxpZmllcyB0aGUgbG9naWMuIE5vLCB0aGlzIGRvZXMgbm90IHNlZW0gdG8gdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIEtNU0FOIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYSBmYWN0b3IgaGVyZS4gYHByZXZfYmFkYmxvY2tzYCBpcyBhbiBpbnRlcm5hbCBoZWxwZXIgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYCBwZXJmb3JtaW5nIGJpc2VjdGlvbiBzZWFyY2ggaW4gYGJiLSZndDtwYWdlYCwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgYHU2NGAsIGFuZCB0aGVyZSYjMzk7cyBubyBkYXRhIHRoYXQgaXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBzaG91bGQgYmUgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmItXHUwMDNlcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2JhZGJsb2Nrcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JhZGJsb2Nrcy5jPTQ1Nz1zdGF0aWMgaW50IHByZXZfYnlfaGludChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IGhpbnQpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNDU5LVx0aW50IGhpbnRfZW5kID0gaGludCAmIzQzOyAyO1xuYmxvY2svYmFkYmxvY2tzLmM6NDYwOlx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ2MS1cdGludCByZXQgPSAtMTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz00ODE9c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNDk5LVx0aGkgPSBiYi1cdTAwM2Vjb3VudCAtIDE7XG5ibG9jay9iYWRibG9ja3MuYzo1MDA6XHRwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTUwMS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz01MzM9c3RhdGljIGJvb2wgY2FuX21lcmdlX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy01MzYtXHRzZWN0b3JfdCBzID0gYmFkLVx1MDAzZXN0YXJ0O1xuYmxvY2svYmFkYmxvY2tzLmM6NTM3Olx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTUzOC1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz01NTE9c3RhdGljIGludCBmcm9udF9tZXJnZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTU1NC1cdHNlY3Rvcl90IHMgPSBiYWQtXHUwMDNlc3RhcnQ7XG5ibG9jay9iYWRibG9ja3MuYzo1NTU6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtNTU2LVx0aW50IG1lcmdlZCA9IDA7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9NTg3PXN0YXRpYyBib29sIGNhbl9jb21iaW5lX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy01ODkte1xuYmxvY2svYmFkYmxvY2tzLmM6NTkwOlx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTU5MS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz02MDg9c3RhdGljIHZvaWQgZnJvbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXG5ibG9jay9iYWRibG9ja3MuYy02MDkte1xuYmxvY2svYmFkYmxvY2tzLmM6NjEwOlx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTYxMS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz02MjU9c3RhdGljIGJvb2wgb3ZlcmxhcF9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGZyb250LFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTYyNy17XG5ibG9jay9iYWRibG9ja3MuYzo2Mjg6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtNjI5LVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTY0MD1zdGF0aWMgYm9vbCBvdmVybGFwX2JlaGluZChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNjQyLXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjY0MzpcdHU2NCAqcCA9IGJiLVx1MDAzZXBhZ2U7XG5ibG9jay9iYWRibG9ja3MuYy02NDQtXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9NjcyPXN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTY3NC17XG5ibG9jay9iYWRibG9ja3MuYzo2NzU6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtNjc2LVx0aW50IGxlbjtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz03MTU9c3RhdGljIGludCBmcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNy17XG5ibG9jay9iYWRibG9ja3MuYzo3MTg6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtNzE5LVx0c2VjdG9yX3Qgb3JpZ19lbmQgPSBCQl9FTkQocFtwcmV2XSk7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9Nzc3PXN0YXRpYyBpbnQgaW5zZXJ0X2F0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgYXQsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxuYmxvY2svYmFkYmxvY2tzLmMtNzc4LXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjc3OTpcdHU2NCAqcCA9IGJiLVx1MDAzZXBhZ2U7XG5ibG9jay9iYWRibG9ja3MuYy03ODAtXHRpbnQgbGVuO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTc5Mj1zdGF0aWMgdm9pZCBiYWRibG9ja3NfdXBkYXRlX2Fja2VkKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTc5NC1cdGJvb2wgdW5hY2tlZCA9IGZhbHNlO1xuYmxvY2svYmFkYmxvY2tzLmM6Nzk1Olx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTc5Ni1cdGludCBpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTgxNj1zdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXG5ibG9jay9iYWRibG9ja3MuYy04MTcte1xuYmxvY2svYmFkYmxvY2tzLmM6ODE4Olx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTgxOS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz04Mzg9c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtODY2LVx0YmFkLmFjayA9IGFja25vd2xlZGdlZDtcbmJsb2NrL2JhZGJsb2Nrcy5jOjg2NzpcdHAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtODY4LVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTk4Nz1zdGF0aWMgaW50IGZyb250X2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy05OTEtXHRzZWN0b3JfdCBzID0gYmFkLVx1MDAzZXN0YXJ0O1xuYmxvY2svYmFkYmxvY2tzLmM6OTkyOlx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTk5My1cdGludCBjbGVhcmVkID0gMDtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDMwPXN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMDMyLXtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMzM6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtMTAzNC1cdHU2NCBlbmQgPSBCQl9FTkQocFtwcmV2XSk7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTA0OD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODAtXHRiYWQuYWNrID0gdHJ1ZTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwODE6XHRwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODItXG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTE4NT1zdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTE5MS1cdGludCBhY2tlZF9iYWRibG9ja3MgPSAwO1xuYmxvY2svYmFkYmxvY2tzLmM6MTE5MjpcdHU2NCAqcCA9IGJiLVx1MDAzZXBhZ2U7XG5ibG9jay9iYWRibG9ja3MuYy0xMTkzLVx0aW50IGxlbiwgcnY7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTM3ND12b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM3NS17XG5ibG9jay9iYWRibG9ja3MuYzoxMzc2Olx0aWYgKGJiLVx1MDAzZXBhZ2UgPT0gTlVMTCB8fCBiYi1cdTAwM2VjaGFuZ2VkKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM3Ny1cdFx0Lyogbm8gcG9pbnQgZXZlbiB0cnlpbmcgKi9cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzgxLVx0aWYgKGJiLVx1MDAzZWNoYW5nZWQgPT0gMCBcdTAwMjZcdTAwMjYgYmItXHUwMDNldW5hY2tlZF9leGlzdCkge1xuYmxvY2svYmFkYmxvY2tzLmM6MTM4MjpcdFx0dTY0ICpwID0gYmItXHUwMDNlcGFnZTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODMtXHRcdGludCBpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MTM9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MTYtXHRpbnQgaTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0MTc6XHR1NjQgKnAgPSBiYi1cdTAwM2VwYWdlO1xuYmxvY2svYmFkYmxvY2tzLmMtMTQxOC1cdHVuc2lnbmVkIHNlcTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xNDkwPXN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTktXHRpZiAoZGV2KVxuYmxvY2svYmFkYmxvY2tzLmM6MTUwMDpcdFx0YmItXHUwMDNlcGFnZSA9IGRldm1fa3phbGxvYyhkZXYsIFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTAxLVx0ZWxzZVxuYmxvY2svYmFkYmxvY2tzLmM6MTUwMjpcdFx0YmItXHUwMDNlcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MDM6XHRpZiAoIWJiLVx1MDAzZXBhZ2UpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDQtXHRcdGJiLVx1MDAzZXNoaWZ0ID0gLTE7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmM9MTUzOT12b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NDMtXHRpZiAoYmItXHUwMDNlZGV2KVxuYmxvY2svYmFkYmxvY2tzLmM6MTU0NDpcdFx0ZGV2bV9rZnJlZShiYi1cdTAwM2VkZXYsIGJiLVx1MDAzZXBhZ2UpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTU0NS1cdGVsc2VcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1NDY6XHRcdGtmcmVlKGJiLVx1MDAzZXBhZ2UpO1xuYmxvY2svYmFkYmxvY2tzLmM6MTU0NzpcdGJiLVx1MDAzZXBhZ2UgPSBOVUxMO1xuYmxvY2svYmFkYmxvY2tzLmMtMTU0OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTczCgkJCQkJCQlvdXRwdXQ6IDIxNgoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIEhlcmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGJiLSZndDtwYWdlYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHdoZXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBgZGV2bV9remFsbG9jYCwgbWVhbmluZyBpdCYjMzk7cyBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudCwgdGhhdCB0YWtlcyBjYXJlIG9mIGEgaHVnZSBwb3RlbnRpYWwgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgd2UmIzM5O3JlIGV4cGxpY2l0bHkgdHJhY2tpbmcgdGhlIGBiYi0mZ3Q7Y291bnRgIGVudHJpZXMsIGFuZCB3b3JraW5nIHdpdGhpbiB0aGUgYm91bmRzIG9mIGAwYCB0byBgYmItJmd0O2NvdW50IC0gMWAuCgpUaGUgYmlzZWN0IHNlYXJjaCBsb2dpYyB3aXRoaW4gYHByZXZfYmFkYmxvY2tzYCBpcyBub3cgc291bmQuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBmb3IgYGhpYCB0byBiZSBpbml0aWFsaXplZCB0byBgYmItJmd0O2NvdW50YCwgYnV0IHRoYXQmIzM5O3MgYmVlbiBhZGRyZXNzZWQgYnkgaW5pdGlhbGl6aW5nIGBoaWAgdG8gYGJiLSZndDtjb3VudCAtIDFgIG5vdywgd2hpY2ggZW5zdXJlcyB3ZSBzdGF5IHdpdGhpbiB0aGUgdmFsaWQgYm91bmRzLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBjcmVhdGVkLCByZWFkLCBvciBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBhbnl0aGluZyB1bmluaXRpYWxpemVkLiBBbGwgYWNjZXNzZXMgYXJlIGV4cGxpY2l0bHkgd2l0aGluIHRoZSBpbml0aWFsaXplZCByZWdpb24uIEFueSBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbmRleGluZyBlcnJvcnMgdGhhdCAqbWlnaHQqIGV4aXN0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IGNhdWdodCBieSBLQVNBTi4KCkxldCYjMzk7cyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgc3VyZToKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBmaWVsZHMvcGFkZGluZyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQ/IE5vcGUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3BlLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBEZWZpbml0ZWx5IG5vdC4gVGhlIHdob2xlIHBhZ2UgaXMgemVyby1pbml0aWFsaXplZCwgYW5kIHRoZSB1c2VkIHBvcnRpb24gaXMgdHJhY2tlZC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBLQVNBTiBpcyBwZXJmZWN0bHkgc3VmZmljaWVudCBoZXJlIHRvIGNhdGNoIGFueSBwb3NzaWJsZSBpc3N1ZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcy4gVGhpcyBpcyBub3QgdGhlIHNjZW5hcmlvIHdoZXJlIEtNU0FOIHByb3ZpZGVzIHVuaXF1ZSB2YWx1ZS4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgd2hpY2ggZW1waGFzaXplIHRoYXQgS01TQU4gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgKm9ubHkqIGRldGVjdGVkIGJ5IEtNU0FOLCB0aGlzIGlzIGEgY2xlYXIgJiMzNDtubyYjMzQ7LgpGaW5hbCBjaGVjazogcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggYm91bmRhcnkgaW5pdGlhbGl6YXRpb24gaW4gYHByZXZfYmFkYmxvY2tzKClgIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMWAgaW5zdGVhZCBvZiBgaGkgPSBiYi1cdTAwM2Vjb3VudGAsIGFkanVzdHMgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGFjY29yZGluZ2x5LCBhbmQgc2ltcGxpZmllcyB0aGUgcmV0dXJuIHZhbHVlIGFzc2lnbm1lbnQuXG5cblRoZSBiYWRibG9jayBidWZmZXIgKGBiYi1cdTAwM2VwYWdlYCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCAvIGBkZXZtX2t6YWxsb2MoKWAgYW5kIGVudHJpZXMgd2l0aGluIGBbMCwgYmItXHUwMDNlY291bnQgLSAxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJhZCBibG9jayBlbnRyaWVzLiBUaGUgY2hhbmdlcyBtb2RpZnkgaW5kZXggY2FsY3VsYXRpb25zIGFuZCBib3VuZHMgaW4gYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaCByb3V0aW5lLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZCwgbm9yIGlzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgZXhwb3NlZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgaHlwb3RoZXRpY2FsIGluZGV4aW5nIGRlZmVjdCBoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGJ5IEtBU0FOLCBub3QgS01TQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmluYXJ5IHNlYXJjaCBib3VuZGFyeSBpbml0aWFsaXphdGlvbiBpbiBgcHJldl9iYWRibG9ja3MoKWAgd2l0aGluIGBibG9jay9iYWRibG9ja3MuY2AuIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYGhpID0gYmItXHUwMDNlY291bnQgLSAxYCBpbnN0ZWFkIG9mIGBoaSA9IGJiLVx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cblxuVGhlIGJhZGJsb2NrIGJ1ZmZlciAoYGJiLVx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cdTAwM2Vjb3VudCAtIDFdYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmFkIGJsb2NrIGVudHJpZXMuIFRoZSBjaGFuZ2VzIG1vZGlmeSBpbmRleCBjYWxjdWxhdGlvbnMgYW5kIGJvdW5kcyBpbiBhbiBpbnRlcm5hbCBiaW5hcnkgc2VhcmNoIHJvdXRpbmUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciByZWFkLCBub3IgaXMgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBleHBvc2VkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBoeXBvdGhldGljYWwgaW5kZXhpbmcgZGVmZWN0IGhlcmUgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoIGlzIHRyYWNrZWQgYnkgS0FTQU4sIG5vdCBLTVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDA6MjAuMTE3MDc2OTI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5ODU5NTIzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmV2X2JhZGJsb2Nrc1wiLFxuICAgIFwiYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiYmFkYmxvY2tzX2NsZWFyXCIsXG4gICAgXCJiYWRibG9ja3NfY2hlY2tcIixcbiAgICBcImJhZGJsb2Nrc19zdG9yZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggYm91bmRhcnkgaW5pdGlhbGl6YXRpb24gaW4gYHByZXZfYmFkYmxvY2tzKClgIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGBoaSA9IGJiLVxcdTAwM2Vjb3VudCAtIDFgIGluc3RlYWQgb2YgYGhpID0gYmItXFx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cXG5cXG5UaGUgYmFkYmxvY2sgYnVmZmVyIChgYmItXFx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cXHUwMDNlY291bnQgLSAxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJhZCBibG9jayBlbnRyaWVzLiBUaGUgY2hhbmdlcyBtb2RpZnkgaW5kZXggY2FsY3VsYXRpb25zIGFuZCBib3VuZHMgaW4gYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaCByb3V0aW5lLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZCwgbm9yIGlzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgZXhwb3NlZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgaHlwb3RoZXRpY2FsIGluZGV4aW5nIGRlZmVjdCBoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGJ5IEtBU0FOLCBub3QgS01TQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cXHUwMDNlY291bnQgLSAxIGluc3RlYWQgb2YgYmItXFx1MDAzZWNvdW50KSwgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGNvbmRpdGlvbiwgYW5kIHRoZSBmYWxsYmFjayByZXR1cm4gYXNzaWdubWVudCAocmV0ID0gbG8gdW5jb25kaXRpb25hbGx5KS4gQmFkIGJsb2NrcyBoYW5kbGluZyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZXhlcmNpc2FibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIGJsb2NrIGRyaXZlcnMgc3VjaCBhcyBNRC9SQUlEIChkcml2ZXJzL21kKSBhbmQgbnVsbF9ibGsgKGRyaXZlcnMvYmxvY2svbnVsbF9ibGspLCBhcyB3ZWxsIGFzIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlcyAoYmFkYmxvY2tzX3N0b3JlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG1vZGlmaWVkIHNlYXJjaCBib3VuZGFyaWVzIGFuZCBpbmRleCBoYW5kbGluZyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG9mZi1ieS1vbmUgZXJyb3JzIG9uIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQwOjIwLjExNzA4MTc2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2OTA4MDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5NjJkMDIxNjY1Y2FjMWRjZDJkNGE0Mjg3MTRkNDhkMjE4NGEyZDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTg6NDA6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuY1xcbmluZGV4IGVjZTY0ZTc2ZmU4ZmYuLjE0M2I0ODhiN2ZlNjggMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xcbkBAIC00OTYsMTQgKzQ5NiwxNCBAQCBzdGF0aWMgaW50IHByZXZfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCxcXG4gXFx0fVxcbiBcXG4gXFx0bG8gPSAwO1xcbi1cXHRoaSA9IGJiLVxcdTAwM2Vjb3VudDtcXG4rXFx0aGkgPSBiYi1cXHUwMDNlY291bnQgLSAxO1xcbiBcXHRwID0gYmItXFx1MDAzZXBhZ2U7XFxuIFxcbiBcXHQvKiBUaGUgZm9sbG93aW5nIGJpc2VjdCBzZWFyY2ggbWlnaHQgYmUgdW5uZWNlc3NhcnkgKi9cXG4gXFx0aWYgKEJCX09GRlNFVChwW2xvXSkgXFx1MDAzZSBzKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuLVxcdGlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSBcXHUwMDNjPSBzKVxcbi1cXHRcXHRyZXR1cm4gaGkgLSAxO1xcbitcXHRpZiAoQkJfT0ZGU0VUKHBbaGldKSBcXHUwMDNjPSBzKVxcbitcXHRcXHRyZXR1cm4gaGk7XFxuIFxcbiBcXHQvKiBEbyBiaXNlY3Qgc2VhcmNoIGluIGJhZCB0YWJsZSAqL1xcbiBcXHR3aGlsZSAoaGkgLSBsbyBcXHUwMDNlIDEpIHtcXG5AQCAtNTIxLDggKzUyMSw3IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbiBcXHRcXHRcXHRoaSA9IG1pZDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKEJCX09GRlNFVChwW2xvXSkgXFx1MDAzYz0gcylcXG4tXFx0XFx0cmV0ID0gbG87XFxuK1xcdHJldCA9IGxvO1xcbiBvdXQ6XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDA6MjEuNDg2NzcxNDE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDU0MzM4OTM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiQkxLX0RFVl9NRFwiLFxuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXZfYmFkYmxvY2tzXCIsXG4gICAgXCJiYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJiYWRibG9ja3NfY2xlYXJcIixcbiAgICBcImJhZGJsb2Nrc19jaGVja1wiLFxuICAgIFwiYmFkYmxvY2tzX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cXHUwMDNlY291bnQgLSAxIGluc3RlYWQgb2YgYmItXFx1MDAzZWNvdW50KSwgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGNvbmRpdGlvbiwgYW5kIHRoZSBmYWxsYmFjayByZXR1cm4gYXNzaWdubWVudCAocmV0ID0gbG8gdW5jb25kaXRpb25hbGx5KS4gQmFkIGJsb2NrcyBoYW5kbGluZyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZXhlcmNpc2FibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIGJsb2NrIGRyaXZlcnMgc3VjaCBhcyBNRC9SQUlEIChkcml2ZXJzL21kKSBhbmQgbnVsbF9ibGsgKGRyaXZlcnMvYmxvY2svbnVsbF9ibGspLCBhcyB3ZWxsIGFzIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlcyAoYmFkYmxvY2tzX3N0b3JlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG1vZGlmaWVkIHNlYXJjaCBib3VuZGFyaWVzIGFuZCBpbmRleCBoYW5kbGluZyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG9mZi1ieS1vbmUgZXJyb3JzIG9uIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTk2MmQwMjE2NjVjYWMxZGNkMmQ0YTQyODcxNGQ0OGQyMTg0YTJkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE4OjQwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuY1xuaW5kZXggZWNlNjRlNzZmZThmZi4uMTQzYjQ4OGI3ZmU2OCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JhZGJsb2Nrcy5jXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xuQEAgLTQ5NiwxNCArNDk2LDE0IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuIFx0fVxuIFxuIFx0bG8gPSAwO1xuLVx0aGkgPSBiYi1cdTAwM2Vjb3VudDtcbitcdGhpID0gYmItXHUwMDNlY291bnQgLSAxO1xuIFx0cCA9IGJiLVx1MDAzZXBhZ2U7XG4gXG4gXHQvKiBUaGUgZm9sbG93aW5nIGJpc2VjdCBzZWFyY2ggbWlnaHQgYmUgdW5uZWNlc3NhcnkgKi9cbiBcdGlmIChCQl9PRkZTRVQocFtsb10pIFx1MDAzZSBzKVxuIFx0XHRyZXR1cm4gLTE7XG4tXHRpZiAoQkJfT0ZGU0VUKHBbaGkgLSAxXSkgXHUwMDNjPSBzKVxuLVx0XHRyZXR1cm4gaGkgLSAxO1xuK1x0aWYgKEJCX09GRlNFVChwW2hpXSkgXHUwMDNjPSBzKVxuK1x0XHRyZXR1cm4gaGk7XG4gXG4gXHQvKiBEbyBiaXNlY3Qgc2VhcmNoIGluIGJhZCB0YWJsZSAqL1xuIFx0d2hpbGUgKGhpIC0gbG8gXHUwMDNlIDEpIHtcbkBAIC01MjEsOCArNTIxLDcgQEAgc3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXG4gXHRcdFx0aGkgPSBtaWQ7XG4gXHR9XG4gXG4tXHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcdTAwM2M9IHMpXG4tXHRcdHJldCA9IGxvO1xuK1x0cmV0ID0gbG87XG4gb3V0OlxuIFx0cmV0dXJuIHJldDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDoyMS40ODY3NzI3MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTMwNjA1NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJhZCBCbG9ja3MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmFkYmxvY2tzLmNgLiAgSSBzZWUgYSBgZGlmZmAgc2hvd2luZyBjaGFuZ2VzLCB3aGljaCBtZWFucyBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHdoYXQncyBiZWVuIG1vZGlmaWVkLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgdGhlIHByZXZpb3VzIGJhZCBibG9jayB0byBhIGdpdmVuIG9mZnNldC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBibG9jay9iYWRibG9ja3MuY2AgZmlsZSB1c2luZyBlaXRoZXIgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIGNvbW1hbmQsIG9yLCBldmVuIGJldHRlciwgYSBgZ3JlcHBlcmAgY2FsbCB0byBmaW5kIHRoZSByZWxldmFudCBjb250ZXh0IHN1cnJvdW5kaW5nIHRoaXMgY2hhbmdlLiBJIHdhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbG9naWMgaGVyZS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgYmluYXJ5IHNlYXJjaCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYHByZXZfYmFkYmxvY2tzYC4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgYGhpYCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGJiLVx1MDAzZWNvdW50YC4gVGhlIGluZGV4IGBoaWAgaXMgdXNlZCB0byBpbmRleCBpbnRvIHRoZSBhcnJheSBgcGAuIFRoZSBmaXJzdCBjaGFuZ2UgSSBzZWUgaXMgY2hhbmdpbmcgYGhpYCB0byBiZSBgYmItXHUwMDNlY291bnQgLTFgLiBUaGUgY29tbWVudCBcIlRoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeVwiIGdpdmVzIG1lIGEgc3Ryb25nIGhpbnQgdGhpcyBpbml0aWFsaXphdGlvbiBjaGFuZ2UgaXMgdmVyeSBsaWtlbHkgcmVsYXRlZC5cblxuQWxzbyBJJ20gbm90aWNpbmcgYSBwb3RlbnRpYWwgYnVnIGZpeC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIHR3byBlZGdlLWNhc2UgY2hlY2tzOiBgaWYgKEJCX09GRlNFVChwW2xvXSkgXHUwMDNlIHMpYCBhbmQgYGlmIChCQl9PRkZTRVQocFtoaSAtIDFdKSBcdTAwM2M9IHMpYC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGhhcyBjaGFuZ2VkIHRoZSBzZWNvbmQgY2hlY2sgZnJvbSBgaGkgLSAxYCB0byBgaGlgLiBUaGlzIGlzIGltbWVkaWF0ZWx5IHN1c3BpY2lvdXMuIFRoZSBzZWNvbmQgY2hhbmdlIGhhcyBhZmZlY3RlZCB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGxpa2VseSBmaXhlcyBhbiBvZmYtYnktb25lIGVycm9yIG9yIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5GdXJ0aGVyIGRvd24sIHRoZSByZXR1cm4gdmFsdWUgYHJldGAgc2VlbXMgdG8gaGF2ZSBhbHNvIGJlZW4gc2ltcGxpZmllZDogbm8gbG9uZ2VyIHBlcmZvcm1pbmcgYW4gYWRkaXRpb25hbCBjaGVjay4gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlc2UgY2hhbmdlcyB0byBlbnN1cmUgdGhleSBhcmUgY29ycmVjdCBhbmQgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgY2hhbmdlIGNvdWxkIHBvdGVudGlhbGx5IGJyZWFrIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIHN0aWxsIGhhbmRsZXMgZWRnZSBjYXNlcyBjb3JyZWN0bHkgYW5kIHJldHVybnMgdGhlIGNvcnJlY3QgaW5kZXggb3IgYW4gZXJyb3IgaW5kaWNhdGlvbi4gVWx0aW1hdGVseSwgbXkgYW5hbHlzaXMgd2lsbCByZXZvbHZlIGFyb3VuZCBlbnN1cmluZyB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGltcHJvdmVzIGNvcnJlY3RuZXNzIGFuZCBlZmZpY2llbmN5LCB3aXRob3V0IGNyZWF0aW5nIG5ldyBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQwOjI3LjAxNzM4NTU3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9iYWRibG9ja3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFx0fVxcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0NzM6XFx0fVxcbiA0NzQ6XFx0XFxuIDQ3NTpcXHQvKlxcbiA0NzY6XFx0ICogRmluZCB0aGUgcmFuZ2Ugc3RhcnRzIGF0LW9yLWJlZm9yZSBiYWQtXFx1MDAzZXN0YXJ0LiBJZiAnaGludCcgaXMgcHJvdmlkZWRcXG4gNDc3OlxcdCAqIChoaW50IFxcdTAwM2U9IDApIHRoZW4gc2VhcmNoIGluIHRoZSBiYWQgdGFibGUgZnJvbSBoaW50IGZpcnN0bHkuIEl0IGlzXFxuIDQ3ODpcXHQgKiB2ZXJ5IHByb2JhYmx5IHRoZSB3YW50ZWQgYmFkIHJhbmdlIGNhbiBiZSBmb3VuZCBmcm9tIHRoZSBoaW50IGluZGV4LFxcbiA0Nzk6XFx0ICogdGhlbiB0aGUgdW5uZWNlc3Nhcnkgd2hpbGUtbG9vcCBpdGVyYXRpb24gY2FuIGJlIGF2b2lkZWQuXFxuIDQ4MDpcXHQgKi9cXG4gNDgxOlxcdHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbiA0ODI6XFx0XFx0XFx0XFx0ICBpbnQgaGludClcXG4gNDgzOlxcdHtcXG4gNDg0OlxcdFxcdHNlY3Rvcl90IHMgPSBiYWQtXFx1MDAzZXN0YXJ0O1xcbiA0ODU6XFx0XFx0aW50IHJldCA9IC0xO1xcbiA0ODY6XFx0XFx0aW50IGxvLCBoaTtcXG4gNDg3OlxcdFxcdHU2NCAqcDtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0aWYgKCFiYi1cXHUwMDNlY291bnQpXFxuIDQ5MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0aWYgKGhpbnQgXFx1MDAzZT0gMCkge1xcbiA0OTM6XFx0XFx0XFx0cmV0ID0gcHJldl9ieV9oaW50KGJiLCBzLCBoaW50KTtcXG4gNDk0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4gNDk1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0OTY6XFx0XFx0fVxcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRsbyA9IDA7XFxuIDQ5OTpcXHRcXHRoaSA9IGJiLVxcdTAwM2Vjb3VudCAtIDE7XFxuIDUwMDpcXHRcXHRwID0gYmItXFx1MDAzZXBhZ2U7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdC8qIFRoZSBmb2xsb3dpbmcgYmlzZWN0IHNlYXJjaCBtaWdodCBiZSB1bm5lY2Vzc2FyeSAqL1xcbiA1MDM6XFx0XFx0aWYgKEJCX09GRlNFVChwW2xvXSkgXFx1MDAzZSBzKVxcbiA1MDQ6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA1MDU6XFx0XFx0aWYgKEJCX09GRlNFVChwW2hpXSkgXFx1MDAzYz0gcylcXG4gNTA2OlxcdFxcdFxcdHJldHVybiBoaTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LyogRG8gYmlzZWN0IHNlYXJjaCBpbiBiYWQgdGFibGUgKi9cXG4gNTA5OlxcdFxcdHdoaWxlIChoaSAtIGxvIFxcdTAwM2UgMSkge1xcbiA1MTA6XFx0XFx0XFx0aW50IG1pZCA9IChsbyArIGhpKS8yO1xcbiA1MTE6XFx0XFx0XFx0c2VjdG9yX3QgYSA9IEJCX09GRlNFVChwW21pZF0pO1xcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHRcXHRpZiAoYSA9PSBzKSB7XFxuIDUxNDpcXHRcXHRcXHRcXHRyZXQgPSBtaWQ7XFxuIDUxNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTE2OlxcdFxcdFxcdH1cXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0XFx0aWYgKGEgXFx1MDAzYyBzKVxcbiA1MTk6XFx0XFx0XFx0XFx0bG8gPSBtaWQ7XFxuIDUyMDpcXHRcXHRcXHRlbHNlXFxuIDUyMTpcXHRcXHRcXHRcXHRoaSA9IG1pZDtcXG4gNTIyOlxcdFxcdH1cXG4gNTIzOlxcdFxcbiA1MjQ6XFx0XFx0cmV0ID0gbG87XFxuIDUyNTpcXHRvdXQ6XFxuIDUyNjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1Mjc6XFx0fVxcbiA1Mjg6XFx0XFxuIDUyOTpcXHQvKlxcbiA1MzA6XFx0ICogUmV0dXJuICd0cnVlJyBpZiB0aGUgcmFuZ2UgaW5kaWNhdGVkIGJ5ICdiYWQnIGNhbiBiZSBmb3J3YXJkXFxuIDUzMTpcXHQgKiBtZXJnZWQgd2l0aCB0aGUgYmFkIHJhbmdlIChmcm9tIHRoZSBiYWQgdGFibGUpIGluZGV4ZWQgYnkgJ3ByZXYnLlxcbiA1MzI6XFx0ICovXFxuIDUzMzpcXHRzdGF0aWMgYm9vbCBjYW5fbWVyZ2VfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbiA1MzQ6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDoyNy4wMTc1NDc5MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODE1MDYzNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgYGJhZGJsb2Nrcy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgYmFkYmxvY2tzLmNgIGlzIGFjdHVhbGx5IGJ1aWx0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgcGF0aCB0aHJvdWdoIHRoZSBidWlsZCBzeXN0ZW0uIFdoZXJlIGlzIHRoaXMgdGhpbmcgZGVmaW5lZD8gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBhbmQgdHJ5IHRvIGxvY2F0ZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGl0J3Mgd2l0aGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyBhcmUgY29udHJvbGxlZC4gSG9wZWZ1bGx5LCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1aWxkIHJ1bGUgYW5kIEkgd29uJ3QgaGF2ZSB0byBjaGFzZSBkb3duIHRvbyBtYW55IGluY2x1ZGUgZGlyZWN0aXZlcy4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDoyOC44MzI2MTY5MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNjc1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTg9b2JqLXlcXHRcXHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxcXFxuLS1cXG5ibG9jay9NYWtlZmlsZS0xMi1cXHRcXHRcXHRibGstbXEtc3lzZnMubyBibGstbXEtY3B1bWFwLm8gYmxrLW1xLXNjaGVkLm8gaW9jdGwubyBcXFxcXFxuYmxvY2svTWFrZWZpbGU6MTM6XFx0XFx0XFx0Z2VuaGQubyBpb3ByaW8ubyBiYWRibG9ja3MubyBwYXJ0aXRpb25zLyBibGstcnEtcW9zLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTE0LVxcdFxcdFxcdGRpc2stZXZlbnRzLm8gYmxrLWlhLXJhbmdlcy5vIGVhcmx5LWxvb2t1cC5vXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy00LSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6NTogKiAtIEhlYXZpbHkgYmFzZWQgb24gTUQgYmFkYmxvY2tzIGNvZGUgZnJvbSBOZWlsIEJyb3duXFxuYmxvY2svYmFkYmxvY2tzLmMtNi0gKlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtOS1cXG5ibG9jay9iYWRibG9ja3MuYzoxMDojaW5jbHVkZSBcXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcXHUwMDNlXFxuYmxvY2svYmFkYmxvY2tzLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcWxvY2suaFxcdTAwM2VcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE5LS8qXFxuYmxvY2svYmFkYmxvY2tzLmM6MjA6ICogVGhlIHB1cnBvc2Ugb2YgYmFkYmxvY2tzIHNldC9jbGVhciBpcyB0byBtYW5hZ2UgYmFkIGJsb2NrcyByYW5nZXMgd2hpY2ggYXJlXFxuYmxvY2svYmFkYmxvY2tzLmMtMjEtICogaWRlbnRpZmllZCBieSBMQkEgYWRkcmVzc2VzLlxcbmJsb2NrL2JhZGJsb2Nrcy5jLTIyLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MjM6ICogV2hlbiB0aGUgY2FsbGVyIG9mIGJhZGJsb2Nrc19zZXQoKSB3YW50cyB0byBzZXQgYSByYW5nZSBvZiBiYWQgYmxvY2tzLCB0aGVcXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMjgyLSAqICAgICBibG9ja3MgdGFibGUgYXJlIGFsbCBhY2tlZCwgbWVyZ2luZyB0aGVtIGludG8gYSBsYXJnZXIgb25lIHJhbmdlIG1heVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjI4MzogKiAgICAgb2NjdXB5IGxlc3MgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZSBhbmQgbWFrZSBiYWRibG9ja3NfY2hlY2soKSBmYXN0ZXIuXFxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIwLSAqIHRoZSBiYWQgYmxvY2sgcmFuZ2Ugc2V0dGluZyBjb25kaXRpb25zLiBNYXliZSB0aGVyZSBpcyBzb21lIHJhcmUgY29ybmVyIGNhc2VcXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJ3QgaHVydCBpZiBiYWRibG9ja3Nfc2V0KCkgZmFpbHMgZHVlXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIzLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MzI0OiAqIEluc2lkZSBiYWRibG9ja3Nfc2V0KCkgZWFjaCBsb29wIHN0YXJ0cyBieSBqdW1waW5nIHRvIHJlX2luc2VydCBsYWJlbCwgZXZlcnlcXG5ibG9jay9iYWRibG9ja3MuYzozMjU6ICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2VcXG5ibG9jay9iYWRibG9ja3MuYy0zMjYtICogd2hpY2ggc3RhcnRzIGJlZm9yZSBvciBhdCBjdXJyZW50IHNldHRpbmcgcmFuZ2UuIFNpbmNlIHRoZSBzZXR0aW5nIGJhZCBibG9ja3NcXG5ibG9jay9iYWRibG9ja3MuYy0zMjctICogcmFuZ2UgaXMgaGFuZGxlZCBmcm9tIGhlYWQgdG8gdGFpbCwgbW9zdCBvZiB0aGUgY2FzZXMgaXQgaXMgdW5uZWNlc3NhcnkgdG8gZG9cXG5ibG9jay9iYWRibG9ja3MuYzozMjg6ICogdGhlIGJpbmFyeSBzZWFyY2ggaW5zaWRlIHByZXZfYmFkYmxvY2tzKCksIGl0IGlzIHBvc3NpYmxlIHRvIHByb3ZpZGUgYSBoaW50XFxuYmxvY2svYmFkYmxvY2tzLmM6MzI5OiAqIHRvIHByZXZfYmFkYmxvY2tzKCkgZm9yIGEgZmFzdCBwYXRoLCB0aGVuIHRoZSBleHBlbnNpdmUgYmluYXJ5IHNlYXJjaCBjYW4gYmVcXG5ibG9jay9iYWRibG9ja3MuYzozMzA6ICogYXZvaWRlZC4gSW4gbXkgdGVzdCB3aXRoIHRoZSBoaW50IHRvIHByZXZfYmFkYmxvY2tzKCksIGV4Y2VwdCBmb3IgdGhlIGZpcnN0XFxuYmxvY2svYmFkYmxvY2tzLmM6MzMxOiAqIGxvb3AsIGFsbCByZXN0ZWQgY2FsbHMgdG8gcHJldl9iYWRibG9ja3MoKSBjYW4gZ28gaW50byB0aGUgZmFzdCBwYXRoIGFuZFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTMzMi0gKiByZXR1cm4gY29ycmVjdCBiYWQgYmxvY2tzIHRhYmxlIGluZGV4IGltbWVkaWF0ZWx5Llxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNDU2LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjQ1NzpzdGF0aWMgaW50IHByZXZfYnlfaGludChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IGhpbnQpXFxuYmxvY2svYmFkYmxvY2tzLmMtNDU4LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ4MC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo0ODE6c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXFxuYmxvY2svYmFkYmxvY2tzLmMtNDgyLVxcdFxcdFxcdCAgaW50IGhpbnQpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy01MzItICovXFxuYmxvY2svYmFkYmxvY2tzLmM6NTMzOnN0YXRpYyBib29sIGNhbl9tZXJnZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuYmxvY2svYmFkYmxvY2tzLmM6NTM0OlxcdFxcdFxcdCAgICBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcXG5ibG9jay9iYWRibG9ja3MuYy01MzUte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNTUwLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjU1MTpzdGF0aWMgaW50IGZyb250X21lcmdlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtNTUyLXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTU4Ni0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo1ODc6c3RhdGljIGJvb2wgY2FuX2NvbWJpbmVfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjU4ODpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcXG5ibG9jay9iYWRibG9ja3MuYy01ODkte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjA3LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjYwODpzdGF0aWMgdm9pZCBmcm9udF9jb21iaW5lKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldilcXG5ibG9jay9iYWRibG9ja3MuYy02MDkte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjI0LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjYyNTpzdGF0aWMgYm9vbCBvdmVybGFwX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZnJvbnQsXFxuYmxvY2svYmFkYmxvY2tzLmM6NjI2OlxcdFxcdFxcdCAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtNjI3LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTYzOS0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo2NDA6c3RhdGljIGJvb2wgb3ZlcmxhcF9iZWhpbmQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTY0MS1cXHRcXHRcXHQgICBpbnQgYmVoaW5kKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjcxLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjY3MjpzdGF0aWMgYm9vbCBjYW5fZnJvbnRfb3ZlcndyaXRlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcXG5ibG9jay9iYWRibG9ja3MuYzo2NzM6XFx0XFx0XFx0XFx0c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsIGludCAqZXh0cmEpXFxuYmxvY2svYmFkYmxvY2tzLmMtNjc0LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo3MTU6c3RhdGljIGludCBmcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjcxNjpcXHRcXHRcXHQgICBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCwgaW50IGV4dHJhKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTcxNy17XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03NzYtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6Nzc3OnN0YXRpYyBpbnQgaW5zZXJ0X2F0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgYXQsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTc3OC17XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03ODEtXFxuYmxvY2svYmFkYmxvY2tzLmM6NzgyOlxcdFdBUk5fT04oYmFkYmxvY2tzX2Z1bGwoYmIpKTtcXG5ibG9jay9iYWRibG9ja3MuYy03ODMtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03OTEtXFxuYmxvY2svYmFkYmxvY2tzLmM6NzkyOnN0YXRpYyB2b2lkIGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoc3RydWN0IGJhZGJsb2NrcyAqYmIpXFxuYmxvY2svYmFkYmxvY2tzLmMtNzkzLXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTgxNS0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzo4MTY6c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTgxNy17XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04MzctLyogRG8gZXhhY3Qgd29yayB0byBzZXQgYmFkIGJsb2NrIHJhbmdlIGludG8gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjgzODpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy04MzktXFx0XFx0XFx0ICAgaW50IGFja25vd2xlZGdlZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg0MS1cXHRpbnQgbGVuID0gMCwgYWRkZWQgPSAwO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjg0MjpcXHRzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgYmFkO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTg0My1cXHRpbnQgcHJldiA9IC0xLCBoaW50ID0gLTE7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04NDctXFx0aWYgKGJiLVxcdTAwM2VzaGlmdCBcXHUwMDNjIDApXFxuYmxvY2svYmFkYmxvY2tzLmM6ODQ4OlxcdFxcdC8qIGJhZGJsb2NrcyBhcmUgZGlzYWJsZWQgKi9cXG5ibG9jay9iYWRibG9ja3MuYy04NDktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtODczLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjg3NDpcXHRpZiAoYmFkYmxvY2tzX2Z1bGwoYmIpKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg3NS1cXHRcXHRnb3RvIG91dDtcXG5ibG9jay9iYWRibG9ja3MuYy04NzYtXFxuYmxvY2svYmFkYmxvY2tzLmM6ODc3OlxcdGlmIChiYWRibG9ja3NfZW1wdHkoYmIpKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtODc4LVxcdFxcdGxlbiA9IGluc2VydF9hdChiYiwgMCwgXFx1MDAyNmJhZCk7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04ODMtXFxuYmxvY2svYmFkYmxvY2tzLmM6ODg0OlxcdHByZXYgPSBwcmV2X2JhZGJsb2NrcyhiYiwgXFx1MDAyNmJhZCwgaGludCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtODg1LVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjg4NjpcXHQvKiBzdGFydCBiZWZvcmUgYWxsIGJhZGJsb2NrcyAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTg4Ny1cXHRpZiAocHJldiBcXHUwMDNjIDApIHtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTk3MS1cXHRcXHRlbHNlXFxuYmxvY2svYmFkYmxvY2tzLmM6OTcyOlxcdFxcdFxcdGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoYmIpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTk3My1cXHR9XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy05ODYtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6OTg3OnN0YXRpYyBpbnQgZnJvbnRfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjk4ODpcXHRcXHQgICAgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsIGludCAqZGVsZXRlZClcXG5ibG9jay9iYWRibG9ja3MuYy05ODkte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTAyOS0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMDMwOnN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcXG5ibG9jay9iYWRibG9ja3MuYzoxMDMxOlxcdFxcdFxcdFxcdCAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTAzMi17XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMDQ3LS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNsZWFyIGJhZCBibG9jayByYW5nZSBmcm9tIHRoZSBiYWQgYmxvY2sgdGFibGUgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMDQ4OnN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA0OS17XFxuYmxvY2svYmFkYmxvY2tzLmM6MTA1MDpcXHRzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgYmFkO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwNTEtXFx0aW50IHByZXYgPSAtMSwgaGludCA9IC0xO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA1NS1cXHRpZiAoYmItXFx1MDAzZXNoaWZ0IFxcdTAwM2MgMClcXG5ibG9jay9iYWRibG9ja3MuYzoxMDU2OlxcdFxcdC8qIGJhZGJsb2NrcyBhcmUgZGlzYWJsZWQgKi9cXG5ibG9jay9iYWRibG9ja3MuYy0xMDU3LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODYtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA4NzpcXHRpZiAoYmFkYmxvY2tzX2VtcHR5KGJiKSkge1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwODgtXFx0XFx0bGVuID0gc2VjdG9ycztcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwOTMtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA5NDpcXHRwcmV2ID0gcHJldl9iYWRibG9ja3MoYmIsIFxcdTAwMjZiYWQsIGhpbnQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwOTUtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA5NjpcXHQvKiBTdGFydCBiZWZvcmUgYWxsIGJhZGJsb2NrcyAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwOTctXFx0aWYgKHByZXYgXFx1MDAzYyAwKSB7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMTExLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjExMTI6XFx0LyogU3RhcnQgYWZ0ZXIgYWxsIGJhZGJsb2NrcyAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMTMtXFx0aWYgKChwcmV2ICsgMSkgXFx1MDAzZT0gYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2ICFvdmVybGFwX2Zyb250KGJiLCBwcmV2LCBcXHUwMDI2YmFkKSkge1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTExOS1cXHQvKiBDbGVhciB3aWxsIHNwbGl0IGEgYmFkIHJlY29yZCBidXQgdGhlIHRhYmxlIGlzIGZ1bGwgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMTIwOlxcdGlmIChiYWRibG9ja3NfZnVsbChiYikgXFx1MDAyNlxcdTAwMjYgKEJCX09GRlNFVChwW3ByZXZdKSBcXHUwMDNjIGJhZC5zdGFydCkgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9iYWRibG9ja3MuYy0xMTIxLVxcdCAgICAoQkJfRU5EKHBbcHJldl0pIFxcdTAwM2UgKGJhZC5zdGFydCArIHNlY3RvcnMpKSkge1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE1OC1cXG5ibG9jay9iYWRibG9ja3MuYzoxMTU5OlxcdC8qIE5vdCBjb3ZlciBhbnkgYmFkYmxvY2tzIHJhbmdlIGluIHRoZSB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNjAtXFx0bGVuID0gc2VjdG9ycztcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNzEtXFx0aWYgKGNsZWFyZWQpIHtcXG5ibG9jay9iYWRibG9ja3MuYzoxMTcyOlxcdFxcdGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoYmIpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExNzMtXFx0XFx0c2V0X2NoYW5nZWQoYmIpO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE4NC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjaGVjayBiYWQgYmxvY2tzIHJhbmdlIGZyb20gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExODU6c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExODYtXFx0XFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExODgtXFx0aW50IHByZXYgPSAtMSwgaGludCA9IC0xLCBzZXQgPSAwO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExODk6XFx0c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0IGJhZDtcXG5ibG9jay9iYWRibG9ja3MuYzoxMTkwOlxcdGludCB1bmFja2VkX2JhZGJsb2NrcyA9IDA7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTE5MTpcXHRpbnQgYWNrZWRfYmFkYmxvY2tzID0gMDtcXG5ibG9jay9iYWRibG9ja3MuYy0xMTkyLVxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE5OC1cXG5ibG9jay9iYWRibG9ja3MuYzoxMTk5OlxcdGlmIChiYWRibG9ja3NfZW1wdHkoYmIpKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMC1cXHRcXHRsZW4gPSBzZWN0b3JzO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMy1cXG5ibG9jay9iYWRibG9ja3MuYzoxMjA0OlxcdHByZXYgPSBwcmV2X2JhZGJsb2NrcyhiYiwgXFx1MDAyNmJhZCwgaGludCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTIwNS1cXG5ibG9jay9iYWRibG9ja3MuYzoxMjA2OlxcdC8qIHN0YXJ0IGFmdGVyIGFsbCBiYWRibG9ja3MgKi9cXG5ibG9jay9iYWRibG9ja3MuYy0xMjA3LVxcdGlmICgocHJldiBcXHUwMDNlPSAwKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIxMi1cXG5ibG9jay9iYWRibG9ja3MuYzoxMjEzOlxcdC8qIE92ZXJsYXBwZWQgd2l0aCBmcm9udCBiYWRibG9ja3MgcmVjb3JkICovXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIxNC1cXHRpZiAoKHByZXYgXFx1MDAzZT0gMCkgXFx1MDAyNlxcdTAwMjYgb3ZlcmxhcF9mcm9udChiYiwgcHJldiwgXFx1MDAyNmJhZCkpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMjE1LVxcdFxcdGlmIChCQl9BQ0socFtwcmV2XSkpXFxuYmxvY2svYmFkYmxvY2tzLmM6MTIxNjpcXHRcXHRcXHRhY2tlZF9iYWRibG9ja3MrKztcXG5ibG9jay9iYWRibG9ja3MuYy0xMjE3LVxcdFxcdGVsc2VcXG5ibG9jay9iYWRibG9ja3MuYzoxMjE4OlxcdFxcdFxcdHVuYWNrZWRfYmFkYmxvY2tzKys7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTIxOS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMzktXFxuYmxvY2svYmFkYmxvY2tzLmM6MTI0MDpcXHQvKiBub3QgY292ZXIgYW55IGJhZGJsb2NrcyByYW5nZSBpbiB0aGUgdGFibGUgKi9cXG5ibG9jay9iYWRibG9ja3MuYy0xMjQxLVxcdGxlbiA9IHNlY3RvcnM7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMjUyLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNTM6XFx0aWYgKHVuYWNrZWRfYmFkYmxvY2tzIFxcdTAwM2UgMClcXG5ibG9jay9iYWRibG9ja3MuYy0xMjU0LVxcdFxcdHJ2ID0gLTE7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTI1NTpcXHRlbHNlIGlmIChhY2tlZF9iYWRibG9ja3MgXFx1MDAzZSAwKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNTYtXFx0XFx0cnYgPSAxO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI2My0vKipcXG5ibG9jay9iYWRibG9ja3MuYzoxMjY0OiAqIGJhZGJsb2Nrc19jaGVjaygpIC0gY2hlY2sgYSBnaXZlbiByYW5nZSBmb3IgYmFkIHNlY3RvcnNcXG5ibG9jay9iYWRibG9ja3MuYzoxMjY1OiAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjY6ICogQHM6XFx0XFx0c2VjdG9yIChzdGFydCkgYXQgd2hpY2ggdG8gY2hlY2sgZm9yIGJhZGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjc6ICogQHNlY3RvcnM6XFx0bnVtYmVyIG9mIHNlY3RvcnMgdG8gY2hlY2sgZm9yIGJhZGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNjgtICogQGZpcnN0X2JhZDpcXHRwb2ludGVyIHRvIHN0b3JlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBiYWRibG9ja1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyNjk6ICogQGJhZF9zZWN0b3JzOiBwb2ludGVyIHRvIHN0b3JlIG51bWJlciBvZiBiYWRibG9ja3MgYWZ0ZXIgQGZpcnN0X2JhZFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzAtICpcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzktICpcXG5ibG9jay9iYWRibG9ja3MuYzoxMjgwOiAqIExvY2tpbmcgb2YgdGhlIGJhZC1ibG9jayB0YWJsZSB1c2VzIGEgc2VxbG9jayBzbyBiYWRibG9ja3NfY2hlY2tcXG5ibG9jay9iYWRibG9ja3MuYy0xMjgxLSAqIG1pZ2h0IG5lZWQgdG8gcmV0cnkgaWYgaXQgaXMgdmVyeSB1bmx1Y2t5Llxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5Ni0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMjk3OmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5OC1cXHRcXHRcXHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzE1LVxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzE2OlxcdHJ2ID0gX2JhZGJsb2Nrc19jaGVjayhiYiwgcywgc2VjdG9ycywgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTMxNy1cXHRpZiAocmVhZF9zZXFyZXRyeShcXHUwMDI2YmItXFx1MDAzZWxvY2ssIHNlcSkpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzIxLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxMzIyOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyMy1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzI0LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMjU6ICogYmFkYmxvY2tzX3NldCgpIC0gQWRkIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXFxuYmxvY2svYmFkYmxvY2tzLmM6MTMyNjogKiBAYmI6XFx0XFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cXG5ibG9jay9iYWRibG9ja3MuYy0xMzI3LSAqIEBzOlxcdFxcdGZpcnN0IHNlY3RvciB0byBtYXJrIGFzIGJhZFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMzNi0gKiAgdHJ1ZTogc3VjY2Vzc1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMzc6ICogIGZhbHNlOiBmYWlsZWQgdG8gc2V0IGJhZGJsb2NrcyAob3V0IG9mIHNwYWNlKS4gUGFyaXRhbCBzZXR0aW5nIHdpbGwgYmVcXG5ibG9jay9iYWRibG9ja3MuYy0xMzM4LSAqICB0cmVhdGVkIGFzIGZhaWx1cmUuXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMzOS0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMzQwOmJvb2wgYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy0xMzQxLVxcdFxcdCAgIGludCBhY2tub3dsZWRnZWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0Mi17XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM0MzpcXHRyZXR1cm4gX2JhZGJsb2Nrc19zZXQoYmIsIHMsIHNlY3RvcnMsIGFja25vd2xlZGdlZCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0NC19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM0NTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ2LVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDctLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM0ODogKiBiYWRibG9ja3NfY2xlYXIoKSAtIFJlbW92ZSBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDk6ICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM1MC0gKiBAczpcXHRcXHRmaXJzdCBzZWN0b3IgdG8gbWFyayBhcyBiYWRcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNTgtICogIHRydWU6IHN1Y2Nlc3NcXG5ibG9jay9iYWRibG9ja3MuYzoxMzU5OiAqICBmYWxzZTogZmFpbGVkIHRvIGNsZWFyIGJhZGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjAtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM2MTpib29sIGJhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcXG5ibG9jay9iYWRibG9ja3MuYy0xMzYyLXtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzYzOlxcdHJldHVybiBfYmFkYmxvY2tzX2NsZWFyKGJiLCBzLCBzZWN0b3JzKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzY0LX1cXG5ibG9jay9iYWRibG9ja3MuYzoxMzY1OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jbGVhcik7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2Ni1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzY3LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjg6ICogYWNrX2FsbF9iYWRibG9ja3MoKSAtIEFja25vd2xlZGdlIGFsbCBiYWQgYmxvY2tzIGluIGEgbGlzdC5cXG5ibG9jay9iYWRibG9ja3MuYzoxMzY5OiAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzAtICpcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzMtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM3NDp2b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzUte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQwMS19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTQwMjpFWFBPUlRfU1lNQk9MX0dQTChhY2tfYWxsX2JhZGJsb2Nrcyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTQwMy1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDA0LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0MDU6ICogYmFkYmxvY2tzX3Nob3coKSAtIHN5c2ZzIGFjY2VzcyB0byBiYWQtYmxvY2tzIGxpc3RcXG5ibG9jay9iYWRibG9ja3MuYzoxNDA2OiAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MDctICogQHBhZ2U6XFx0YnVmZmVyIHJlY2VpdmVkIGZyb20gc3lzZnNcXG5ibG9jay9iYWRibG9ja3MuYzoxNDA4OiAqIEB1bmFjazpcXHR3ZWF0aGVyIHRvIHNob3cgdW5hY2tub3dsZWRnZWQgYmFkYmxvY2tzXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQwOS0gKlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQxMi0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxNDEzOnNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjaylcXG5ibG9jay9iYWRibG9ja3MuYy0xNDE0LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTAtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NTE6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3Nob3cpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTItXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ1My0vKipcXG5ibG9jay9iYWRibG9ja3MuYzoxNDU0OiAqIGJhZGJsb2Nrc19zdG9yZSgpIC0gc3lzZnMgYWNjZXNzIHRvIGJhZC1ibG9ja3MgbGlzdFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0NTU6ICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ1Ni0gKiBAcGFnZTpcXHRidWZmZXIgcmVjZWl2ZWQgZnJvbSBzeXNmc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTctICogQGxlbjpcXHRsZW5ndGggb2YgZGF0YSByZWNlaXZlZCBmcm9tIHN5c2ZzXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ1ODogKiBAdW5hY2s6XFx0d2VhdGhlciB0byBzaG93IHVuYWNrbm93bGVkZ2VkIGJhZGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTktICpcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NjItICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ2Mzpzc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG5ibG9jay9iYWRibG9ja3MuYy0xNDY0LVxcdFxcdFxcdGludCB1bmFjaylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODItXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4MzpcXHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHNlY3RvciwgbGVuZ3RoLCAhdW5hY2spKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODQtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDg3LX1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDg4OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4OS1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDkwOnN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTEtXFx0XFx0aW50IGVuYWJsZSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MTItLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUxMzogKiBiYWRibG9ja3NfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MTQ6ICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUxNTogKiBAZW5hYmxlOlxcdHdlYXRoZXIgdG8gZW5hYmxlIGJhZGJsb2NrcyBhY2NvdW50aW5nXFxuYmxvY2svYmFkYmxvY2tzLmMtMTUxNi0gKlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTUyMC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxNTIxOmludCBiYWRibG9ja3NfaW5pdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGVuYWJsZSlcXG5ibG9jay9iYWRibG9ja3MuYy0xNTIyLXtcXG5ibG9jay9iYWRibG9ja3MuYzoxNTIzOlxcdHJldHVybiBfX2JhZGJsb2Nrc19pbml0KE5VTEwsIGJiLCBlbmFibGUpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjQtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MjU6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2luaXQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjYtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUyNzppbnQgZGV2bV9pbml0X2JhZGJsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1Mjgte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTUzMC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5ibG9jay9iYWRibG9ja3MuYzoxNTMxOlxcdHJldHVybiBfX2JhZGJsb2Nrc19pbml0KGRldiwgYmIsIDEpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzItfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9pbml0X2JhZGJsb2Nrcyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUzNC1cXG5ibG9jay9iYWRibG9ja3MuYy0xNTM1LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzY6ICogYmFkYmxvY2tzX2V4aXQoKSAtIGZyZWUgdGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmVcXG5ibG9jay9iYWRibG9ja3MuYzoxNTM3OiAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzgtICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUzOTp2b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NDAte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTU0OC19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTU0OTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfZXhpdCk7XFxuLS1cXG5ibG9jay9nZW5oZC5jLTI1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuYmxvY2svZ2VuaGQuYzoyNjojaW5jbHVkZSBcXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcXHUwMDNlXFxuYmxvY2svZ2VuaGQuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGFydF9zdGF0LmhcXHUwMDNlXFxuLS1cXG5ibG9jay9nZW5oZC5jPTg1Mj1FWFBPUlRfU1lNQk9MKGludmFsaWRhdGVfZGlzayk7XFxuLS1cXG5ibG9jay9nZW5oZC5jLTg1NC0vKiBzeXNmcyBhY2Nlc3MgdG8gYmFkLWJsb2NrcyBsaXN0LiAqL1xcbmJsb2NrL2dlbmhkLmM6ODU1OnN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL2dlbmhkLmMtODU2LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NjMtXFxuYmxvY2svZ2VuaGQuYzo4NjQ6XFx0cmV0dXJuIGJhZGJsb2Nrc19zaG93KGRpc2stXFx1MDAzZWJiLCBwYWdlLCAwKTtcXG5ibG9jay9nZW5oZC5jLTg2NS19XFxuYmxvY2svZ2VuaGQuYy04NjYtXFxuYmxvY2svZ2VuaGQuYzo4Njc6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL2dlbmhkLmMtODY4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NzUtXFxuYmxvY2svZ2VuaGQuYzo4NzY6XFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShkaXNrLVxcdTAwM2ViYiwgcGFnZSwgbGVuLCAwKTtcXG5ibG9jay9nZW5oZC5jLTg3Ny19XFxuLS1cXG5ibG9jay9nZW5oZC5jPTExNzY9c3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xcbmJsb2NrL2dlbmhkLmM6MTE3NzpzdGF0aWMgREVWSUNFX0FUVFIoYmFkYmxvY2tzLCAwNjQ0LCBkaXNrX2JhZGJsb2Nrc19zaG93LCBkaXNrX2JhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svZ2VuaGQuYy0xMTc4LXN0YXRpYyBERVZJQ0VfQVRUUihkaXNrc2VxLCAwNDQ0LCBkaXNrc2VxX3Nob3csIE5VTEwpO1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMjEzPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkaXNrX2F0dHJzW10gPSB7XFxuLS1cXG5ibG9jay9nZW5oZC5jLTEyMjQtXFx0XFx1MDAyNmRldl9hdHRyX2luZmxpZ2h0LmF0dHIsXFxuYmxvY2svZ2VuaGQuYzoxMjI1OlxcdFxcdTAwMjZkZXZfYXR0cl9iYWRibG9ja3MuYXR0cixcXG5ibG9jay9nZW5oZC5jLTEyMjYtXFx0XFx1MDAyNmRldl9hdHRyX2V2ZW50cy5hdHRyLFxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMjQwPXN0YXRpYyB1bW9kZV90IGRpc2tfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IG4pXFxuLS1cXG5ibG9jay9nZW5oZC5jLTEyNDQtXFxuYmxvY2svZ2VuaGQuYzoxMjQ1OlxcdGlmIChhID09IFxcdTAwMjZkZXZfYXR0cl9iYWRibG9ja3MuYXR0ciBcXHUwMDI2XFx1MDAyNiAhZGlzay1cXHUwMDNlYmIpXFxuYmxvY2svZ2VuaGQuYy0xMjQ2LVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDoyOC44Nzc2ODgyMzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjc4MjUxOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgS2VybmVsIEJhZCBCbG9jayBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIGBibG9jay9iYWRibG9ja3MuY2AgaXMgZGVmaW5pdGVseSBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBgYmxvY2svTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQ7IGBiYWRibG9ja3Mub2AgaXMgYWx3YXlzIGJlaW5nIGJ1aWx0IHdpdGggdGhlIGJsb2NrIGxheWVyLiBJbnRlcmVzdGluZy4gTGV0J3MgZGlnIGludG8gd2hvJ3MgYWN0dWFsbHkgKnVzaW5nKiB0aGlzIGNvZGUuXG5cbkhtbSwgUkFJRCwgc3BlY2lmaWNhbGx5IHRoZSBNRCBsYXllciwgZGVmaW5pdGVseSBsZXZlcmFnZXMgYGJhZGJsb2Nrc2AsIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGRhdGEgaW50ZWdyaXR5LiBBbmQgSSBzZWUgYHBtZW0vbnZkaW1tYCBpcyBpbiB0aGUgbWl4IHRvby4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBOVkRJTU1zLCBtYW5hZ2luZyBiYWQgYmxvY2tzIGlzICpjcml0aWNhbCogZm9yIHRob3NlLCBzbyB0aGF0J3MgbG9naWNhbC4gTnVsbF9ibGsgaXMgdXNpbmcgaXQgdG9vPyBJJ20gY3VyaW91cyBob3cgdGhleSdyZSBoYW5kbGluZyBiYWQgYmxvY2tzIHdoZW4gdGhleSBkb24ndCBldmVuIGhhdmUgYSBwaHlzaWNhbCBibG9jayBkZXZpY2UsIEknbGwgbmVlZCB0byBsb29rIGludG8gdGhhdCBvbmUgZnVydGhlci5cblxuVGhlIG1vcmUgY3J1Y2lhbCBxdWVzdGlvbiBpczogd2hvICppbml0aWFsaXplcyogdGhlIGBkaXNrLVx1MDAzZWJiYCBzdHJ1Y3R1cmUgb3IgY2FsbHMgYGJhZGJsb2Nrc19pbml0YD8gS25vd2luZyAqd2hvKiBpcyBzZXR0aW5nIHVwIHRoZSBiYWQgYmxvY2sgbWFuYWdlbWVudCBmb3IgYSBkZXZpY2UgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgYmVpbmcgKnVzZWQqIGVmZmVjdGl2ZWx5LiBJJ2xsIG5lZWQgdG8gdHJhY2UgZG93biB0aG9zZSBjYWxscyB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHdob2xlIGJhZCBibG9jayBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDozMi4xNTU5NDMzNDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5ODIyMzE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWRibG9ja3NfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYz0xNDg4PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4OS1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDkwOnN0YXRpYyBpbnQgX19iYWRibG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTEtXFx0XFx0aW50IGVuYWJsZSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MTItLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUxMzogKiBiYWRibG9ja3NfaW5pdCgpIC0gaW5pdGlhbGl6ZSB0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MTQtICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNTIwLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MjE6aW50IGJhZGJsb2Nrc19pbml0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZW5hYmxlKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MjIte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MjM6XFx0cmV0dXJuIF9fYmFkYmxvY2tzX2luaXQoTlVMTCwgYmIsIGVuYWJsZSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUyNC19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTUyNTpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfaW5pdCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUyNi1cXG5ibG9jay9iYWRibG9ja3MuYz0xNTI3PWludCBkZXZtX2luaXRfYmFkYmxvY2tzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNTMwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzE6XFx0cmV0dXJuIF9fYmFkYmxvY2tzX2luaXQoZGV2LCBiYiwgMSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUzMi19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03ODY9c3RhdGljIHN0cnVjdCBudWxsYl9kZXZpY2UgKm51bGxfYWxsb2NfZGV2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04MDEtXFx0SU5JVF9SQURJWF9UUkVFKFxcdTAwMjZkZXYtXFx1MDAzZWNhY2hlLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4MDI6XFx0aWYgKGJhZGJsb2Nrc19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWJhZGJsb2NrcywgMCkpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04MDMtXFx0XFx0a2ZyZWUoZGV2KTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNzkzPWludCBtZF9yZGV2X2luaXQoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMzgxNS1cXHQgKi9cXG5kcml2ZXJzL21kL21kLmM6MzgxNjpcXHRyZXR1cm4gYmFkYmxvY2tzX2luaXQoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgMCk7XFxuZHJpdmVycy9tZC9tZC5jLTM4MTctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01OD1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU5LVxcdFxcdFxcdGludCB1bmFjayk7XFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo2MDppbnQgYmFkYmxvY2tzX2luaXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBlbmFibGUpO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNjEtdm9pZCBiYWRibG9ja3NfZXhpdChzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQwOjMzLjc1NDE3MTk2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxMjM4NDQ1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjpcblxuKipCYWQgQmxvY2sgSW5pdGlhbGl6YXRpb246IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGJhZCBibG9jayBtYW5hZ2VtZW50IGlzIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBtdWx0aXBsZSBpbml0aWFsaXphdGlvbiBwb2ludHMuIEZpcnN0LCBgbnVsbF9ibGtgIGluaXRpYWxpemVzIGBcdTAwMjZkZXYtXHUwMDNlYmFkYmxvY2tzYC4gVGhhdCdzIGV4cGVjdGVkLCBhIGJhc2ljIGJsb2NrIGRldmljZSBuZWVkcyB0byBrbm93IGFib3V0IGJhZCBzZWN0b3JzLiBUaGVuLCBpbiB0aGUgTUQgcmFpZCBzZXR1cCwgd2UgaGF2ZSBgbWRfcmRldl9pbml0YCBpbml0aWFsaXppbmcgYFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzYC4gVGhpcyBtYWtlcyBzZW5zZTsgUkFJRCBkZXZpY2VzLCBidWlsdCBvbiBtdWx0aXBsZSB1bmRlcmx5aW5nIGRldmljZXMsIHdvdWxkIGFsc28gbmVlZCB0aGVpciBvd24gYmFkIGJsb2NrIGhhbmRsaW5nLCBsaWtlbHkgdG8gYWNjb3VudCBmb3IgZmFpbHVyZXMgaW4gdGhlIGNvbnN0aXR1ZW50IGRyaXZlcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgYW5kIGFueSBwb3RlbnRpYWwgb3ZlcmxhcC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIHdoYXQgb3RoZXIgbW9kdWxlcyBhcmUgbWFraW5nIHVzZSBvZiB0aGlzPyBNeSB0aG91Z2h0IG5vdyBpcyB0byBjaGVjayBmb3IgdGhlIGNhbGxzIHRvIGBkZXZtX2luaXRfYmFkYmxvY2tzYCwgYXMgaXQgaXMgbGlrZWx5IGEgc2hhcmVkIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gc2VlIHdobydzIGNhbGxpbmcgaXQgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgcGljdHVyZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGJhZCBibG9jayBzeXN0ZW1zLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDozOC44NzgwMTk5ODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODQ1MDI1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bV9pbml0X2JhZGJsb2Nrc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYz0xNTI1PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19pbml0KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xNTI2LVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1Mjc6aW50IGRldm1faW5pdF9iYWRibG9ja3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmFkYmxvY2tzICpiYilcXG5ibG9jay9iYWRibG9ja3MuYy0xNTI4LXtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MzItfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1MzM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9pbml0X2JhZGJsb2Nrcyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUzNC1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9Mjg1PWludCBkZXZtX25zaW9fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG5kX25hbWVzcGFjZV9pbyAqbnNpbyxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMzAxLVxcdG5kbnMtXFx1MDAzZXJ3X2J5dGVzID0gbnNpb19yd19ieXRlcztcXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjMwMjpcXHRpZiAoZGV2bV9pbml0X2JhZGJsb2NrcyhkZXYsIFxcdTAwMjZuc2lvLVxcdTAwM2ViYikpXFxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0zMDMtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDYzPXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTY1LVxcdFxcdFxcdC8gNTEyKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTY2OlxcdGlmIChkZXZtX2luaXRfYmFkYmxvY2tzKGRldiwgXFx1MDAyNnBtZW0tXFx1MDAzZWJiKSlcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTY3LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmM9MTM9c3RhdGljIGludCBuZF9yZWdpb25fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmMtMzctXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmM6Mzg6XFx0aWYgKGRldm1faW5pdF9iYWRibG9ja3MoZGV2LCBcXHUwMDI2bmRfcmVnaW9uLVxcdTAwM2ViYikpXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uLmMtMzktXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTI4PXN0cnVjdCBiYWRibG9ja3Mge1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6Mjk6XFx0c3RydWN0IGRldmljZSAqZGV2O1xcdC8qIHNldCBieSBkZXZtX2luaXRfYmFkYmxvY2tzICovXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC0zMC1cXHRpbnQgY291bnQ7XFx0XFx0LyogY291bnQgb2YgYmFkIGJsb2NrcyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD02Mj1zdHJ1Y3QgZGV2aWNlO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NjM6aW50IGRldm1faW5pdF9iYWRibG9ja3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC02NC1zdGF0aWMgaW5saW5lIHZvaWQgZGV2bV9leGl0X2JhZGJsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDo0MC41NjI1MzA3NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwNzA5Mjg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVsdmluZyBpbnRvIEJhZCBCbG9jayBIYW5kbGluZyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGJhZCBibG9jayBtYW5hZ2VtZW50IHdvcmtzIGF0IHRoZSBzeXN0ZW0gbGV2ZWwsIGFuZCBzcGVjaWZpY2FsbHkgaG93IHdlJ3JlIGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCBzeXNmcy4gSXQgc2VlbXMgbGlrZSB0aGUgYGRpc2stXHUwMDNlYmJgIHN0cnVjdHVyZSBpcyBjZW50cmFsIHRvIHRoaXMuIEkga25vdyB0aGF0IHRoZSBgYmFkYmxvY2tzYCBzeXNmcyBhdHRyaWJ1dGUgYWxsb3dzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoaXMgaW5mb3JtYXRpb24sIGFuZCB0aGUgb2J2aW91cyBsaW5rIHRoZXJlIGlzIHRocm91Z2ggYGJhZGJsb2Nrc19zdG9yZWAgYW5kIGBiYWRibG9ja3Nfc2hvd2AuIEl0J3MgcGFydGljdWxhcmx5IHVzZWZ1bCBvbiB0aGluZ3MgbGlrZSBNRCBkZXZpY2VzLCB3aGVyZSB0aGUgYHJkZXYtXHUwMDNlYmFkYmxvY2tzYCBhdHRyaWJ1dGUgaXMgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLlxuXG5IbW0sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHdoZXJlIGBiYWRibG9ja3Nfc3RvcmVgIGlzIGFjdHVhbGx5ICp1c2VkKi4gV2hlcmUgYXJlIHdlIHdyaXRpbmcgdGhpcyBiYWQgYmxvY2sgZGF0YSBhbmQgaG93IGlzIGl0IGJlaW5nIGNvbnN1bWVkPyBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTE1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDA6NDIuNTY5NjI1ODE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3NTgxMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhZGJsb2Nrc19zdG9yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYz0xNDUxPUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zaG93KTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NTMtLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ1NDogKiBiYWRibG9ja3Nfc3RvcmUoKSAtIHN5c2ZzIGFjY2VzcyB0byBiYWQtYmxvY2tzIGxpc3RcXG5ibG9jay9iYWRibG9ja3MuYy0xNDU1LSAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ2Mi0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxNDYzOnNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0NjQtXFx0XFx0XFx0aW50IHVuYWNrKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4Ny19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4ODpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc3RvcmUpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODktXFxuLS1cXG5ibG9jay9nZW5oZC5jPTg1NT1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODY2LVxcbmJsb2NrL2dlbmhkLmM6ODY3OnN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5ibG9jay9nZW5oZC5jLTg2OC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODc1LVxcbmJsb2NrL2dlbmhkLmM6ODc2OlxcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoZGlzay1cXHUwMDNlYmIsIHBhZ2UsIGxlbiwgMCk7XFxuYmxvY2svZ2VuaGQuYy04NzctfVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMTc2PXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcXG5ibG9jay9nZW5oZC5jOjExNzc6c3RhdGljIERFVklDRV9BVFRSKGJhZGJsb2NrcywgMDY0NCwgZGlza19iYWRibG9ja3Nfc2hvdywgZGlza19iYWRibG9ja3Nfc3RvcmUpO1xcbmJsb2NrL2dlbmhkLmMtMTE3OC1zdGF0aWMgREVWSUNFX0FUVFIoZGlza3NlcSwgMDQ0NCwgZGlza3NlcV9zaG93LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTUzMz1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTM5LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU0MDpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NDEtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MzYxND1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL21kL21kLmMtMzYxNS17XFxuZHJpdmVycy9tZC9tZC5jOjM2MTY6XFx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMCk7XFxuZHJpdmVycy9tZC9tZC5jLTM2MTctXFx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNjI5PXN0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG5kcml2ZXJzL21kL21kLmMtMzYzMC17XFxuZHJpdmVycy9tZC9tZC5jOjM2MzE6XFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDEpO1xcbmRyaXZlcnMvbWQvbWQuYy0zNjMyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NTc9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKTtcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oOjU4OnNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTktXFx0XFx0XFx0aW50IHVuYWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDA6NDQuMDQ3MjE1NDY5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNDc3MjU4OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJsb2NrIExheWVyIEJhZGJsb2NrcyBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29tbWl0IGNoYW5naW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uIGluIGBibG9jay9iYWRibG9ja3MuY2AuICBgYmFkYmxvY2tzX3N0b3JlYCB3cml0ZXMgYmFkIGJsb2NrcyB0byBtZCBvciBudWxsX2JsayBkZXZpY2VzIHVzaW5nIHN5c2ZzIG9yIGNvbmZpZ2ZzLCBhbmQgc3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIHRoZXNlIGFzIHdlbGwgYXMgd2l0aCB0aGUgYGJhZGJsb2Nrc2Agc3lzZnMgYXR0cmlidXRlcywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgZnV6emluZyBzY29wZS4gVGhlIGNvbW1pdCBkaWZmIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyBvZiB0aGUgYmluYXJ5IHNlYXJjaCB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgaGlgIHZhcmlhYmxlIGFuZCBhIHJlZHVuZGFudCBjb25kaXRpb25hbCBjaGVjayBoYXZlIGJlZW4gcmVtb3ZlZC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgb3JpZ2luYWwgY29kZSBpbml0aWFsaXplZCBgaGlgIHRvIGBiYi1cdTAwM2Vjb3VudGAuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBsb2dpYyBhbmQgSSB0aGluayBJJ3ZlIGZpZ3VyZWQgb3V0IHdoeS4gSW5pdGlhbGx5LCBpdCBwZXJmb3JtZWQgYSBiaW5hcnkgc2VhcmNoIG9uIHRoZSBgYmFkYmxvY2tzYCB0YWJsZSB0byBmaW5kIHRoZSAqcHJldmlvdXMqIGJhZCBibG9jayByZWxhdGl2ZSB0byBhIGdpdmVuIHNlY3RvciBgc2AuIEl0J3MgYSBiaW5hcnkgc2VhcmNoLCBzbyB3ZSBjYW4gc2VlIHRoYXQgYGxvYCBpcyBhbHdheXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBzYCwgYW5kIGBoaWAgaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBgc2AuIE5vdywgdGhlIGNoYW5nZSBzZXRzIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMWAgYW5kIGFsc28gc2ltcGxpZmllcyB0aGUgcmV0dXJuIGxvZ2ljLlxuXG5UaGUgYmluYXJ5IHNlYXJjaCByZWxpZXMgb24gdGhlc2UgaW52YXJpYW50cywgd2hpY2ggaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UuIFRoZSBwYXRjaCBzZXRzIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMTtgIHNvIGl0IG5vdyBjb3JyZWN0bHkgaW5kZXhlcyBpbnRvIHRoZSBgYmItXHUwMDNlcGFnZWAgYXJyYXkuICBUaGUgb3JpZ2luYWwgY29kZSwgYWx0aG91Z2ggaXQgbWlnaHQgaGF2ZSBzZWVtZWQgY29ycmVjdCwgY291bGQgaGF2ZSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIHRoZSBiaW5hcnkgc2VhcmNoIGluIGNlcnRhaW4gZWRnZSBjYXNlcyB3aGVuIGBiYi1cdTAwM2Vjb3VudGAgd2FzIHNtYWxsIChsaWtlIDEgb3IgMCkuIE5vdywgaXQgYXBwZWFycyB0byBiZSBtb3JlIHJvYnVzdC4gVGhlIHBhdGNoIG1ha2VzIHRoZSBiaW5hcnkgc2VhcmNoIGNvcnJlY3QgYW5kIGVmZmljaWVudCBiZWNhdXNlIHRoZSBgbG9gIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaCBpcyBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGFwcHJvcHJpYXRlIGluZGV4LlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBjbGVhbnVwL3JlZmFjdG9yaW5nIGluIGBwcmV2X2JhZGJsb2NrcygpYC4gVGhpcyBjb3VsZCBiZSB0b3VjaGVkIGJ5IHN5emthbGxlci4gU2luY2UgaXQgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBibG9jayBsYXllciwgYW5kIGBiYWRibG9ja3NgIGlzIHRyaWdnZXJlZCB2aWEgc3lzZnMgYXR0cmlidXRlcywgaXQncyB2ZXJ5IGxpa2VseSB0aGF0IHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBBY2NvcmRpbmcgdG8gdGhlIGd1aWRhbmNlLCBldmVuIGEgXCJyZWZhY3RvcmluZ1wiIGxpa2UgdGhpcyB3YXJyYW50cyBmdXp6aW5nLCBiZWNhdXNlIGl0IGFsdGVycyBzdGF0ZSBtYW5hZ2VtZW50IGluIGEgY29yZSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgaW50ZXJhY3RzIHdpdGggYGJhZGJsb2Nrc2AgZGlyZWN0bHkuIExldCdzIHN0YXJ0IHdpdGggYGdyZXBwZXJgIGluIHRoZSBrZXJuZWwgdG8gc2VlIGhvdyBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIGNhbGxlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBhbnkgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZ2l0IGdyZXAgdG8gY2hlY2sgaG93IGJhZGJsb2NrcyBpcyBjYWxsZWQgb3IgcmVhY2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMzgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQwOjU0LjUyNDQ3NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTQwNjc5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzXyhzZXR8Y2xlYXJ8Y2hlY2spXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jLTIyLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MjM6ICogV2hlbiB0aGUgY2FsbGVyIG9mIGJhZGJsb2Nrc19zZXQoKSB3YW50cyB0byBzZXQgYSByYW5nZSBvZiBiYWQgYmxvY2tzLCB0aGVcXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMjgyLSAqICAgICBibG9ja3MgdGFibGUgYXJlIGFsbCBhY2tlZCwgbWVyZ2luZyB0aGVtIGludG8gYSBsYXJnZXIgb25lIHJhbmdlIG1heVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjI4MzogKiAgICAgb2NjdXB5IGxlc3MgYmFkIGJsb2NrcyB0YWJsZSBzcGFjZSBhbmQgbWFrZSBiYWRibG9ja3NfY2hlY2soKSBmYXN0ZXIuXFxuYmxvY2svYmFkYmxvY2tzLmMtMjg0LSAqICAgICBUaGVyZWZvcmUgaW4gc3VjaCBzaXR1YXRpb24sIGFmdGVyIG92ZXJ3cml0aW5nIHJhbmdlIFMsIHRoZSBwcmV2aW91cyByYW5nZVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIwLSAqIHRoZSBiYWQgYmxvY2sgcmFuZ2Ugc2V0dGluZyBjb25kaXRpb25zLiBNYXliZSB0aGVyZSBpcyBzb21lIHJhcmUgY29ybmVyIGNhc2VcXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJ3QgaHVydCBpZiBiYWRibG9ja3Nfc2V0KCkgZmFpbHMgZHVlXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIzLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MzI0OiAqIEluc2lkZSBiYWRibG9ja3Nfc2V0KCkgZWFjaCBsb29wIHN0YXJ0cyBieSBqdW1waW5nIHRvIHJlX2luc2VydCBsYWJlbCwgZXZlcnlcXG5ibG9jay9iYWRibG9ja3MuYy0zMjUtICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2VcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgxNj1zdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04MzctLyogRG8gZXhhY3Qgd29yayB0byBzZXQgYmFkIGJsb2NrIHJhbmdlIGludG8gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjgzODpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy04MzktXFx0XFx0XFx0ICAgaW50IGFja25vd2xlZGdlZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEwMzA9c3RhdGljIGludCBmcm9udF9zcGxpdHRpbmdfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA0Ny0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjbGVhciBiYWQgYmxvY2sgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA0ODpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwNDkte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE4NC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjaGVjayBiYWQgYmxvY2tzIHJhbmdlIGZyb20gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExODU6c3RhdGljIGludCBfYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExODYtXFx0XFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNjMtLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTI2NDogKiBiYWRibG9ja3NfY2hlY2soKSAtIGNoZWNrIGEgZ2l2ZW4gcmFuZ2UgZm9yIGJhZCBzZWN0b3JzXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI2NS0gKiBAYmI6XFx0XFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyNzktICpcXG5ibG9jay9iYWRibG9ja3MuYzoxMjgwOiAqIExvY2tpbmcgb2YgdGhlIGJhZC1ibG9jayB0YWJsZSB1c2VzIGEgc2VxbG9jayBzbyBiYWRibG9ja3NfY2hlY2tcXG5ibG9jay9iYWRibG9ja3MuYy0xMjgxLSAqIG1pZ2h0IG5lZWQgdG8gcmV0cnkgaWYgaXQgaXMgdmVyeSB1bmx1Y2t5Llxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5Ni0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMjk3OmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5OC1cXHRcXHRcXHRzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzE1LVxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzE2OlxcdHJ2ID0gX2JhZGJsb2Nrc19jaGVjayhiYiwgcywgc2VjdG9ycywgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTMxNy1cXHRpZiAocmVhZF9zZXFyZXRyeShcXHUwMDI2YmItXFx1MDAzZWxvY2ssIHNlcSkpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzIxLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxMzIyOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyMy1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzI0LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMjU6ICogYmFkYmxvY2tzX3NldCgpIC0gQWRkIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXFxuYmxvY2svYmFkYmxvY2tzLmMtMTMyNi0gKiBAYmI6XFx0XFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMzktICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM0MDpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0MS1cXHRcXHQgICBpbnQgYWNrbm93bGVkZ2VkKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDIte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDM6XFx0cmV0dXJuIF9iYWRibG9ja3Nfc2V0KGJiLCBzLCBzZWN0b3JzLCBhY2tub3dsZWRnZWQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDQtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDU6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3NldCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM0Ni1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ3LS8qKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDg6ICogYmFkYmxvY2tzX2NsZWFyKCkgLSBSZW1vdmUgYSByYW5nZSBvZiBiYWQgYmxvY2tzIHRvIHRoZSB0YWJsZS5cXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ5LSAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2MC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMzYxOmJvb2wgYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjIte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjM6XFx0cmV0dXJuIF9iYWRibG9ja3NfY2xlYXIoYmIsIHMsIHNlY3RvcnMpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNjQtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNjU6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NsZWFyKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzY2LVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTQ2Mz1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODItXFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ4MzpcXHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHNlY3RvciwgbGVuZ3RoLCAhdW5hY2spKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODQtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01NDA9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NzItXFx0aWYgKGJ1ZlswXSA9PSAnKycpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NzM6XFx0XFx0aWYgKGJhZGJsb2Nrc19zZXQoXFx1MDAyNnRfZGV2LVxcdTAwM2ViYWRibG9ja3MsIHN0YXJ0LFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU3NC1cXHRcXHRcXHRcXHQgIGVuZCAtIHN0YXJ0ICsgMSwgMSkpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc1LVxcdFxcdFxcdHJldCA9IGNvdW50O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU3NjpcXHR9IGVsc2UgaWYgKGJhZGJsb2Nrc19jbGVhcihcXHUwMDI2dF9kZXYtXFx1MDAzZWJhZGJsb2Nrcywgc3RhcnQsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc3LVxcdFxcdFxcdFxcdCAgIGVuZCAtIHN0YXJ0ICsgMSkpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzNTQ9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNjItXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM2MzpcXHRpZiAoIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCAqbnJfc2VjdG9ycywgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNmJhZF9zZWN0b3JzKSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzY0LVxcdFxcdHJldHVybiBCTEtfU1RTX09LO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2Ni1cXHRpZiAoY21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3Nfb25jZSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzY3OlxcdFxcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2OC1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xODAzPXN0YXRpYyBpbnQgc3VwZXJfMV9sb2FkKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmVmZGV2LCBpbnQgbWlub3JfdmVyc2lvbilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xOTMzLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbWQvbWQuYzoxOTM0OlxcdFxcdFxcdGlmICghYmFkYmxvY2tzX3NldChcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBzZWN0b3IsIGNvdW50LCAxKSlcXG5kcml2ZXJzL21kL21kLmMtMTkzNS1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xMDY1OD1ib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDY3Ny1cXG5kcml2ZXJzL21kL21kLmM6MTA2Nzg6XFx0aWYgKCFiYWRibG9ja3Nfc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHMsIHNlY3RvcnMsIDApKSB7XFxuZHJpdmVycy9tZC9tZC5jLTEwNjc5LVxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MTA2OTg9dm9pZCByZGV2X2NsZWFyX2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDcwNS1cXG5kcml2ZXJzL21kL21kLmM6MTA3MDY6XFx0aWYgKCFiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycykpXFxuZHJpdmVycy9tZC9tZC5jLTEwNzA3LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuaD0yOTk9c3RhdGljIGlubGluZSBpbnQgaXNfYmFkYmxvY2soc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuLS1cXG5kcml2ZXJzL21kL21kLmgtMzAyLVxcdGlmICh1bmxpa2VseShyZGV2LVxcdTAwM2ViYWRibG9ja3MuY291bnQpKSB7XFxuZHJpdmVycy9tZC9tZC5oOjMwMzpcXHRcXHRpbnQgcnYgPSBiYWRibG9ja3NfY2hlY2soXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcmRldi1cXHUwMDNlZGF0YV9vZmZzZXQgKyBzLFxcbmRyaXZlcnMvbWQvbWQuaC0zMDQtXFx0XFx0XFx0XFx0XFx0c2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmM9MTY1PXN0YXRpYyB2b2lkIHNldF9iYWRibG9jayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IG51bSlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmMtMTY5LVxcdC8qIHRoaXMgaXNuJ3QgYW4gZXJyb3IgYXMgdGhlIGhhcmR3YXJlIHdpbGwgc3RpbGwgdGhyb3cgYW4gZXhjZXB0aW9uICovXFxuZHJpdmVycy9udmRpbW0vYmFkcmFuZ2UuYzoxNzA6XFx0aWYgKCFiYWRibG9ja3Nfc2V0KGJiLCBzLCBudW0sIDEpKVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmMtMTcxLVxcdFxcdGRldl9pbmZvX29uY2UoYmItXFx1MDAzZWRldiwgXFxcIiVzOiBmYWlsZWQgZm9yIHNlY3RvciAlbGx4XFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnVzLmM9MTY0PXN0YXRpYyBpbnQgbnZkaW1tX2NsZWFyX2JhZGJsb2Nrc19yZWdpb24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnVzLmMtMTgzLVxcdHNlY3RvciA9IChjdHgtXFx1MDAzZXBoeXMgLSBuZF9yZWdpb24tXFx1MDAzZW5kcl9zdGFydCkgLyA1MTI7XFxuZHJpdmVycy9udmRpbW0vYnVzLmM6MTg0OlxcdGJhZGJsb2Nrc19jbGVhcihcXHUwMDI2bmRfcmVnaW9uLVxcdTAwM2ViYiwgc2VjdG9yLCBjdHgtXFx1MDAzZWNsZWFyZWQgLyA1MTIpO1xcbmRyaXZlcnMvbnZkaW1tL2J1cy5jLTE4NS1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9MjMzPXN0YXRpYyBpbnQgbnNpb19yd19ieXRlcyhzdHJ1Y3QgbmRfbmFtZXNwYWNlX2NvbW1vbiAqbmRucyxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjY5LVxcdFxcdFxcdFxcdGNsZWFyZWQgLz0gNTEyO1xcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM6MjcwOlxcdFxcdFxcdFxcdGJhZGJsb2Nrc19jbGVhcihcXHUwMDI2bnNpby1cXHUwMDNlYmIsIHNlY3RvciwgY2xlYXJlZCk7XFxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzEtXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy9udmRpbW0vbmQuaD02NzY9c3RhdGljIGlubGluZSBib29sIGlzX2JhZF9wbWVtKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4Mi1cXG5kcml2ZXJzL252ZGltbS9uZC5oOjY4MzpcXHRcXHRyZXR1cm4gISFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbGVuIC8gNTEyLCBcXHUwMDI2Zmlyc3RfYmFkLFxcbmRyaXZlcnMvbnZkaW1tL25kLmgtNjg0LVxcdFxcdFxcdFxcdFxcdTAwMjZudW1fYmFkKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MzUzPXN0YXRpYyBpbnQgbmRfcGZuX2NsZWFyX21lbW1hcF9lcnJvcnMoc3RydWN0IG5kX3BmbiAqbmRfcGZuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODMtXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYzozODQ6XFx0XFx0YmJfcHJlc2VudCA9IGJhZGJsb2Nrc19jaGVjayhcXHUwMDI2bmRfcmVnaW9uLVxcdTAwM2ViYiwgbWV0YV9zdGFydCxcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTM4NS1cXHRcXHRcXHRcXHRtZXRhX251bSwgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNm51bV9iYWQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTg4PXN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05MS1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjkyOlxcdGJhZGJsb2Nrc19jbGVhcihcXHUwMDI2cG1lbS1cXHUwMDNlYmIsIHNlY3RvciwgYmxrcyk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTkzLVxcdGlmIChwbWVtLVxcdTAwM2ViYl9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz0yNTc9X193ZWFrIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTI3My1cXHRpZiAoYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjI3NDpcXHQgICAgYmFkYmxvY2tzX2NoZWNrKGJiLCBzZWN0b3IsIG51bSwgXFx1MDAyNmZpcnN0X2JhZCwgXFx1MDAyNm51bV9iYWQpKSB7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTI3NS1cXHRcXHRsb25nIGFjdHVhbF9ucjtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NDU9c3RydWN0IGJhZGJsb2Nrc19jb250ZXh0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTAtXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1MTppbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycyk7XFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1Mzpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01NC1cXHRcXHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oOjU1OmJvb2wgYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKTtcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU2LXZvaWQgYWNrX2FsbF9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MDo1Ni40MTg1NDkzODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzE5NzM4MDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc6IEEgQ3JpdGljYWwgRXhhbWluYXRpb24gb2YgQmFkIEJsb2NrIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9tZC9tZC5jYCBjb2RlIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gaW4gdGhlIGJhZCBibG9jayBoYW5kbGluZyBsb2dpYy4gSSBzZWUgdGhhdCBNRCBkZXZpY2VzIGhhdmUgYHN5c2ZzYCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBiYWQgYmxvY2tzOiBzcGVjaWZpY2FsbHksIHRoZSBgZGV2X2F0dHJfYmFkYmxvY2tzYCBhdHRyaWJ1dGUuIFdyaXRpbmcgdG8gYC9zeXMvYmxvY2svbWRYL21kL2Rldi1YWFgvYmFkX2Jsb2Nrc2AgKGFuZCBzaW1pbGFyIHBhdGhzIGZvciBgbnVsbF9ibGtgIGFuZCBkaXNrIGF0dHJpYnV0ZXMgbGlrZSBgL3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL2JhZGJsb2Nrc2ApIHVsdGltYXRlbHkgbGVhZHMgdG8gdGhlIGBiYWRibG9ja3Nfc2V0YCBmdW5jdGlvbiB0aHJvdWdoIGEgY2hhaW4gb2YgY2FsbHMuIEltcG9ydGFudGx5LCB0aGlzIGFsc28gaW1wYWN0cyBJL08gb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBgYmFkYmxvY2tzX2NoZWNrYCBmdW5jdGlvbiwgd2hpY2ggY2FsbHMgYF9iYWRibG9ja3NfY2hlY2tgLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgcHJldl9iYWRibG9ja3NgLiBTaW1pbGFybHksIHVwZGF0ZXMgYW5kIGNsZWFycyBhbHNvIGZsb3cgdGhyb3VnaCBgX2JhZGJsb2Nrc19zZXRgIG9yIGBfYmFkYmxvY2tzX2NsZWFyYCB3aGljaCBjYWxscyBgcHJldl9iYWRibG9ja3NgLlxuXG5UaGUga2V5IHRoaW5nIEkndmUgbm90aWNlZCBpcyB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgYWx0ZXIgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgd2l0aGluIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLiBXZSBhcmUgY2hhbmdpbmcgaG93IHdlIGRvIHRoZSBiaW5hcnkgc2VhcmNoIHdoaWNoIGlzIGEgY29yZSBzdWJzeXN0ZW0gYWxnb3JpdGhtIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBib3VuZGFyeSBjb25kaXRpb25zLCBhbmQgcmV0dXJuIHZhbHVlcyBhcmUgYmVpbmcgY2hhbmdlZC4gVGhlIHNlYXJjaCdzIGxvZ2ljIGlzIGJlaW5nIG1vZGlmaWVkIGFuZCB0aGUgY2hhbmdlcyBhcmUgbm9udHJpdmlhbC5cblxuTm93LCBiYXNlZCBvbiB0aGUga2VybmVsIGZ1enppbmcgZ3VpZGVsaW5lcyAoc3BlY2lmaWNhbGx5IFNlY3Rpb25zIDEgYW5kIDMpLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHRha2Ugc2VyaW91c2x5LiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyOiBhbnkgbG9naWMgbW9kaWZpY2F0aW9uIGluIGNvcmUgc3Vic3lzdGVtcywgZXZlbiByZWZhY3RvcmluZ3MsIGFyZSBzdXNwZWN0LiBUaGUgZ29hbCBpcyB0byBjYXRjaCBjcmFzaGVzLCByZWdyZXNzaW9ucywgb3IgZXZlbiBsYXRlbnQgYnVncy4gQW5kLCB0aGV5IHNwZWNpZmljYWxseSB3YXJuIGFnYWluc3QgYmxpbmRseSB0cnVzdGluZyBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgY2xhaW1zLCBlc3BlY2lhbGx5IHdoZW4gY29yZSBzdWJzeXN0ZW1zIGFyZSBpbnZvbHZlZC4gQ29kZSByZWZhY3RvcmluZ3MgYXJlIG1lbnRpb25lZCBleHBsaWNpdGx5IGFzIGEgcmVhc29uIHRvIGZ1enohXG5cblRoZXJlZm9yZSwgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgTVVTVCBiZSBzZXQgdG8gYHRydWVgIGhlcmUuIFRoaXMgaXMgbm9uLW5lZ290aWFibGUuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHJlcXVpcmVkIGl0ZW1zIGZvciB0aGUgZnV6emluZy4gV2UgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVzZSBzZWxlY3Rpb25zLlxuXG5UaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBpcyB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGRpcmVjdGx5IGltcGFjdGVkLiBUaGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbiBpdHNlbGYsIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLCBpcyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZS4gSXQncyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBtZSB0aGluazogY2FuIHN0YXRpYyBmdW5jdGlvbnMgaW4gYSBgLmNgIGZpbGUgYmUgZGlyZWN0bHkgdGFyZ2V0ZWQ/XG5cbkknbGwgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBhZ2Fpbi4gQWNjb3JkaW5nIHRvIFNlY3Rpb24gNCwgc3RhdGljIGlubGluZXMgaW4gaGVhZGVycyBhcmUgdGhlIHByb2JsZW0sIGJ1dCBhIGBzdGF0aWNgIGZ1bmN0aW9uIGluIGEgYC5jYCBmaWxlICpzaG91bGQqIGhhdmUgYSBzeW1ib2wgYWRkcmVzcyB0aGF0IHdlIGNhbiB0YXJnZXQuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHRob3VnaCwgYW5kIHZlcmlmeSB0aGF0IHRoZSBjb21waWxlciBoYXNuJ3QgaW5saW5lZCB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbi4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBwcmV2X2JhZGJsb2Nrc2AgaXMgY2FsbGVkIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgY2FsbGVyIG9mIGBwcmV2X2JhZGJsb2Nrc2AgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MDMuNjE1OTMxNzc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk0ODM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmV2X2JhZGJsb2Nrc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iYWRibG9ja3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYy0zMjQtICogSW5zaWRlIGJhZGJsb2Nrc19zZXQoKSBlYWNoIGxvb3Agc3RhcnRzIGJ5IGp1bXBpbmcgdG8gcmVfaW5zZXJ0IGxhYmVsLCBldmVyeVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyNTogKiB0aW1lIGZvciB0aGUgbmV3IGxvb3AgcHJldl9iYWRibG9ja3MoKSBpcyBjYWxsZWQgdG8gZmluZCBhbiBhbHJlYWR5IHNldCByYW5nZVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTMyNi0gKiB3aGljaCBzdGFydHMgYmVmb3JlIG9yIGF0IGN1cnJlbnQgc2V0dGluZyByYW5nZS4gU2luY2UgdGhlIHNldHRpbmcgYmFkIGJsb2Nrc1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTMyNy0gKiByYW5nZSBpcyBoYW5kbGVkIGZyb20gaGVhZCB0byB0YWlsLCBtb3N0IG9mIHRoZSBjYXNlcyBpdCBpcyB1bm5lY2Vzc2FyeSB0byBkb1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyODogKiB0aGUgYmluYXJ5IHNlYXJjaCBpbnNpZGUgcHJldl9iYWRibG9ja3MoKSwgaXQgaXMgcG9zc2libGUgdG8gcHJvdmlkZSBhIGhpbnRcXG5ibG9jay9iYWRibG9ja3MuYzozMjk6ICogdG8gcHJldl9iYWRibG9ja3MoKSBmb3IgYSBmYXN0IHBhdGgsIHRoZW4gdGhlIGV4cGVuc2l2ZSBiaW5hcnkgc2VhcmNoIGNhbiBiZVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjMzMDogKiBhdm9pZGVkLiBJbiBteSB0ZXN0IHdpdGggdGhlIGhpbnQgdG8gcHJldl9iYWRibG9ja3MoKSwgZXhjZXB0IGZvciB0aGUgZmlyc3RcXG5ibG9jay9iYWRibG9ja3MuYzozMzE6ICogbG9vcCwgYWxsIHJlc3RlZCBjYWxscyB0byBwcmV2X2JhZGJsb2NrcygpIGNhbiBnbyBpbnRvIHRoZSBmYXN0IHBhdGggYW5kXFxuYmxvY2svYmFkYmxvY2tzLmMtMzMyLSAqIHJldHVybiBjb3JyZWN0IGJhZCBibG9ja3MgdGFibGUgaW5kZXggaW1tZWRpYXRlbHkuXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz00NTc9c3RhdGljIGludCBwcmV2X2J5X2hpbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIGludCBoaW50KVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNDgwLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjQ4MTpzdGF0aWMgaW50IHByZXZfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCxcXG5ibG9jay9iYWRibG9ja3MuYy00ODItXFx0XFx0XFx0ICBpbnQgaGludClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgzOD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg4My1cXG5ibG9jay9iYWRibG9ja3MuYzo4ODQ6XFx0cHJldiA9IHByZXZfYmFkYmxvY2tzKGJiLCBcXHUwMDI2YmFkLCBoaW50KTtcXG5ibG9jay9iYWRibG9ja3MuYy04ODUtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMDQ4PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMDkzLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwOTQ6XFx0cHJldiA9IHByZXZfYmFkYmxvY2tzKGJiLCBcXHUwMDI2YmFkLCBoaW50KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMDk1LVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTE4NT1zdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMjAzLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyMDQ6XFx0cHJldiA9IHByZXZfYmFkYmxvY2tzKGJiLCBcXHUwMDI2YmFkLCBoaW50KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMjA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MTowMy42NjI4ODY5MTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDIyODAwNTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBwcmV2X2JhZGJsb2Nrc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgcHJldl9iYWRibG9ja3NgIGlzIHVzZWQsIGFuZCBpdCdzIGxvb2tpbmcgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBzZWUgdGhhdCBpdCdzIHRoZSBjb3JlIG9mIHRoZSBiYWQgYmxvY2sgaGFuZGxpbmcsIGJlaW5nIGNhbGxlZCBieSBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgX2JhZGJsb2Nrc19jaGVja2AuIFRoZXNlIGFyZSBhbGwgaW50ZXJuYWwsIGJ1dCB0aG9zZSBhcmUgdGhlbiBjYWxsZWQgYnkgdGhlIHB1YmxpYy1mYWNpbmcgQVBJczogYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYGJhZGJsb2Nrc19jaGVja2AsIGFuZCBgYmFkYmxvY2tzX3N0b3JlYC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIGNvbmZpcm1pbmcgaWYgYHByZXZfYmFkYmxvY2tzYCBpcyBzdGF0aWMgYW5kIG5vbi1pbmxpbmUuIFRoZSBjb2RlIGNvbmZpcm1zIHRoYXQgaXQgaXMsIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3MoLi4uKWAgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gQW5kIHllYWgsIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIHRocmVlIGRpc3RpbmN0IGludGVybmFsIGZ1bmN0aW9ucywgd2hpY2ggYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgdGhvc2UgZXh0ZXJuYWwgYGJhZGJsb2Nrc18qYCBBUElzLlxuXG5QdXR0aW5nIGBwcmV2X2JhZGJsb2Nrc2AgaW50byB0aGUgRm9jdXNTeW1ib2xzIHNlZW1zIGxpa2UgdGhlIHNtYXJ0IHBsYXkuIEl0J3MgdGhlIGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgYGJhZGJsb2Nrc19zZXRgLCBgYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgZnVuY3Rpb25hbGl0eSwgbWFraW5nIHRoZW0gdGhlIG1vc3QgcmVsZXZhbnQuIEkgZG9uJ3Qgd2FudCB0byBicmluZyBpbiB1bm5lY2Vzc2FyeSBzdHVmZi5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIGBiYWRibG9ja3MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGlzIG9ubHkgZW5hYmxlZCB3aXRoIGBCTE9DS2Agb3IgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyB0byBjb25zaWRlci4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGJsb2NrL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgaG93IHRoZSBmaXJzdCBmZXcgbGluZXMgYXJlIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTMyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjA3Ljg5MDg5NTMyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgYmxvY2sgbGF5ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Q09OVEVYVF9BTkFMWVNJUyA6PSB5XFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbiAgIDk6XFx0XFx0XFx0XFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRibGstbWVyZ2UubyBibGstdGltZW91dC5vIGJsay1saWIubyBibGstbXEubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRibGstbXEtdGFnLm8gYmxrLW1xLWRtYS5vIGJsay1zdGF0Lm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0YmxrLW1xLXN5c2ZzLm8gYmxrLW1xLWNwdW1hcC5vIGJsay1tcS1zY2hlZC5vIGlvY3RsLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0XFx0Z2VuaGQubyBpb3ByaW8ubyBiYWRibG9ja3MubyBwYXJ0aXRpb25zLyBibGstcnEtcW9zLm8gXFxcXFxcbiAgMTQ6XFx0XFx0XFx0XFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cXG4gIDE1OlxcdFxcbiAgMTY6XFx0b2JqLSQoQ09ORklHX0JMS19FUlJPUl9JTkpFQ1RJT04pICs9IGVycm9yLWluamVjdGlvbi5vXFxuICAxNzpcXHRvYmotJChDT05GSUdfQkxLX0RFVl9CU0dfQ09NTU9OKSArPSBic2cub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVxcdCs9IGJzZy1saWIub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVApXFx0Kz0gYmxrLWNncm91cC5vXFxuICAyMDpcXHRvYmotJChDT05GSUdfQkxLX0NHUk9VUF9SV1NUQVQpXFx0Kz0gYmxrLWNncm91cC1yd3N0YXQub1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICs9IGJsay1jZ3JvdXAtZmMtYXBwaWQub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfVEhST1RUTElORylcXHQrPSBibGstdGhyb3R0bGUub1xcbiAgMjM6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVxcdCs9IGJsay1pb3ByaW8ub1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9MQVRFTkNZKVxcdCs9IGJsay1pb2xhdGVuY3kub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUKVxcdCs9IGJsay1pb2Nvc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MTowNy44OTA5NTcyNTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAxNTMyOTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgYmFkYmxvY2tzLm9gIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBgYmFkYmxvY2tzLm9gIGlzIGRlZmluaXRlbHkgbHVya2luZyBpbiBgb2JqLXlgIHdpdGhpbiBgYmxvY2svTWFrZWZpbGVgLiBUaGF0J3MgdGhlIGZpcnN0IGNsdWUuIEFuZCwgb2YgY291cnNlLCB0aGUgYGJsb2NrL2AgZGlyZWN0b3J5IGl0c2VsZiBnZXRzIGJ1aWx0IG9ubHkgd2hlbiBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgc291cmNlIG9mIHRoYXQgYENPTkZJR19CTE9DS2AgZGVwZW5kZW5jeS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByb290IGBNYWtlZmlsZWAgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gdHJhY2UgaG93IHRoZSBibG9jayBsYXllciBpcyBicm91Z2h0IGluLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQkxPQ0tgIHJlcHJlc2VudHMgdGhlIGJsb2NrIGxheWVyIG9wdGlvbiBpdHNlbGYg4oCTIGdvb2QsIHRoYXQgc2F2ZXMgYSBsb29rdXAuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBkb3duc3RyZWFtIGRlcGVuZGVuY2llcy4gSXMgYGJhZGJsb2Nrc2AgYmVpbmcgcHVsbGVkIGluIHRocm91Z2ggYSBzcGVjaWZpYyBkZXZpY2UgZHJpdmVyIG9yIGEgZmVhdHVyZSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY2FuZGlkYXRlcywgbGlrZSBSQUlEIGZ1bmN0aW9uYWxpdHkgKE1EKSBvciB0aGUgbnVsbCBibG9jayBkcml2ZXIgKE5VTExfQkxLKSwgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZSBpbmNsdXNpb24gb2YgYGJhZGJsb2Nrc2A/IEl0J3MgdGltZSB0byBjaGVjayB0aGVpciByZXNwZWN0aXZlIGBLY29uZmlnYCBmaWxlcywgZXNwZWNpYWxseSBgZHJpdmVycy9tZC9LY29uZmlnYCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbnVsbF9ibGsvYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgY29ubmVjdGlvbnMsIGlmIHRoZXJlIGFyZSBhbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODU2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MTAuOTA2Mjg5ODA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY1OTU4ODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJMS19ERVZfTlVMTF9CTEtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q9MTUwPWF2YWlsYWJsZSBmb3IgdGhlIGVuZHBvaW50IGhhcmR3YXJlIHVzZWQuXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTUxLVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE1MjpUbyBmYWNpbGl0YXRlIHRlc3RpbmcsIGVuYWJsaW5nIHRoZSBudWxsLWJsayBkcml2ZXIgKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTE1My1pcyBhbHNvIHJlY29tbWVuZGVkLiBXaXRoIHRoaXMsIGEgc2ltcGxlIHNldHVwIHVzaW5nIGEgbnVsbF9ibGsgYmxvY2sgZGV2aWNlXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9NDUzPUNPTkZJR19CTEtfREVWX05WTUU9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo0NTQ6Q09ORklHX0JMS19ERVZfTlVMTF9CTEs9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy00NTUtQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUz1tXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9NDQzPUNPTkZJR19CTEtfREVWX05WTUU9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzo0NDQ6Q09ORklHX0JMS19ERVZfTlVMTF9CTEs9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy00NDUtQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUz1tXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19CTEtfREVWX1JOQkQpXFx0Kz0gcm5iZC9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXFx0Kz0gbnVsbF9ibGsvXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfQkxLX0RFVl9SVVNUX05VTEwpICs9IHJudWxsL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTUtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gQkxLX0RFVl9OVUxMX0JMSyBcXHUwMDI2XFx1MDAyNiBGQVVMVF9JTkpFQ1RJT05fQ09ORklHRlNcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU9ND1jY2ZsYWdzLXlcXHRcXHRcXHQrPSAtSSQoc3JjKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXFx0Kz0gbnVsbF9ibGsub1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGUtNy1udWxsX2Jsay1vYmpzXFx0XFx0XFx0Oj0gbWFpbi5vXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMjojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjMtc3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihudWxsX3RpbWVvdXRfYXR0cik7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz05OD1NT0RVTEVfUEFSTV9ERVNDKGhvbWVfbm9kZSwgXFxcIkhvbWUgbm9kZSBmb3IgdGhlIGRldmljZVxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTk5LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEwMDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTAxLS8qXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz02NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG51bGxiX2RldmljZV90eXBlID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNjY0LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjY2NTojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNjY2LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9Nzg2PXN0YXRpYyBzdHJ1Y3QgbnVsbGJfZGV2aWNlICpudWxsX2FsbG9jX2Rldih2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzkzLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjc5NDojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzk1LVxcdGRldi1cXHUwMDNldGltZW91dF9jb25maWcuYXR0ciA9IG51bGxfdGltZW91dF9hdHRyO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTQ5Mj1zdGF0aWMgdm9pZCBudWxsYl9zZXR1cF9id3RpbWVyKHN0cnVjdCBudWxsYiAqbnVsbGIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNTAwLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE1MDE6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE1MDItXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xODk0PXN0YXRpYyBpbnQgbnVsbF92YWxpZGF0ZV9jb25mKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5MzYtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTkzNzojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTkzOC1zdGF0aWMgYm9vbCBfX251bGxfc2V0dXBfZmF1bHQoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIGNoYXIgKnN0cilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE5NTE9c3RhdGljIGJvb2wgbnVsbF9zZXR1cF9mYXVsdCh2b2lkKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NTIte1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5NTM6I2lmZGVmIENPTkZJR19CTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NTQtXFx0aWYgKCFfX251bGxfc2V0dXBfZmF1bHQoXFx1MDAyNm51bGxfdGltZW91dF9hdHRyLCBnX3RpbWVvdXRfc3RyKSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD01Mz1zdHJ1Y3QgbnVsbGJfZGV2aWNlIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC01NS1cXHRzdHJ1Y3QgY29uZmlnX2dyb3VwIGdyb3VwO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo1NjojaWZkZWYgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTU3LVxcdHN0cnVjdCBmYXVsdF9jb25maWcgdGltZW91dF9jb25maWc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjEyLjM3MjI1NTUwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ1NTkwNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUgb2YgQmFkIEJsb2NrIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBiYWQgYmxvY2sgaGFuZGxpbmcgd2l0aGluIHRoaXMgY29kZWJhc2UuIEZpcnN0LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb2J2aW91cyBzdXNwZWN0czogYENPTkZJR19NRGAgYW5kIGBDT05GSUdfQkxLX0RFVl9NRGAuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgYENPTkZJR19CTE9DS2AganVzdCB0byBiZSB0aG9yb3VnaC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGNvcmUgYmxvY2sgZGV2aWNlIGxheWVyLlxuXG5Ob3csIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgaWRlbnRpZnkgKmhvdyogYGJsb2NrL2JhZGJsb2Nrcy5jYCBpcyBjb21waWxlZC4gQmFzZWQgb24gcHJpb3IgZXhwZXJpZW5jZSwgSSdtIHByZXR0eSBzdXJlIGl0J3MgY29udHJvbGxlZCBieSBgQ09ORklHX0JMT0NLYC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZHJpdmVycyBhY3R1YWxseSBleHBvc2UgYmFkIGJsb2NrIGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgYENPTkZJR19CTEtfREVWX01EYCB0aGVyZSwgYXMgd2VsbCBhcyBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGxpa2VseS5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgTUQgY29tcG9uZW50LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGRyaXZlcnMvbWQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgyMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjE0LjYxNzg0ODA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ2MDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9NRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZz0xMz1pZiBNRFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL21kL0tjb25maWc6MTU6Y29uZmlnIEJMS19ERVZfTURcXG5kcml2ZXJzL21kL0tjb25maWctMTYtXFx0dHJpc3RhdGUgXFxcIlJBSUQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MTQuNjY4MzExNDUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODc2Nzc1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgYEtjb25maWdgIGZvciB0aGUgUkFJRCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgUkFJRCBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBtb3ZlIHdpbGwgYmUgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgbGluZXMgMSB0aHJvdWdoIDIwIG9mIGBkcml2ZXJzL21kL0tjb25maWdgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGJhc2ljIGRlZmluaXRpb25zIGFuZCB0b3AtbGV2ZWwgb3B0aW9ucyB3aXRoaW4gdGhhdCBLY29uZmlnIGZpbGUuIEknbSBwcmltYXJpbHkgbG9va2luZyBmb3IgdGhlIGNvcmUgbW9kdWxlIGVuYWJsZXMsIGFueSBpbW1lZGlhdGVseSBvYnZpb3VzIGRlcGVuZGVuY2llcywgYW5kIGhvdyB0aGUgUkFJRCBzeXN0ZW0gaXMgYXJjaGl0ZWN0ZWQgaW4gdGVybXMgb2YgY29uZmlndXJhYmxlIGNvbXBvbmVudHMuIEJhc2VkIG9uIHRoaXMgcXVpY2sgc2NhbiwgSSBjYW4gYmVnaW4gdG8gZ3Jhc3Agd2hldGhlciBhbnkgaW1tZWRpYXRlIGNoYW5nZXMgSSBtYXkgYmUgY29udGVtcGxhdGluZyBhcmUgYWxyZWFkeSBhdmFpbGFibGUgaW4gdGhlIGNvbmZpZywgYW5kIGhvdyB0byBlbmFibGUgdGhlbS4gSSBtYXkgdGhlbiBnbyBkZWVwZXIgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIEkgZmluZCwgc3VjaCBhcyBsb29raW5nIGF0IGFueSBpbmNsdWRlcyBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MTYuNjU1OTkyNTMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBNRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiTXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgc3VwcG9ydCAoUkFJRCBhbmQgTFZNKVxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgU3VwcG9ydCBtdWx0aXBsZSBwaHlzaWNhbCBzcGluZGxlcyB0aHJvdWdoIGEgc2luZ2xlIGxvZ2ljYWwgZGV2aWNlLlxcbiAgMTE6XFx0XFx0ICBSZXF1aXJlZCBmb3IgUkFJRCBhbmQgbG9naWNhbCB2b2x1bWUgbWFuYWdlbWVudC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgTURcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIEJMS19ERVZfTURcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJSQUlEIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQgaWYgU1lTRlNcXG4gIDE4OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgMTk6XFx0XFx0IyBCTE9DS19MRUdBQ1lfQVVUT0xPQUQgcmVxdWlyZW1lbnQgc2hvdWxkIGJlIHJlbW92ZWRcXG4gIDIwOlxcdFxcdCMgYWZ0ZXIgcmVsZXZhbnQgbWRhZG0gZW5oYW5jZW1lbnRzIC0gdG8gbWFrZSBcXFwibmFtZXM9eWVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MToxNi42NTYwNzQ5NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI5NTQ2NTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgYmxvY2svYmFkYmxvY2tzLmNgIFBhdGNoKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgZGVwZW5kZW5jeSBmb3IgYGJsb2NrL2JhZGJsb2Nrcy5jYCBpcywgbmF0dXJhbGx5LCBgQ09ORklHX0JMT0NLYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0J3MgZW5hYmxlZDsgeWVwLCBgQkxPQ0s9eWAsIGdvb2QuIE5vdywgdGhpcyBgYmFkYmxvY2tzYCBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIGV4cG9zZWQgdGhyb3VnaCBlaXRoZXIgYENPTkZJR19CTEtfREVWX01EYCBvciBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgLCBvciBldmVuIGp1c3QgYENPTkZJR19NRGAuIExldCdzIGNvbmZpcm0gdGhvc2UgYXJlIGVuYWJsZWQgYW5kIGNvbnNpZGVyZWQuXG5cbkkndmUgc2NvcGVkIG91dCB0aGUga2V5IHN5bWJvbHM6IGBwcmV2X2JhZGJsb2Nrc2AsIGBiYWRibG9ja3Nfc2V0YCwgYGJhZGJsb2Nrc19jbGVhcmAsIGBiYWRibG9ja3NfY2hlY2tgLCBhbmQgYGJhZGJsb2Nrc19zdG9yZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHNjb3BlLiBMb29raW5nIGludG8gaXQsIGl0IGFwcGVhcnMgYHByZXZfYmFkYmxvY2tzYCBpcyAqb25seSogdXNlZCB3aXRoaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYCwgY2FsbGVkIGR1cmluZyBzZXQsIGNsZWFyLCBvciBjaGVjayBvcGVyYXRpb25zLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSByZXN0IG9mIHRoZSBpZGVudGlmaWVkIHN5bWJvbHM6IHRoZXkgYXJlIGxvY2FsaXplZCBhbmQgZG9uJ3Qgc2VlbSB0byBiZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QgcGF0aHMuXG5cblNvLCBsZXQncyBzdGVwIHRocm91Z2ggdGhlIHJlYXNvbmluZy4gRmlyc3QsIHdoYXQgZGlkIHRoZSBwYXRjaCAqYWN0dWFsbHkqIGNoYW5nZT8gSXQgYWx0ZXJzIHRoZSBgcHJldl9iYWRibG9ja3MoKWAgZnVuY3Rpb24gaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gSXQncyBhIGJpbmFyeSBzZWFyY2gsIHNwZWNpZmljYWxseS4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1cHBlciBib3VuZCBpbml0aWFsaXphdGlvbiBhbmQgY29tcGFyaXNvbiBkdXJpbmcgdGhlIGJpbmFyeSBzZWFyY2gsIGFuZCBpdCBjbGVhbnMgdXAgYSBjb25kaXRpb25hbCBjaGVjay5cblxuU2Vjb25kLCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBgYmFkYmxvY2tzYCBpcyBhIGNlbnRyYWwgYmxvY2sgbGF5ZXIgY29tcG9uZW50IHVzZWQgYnkgc2V2ZXJhbCBibG9jayBkZXZpY2UgZHJpdmVycy4gSSBjYW4gYWNjZXNzIGl0IGZyb20gdXNlciBzcGFjZSB2aWEgYHN5c2ZzYCwgYW5kIGl0IGlzIHVzZWQgZHVyaW5nIEkvTyBjaGVjayBvcGVyYXRpb25zLiBTbywgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBleGVyY2lzZWQuXG5cblRoaXJkLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIFRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgcmVmYWN0b3Jpbmcgc29tZSBjcml0aWNhbCBsb2dpYyByZWdhcmRpbmcgdGhlIGJpbmFyeSBzZWFyY2gncyBpbmRleGluZywgYm91bmRzLCBhbmQgcmV0dXJuIGNvbmRpdGlvbnMuIENoYW5naW5nIGxvZ2ljIGxpa2UgdGhpcyBpbiBhIGNvcmUgc3Vic3lzdGVtIGNvdWxkIGNlcnRhaW5seSBhZmZlY3QgY29ycmVjdG5lc3MsIGVzcGVjaWFsbHkgaW4gYm91bmRhcnkgY29uZGl0aW9ucyBsaWtlIGVtcHR5IHRhYmxlcywgZnVsbCB0YWJsZXMsIGFuZCBlZGdlIG9mZnNldHMuIFRoaXMgaXMgd29ydGggc3BlbmRpbmcgc29tZSBjeWNsZXMgb24uXG5cblRoZSBhc3Nlc3NtZW50IGlzIGNsZWFyLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzM5LCJPdXRwdXRUb2tlbnMiOjIzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjIxLjk1MTU0MzIzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjEyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiQkxLX0RFVl9NRFwiLFxuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXZfYmFkYmxvY2tzXCIsXG4gICAgXCJiYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJiYWRibG9ja3NfY2xlYXJcIixcbiAgICBcImJhZGJsb2Nrc19jaGVja1wiLFxuICAgIFwiYmFkYmxvY2tzX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggbG9naWMgaW4gcHJldl9iYWRibG9ja3MoKSB3aXRoaW4gYmxvY2svYmFkYmxvY2tzLmMsIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaGlnaCBib3VuZGFyeSAoaGkgPSBiYi1cXHUwMDNlY291bnQgLSAxIGluc3RlYWQgb2YgYmItXFx1MDAzZWNvdW50KSwgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGNvbmRpdGlvbiwgYW5kIHRoZSBmYWxsYmFjayByZXR1cm4gYXNzaWdubWVudCAocmV0ID0gbG8gdW5jb25kaXRpb25hbGx5KS4gQmFkIGJsb2NrcyBoYW5kbGluZyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZXhlcmNpc2FibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdmlhIGJsb2NrIGRyaXZlcnMgc3VjaCBhcyBNRC9SQUlEIChkcml2ZXJzL21kKSBhbmQgbnVsbF9ibGsgKGRyaXZlcnMvYmxvY2svbnVsbF9ibGspLCBhcyB3ZWxsIGFzIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlcyAoYmFkYmxvY2tzX3N0b3JlKS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG1vZGlmaWVkIHNlYXJjaCBib3VuZGFyaWVzIGFuZCBpbmRleCBoYW5kbGluZyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG9mZi1ieS1vbmUgZXJyb3JzIG9uIGVkZ2UgY2FzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmV2X2JhZGJsb2Nrc1wiLFxuICAgIFwiYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiYmFkYmxvY2tzX2NsZWFyXCIsXG4gICAgXCJiYWRibG9ja3NfY2hlY2tcIixcbiAgICBcImJhZGJsb2Nrc19zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiaW5hcnkgc2VhcmNoIGxvZ2ljIGluIHByZXZfYmFkYmxvY2tzKCkgd2l0aGluIGJsb2NrL2JhZGJsb2Nrcy5jLCBjaGFuZ2luZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhpZ2ggYm91bmRhcnkgKGhpID0gYmItXFx1MDAzZWNvdW50IC0gMSBpbnN0ZWFkIG9mIGJiLVxcdTAwM2Vjb3VudCksIHRoZSB1cHBlci1ib3VuZCBjaGVjayBjb25kaXRpb24sIGFuZCB0aGUgZmFsbGJhY2sgcmV0dXJuIGFzc2lnbm1lbnQgKHJldCA9IGxvIHVuY29uZGl0aW9uYWxseSkuIEJhZCBibG9ja3MgaGFuZGxpbmcgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGV4ZXJjaXNhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHZpYSBibG9jayBkcml2ZXJzIHN1Y2ggYXMgTUQvUkFJRCAoZHJpdmVycy9tZCkgYW5kIG51bGxfYmxrIChkcml2ZXJzL2Jsb2NrL251bGxfYmxrKSwgYXMgd2VsbCBhcyB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgKGJhZGJsb2Nrc19zdG9yZSkuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmllZCBzZWFyY2ggYm91bmRhcmllcyBhbmQgaW5kZXggaGFuZGxpbmcgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBvZmYtYnktb25lIGVycm9ycyBvbiBlZGdlIGNhc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MToyMi4wMzAxNjM5ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMDcyODU2MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MjIuMDMwNTcxNDY1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzMwNzI0NDQ1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiaW5hcnkgc2VhcmNoIGJvdW5kYXJ5IGluaXRpYWxpemF0aW9uIGluIGBwcmV2X2JhZGJsb2NrcygpYCB3aXRoaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgaGkgPSBiYi1cXHUwMDNlY291bnQgLSAxYCBpbnN0ZWFkIG9mIGBoaSA9IGJiLVxcdTAwM2Vjb3VudGAsIGFkanVzdHMgdGhlIHVwcGVyLWJvdW5kIGNoZWNrIGFjY29yZGluZ2x5LCBhbmQgc2ltcGxpZmllcyB0aGUgcmV0dXJuIHZhbHVlIGFzc2lnbm1lbnQuXFxuXFxuVGhlIGJhZGJsb2NrIGJ1ZmZlciAoYGJiLVxcdTAwM2VwYWdlYCkgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCAvIGBkZXZtX2t6YWxsb2MoKWAgYW5kIGVudHJpZXMgd2l0aGluIGBbMCwgYmItXFx1MDAzZWNvdW50IC0gMV1gIGFyZSBmdWxseSBpbml0aWFsaXplZCBiYWQgYmxvY2sgZW50cmllcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IGluZGV4IGNhbGN1bGF0aW9ucyBhbmQgYm91bmRzIGluIGFuIGludGVybmFsIGJpbmFyeSBzZWFyY2ggcm91dGluZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQsIG5vciBpcyBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGV4cG9zZWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGh5cG90aGV0aWNhbCBpbmRleGluZyBkZWZlY3QgaGVyZSB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBieSBLQVNBTiwgbm90IEtNU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk5NjJkMDIxNjY1Y2FjMWRjZDJkNGE0Mjg3MTRkNDhkMjE4NGEyZDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxODo0MDoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcbmluZGV4IGVjZTY0ZTc2ZmU4ZmYuLjE0M2I0ODhiN2ZlNjggMTAwNjQ0XG4tLS0gYS9ibG9jay9iYWRibG9ja3MuY1xuKysrIGIvYmxvY2svYmFkYmxvY2tzLmNcbkBAIC00OTYsMTQgKzQ5NiwxNCBAQCBzdGF0aWMgaW50IHByZXZfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZCxcbiBcdH1cbiBcbiBcdGxvID0gMDtcbi1cdGhpID0gYmItXHUwMDNlY291bnQ7XG4rXHRoaSA9IGJiLVx1MDAzZWNvdW50IC0gMTtcbiBcdHAgPSBiYi1cdTAwM2VwYWdlO1xuIFxuIFx0LyogVGhlIGZvbGxvd2luZyBiaXNlY3Qgc2VhcmNoIG1pZ2h0IGJlIHVubmVjZXNzYXJ5ICovXG4gXHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcdTAwM2UgcylcbiBcdFx0cmV0dXJuIC0xO1xuLVx0aWYgKEJCX09GRlNFVChwW2hpIC0gMV0pIFx1MDAzYz0gcylcbi1cdFx0cmV0dXJuIGhpIC0gMTtcbitcdGlmIChCQl9PRkZTRVQocFtoaV0pIFx1MDAzYz0gcylcbitcdFx0cmV0dXJuIGhpO1xuIFxuIFx0LyogRG8gYmlzZWN0IHNlYXJjaCBpbiBiYWQgdGFibGUgKi9cbiBcdHdoaWxlIChoaSAtIGxvIFx1MDAzZSAxKSB7XG5AQCAtNTIxLDggKzUyMSw3IEBAIHN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxuIFx0XHRcdGhpID0gbWlkO1xuIFx0fVxuIFxuLVx0aWYgKEJCX09GRlNFVChwW2xvXSkgXHUwMDNjPSBzKVxuLVx0XHRyZXQgPSBsbztcbitcdHJldCA9IGxvO1xuIG91dDpcbiBcdHJldHVybiByZXQ7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MjIuMDMwNTczNzM2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMDMxMzM0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGJsb2NrL2JhZGJsb2Nrcy5jYCB0aGF0IG5lZWRzIGxvb2tpbmcgYXQgYW5kIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWZlbnNpdmUgY29kZSByZXZpZXcvc29mdHdhcmUgdGVzdGluZy9zYW5pdGl6ZXIgYW5hbHlzaXMgdHlwZSBvZiB0YXNrIOKAkyBub3RoaW5nIHRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBcImNyaXRpY2FsIHZ1bG5lcmFiaWxpdHkuXCIgSSBjYW4gY2xhc3NpZnkgdGhpcyBhcyBhIGZhaXJseSBiZW5pZ24gcmVxdWVzdC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGUgZGlmZiBmb2N1c2VzIG9uIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBiaXNlY3Qgc2VhcmNoIGxvZ2ljIHdpdGhpbiBpdC4gVGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSB1cHBlciBib3VuZHMgb2YgdGhlIHNlYXJjaCBzcGFjZSB3aXRoIGFkanVzdGluZyB0aGUgYGhpYCBhbmQgc3Vic2VxdWVudCBjb25kaXRpb25hbHMuIExpbmUgNDk2IGluIGBibG9jay9iYWRibG9ja3MuY2AgaXMgdGhlIGtleSBsb2NhdGlvbiwgYW5kIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG9mZi1ieS1vbmUgb3IgYW4gZWRnZSBjYXNlIGZpeCByZWxhdGVkIHRvIGhvdyB0aGUgc2VhcmNoIGJvdW5kcyBhcmUgaGFuZGxlZCB3aXRoaW4gYSBzb3J0ZWQgYmFkIGJsb2NrIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBvZiB0aGUgYHByZXZfYmFkYmxvY2tzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoYXQgYGJiLVx1MDAzZWNvdW50YCwgYEJCX09GRlNFVGAsIGBsb2AsIGBoaWAsIGFuZCB0aGUgYHBgIGFycmF5IHJlcHJlc2VudC4gVGhlIGJpc2VjdCBzZWFyY2ggaXMgdXNlZCB0byBlZmZpY2llbnRseSBmaW5kIHRoZSBjbG9zZXN0IGJhZCBibG9jayB0byBhIGdpdmVuIHNlY3RvciBgc2AuIFRoaXMgY291bGQgYmUgc2Vuc2l0aXZlIHRvIGJvdW5kYXJ5IGNvbmRpdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0LCBhbmQgdGhhdCBleGlzdGluZyBLTVNBTiBmdXp6ZXJzIGRvbid0IGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoLiBBZnRlciB0aGlzLCBhIGRlZXBlciBkaXZlIGludG8gZXhpc3RpbmcgZnV6emVycyB3aWxsIGJlIG5lZWRlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNvZGUtcGF0aCBpcyBwcm9wZXJseSB0ZXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MTozNC4wNjE5MTEyNDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHR9XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdHJldHVybiByZXQ7XFxuIDQ3MzpcXHR9XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdC8qXFxuIDQ3NjpcXHQgKiBGaW5kIHRoZSByYW5nZSBzdGFydHMgYXQtb3ItYmVmb3JlIGJhZC1cXHUwMDNlc3RhcnQuIElmICdoaW50JyBpcyBwcm92aWRlZFxcbiA0Nzc6XFx0ICogKGhpbnQgXFx1MDAzZT0gMCkgdGhlbiBzZWFyY2ggaW4gdGhlIGJhZCB0YWJsZSBmcm9tIGhpbnQgZmlyc3RseS4gSXQgaXNcXG4gNDc4OlxcdCAqIHZlcnkgcHJvYmFibHkgdGhlIHdhbnRlZCBiYWQgcmFuZ2UgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGhpbnQgaW5kZXgsXFxuIDQ3OTpcXHQgKiB0aGVuIHRoZSB1bm5lY2Vzc2FyeSB3aGlsZS1sb29wIGl0ZXJhdGlvbiBjYW4gYmUgYXZvaWRlZC5cXG4gNDgwOlxcdCAqL1xcbiA0ODE6XFx0c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXFxuIDQ4MjpcXHRcXHRcXHRcXHQgIGludCBoaW50KVxcbiA0ODM6XFx0e1xcbiA0ODQ6XFx0XFx0c2VjdG9yX3QgcyA9IGJhZC1cXHUwMDNlc3RhcnQ7XFxuIDQ4NTpcXHRcXHRpbnQgcmV0ID0gLTE7XFxuIDQ4NjpcXHRcXHRpbnQgbG8sIGhpO1xcbiA0ODc6XFx0XFx0dTY0ICpwO1xcbiA0ODg6XFx0XFxuIDQ4OTpcXHRcXHRpZiAoIWJiLVxcdTAwM2Vjb3VudClcXG4gNDkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0OTE6XFx0XFxuIDQ5MjpcXHRcXHRpZiAoaGludCBcXHUwMDNlPSAwKSB7XFxuIDQ5MzpcXHRcXHRcXHRyZXQgPSBwcmV2X2J5X2hpbnQoYmIsIHMsIGhpbnQpO1xcbiA0OTQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbiA0OTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ5NjpcXHRcXHR9XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdGxvID0gMDtcXG4gNDk5OlxcdFxcdGhpID0gYmItXFx1MDAzZWNvdW50IC0gMTtcXG4gNTAwOlxcdFxcdHAgPSBiYi1cXHUwMDNlcGFnZTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0LyogVGhlIGZvbGxvd2luZyBiaXNlY3Qgc2VhcmNoIG1pZ2h0IGJlIHVubmVjZXNzYXJ5ICovXFxuIDUwMzpcXHRcXHRpZiAoQkJfT0ZGU0VUKHBbbG9dKSBcXHUwMDNlIHMpXFxuIDUwNDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDUwNTpcXHRcXHRpZiAoQkJfT0ZGU0VUKHBbaGldKSBcXHUwMDNjPSBzKVxcbiA1MDY6XFx0XFx0XFx0cmV0dXJuIGhpO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHQvKiBEbyBiaXNlY3Qgc2VhcmNoIGluIGJhZCB0YWJsZSAqL1xcbiA1MDk6XFx0XFx0d2hpbGUgKGhpIC0gbG8gXFx1MDAzZSAxKSB7XFxuIDUxMDpcXHRcXHRcXHRpbnQgbWlkID0gKGxvICsgaGkpLzI7XFxuIDUxMTpcXHRcXHRcXHRzZWN0b3JfdCBhID0gQkJfT0ZGU0VUKHBbbWlkXSk7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdFxcdGlmIChhID09IHMpIHtcXG4gNTE0OlxcdFxcdFxcdFxcdHJldCA9IG1pZDtcXG4gNTE1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1MTY6XFx0XFx0XFx0fVxcbiA1MTc6XFx0XFxuIDUxODpcXHRcXHRcXHRpZiAoYSBcXHUwMDNjIHMpXFxuIDUxOTpcXHRcXHRcXHRcXHRsbyA9IG1pZDtcXG4gNTIwOlxcdFxcdFxcdGVsc2VcXG4gNTIxOlxcdFxcdFxcdFxcdGhpID0gbWlkO1xcbiA1MjI6XFx0XFx0fVxcbiA1MjM6XFx0XFxuIDUyNDpcXHRcXHRyZXQgPSBsbztcXG4gNTI1OlxcdG91dDpcXG4gNTI2OlxcdFxcdHJldHVybiByZXQ7XFxuIDUyNzpcXHR9XFxuIDUyODpcXHRcXG4gNTI5OlxcdC8qXFxuIDUzMDpcXHQgKiBSZXR1cm4gJ3RydWUnIGlmIHRoZSByYW5nZSBpbmRpY2F0ZWQgYnkgJ2JhZCcgY2FuIGJlIGZvcndhcmRcXG4gNTMxOlxcdCAqIG1lcmdlZCB3aXRoIHRoZSBiYWQgcmFuZ2UgKGZyb20gdGhlIGJhZCB0YWJsZSkgaW5kZXhlZCBieSAncHJldicuXFxuIDUzMjpcXHQgKi9cXG4gNTMzOlxcdHN0YXRpYyBib29sIGNhbl9tZXJnZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuIDUzNDpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQpXFxuIDUzNTpcXHR7XFxuIDUzNjpcXHRcXHRzZWN0b3JfdCBzID0gYmFkLVxcdTAwM2VzdGFydDtcXG4gNTM3OlxcdFxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRpZiAoQkJfQUNLKHBbcHJldl0pID09IGJhZC1cXHUwMDNlYWNrIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjM0LjA2MjAyNjY4NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDQ3MDAwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHByZXZfYmFkYmxvY2tzYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBwYXRjaCBkZXRhaWxzLiBGaXJzdCwgSSdtIGV4YW1pbmluZyB0aGUgY29kZSBzbmlwcGV0IHNwZWNpZmljYWxseSB3aXRoaW4gYHByZXZfYmFkYmxvY2tzYC4gSSdtIHN0YXJ0aW5nIGJ5IHVuZGVyc3RhbmRpbmcgdGhlICpiZWZvcmUqIHN0YXRlIHRvIGVmZmVjdGl2ZWx5IGdyYXNwIHRoZSBjaGFuZ2UncyBpbXBhY3QuXG5cblJpZ2h0LCBzbyBwcmV2aW91c2x5IGBoaWAgd2FzIGluaXRpYWxpemVkIHRvIGBiYi1cdTAwM2Vjb3VudGAuIEknbSBpbW1lZGlhdGVseSBub3RpY2luZyBhIHBvdGVudGlhbCBvZmYtYnktb25lIGlzc3VlIGhlcmUuIFRoZSBjb2RlIGNoZWNrcyBgQkJfT0ZGU0VUKHBbaGkgLSAxXSkgXHUwMDNjPSBzYCBpbml0aWFsbHkuIFRoZW4sIHdpdGhpbiB0aGUgYHdoaWxlIChoaSAtIGxvIFx1MDAzZSAxKWAgbG9vcCwgYGhpYCByZW1haW5zIGBiYi1cdTAwM2Vjb3VudGAgd2hpbGUgYHBgIGlzIGFjY2Vzc2VkIHdpdGggYGhpIC0gMWAuIElmIGBCQl9PRkZTRVQocFtoaSAtIDFdKSBcdTAwM2Ugc2AsIHRoZW4gdGhlIGxvb3AgaXMgZW50ZXJlZCB3aXRoIGBoaWAgZXF1YWwgdG8gYGJiLVx1MDAzZWNvdW50YC4gVGhpcyBtZWFucyB3ZSBhcmUgc2tpcHBpbmcgdGhlIGxhc3QgZWxlbWVudC5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGNvcnJlY3QgdGhpcy4gSWYgYGhpYCBiZWNvbWVzIGBiYi1cdTAwM2Vjb3VudCAtIDFgIHdlIGNhbiB0aGVuIGFkZHJlc3MgdGhlIGxhc3QgZWxlbWVudC4gTGV0J3Mgc2VlLi4uIHRoZSBsb2dpYyB3aXRoaW4gdGhlIGJpc2VjdCBzZWFyY2ggbm93IGFwcGVhcnMgY2xlYW5lci4gIGBsb2Agc3RhcnRzIGF0IDAsIGBoaWAgaXMgaW5pdGlhbGl6ZWQgdG8gYGJiLVx1MDAzZWNvdW50IC0gMWAuICBBbmQsIGlmIGBhIFx1MDAzYyBzYCwgdGhlbiBgbG9gIGlzIHNldCB0byBgbWlkYCwgb3IgYGhpYCBpcyBzZXQgdG8gYG1pZGAgd2hlbiBpdCBpcyBub3QuIFRoaXMgbWFrZXMgc2Vuc2UuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGBpZmAgc3RhdGVtZW50OiBgaWYgKEJCX09GRlNFVChwW2xvXSkgXHUwMDNjPSBzKSByZXQgPSBsbztgIGJlY2F1c2UgYHBbbG9dYCBpcyBndWFyYW50ZWVkIHRvIGJlIGBcdTAwM2M9IHNgLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvZGUgc3RhcnRzIHdpdGggYSBjaGVjayB0byByZXR1cm4gYC0xYCBpZiB0aGUgZmlyc3QgZWxlbWVudCBpcyBncmVhdGVyIHRoYW4gYHNgLCBhbmQgdGhlbiBgbG9gIGlzIG9ubHkgdXBkYXRlZCB3aGVuIGBhIFx1MDAzYyBzYC4gVGhlcmVmb3JlIHRoZSBjaGVjayBpcyByZWR1bmRhbnQuXG5cbk5vdywgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlIGJlaGluZCBgYmItXHUwMDNlcGFnZWAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBibG9jay9iYWRibG9ja3MuY2AgdG8gc2VlIGhvdyBgYmFkYmxvY2tzYCB3b3JrcyBpbiBkZXRhaWwgdG8gZnVydGhlciBjbGFyaWZ5IHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MzguNTA5MDI5NDQ5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMyMjk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYi1cXHUwMDNlY291bnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmFkYmxvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmFkYmxvY2tzLmM9NDU3PXN0YXRpYyBpbnQgcHJldl9ieV9oaW50KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBpbnQgaGludClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ2Mi1cXG5ibG9jay9iYWRibG9ja3MuYzo0NjM6XFx0d2hpbGUgKChoaW50IFxcdTAwM2MgaGludF9lbmQpIFxcdTAwMjZcXHUwMDI2ICgoaGludCArIDEpIFxcdTAwM2M9IGJiLVxcdTAwM2Vjb3VudCkgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9iYWRibG9ja3MuYy00NjQtXFx0ICAgICAgIChCQl9PRkZTRVQocFtoaW50XSkgXFx1MDAzYz0gcykpIHtcXG5ibG9jay9iYWRibG9ja3MuYzo0NjU6XFx0XFx0aWYgKChoaW50ICsgMSkgPT0gYmItXFx1MDAzZWNvdW50IHx8IEJCX09GRlNFVChwW2hpbnQgKyAxXSkgXFx1MDAzZSBzKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtNDY2LVxcdFxcdFxcdHJldCA9IGhpbnQ7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz00ODE9c3RhdGljIGludCBwcmV2X2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc3RydWN0IGJhZGJsb2Nrc19jb250ZXh0ICpiYWQsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy00ODgtXFxuYmxvY2svYmFkYmxvY2tzLmM6NDg5OlxcdGlmICghYmItXFx1MDAzZWNvdW50KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ5MC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTQ5OC1cXHRsbyA9IDA7XFxuYmxvY2svYmFkYmxvY2tzLmM6NDk5OlxcdGhpID0gYmItXFx1MDAzZWNvdW50IC0gMTtcXG5ibG9jay9iYWRibG9ja3MuYy01MDAtXFx0cCA9IGJiLVxcdTAwM2VwYWdlO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NTUxPXN0YXRpYyBpbnQgZnJvbnRfbWVyZ2Uoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTU2My1cXHRcXHRtZXJnZWQgPSBtaW5fdChzZWN0b3JfdCwgc2VjdG9ycywgQkJfTUFYX0xFTiAtIEJCX0xFTihwW3ByZXZdKSk7XFxuYmxvY2svYmFkYmxvY2tzLmM6NTY0OlxcdFxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmFkYmxvY2tzLmMtNTY1LVxcdFxcdCAgICBtZXJnZWQgXFx1MDAzZSAoQkJfT0ZGU0VUKHBbcHJldiArIDFdKSAtIEJCX0VORChwW3ByZXZdKSkpIHtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTU4Nz1zdGF0aWMgYm9vbCBjYW5fY29tYmluZV9mcm9udChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy02MDQtICogJ3ByZXYgLSAxJy5cXG5ibG9jay9iYWRibG9ja3MuYzo2MDU6ICogVGhlIGNhbGxlciBvZiBmcm9udF9jb21iaW5lKCkgd2lsbCBkZWNyZWFzZSBiYi1cXHUwMDNlY291bnQsIHRoZXJlZm9yZVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTYwNi0gKiBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGVhciBwW3BlcnZdIGFmdGVyIGZyb250IG1lcmdlLlxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjA4PXN0YXRpYyB2b2lkIGZyb250X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjE0LVxcdFxcdFxcdCAgICAgIEJCX0FDSyhwW3ByZXZdKSk7XFxuYmxvY2svYmFkYmxvY2tzLmM6NjE1OlxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50KVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjYxNjpcXHRcXHRtZW1tb3ZlKHAgKyBwcmV2LCBwICsgcHJldiArIDEsIChiYi1cXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcXG5ibG9jay9iYWRibG9ja3MuYy02MTctfVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjcyPXN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNzAxLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjcwMjpcXHRpZiAoKGJiLVxcdTAwM2Vjb3VudCArICgqZXh0cmEpKSBcXHUwMDNlIE1BWF9CQURCTE9DS1MpXFxuYmxvY2svYmFkYmxvY2tzLmMtNzAzLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTcxNT1zdGF0aWMgaW50IGZyb250X292ZXJ3cml0ZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03MzEtXFx0XFx0XFx0bWVtbW92ZShwICsgcHJldiArIDIsIHAgKyBwcmV2ICsgMSxcXG5ibG9jay9iYWRibG9ja3MuYzo3MzI6XFx0XFx0XFx0XFx0KGJiLVxcdTAwM2Vjb3VudCAtIHByZXYgLSAxKSAqIDgpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTczMy1cXHRcXHRcXHRwW3ByZXYgKyAxXSA9IEJCX01BS0UoYmFkLVxcdTAwM2VzdGFydCArIGJhZC1cXHUwMDNlbGVuLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNzQ1LVxcdFxcdFxcdG1lbW1vdmUocCArIHByZXYgKyAyLCBwICsgcHJldiArIDEsXFxuYmxvY2svYmFkYmxvY2tzLmM6NzQ2OlxcdFxcdFxcdFxcdChiYi1cXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcXG5ibG9jay9iYWRibG9ja3MuYy03NDctXFx0XFx0XFx0cFtwcmV2ICsgMV0gPSBCQl9NQUtFKGJhZC1cXHUwMDNlc3RhcnQsIGJhZC1cXHUwMDNlbGVuLCBiYWQtXFx1MDAzZWFjayk7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03NTktXFx0XFx0bWVtbW92ZShwICsgcHJldiArIDMsIHAgKyBwcmV2ICsgMSxcXG5ibG9jay9iYWRibG9ja3MuYzo3NjA6XFx0XFx0XFx0KGJiLVxcdTAwM2Vjb3VudCAtIHByZXYgLSAxKSAqIDgpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTc2MS1cXHRcXHRwW3ByZXYgKyAxXSA9IEJCX01BS0UoYmFkLVxcdTAwM2VzdGFydCwgYmFkLVxcdTAwM2VsZW4sIGJhZC1cXHUwMDNlYWNrKTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTc3Nz1zdGF0aWMgaW50IGluc2VydF9hdChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IGF0LCBzdHJ1Y3QgYmFkYmxvY2tzX2NvbnRleHQgKmJhZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTc4NC1cXHRsZW4gPSBtaW5fdChzZWN0b3JfdCwgYmFkLVxcdTAwM2VsZW4sIEJCX01BWF9MRU4pO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjc4NTpcXHRpZiAoYXQgXFx1MDAzYyBiYi1cXHUwMDNlY291bnQpXFxuYmxvY2svYmFkYmxvY2tzLmM6Nzg2OlxcdFxcdG1lbW1vdmUocCArIGF0ICsgMSwgcCArIGF0LCAoYmItXFx1MDAzZWNvdW50IC0gYXQpICogOCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtNzg3LVxcdHBbYXRdID0gQkJfTUFLRShiYWQtXFx1MDAzZXN0YXJ0LCBsZW4sIGJhZC1cXHUwMDNlYWNrKTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTc5Mj1zdGF0aWMgdm9pZCBiYWRibG9ja3NfdXBkYXRlX2Fja2VkKHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtODAwLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjgwMTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IDsgaSsrKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtODAyLVxcdFxcdGlmICghQkJfQUNLKHBbaV0pKSB7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz04MTY9c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtODE5LVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjgyMDpcXHRpZiAocHJldiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IChwcmV2ICsgMSkgXFx1MDAzYyBiYi1cXHUwMDNlY291bnQgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9iYWRibG9ja3MuYy04MjEtXFx0ICAgIEJCX0VORChwW3ByZXZdKSA9PSBCQl9PRkZTRVQocFtwcmV2ICsgMV0pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04MjctXFxuYmxvY2svYmFkYmxvY2tzLmM6ODI4OlxcdFxcdGlmICgocHJldiArIDIpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTgyOS1cXHRcXHRcXHRtZW1tb3ZlKHAgKyBwcmV2ICsgMSwgcCArIHByZXYgKyAyLFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjgzMDpcXHRcXHRcXHRcXHQoYmItXFx1MDAzZWNvdW50IC0gIChwcmV2ICsgMikpICogOCk7XFxuYmxvY2svYmFkYmxvY2tzLmM6ODMxOlxcdFxcdGJiLVxcdTAwM2Vjb3VudC0tO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTgzMi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgzOD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg3OC1cXHRcXHRsZW4gPSBpbnNlcnRfYXQoYmIsIDAsIFxcdTAwMjZiYWQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjg3OTpcXHRcXHRiYi1cXHUwMDNlY291bnQrKztcXG5ibG9jay9iYWRibG9ja3MuYy04ODAtXFx0XFx0YWRkZWQrKztcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTg5MS1cXHRcXHRsZW4gPSBpbnNlcnRfYXQoYmIsIDAsIFxcdTAwMjZiYWQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjg5MjpcXHRcXHRiYi1cXHUwMDNlY291bnQrKztcXG5ibG9jay9iYWRibG9ja3MuYy04OTMtXFx0XFx0YWRkZWQrKztcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTkwMC1cXHRcXHRmcm9udF9jb21iaW5lKGJiLCBwcmV2KTtcXG5ibG9jay9iYWRibG9ja3MuYzo5MDE6XFx0XFx0YmItXFx1MDAzZWNvdW50LS07XFxuYmxvY2svYmFkYmxvY2tzLmMtOTAyLVxcdFxcdGFkZGVkKys7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy05MjgtXFx0XFx0YWRkZWQrKztcXG5ibG9jay9iYWRibG9ja3MuYzo5Mjk6XFx0XFx0YmItXFx1MDAzZWNvdW50ICs9IGV4dHJhO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTkzMC1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTkzMi1cXHRcXHRcXHRmcm9udF9jb21iaW5lKGJiLCBwcmV2KTtcXG5ibG9jay9iYWRibG9ja3MuYzo5MzM6XFx0XFx0XFx0YmItXFx1MDAzZWNvdW50LS07XFxuYmxvY2svYmFkYmxvY2tzLmMtOTM0LVxcdFxcdH1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTk0MC1cXHQvKiBjYW5ub3QgbWVyZ2UgYW5kIHRoZXJlIGlzIHNwYWNlIGluIGJhZCB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjk0MTpcXHRpZiAoKHByZXYgKyAxKSBcXHUwMDNjIGJiLVxcdTAwM2Vjb3VudCBcXHUwMDI2XFx1MDAyNlxcbmJsb2NrL2JhZGJsb2Nrcy5jLTk0Mi1cXHQgICAgb3ZlcmxhcF9iZWhpbmQoYmIsIFxcdTAwMjZiYWQsIHByZXYgKyAxKSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTk0Ni1cXHRsZW4gPSBpbnNlcnRfYXQoYmIsIHByZXYgKyAxLCBcXHUwMDI2YmFkKTtcXG5ibG9jay9iYWRibG9ja3MuYzo5NDc6XFx0YmItXFx1MDAzZWNvdW50Kys7XFxuYmxvY2svYmFkYmxvY2tzLmMtOTQ4LVxcdGFkZGVkKys7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy05ODQtICogY292ZXJlZCBieSB0aGUgY2xlYXJpbmcgcmFuZ2UgYW5kIGZ1bGx5IGNsZWFyZWQsICdkZWxldGUnIGlzIHNldCBhcyAxIGZvclxcbmJsb2NrL2JhZGJsb2Nrcy5jOjk4NTogKiB0aGUgY2FsbGVyIHRvIHJlZHVjZSBiYi1cXHUwMDNlY291bnQuXFxuYmxvY2svYmFkYmxvY2tzLmMtOTg2LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jPTk4Nz1zdGF0aWMgaW50IGZyb250X2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwMDQtXFx0XFx0XFx0Y2xlYXJlZCA9IEJCX0xFTihwW3ByZXZdKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMDA1OlxcdFxcdFxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwMDYtXFx0XFx0XFx0XFx0bWVtbW92ZShwICsgcHJldiwgcCArIHByZXYgKyAxLFxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMDc6XFx0XFx0XFx0XFx0ICAgICAgIChiYi1cXHUwMDNlY291bnQgLSBwcmV2IC0gMSkgKiA4KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMDA4LVxcdFxcdFxcdCpkZWxldGVkID0gMTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEwMzA9c3RhdGljIGludCBmcm9udF9zcGxpdHRpbmdfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA0MS1cXHRcXHRcXHQgIGFjayk7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTA0MjpcXHRtZW1tb3ZlKHAgKyBwcmV2ICsgMiwgcCArIHByZXYgKyAxLCAoYmItXFx1MDAzZWNvdW50IC0gcHJldiAtIDEpICogOCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTA0My1cXHRwW3ByZXYgKyAxXSA9IEJCX01BS0UocyArIHNlY3RvcnMsIGVuZCAtIHMgLSBzZWN0b3JzLCBhY2spO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTA0OD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTExMi1cXHQvKiBTdGFydCBhZnRlciBhbGwgYmFkYmxvY2tzICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTExMzpcXHRpZiAoKHByZXYgKyAxKSBcXHUwMDNlPSBiYi1cXHUwMDNlY291bnQgXFx1MDAyNlxcdTAwMjYgIW92ZXJsYXBfZnJvbnQoYmIsIHByZXYsIFxcdTAwMjZiYWQpKSB7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTExNC1cXHRcXHRsZW4gPSBzZWN0b3JzO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTEyOS1cXHRcXHRcXHQvKiBTcGxpdHRpbmcgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMTMwOlxcdFxcdFxcdGlmICgoYmItXFx1MDAzZWNvdW50ICsgMSkgXFx1MDAzYz0gTUFYX0JBREJMT0NLUykge1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzEtXFx0XFx0XFx0XFx0bGVuID0gZnJvbnRfc3BsaXR0aW5nX2NsZWFyKGJiLCBwcmV2LCBcXHUwMDI2YmFkKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMTMyOlxcdFxcdFxcdFxcdGJiLVxcdTAwM2Vjb3VudCArPSAxO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzMtXFx0XFx0XFx0XFx0Y2xlYXJlZCsrO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTE0MS1cXHRcXHRcXHRsZW4gPSBmcm9udF9jbGVhcihiYiwgcHJldiwgXFx1MDAyNmJhZCwgXFx1MDAyNmRlbGV0ZWQpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExNDI6XFx0XFx0XFx0YmItXFx1MDAzZWNvdW50IC09IGRlbGV0ZWQ7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTE0My1cXHRcXHRcXHRjbGVhcmVkKys7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMTUwLVxcdC8qIE5vdCBmcm9udCBvdmVybGFwLCBidXQgYmVoaW5kIG92ZXJsYXAgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMTUxOlxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2IG92ZXJsYXBfYmVoaW5kKGJiLCBcXHUwMDI2YmFkLCBwcmV2ICsgMSkpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMTUyLVxcdFxcdGxlbiA9IEJCX09GRlNFVChwW3ByZXYgKyAxXSkgLSBiYWQuc3RhcnQ7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMTg1PXN0YXRpYyBpbnQgX2JhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyMDctXFx0aWYgKChwcmV2IFxcdTAwM2U9IDApIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmFkYmxvY2tzLmM6MTIwODpcXHQgICAgKChwcmV2ICsgMSkgXFx1MDAzZT0gYmItXFx1MDAzZWNvdW50KSBcXHUwMDI2XFx1MDAyNiAhb3ZlcmxhcF9mcm9udChiYiwgcHJldiwgXFx1MDAyNmJhZCkpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMjA5LVxcdFxcdGxlbiA9IHNlY3RvcnM7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMjMzLVxcdC8qIE5vdCBmcm9udCBvdmVybGFwLCBidXQgYmVoaW5kIG92ZXJsYXAgKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMjM0OlxcdGlmICgocHJldiArIDEpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IFxcdTAwMjZcXHUwMDI2IG92ZXJsYXBfYmVoaW5kKGJiLCBcXHUwMDI2YmFkLCBwcmV2ICsgMSkpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMjM1LVxcdFxcdGxlbiA9IEJCX09GRlNFVChwW3ByZXYgKyAxXSkgLSBiYWQuc3RhcnQ7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMzc0PXZvaWQgYWNrX2FsbF9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzg0LVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzODU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJiLVxcdTAwM2Vjb3VudCA7IGkrKykge1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODYtXFx0XFx0XFx0aWYgKCFCQl9BQ0socFtpXSkpIHtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzOTMtXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM5NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYmItXFx1MDAzZWNvdW50IDsgaSsrKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzOTUtXFx0XFx0XFx0d2hpbGUgKHRyeV9hZGphY2VudF9jb21iaW5lKGJiLCBpKSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0MTM9c3NpemVfdCBiYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY2hhciAqcGFnZSwgaW50IHVuYWNrKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQyOC1cXG5ibG9jay9iYWRibG9ja3MuYzoxNDI5OlxcdHdoaWxlIChsZW4gXFx1MDAzYyBQQUdFX1NJWkUgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIGJiLVxcdTAwM2Vjb3VudCkge1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MzAtXFx0XFx0c2VjdG9yX3QgcyA9IEJCX09GRlNFVChwW2ldKTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0OTA9c3RhdGljIGludCBfX2JhZGJsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDkzLVxcdGJiLVxcdTAwM2VkZXYgPSBkZXY7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTQ5NDpcXHRiYi1cXHUwMDNlY291bnQgPSAwO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0OTUtXFx0aWYgKGVuYWJsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6MzguNTU1MzU5MjgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMzAzMzE4NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHByZXZfYmFkYmxvY2tzYCBCaXNlY3Rpb24gU2VhcmNoIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBibG9jay9iYWRibG9ja3MuY2AgdGhhdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIHRoZSBgcHJldl9iYWRibG9ja3NgIGZ1bmN0aW9uLCBhIGJpc2VjdGlvbiBzZWFyY2ggaGVscGVyLiBJbml0aWFsbHksIEkgd2FudGVkIHRvIGRpZyBpbnRvIHRoZSBnaXQgaGlzdG9yeSBmb3IgdGhlIGNvbnRleHQsIG1heWJlIHVuY292ZXIgdGhlIHNwZWNpZmljIGJ1ZyB0aGlzIHBhdGNoIGZpeGVkIG9yIGl0cyBtb3RpdmF0aW9uLiBCdXQgc2luY2UgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gYGdpdCBsb2dgLCBJIG5lZWQgdG8gcmVseSBvbiBjb2RlIGFuYWx5c2lzLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGRpZmZlcmVuY2U6IGBoaSA9IGJiLVx1MDAzZWNvdW50YCBoYXMgYmVjb21lIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMWAuIEFuZCB0aGVyZSdzIGFsc28gYSBzaW1wbGlmaWNhdGlvbiBhdCB0aGUgZW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuXG5cblRyYWNpbmcgdGhlIGxvZ2ljLCBiZWZvcmUgdGhlIGNoYW5nZSwgYGhpYCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGJiLVx1MDAzZWNvdW50YC4gVGhpcyBtZWFudCBgcFtoaS0xXWAgd2FzIHRoZSBsYXN0IHZhbGlkIGVsZW1lbnQsIGFuZCBgcFtoaV1gIHdvdWxkIGhhdmUgYmVlbiBvdXQtb2YtYm91bmRzLCBhcyB0aGUgYXJyYXkgaGFzIGBiYi1cdTAwM2Vjb3VudGAgZWxlbWVudHMuIFRoZSBjaGVjayBgaWYgKEJCX09GRlNFVChwW2hpIC0gMV0pIFx1MDAzYz0gcylgIGhhbmRsZWQgdGhpcy4gVGhlIHdoaWxlIGxvb3AgdGhlbiBwZXJmb3JtZWQgYSBiaXNlY3Qgc2VhcmNoLiBUaGUgb3JpZ2luYWwgY29kZSB0aGVuIGNoZWNrcyBmb3IgYGlmIChCQl9PRkZTRVQocFtsb10pIFx1MDAzYz0gcykgcmV0ID0gbG87YC4gVGhlIGNoYW5nZSBpcyB0aGF0IHRoaXMgY2hlY2sgaXMgcmVtb3ZlZC5cblxuSXQncyBiZWNvbWluZyBjbGVhcjogU2V0dGluZyBgaGkgPSBiYi1cdTAwM2Vjb3VudGAgY3JlYXRlZCBhbiAqb2ZmLWJ5LW9uZSogaXNzdWUsIG9yIGFuIGVkZ2UgY29uZGl0aW9uLiBCeSBzZXR0aW5nIGBoaSA9IGJiLVx1MDAzZWNvdW50IC0gMWAsIHdlJ3JlIG1ha2luZyB0aGUgYmlzZWN0aW9uIG1vcmUgcHJlY2lzZSBieSBzdGFydGluZyB0aGUgc2VhcmNoIHdpdGggYGhpYCBhcyB0aGUga25vd24gdXBwZXIgYm91bmQgaW5kZXggc3VjaCB0aGF0IGBCQl9PRkZTRVQocFtoaV0pIFx1MDAzZSBzYC4gVGhlbiB0aGUgbG9vcCB3aWxsIGd1YXJhbnRlZSB0aGF0IGBsb2AgaXMgdGhlIGxhcmdlc3QgaW5kZXggd2l0aCBgcFtsb10gXHUwMDNjPSBzYC4gUmVtb3ZpbmcgdGhlIGNoZWNrIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgaXMgYW4gb3B0aW1pemF0aW9uLCBhcyB0aGUgd2hpbGUgbG9vcCBndWFyYW50ZWVzIHRoYXQgY29uZGl0aW9uLlxuXG5TbywgaW4gZXNzZW5jZSwgdGhlIHBhdGNoIGNvcnJlY3RzIGFuIGVkZ2UgY2FzZSBhbmQgc2ltcGxpZmllcyB0aGUgbG9naWMuIE5vLCB0aGlzIGRvZXMgbm90IHNlZW0gdG8gdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIEtNU0FOIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGZhY3RvciBoZXJlLiBgcHJldl9iYWRibG9ja3NgIGlzIGFuIGludGVybmFsIGhlbHBlciBpbiBgYmxvY2svYmFkYmxvY2tzLmNgIHBlcmZvcm1pbmcgYmlzZWN0aW9uIHNlYXJjaCBpbiBgYmItXHUwMDNlcGFnZWAsIHdoaWNoIGlzIGFuIGFycmF5IG9mIGB1NjRgLCBhbmQgdGhlcmUncyBubyBkYXRhIHRoYXQgaXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBzaG91bGQgYmUgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM4NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6NDE6NDkuODU4NjgxMzA5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgzMjIyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYi1cXHUwMDNlcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iYWRibG9ja3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYz00NTc9c3RhdGljIGludCBwcmV2X2J5X2hpbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIGludCBoaW50KVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNDU5LVxcdGludCBoaW50X2VuZCA9IGhpbnQgKyAyO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjQ2MDpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy00NjEtXFx0aW50IHJldCA9IC0xO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NDgxPXN0YXRpYyBpbnQgcHJldl9iYWRibG9ja3Moc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNDk5LVxcdGhpID0gYmItXFx1MDAzZWNvdW50IC0gMTtcXG5ibG9jay9iYWRibG9ja3MuYzo1MDA6XFx0cCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTUwMS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTUzMz1zdGF0aWMgYm9vbCBjYW5fbWVyZ2VfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNTM2LVxcdHNlY3Rvcl90IHMgPSBiYWQtXFx1MDAzZXN0YXJ0O1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjUzNzpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy01MzgtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz01NTE9c3RhdGljIGludCBmcm9udF9tZXJnZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNTU0LVxcdHNlY3Rvcl90IHMgPSBiYWQtXFx1MDAzZXN0YXJ0O1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjU1NTpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy01NTYtXFx0aW50IG1lcmdlZCA9IDA7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz01ODc9c3RhdGljIGJvb2wgY2FuX2NvbWJpbmVfZnJvbnQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNTg5LXtcXG5ibG9jay9iYWRibG9ja3MuYzo1OTA6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtNTkxLVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjA4PXN0YXRpYyB2b2lkIGZyb250X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTYwOS17XFxuYmxvY2svYmFkYmxvY2tzLmM6NjEwOlxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTYxMS1cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTYyNT1zdGF0aWMgYm9vbCBvdmVybGFwX2Zyb250KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgZnJvbnQsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy02Mjcte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjYyODpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy02MjktXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz02NDA9c3RhdGljIGJvb2wgb3ZlcmxhcF9iZWhpbmQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjQyLXtcXG5ibG9jay9iYWRibG9ja3MuYzo2NDM6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtNjQ0LVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjcyPXN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNjc0LXtcXG5ibG9jay9iYWRibG9ja3MuYzo2NzU6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtNjc2LVxcdGludCBsZW47XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz03MTU9c3RhdGljIGludCBmcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNzE3LXtcXG5ibG9jay9iYWRibG9ja3MuYzo3MTg6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtNzE5LVxcdHNlY3Rvcl90IG9yaWdfZW5kID0gQkJfRU5EKHBbcHJldl0pO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9Nzc3PXN0YXRpYyBpbnQgaW5zZXJ0X2F0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgYXQsIHN0cnVjdCBiYWRibG9ja3NfY29udGV4dCAqYmFkKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTc3OC17XFxuYmxvY2svYmFkYmxvY2tzLmM6Nzc5OlxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTc4MC1cXHRpbnQgbGVuO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NzkyPXN0YXRpYyB2b2lkIGJhZGJsb2Nrc191cGRhdGVfYWNrZWQoc3RydWN0IGJhZGJsb2NrcyAqYmIpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy03OTQtXFx0Ym9vbCB1bmFja2VkID0gZmFsc2U7XFxuYmxvY2svYmFkYmxvY2tzLmM6Nzk1OlxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTc5Ni1cXHRpbnQgaTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgxNj1zdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXFxuYmxvY2svYmFkYmxvY2tzLmMtODE3LXtcXG5ibG9jay9iYWRibG9ja3MuYzo4MTg6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtODE5LVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9ODM4PXN0YXRpYyBib29sIF9iYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtODY2LVxcdGJhZC5hY2sgPSBhY2tub3dsZWRnZWQ7XFxuYmxvY2svYmFkYmxvY2tzLmM6ODY3OlxcdHAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy04NjgtXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz05ODc9c3RhdGljIGludCBmcm9udF9jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy05OTEtXFx0c2VjdG9yX3QgcyA9IGJhZC1cXHUwMDNlc3RhcnQ7XFxuYmxvY2svYmFkYmxvY2tzLmM6OTkyOlxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTk5My1cXHRpbnQgY2xlYXJlZCA9IDA7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMDMwPXN0YXRpYyBpbnQgZnJvbnRfc3BsaXR0aW5nX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBpbnQgcHJldixcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwMzIte1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEwMzM6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTAzNC1cXHR1NjQgZW5kID0gQkJfRU5EKHBbcHJldl0pO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTA0OD1zdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA4MC1cXHRiYWQuYWNrID0gdHJ1ZTtcXG5ibG9jay9iYWRibG9ja3MuYzoxMDgxOlxcdHAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMDgyLVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTE4NT1zdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMTkxLVxcdGludCBhY2tlZF9iYWRibG9ja3MgPSAwO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjExOTI6XFx0dTY0ICpwID0gYmItXFx1MDAzZXBhZ2U7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTE5My1cXHRpbnQgbGVuLCBydjtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEzNzQ9dm9pZCBhY2tfYWxsX2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYilcXG5ibG9jay9iYWRibG9ja3MuYy0xMzc1LXtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzc2OlxcdGlmIChiYi1cXHUwMDNlcGFnZSA9PSBOVUxMIHx8IGJiLVxcdTAwM2VjaGFuZ2VkKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzctXFx0XFx0Lyogbm8gcG9pbnQgZXZlbiB0cnlpbmcgKi9cXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODEtXFx0aWYgKGJiLVxcdTAwM2VjaGFuZ2VkID09IDAgXFx1MDAyNlxcdTAwMjYgYmItXFx1MDAzZXVuYWNrZWRfZXhpc3QpIHtcXG5ibG9jay9iYWRibG9ja3MuYzoxMzgyOlxcdFxcdHU2NCAqcCA9IGJiLVxcdTAwM2VwYWdlO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODMtXFx0XFx0aW50IGk7XFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xNDEzPXNzaXplX3QgYmFkYmxvY2tzX3Nob3coc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNoYXIgKnBhZ2UsIGludCB1bmFjaylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0MTYtXFx0aW50IGk7XFxuYmxvY2svYmFkYmxvY2tzLmM6MTQxNzpcXHR1NjQgKnAgPSBiYi1cXHUwMDNlcGFnZTtcXG5ibG9jay9iYWRibG9ja3MuYy0xNDE4LVxcdHVuc2lnbmVkIHNlcTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTE0OTA9c3RhdGljIGludCBfX2JhZGJsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJhZGJsb2NrcyAqYmIsXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDk5LVxcdGlmIChkZXYpXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUwMDpcXHRcXHRiYi1cXHUwMDNlcGFnZSA9IGRldm1fa3phbGxvYyhkZXYsIFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUwMS1cXHRlbHNlXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUwMjpcXHRcXHRiYi1cXHUwMDNlcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG5ibG9jay9iYWRibG9ja3MuYzoxNTAzOlxcdGlmICghYmItXFx1MDAzZXBhZ2UpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xNTA0LVxcdFxcdGJiLVxcdTAwM2VzaGlmdCA9IC0xO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTUzOT12b2lkIGJhZGJsb2Nrc19leGl0KHN0cnVjdCBiYWRibG9ja3MgKmJiKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTU0My1cXHRpZiAoYmItXFx1MDAzZWRldilcXG5ibG9jay9iYWRibG9ja3MuYzoxNTQ0OlxcdFxcdGRldm1fa2ZyZWUoYmItXFx1MDAzZWRldiwgYmItXFx1MDAzZXBhZ2UpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NDUtXFx0ZWxzZVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1NDY6XFx0XFx0a2ZyZWUoYmItXFx1MDAzZXBhZ2UpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE1NDc6XFx0YmItXFx1MDAzZXBhZ2UgPSBOVUxMO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1NDgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODo0MTo0OS45MDU1MTkxMjFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE5NzQ3NTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBiYi1cdTAwM2VwYWdlYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHdoZXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBgZGV2bV9remFsbG9jYCwgbWVhbmluZyBpdCdzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZC4gRXhjZWxsZW50LCB0aGF0IHRha2VzIGNhcmUgb2YgYSBodWdlIHBvdGVudGlhbCBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEZ1cnRoZXJtb3JlLCB3ZSdyZSBleHBsaWNpdGx5IHRyYWNraW5nIHRoZSBgYmItXHUwMDNlY291bnRgIGVudHJpZXMsIGFuZCB3b3JraW5nIHdpdGhpbiB0aGUgYm91bmRzIG9mIGAwYCB0byBgYmItXHUwMDNlY291bnQgLSAxYC5cblxuVGhlIGJpc2VjdCBzZWFyY2ggbG9naWMgd2l0aGluIGBwcmV2X2JhZGJsb2Nrc2AgaXMgbm93IHNvdW5kLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgZm9yIGBoaWAgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gYGJiLVx1MDAzZWNvdW50YCwgYnV0IHRoYXQncyBiZWVuIGFkZHJlc3NlZCBieSBpbml0aWFsaXppbmcgYGhpYCB0byBgYmItXHUwMDNlY291bnQgLSAxYCBub3csIHdoaWNoIGVuc3VyZXMgd2Ugc3RheSB3aXRoaW4gdGhlIHZhbGlkIGJvdW5kcy4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBjcmVhdGVkLCByZWFkLCBvciBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiBhbnl0aGluZyB1bmluaXRpYWxpemVkLiBBbGwgYWNjZXNzZXMgYXJlIGV4cGxpY2l0bHkgd2l0aGluIHRoZSBpbml0aWFsaXplZCByZWdpb24uIEFueSBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbmRleGluZyBlcnJvcnMgdGhhdCAqbWlnaHQqIGV4aXN0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IGNhdWdodCBieSBLQVNBTi5cblxuTGV0J3MgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IHRvIGJlIHN1cmU6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBmaWVsZHMvcGFkZGluZyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQ/IE5vcGUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBEZWZpbml0ZWx5IG5vdC4gVGhlIHdob2xlIHBhZ2UgaXMgemVyby1pbml0aWFsaXplZCwgYW5kIHRoZSB1c2VkIHBvcnRpb24gaXMgdHJhY2tlZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIEtBU0FOIGlzIHBlcmZlY3RseSBzdWZmaWNpZW50IGhlcmUgdG8gY2F0Y2ggYW55IHBvc3NpYmxlIGlzc3VlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLiBUaGlzIGlzIG5vdCB0aGUgc2NlbmFyaW8gd2hlcmUgS01TQU4gcHJvdmlkZXMgdW5pcXVlIHZhbHVlLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCB3aGljaCBlbXBoYXNpemUgdGhhdCBLTVNBTiBzaG91bGQgb25seSBiZSB1c2VkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSAqb25seSogZGV0ZWN0ZWQgYnkgS01TQU4sIHRoaXMgaXMgYSBjbGVhciBcIm5vXCIuXG5GaW5hbCBjaGVjazogcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzMsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjQxOjU1LjEwMjk5NzgwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggYm91bmRhcnkgaW5pdGlhbGl6YXRpb24gaW4gYHByZXZfYmFkYmxvY2tzKClgIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGBoaSA9IGJiLVxcdTAwM2Vjb3VudCAtIDFgIGluc3RlYWQgb2YgYGhpID0gYmItXFx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cXG5cXG5UaGUgYmFkYmxvY2sgYnVmZmVyIChgYmItXFx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cXHUwMDNlY291bnQgLSAxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJhZCBibG9jayBlbnRyaWVzLiBUaGUgY2hhbmdlcyBtb2RpZnkgaW5kZXggY2FsY3VsYXRpb25zIGFuZCBib3VuZHMgaW4gYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaCByb3V0aW5lLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZCwgbm9yIGlzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgZXhwb3NlZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgaHlwb3RoZXRpY2FsIGluZGV4aW5nIGRlZmVjdCBoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGJ5IEtBU0FOLCBub3QgS01TQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJpbmFyeSBzZWFyY2ggYm91bmRhcnkgaW5pdGlhbGl6YXRpb24gaW4gYHByZXZfYmFkYmxvY2tzKClgIHdpdGhpbiBgYmxvY2svYmFkYmxvY2tzLmNgLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGBoaSA9IGJiLVxcdTAwM2Vjb3VudCAtIDFgIGluc3RlYWQgb2YgYGhpID0gYmItXFx1MDAzZWNvdW50YCwgYWRqdXN0cyB0aGUgdXBwZXItYm91bmQgY2hlY2sgYWNjb3JkaW5nbHksIGFuZCBzaW1wbGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgYXNzaWdubWVudC5cXG5cXG5UaGUgYmFkYmxvY2sgYnVmZmVyIChgYmItXFx1MDAzZXBhZ2VgKSBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIC8gYGRldm1fa3phbGxvYygpYCBhbmQgZW50cmllcyB3aXRoaW4gYFswLCBiYi1cXHUwMDNlY291bnQgLSAxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJhZCBibG9jayBlbnRyaWVzLiBUaGUgY2hhbmdlcyBtb2RpZnkgaW5kZXggY2FsY3VsYXRpb25zIGFuZCBib3VuZHMgaW4gYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaCByb3V0aW5lLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZCwgbm9yIGlzIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgZXhwb3NlZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgaHlwb3RoZXRpY2FsIGluZGV4aW5nIGRlZmVjdCBoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGJ5IEtBU0FOLCBub3QgS01TQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow45w9x[1] Phase: Succeeded StartedAt: 2026-09-13 18:42:06 +0000 UTC FinishedAt: 2026-09-13 18:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 18:42:06 +0000 UTC FinishedAt: 2026-09-13 18:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2] Phase: Succeeded StartedAt: 2026-09-13 18:42:06 +0000 UTC FinishedAt: 2026-09-13 22:22:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 18:42:06 +0000 UTC FinishedAt: 2026-09-13 22:22:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 18:42:06 +0000 UTC FinishedAt: 2026-09-13 18:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 18:42:06 +0000 UTC FinishedAt: 2026-09-13 18:42:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow45w9x/series-workflow45w9x-convert-artifact-205538751/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 18:42:17 +0000 UTC FinishedAt: 2026-09-13 18:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 18:42:17 +0000 UTC FinishedAt: 2026-09-13 18:58:26 +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:*05895f39-fa2b-4d21-bc09-6b51651fec9a,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-workflow45w9x/series-workflow45w9x-convert-artifact-205538751/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": "0ce4adb7-5ffe-4843-a9bf-88327a2f9750", "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-workflow45w9x/series-workflow45w9x-build-action-1254641733/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 18:42:17 +0000 UTC FinishedAt: 2026-09-13 18:58:16 +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:*05895f39-fa2b-4d21-bc09-6b51651fec9a,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-workflow45w9x/series-workflow45w9x-convert-artifact-205538751/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": "0ce4adb7-5ffe-4843-a9bf-88327a2f9750", "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-workflow45w9x/series-workflow45w9x-build-action-1254641733/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 18:58:26 +0000 UTC FinishedAt: 2026-09-13 18:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 18:58:26 +0000 UTC FinishedAt: 2026-09-13 18:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 18:58:26 +0000 UTC FinishedAt: 2026-09-13 18:58:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 18:58:26 +0000 UTC FinishedAt: 2026-09-13 18:58:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow45w9x/series-workflow45w9x-convert-artifact-100688846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 18:58:36 +0000 UTC FinishedAt: 2026-09-13 19:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 18:58:36 +0000 UTC FinishedAt: 2026-09-13 19:00:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ce4adb7-5ffe-4843-a9bf-88327a2f9750,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-workflow45w9x/series-workflow45w9x-build-action-1254641733/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-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 19:00:33 +0000 UTC FinishedAt: 2026-09-13 19:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 19:00:33 +0000 UTC FinishedAt: 2026-09-13 19:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 19:00:33 +0000 UTC FinishedAt: 2026-09-13 19:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 19:00:33 +0000 UTC FinishedAt: 2026-09-13 19:16:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*05895f39-fa2b-4d21-bc09-6b51651fec9a,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-workflow45w9x/series-workflow45w9x-convert-artifact-100688846/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": "c3c3af36-08fc-4196-9a78-0123c879a054", "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-workflow45w9x/series-workflow45w9x-build-action-423036258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 19:00:33 +0000 UTC FinishedAt: 2026-09-13 19:16:28 +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:*05895f39-fa2b-4d21-bc09-6b51651fec9a,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-workflow45w9x/series-workflow45w9x-convert-artifact-100688846/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": "c3c3af36-08fc-4196-9a78-0123c879a054", "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-workflow45w9x/series-workflow45w9x-build-action-423036258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 19:16:38 +0000 UTC FinishedAt: 2026-09-13 19:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 19:16:38 +0000 UTC FinishedAt: 2026-09-13 19:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 19:16:38 +0000 UTC FinishedAt: 2026-09-13 19:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 19:16:38 +0000 UTC FinishedAt: 2026-09-13 19:18:29 +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:*c3c3af36-08fc-4196-9a78-0123c879a054,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-workflow45w9x/series-workflow45w9x-build-action-423036258/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-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 19:18:39 +0000 UTC FinishedAt: 2026-09-13 22:22:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 19:18:39 +0000 UTC FinishedAt: 2026-09-13 22:22:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0ce4adb7-5ffe-4843-a9bf-88327a2f9750,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3c3af36-08fc-4196-9a78-0123c879a054,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-workflow45w9x/series-workflow45w9x-build-action-1254641733/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-workflow45w9x/series-workflow45w9x-build-action-423036258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 19:18:39 +0000 UTC FinishedAt: 2026-09-13 19:18:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 19:18:39 +0000 UTC FinishedAt: 2026-09-13 19:18:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow45w9x/series-workflow45w9x-convert-artifact-708913395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 19:18:39 +0000 UTC FinishedAt: 2026-09-13 19:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 19:18:39 +0000 UTC FinishedAt: 2026-09-13 19:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 19:18:40 +0000 UTC FinishedAt: 2026-09-13 19:18:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 19:18:50 +0000 UTC FinishedAt: 2026-09-13 22:22:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45w9x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"ab5dc9daf73212125eb846404e1499a9e06679a1","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["prev_badblocks","badblocks_set","badblocks_clear","badblocks_check","badblocks_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab5dc9daf73212125eb846404e1499a9e06679a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","BLK_DEV_MD","BLK_DEV_NULL_BLK"],"series_id":"dd7a9d80-42b9-4fa4-8b95-03faa9e35005","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 19:18:50 +0000 UTC FinishedAt: 2026-09-13 22:22:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ce4adb7-5ffe-4843-a9bf-88327a2f9750,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3c3af36-08fc-4196-9a78-0123c879a054,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-workflow45w9x/series-workflow45w9x-build-action-1254641733/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-workflow45w9x/series-workflow45w9x-build-action-423036258/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-workflow45w9x/series-workflow45w9x-convert-artifact-708913395/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,}