Name: series-workflow8w7st Phase: Succeeded StartedAt: 2026-07-28 08:18:45 +0000 UTC FinishedAt: 2026-07-28 13:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[0] Phase: Succeeded StartedAt: 2026-07-28 08:18:45 +0000 UTC FinishedAt: 2026-07-28 08:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 08:18:45 +0000 UTC FinishedAt: 2026-07-28 08:51:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "62cc90241548d5570ee68e01aaba6506964e9811", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "62cc90241548d5570ee68e01aaba6506964e9811", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "LRU_GEN" ], "series_id": "a0e68350-67b9-49cf-a254-2bb599f72b94" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "try_to_free_mem_cgroup_pages", "wakeup_kswapd", "workingset_refault" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3dha2V1cF9rc3dhcGQmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzIzYmQzMDhkNGE3NzZkNTYwMTJiOGMyYzhmZmYxZTNmZGUyYTJhMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDA4OjQ5OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjJmLi43YWU2N2FjMjM1MTA3NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk0Nyw2ICYjNDM7OTQ3LDggQEAgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcbiBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gXG5AQCAtMTM5OSw2ICYjNDM7MTQwMSwxMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0XHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uODUzMDNjNTg2N2M4NGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMzIzLDYgJiM0MzszMjMsOCBAQCBlbnVtIG5vZGVfc3RhdF9pdGVtIHtcbiBcdFBHU0NBTl9QUk9BQ1RJVkUsXG4gXHRQR1NDQU5fQU5PTixcbiBcdFBHU0NBTl9GSUxFLFxuJiM0MztcdFBHUk9UQVRFX0FOT04sXG4mIzQzO1x0UEdST1RBVEVfRklMRSxcbiBcdFBHUkVGSUxMLFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHROUl9IVUdFVExCLFxuQEAgLTc1NSw2ICYjNDM7NzU3LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG4mIzQzO3N0cnVjdCBscnVfY29zdCB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRjb3VudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGxhc3Rfcm90YXRlZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGxhc3RfaW87XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBscnV2ZWMge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0c1tOUl9MUlVfTElTVFNdO1xuIFx0LyogcGVyIGxydXZlYyBscnVfbG9jayBmb3IgbWVtY2cgKi9cbkBAIC03NjMsOSAmIzQzOzc3MSwxMiBAQCBzdHJ1Y3QgbHJ1dmVjIHtcbiBcdCAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtXG4gXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXG4gXHQgKiBpbmNyZWFzZXMsIHRoZSByZWNsYWltIHNjYW4gYmFsYW5jZSB0aXBzIHRvd2FyZCB0aGUgb3RoZXIuXG4mIzQzO1x0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xuJiM0MztcdCAqIHNlcmlhbGlzZXMgdGhhdCB1cGRhdGUuXG4gXHQgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0XHRhbm9uX2Nvc3Q7XG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0ZmlsZV9jb3N0O1xuJiM0MztcdHN0cnVjdCBscnVfY29zdFx0XHRcdGNvc3RbQU5PTl9BTkRfRklMRV07XG4mIzQzO1x0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0XHRjb3N0X2xvY2s7XG4gXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXG4gXHRhdG9taWNfbG9uZ190XHRcdFx0bm9ucmVzaWRlbnRfYWdlO1xuIFx0LyogUmVmYXVsdHMgYXQgdGhlIHRpbWUgb2YgbGFzdCByZWNsYWltIGN5Y2xlICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDkgJiM0MzszMDksNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gXG4gLyogbGludXgvbW0vc3dhcC5jICovXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4tXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuQEAgLTIwLDcgJiM0MzsyMCw2IEBAIHN0cnVjdCByZWNsYWltX3N0YXQge1xuIFx0dW5zaWduZWQgbnJfY29uZ2VzdGVkO1xuIFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xuIFx0dW5zaWduZWQgbnJfaW1tZWRpYXRlO1xuLVx0dW5zaWduZWQgbnJfcGFnZW91dDtcbiBcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xuIFx0dW5zaWduZWQgbnJfcmVmX2tlZXA7XG4gXHR1bnNpZ25lZCBucl91bm1hcF9mYWlsO1xuQEAgLTE5NCw2ICYjNDM7MTkzLDE5IEBAIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4mIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbiYjNDM7ICogUmV0dXJucyB0aGUgcmF3IHdyYXBwaW5nIHZhbHVlIHNvIHRoYXQgdW5zaWduZWQgbW9kdWxhciBzdWJ0cmFjdGlvbiBzdGF5c1xuJiM0MzsgKiBjb3JyZWN0IGFjcm9zcyBhIHNpZ25lZC1sb25nIG92ZXJmbG93IChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCkgdGhhdCB0aGVcbiYjNDM7ICogY2xhbXAgaW4gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzXG4mIzQzOyAqIGRlbHRhLiBEbyBOT1QgdXNlIGZvciBub24tbW9ub3RvbmljIHBhZ2UtY291bnQgcmVhZHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1fbm9kZV9zdGF0W2l0ZW1dKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4ge1xuIFx0Vk1fV0FSTl9PTl9PTkNFKHZtc3RhdF9pdGVtX2luX2J5dGVzKGl0ZW0pKTtcbkBAIC0yNTksMTEgJiM0MzsyNzEsMTQgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0ICAgZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiYjNDM7ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG4gZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTtcbiAjZWxzZVxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhpdGVtKVxuJiM0MzsjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoaXRlbSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uMDkxYmM5ZmZlZTQ0YTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTE5ODgsOCAmIzQzOzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuIFx0XHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcbiBcdFx0XHRteiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuIFxuLVx0XHRcdGFub25fY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmFub25fY29zdDtcbi1cdFx0XHRmaWxlX2Nvc3QgJiM0Mzs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4mIzQzO1x0XHRcdGFub25fY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcbiYjNDM7XHRcdFx0ZmlsZV9jb3N0ICYjNDM7PSBtei1cdTAwM2VscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50O1xuIFx0XHR9XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0O2Fub25fY29zdCAlbHVcXG5cJiMzNDssIGFub25fY29zdCk7XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0O2ZpbGVfY29zdCAlbHVcXG5cJiMzNDssIGZpbGVfY29zdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uY2U5YzRmYjkyNDcwYjYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5Myw2ICYjNDM7MzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbiBcdE5SX1NITUVNX1RIUFMsXG4gXHROUl9GSUxFX1RIUFMsXG4gXHROUl9BTk9OX1RIUFMsXG4mIzQzO1x0TlJfVk1TQ0FOX1dSSVRFLFxuIFx0TlJfVk1BTExPQyxcbiBcdE5SX0tFUk5FTF9TVEFDS19LQixcbiBcdE5SX1BBR0VUQUJMRSxcbkBAIC00MTksNiAmIzQzOzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbiYjNDM7XHRQR1JPVEFURV9BTk9OLFxuJiM0MztcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbkBAIC01MDIsNiAmIzQzOzUwNSw0MiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcbiYjNDM7ICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXG4mIzQzOyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xuJiM0MzsgKiB0aGF0IHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d29cbiYjNDM7ICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xuJiM0MzsgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxuJiM0MzsgKiBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91cyBkZWx0YS5cbiYjNDM7ICpcbiYjNDM7ICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXG4mIzQzOyAqIHJlYWRpbmcgZnJvbSBwZXItQ1BVIGRlbHRhIHNrZXcgbXVzdCBwcmVzZW50IGFzIHplcm8uXG4mIzQzOyAqXG4mIzQzOyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHNvbWVcbiYjNDM7ICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyBhcmUgc3RvcmVkIGluXG4mIzQzOyAqIGVudW0gbm9kZV9zdGF0X2l0ZW0uXG4mIzQzOyAqL1xuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuJiM0MztcdFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4mIzQzO1xuJiM0MztcdGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuJiM0MztcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVbaV0pO1xuJiM0Mzt9XG4mIzQzO1xuIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmNcbmluZGV4IDBjOGYxODFkOWQ1MDA2Li4xNzEzOWRiNGQyOTFjZSAxMDA2NDRcbi0tLSBhL21tL21tem9uZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXpvbmUuY1xuQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bHJ1dmVjLVx1MDAzZWNvc3RfbG9jayk7XG4gXHR6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpO1xuIFxuIFx0Zm9yX2VhY2hfbHJ1KGxydSlcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmNcbmluZGV4IDU4OGY1MGQ4ZjFhOGM5Li43NGIyODE3NzhjYmM5MiAxMDA2NDRcbi0tLSBhL21tL3N3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5jXG5AQCAtMjcyLDczICYjNDM7MjcyLDYgQEAgdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGZvbGlvX2JhdGNoX2FkZF9hbmRfbW92ZShmb2xpbywgbHJ1X21vdmVfdGFpbCk7XG4gfVxuIFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKVxuLVx0XHRfX3JlbGVhc2VzKGxydXZlYy1cdTAwM2VscnVfbG9jaylcbi1cdFx0X19yZWxlYXNlcyhyY3UpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBjb3N0O1xuLVxuLVx0Lypcbi1cdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFVcbi1cdCAqIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJiMzOTt0IGF0dGVtcHQgdG8gbWFrZSBhIHByZWNpc2Vcbi1cdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxuLVx0ICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5XG4tXHQgKiBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhbiBiYWxhbmNlIGZvciBDUFUgd29yay5cbi1cdCAqL1xuLVx0Y29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCAmIzQzOyBucl9yb3RhdGVkO1xuLVx0aWYgKCFjb3N0KSB7XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0Zm9yICg7Oykge1xuLVx0XHR1bnNpZ25lZCBsb25nIGxydXNpemU7XG4tXG4tXHRcdC8qIFJlY29yZCBjb3N0IGV2ZW50ICovXG4tXHRcdGlmIChmaWxlKVxuLVx0XHRcdGxydXZlYy1cdTAwM2VmaWxlX2Nvc3QgJiM0Mzs9IGNvc3Q7XG4tXHRcdGVsc2Vcbi1cdFx0XHRscnV2ZWMtXHUwMDNlYW5vbl9jb3N0ICYjNDM7PSBjb3N0O1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBEZWNheSBwcmV2aW91cyBldmVudHNcbi1cdFx0ICpcbi1cdFx0ICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkXG4tXHRcdCAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZ1xuLVx0XHQgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0c1xuLVx0XHQgKiBtb3JlIHRoYW4gb2xkIG9uZXMuXG4tXHRcdCAqL1xuLVx0XHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuLVx0XHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0Mztcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0Mztcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuLVxuLVx0XHRpZiAobHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAmIzQzOyBscnV2ZWMtXHUwMDNlYW5vbl9jb3N0IFx1MDAzZSBscnVzaXplIC8gNCkge1xuLVx0XHRcdGxydXZlYy1cdTAwM2VmaWxlX2Nvc3QgLz0gMjtcbi1cdFx0XHRscnV2ZWMtXHUwMDNlYW5vbl9jb3N0IC89IDI7XG4tXHRcdH1cbi1cbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRcdGxydXZlYyA9IHBhcmVudF9scnV2ZWMobHJ1dmVjKTtcbi1cdFx0aWYgKCFscnV2ZWMpIHtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHR9XG4tfVxuLVxuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuLVxuLVx0bHJ1dmVjID0gZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGZvbGlvKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSxcbi1cdFx0XHRcdGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgMCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGxydV9hY3RpdmF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbkBAIC0xMTY0LDggJiM0MzsxMDk3LDYgQEAgdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnRcbiBcbiBcdGNoaWxkX2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEobmlkKSk7XG4gXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWFub25fY29zdCAmIzQzOz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHBhcmVudF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICYjNDM7PSBjaGlsZF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0O1xuIFxuIFx0Zm9yX2VhY2hfbHJ1KGxydSlcbiBcdFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAxYTE0MmM1ODcwMGQwMC4uNGQ4YWIxNGUzYmU0NDMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC02NjgsNyAmIzQzOzY2OCw3IEBAIHN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHR0cmFjZV9tbV92bXNjYW5fd3JpdGVfZm9saW8oZm9saW8pO1xuLVx0bm9kZV9zdGF0X2FkZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFKTtcbiYjNDM7XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiBcdHJldHVybiBQQUdFX1NVQ0NFU1M7XG4gfVxuIFxuQEAgLTE0MTMsOCAmIzQzOzE0MTMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHRcdHNjLVx1MDAzZW5yX3NjYW5uZWQgLT0gKG5yX3BhZ2VzIC0gMSk7XG4gXHRcdFx0XHRcdG5yX3BhZ2VzID0gMTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdHN0YXQtXHUwMDNlbnJfcGFnZW91dCAmIzQzOz0gbnJfcGFnZXM7XG4tXG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGtlZXA7XG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG5AQCAtMjAzOCwxMCAmIzQzOzIwMzYsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IGZpbGUsIG5yX3JlY2xhaW1lZCk7XG4mIzQzO1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbiYjNDM7XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsXG4mIzQzO1x0XHRcdFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsXG4tXHRcdFx0XHRcdG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbiBcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbkBAIC0yMTQ3LDkgJiM0MzsyMTQ1LDkgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdGNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xuIFx0Y291bnRfbWVtY2dfZXZlbnRzKGxydXZlY19tZW1jZyhscnV2ZWMpLCBQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xuIFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pO1xuJiM0MztcdGlmIChucl9yb3RhdGVkKVxuJiM0MztcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSwgbnJfcm90YXRlZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIDAsIG5yX3JvdGF0ZWQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSxcbiBcdFx0XHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4gfVxuQEAgLTIyODIsOCAmIzQzOzIyODAsMTAgQEAgZW51bSBzY2FuX2JhbGFuY2Uge1xuIFxuIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmlsZTtcbiYjNDM7XHRzdHJ1Y3QgbHJ1X2Nvc3QgKmFub25fY29zdCwgKmZpbGVfY29zdDtcbiBcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmlsZTtcbiBcbiBcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG4gXHRcdHJldHVybjtcbkBAIC0yMjk5LDExICYjNDM7MjI5OSw2OSBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcbiBcdC8qXG4gXHQgKiBEZXRlcm1pbmUgdGhlIHNjYW4gYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBjb3N0IG1vZGVsIGlzIGJhc2VkIG9uIHJvdGF0aW9ucywgcmVmYXVsdHMgYW5kXG4mIzQzO1x0ICogcmVjbGFpbS1kcml2ZW4gd3JpdGVzIChhbm9uIG9ubHkpIG9uIGVhY2ggc2lkZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZXNlIGV2ZW50IGNvdW50ZXJzIGFyZSBtb25vdG9uaWMsIHNvIGVhY2ggcmVjbGFpbSBjeWNsZVxuJiM0MztcdCAqIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCBzY2FuIGlzIGV4dHJhY3RlZCBhbmQgaW5jb3Jwb3JhdGVkXG4mIzQzO1x0ICogaW50byBhIGRlY2F5aW5nIGF2ZXJhZ2UuIFRoaXMgZW5zdXJlcyBjdXJyZW5jeSwgYXMgd29ya2xvYWRzXG4mIzQzO1x0ICogY2hhbmdlIG92ZXIgdGltZSwgYW5kIGF2b2lkcyBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb25zLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVXNlIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYygpIHNvIHVuc2lnbmVkIHN1YnRyYWN0aW9uXG4mIzQzO1x0ICogeWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zcyBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgb2ZcbiYjNDM7XHQgKiB0aGUgdW5kZXJseWluZyBjb3VudGVyIChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCB0aGF0IHRoZVxuJiM0MztcdCAqIGNsYW1wIGluIGxydXZlY19wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2VcbiYjNDM7XHQgKiBzcHVyaW91cyBkZWx0YSkuXG4gXHQgKi9cbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHNjLVx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0O1xuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfbG9jayk7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGYgPSAwOyBmIFx1MDAzYz0gMTsgZiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBscnVfY29zdCAqY29zdCA9IFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdFtmXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcm90YXRlZCwgaW8sIG5yX3JvdGF0ZWQsIG5yX2lvO1xuJiM0MztcbiYjNDM7XHRcdHJvdGF0ZWQgPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgUEdST1RBVEVfQU5PTiAmIzQzOyBmKTtcbiYjNDM7XHRcdGlvID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHRcdCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmKTtcbiYjNDM7XHRcdGlmIChmID09IFdPUktJTkdTRVRfQU5PTilcbiYjNDM7XHRcdFx0aW8gJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgTlJfVk1TQ0FOX1dSSVRFKTtcbiYjNDM7XG4mIzQzO1x0XHRucl9yb3RhdGVkID0gcm90YXRlZCAtIGNvc3QtXHUwMDNlbGFzdF9yb3RhdGVkO1xuJiM0MztcdFx0bnJfaW8gPSBpbyAtIGNvc3QtXHUwMDNlbGFzdF9pbztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVmbGVjdCB0aGUgcmVsYXRpdmUgY29zdCBvZiBpbmN1cnJpbmcgSU8gYW5kIHNwZW5kaW5nXG4mIzQzO1x0XHQgKiBDUFUgdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBtYWtlIGFcbiYjNDM7XHRcdCAqIHByZWNpc2UgY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dFxuJiM0MztcdFx0ICogY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmVcbiYjNDM7XHRcdCAqIG92ZXJ3aGVsbWluZ2x5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuXG4mIzQzO1x0XHQgKiBiYWxhbmNlIGZvciBDUFUgd29yay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y29zdC1cdTAwM2Vjb3VudCAmIzQzOz0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICYjNDM7IG5yX3JvdGF0ZWQ7XG4mIzQzO1xuJiM0MztcdFx0Y29zdC1cdTAwM2VsYXN0X3JvdGF0ZWQgPSByb3RhdGVkO1xuJiM0MztcdFx0Y29zdC1cdTAwM2VsYXN0X2lvID0gaW87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhbm9uX2Nvc3QgPSBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RbV09SS0lOR1NFVF9BTk9OXTtcbiYjNDM7XHRmaWxlX2Nvc3QgPSBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RbV09SS0lOR1NFVF9GSUxFXTtcbiYjNDM7XG4mIzQzO1x0bHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICYjNDM7XG4mIzQzO1x0XHQgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSAmIzQzO1xuJiM0MztcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhbm9uX2Nvc3QtXHUwMDNlY291bnQgJiM0MzsgZmlsZV9jb3N0LVx1MDAzZWNvdW50IFx1MDAzZSBscnVzaXplIC8gNCkge1xuJiM0MztcdFx0YW5vbl9jb3N0LVx1MDAzZWNvdW50IC89IDI7XG4mIzQzO1x0XHRmaWxlX2Nvc3QtXHUwMDNlY291bnQgLz0gMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjLVx1MDAzZWFub25fY29zdCA9IGFub25fY29zdC1cdTAwM2Vjb3VudDtcbiYjNDM7XHRzYy1cdTAwM2VmaWxlX2Nvc3QgPSBmaWxlX2Nvc3QtXHUwMDNlY291bnQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbiBcbiBcdC8qXG4gXHQgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub25cbkBAIC00ODA5LDcgJiM0Mzs0ODY3LDggQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xuIFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbi1cdGludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbiYjNDM7XHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7XG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuQEAgLTQ4MjEsNiAmIzQzOzQ4ODAsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuJiM0MztcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG4gXG4gXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuIFx0aWYgKHNjYW5uZWQpXG5AQCAtNDgzMyw2ICYjNDM7NDg5Myw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIHJldHJ5OlxuIFx0cmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0LCBmYWxzZSwgbWVtY2cpO1xuIFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG4mIzQzO1x0dG90YWxfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG4gXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbiBcdGlmIChpc29sYXRlZClcbiBcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuQEAgLTQ4ODQsNiAmIzQzOzQ5NDUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4mIzQzO1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLFxuJiM0MztcdFx0XHRcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4mIzQzO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi44N2Q0YTY3ODEzNjc2NyAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuY1xuQEAgLTEwMjQsNiAmIzQzOzEwMjQsMTcgQEAgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcbiBcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIGl0ZW0pO1xuIH1cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIG5vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcbiYjNDM7ICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxuJiM0MzsgKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS5cbiYjNDM7ICovXG4mIzQzO3Vuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuJiM0MztcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2cGdkYXQtXHUwMDNldm1fc3RhdFtpdGVtXSk7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAvKlxuQEAgLTEyODksNiAmIzQzOzEzMDAsOCBAQCBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbiBcdFtJKFBHU0NBTl9QUk9BQ1RJVkUpXVx0XHRcdD0gXCYjMzQ7cGdzY2FuX3Byb2FjdGl2ZVwmIzM0OyxcbiBcdFtJKFBHU0NBTl9BTk9OKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9hbm9uXCYjMzQ7LFxuIFx0W0koUEdTQ0FOX0ZJTEUpXVx0XHRcdD0gXCYjMzQ7cGdzY2FuX2ZpbGVcJiMzNDssXG4mIzQzO1x0W0koUEdST1RBVEVfQU5PTildXHRcdFx0PSBcJiMzNDtwZ3JvdGF0ZV9hbm9uXCYjMzQ7LFxuJiM0MztcdFtJKFBHUk9UQVRFX0ZJTEUpXVx0XHRcdD0gXCYjMzQ7cGdyb3RhdGVfZmlsZVwmIzM0OyxcbiBcdFtJKFBHUkVGSUxMKV1cdFx0XHRcdD0gXCYjMzQ7cGdyZWZpbGxcJiMzNDssXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdFtJKE5SX0hVR0VUTEIpXVx0XHRcdFx0PSBcJiMzNDtucl9odWdldGxiXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01ODQsMTEgJiM0Mzs1ODQsNiBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHQvKiBGb2xpbyB3YXMgYWN0aXZlIHByaW9yIHRvIGV2aWN0aW9uICovXG4gXHRpZiAod29ya2luZ3NldCkge1xuIFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4tXHRcdC8qXG4tXHRcdCAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnNcbi1cdFx0ICogcHV0YmFja1xuLVx0XHQgKi9cbi1cdFx0bHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTtcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICYjNDM7IGZpbGUsIG5yKTtcbiBcdH1cbiBvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3dha2V1cF9rc3dhcGQmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzIzYmQzMDhkNGE3NzZkNTYwMTJiOGMyYzhmZmYxZTNmZGUyYTJhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDA4OjQ5OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA4MTcwYmI4MDY2YTIyZi4uN2FlNjdhYzIzNTEwNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC05NDcsNiAmIzQzOzk0Nyw4IEBAIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSk7CiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTsKIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTsKIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzOwkJCQkJICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiAKQEAgLTEzOTksNiAmIzQzOzE0MDEsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkJCWVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkJCSAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi44NTMwM2M1ODY3Yzg0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0zMjMsNiAmIzQzOzMyMyw4IEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0gewogCVBHU0NBTl9QUk9BQ1RJVkUsCiAJUEdTQ0FOX0FOT04sCiAJUEdTQ0FOX0ZJTEUsCiYjNDM7CVBHUk9UQVRFX0FOT04sCiYjNDM7CVBHUk9UQVRFX0ZJTEUsCiAJUEdSRUZJTEwsCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCU5SX0hVR0VUTEIsCkBAIC03NTUsNiAmIzQzOzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LAogCiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIAomIzQzO3N0cnVjdCBscnVfY29zdCB7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWNvdW50OwomIzQzOwl1bnNpZ25lZCBsb25nCQlsYXN0X3JvdGF0ZWQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWxhc3RfaW87CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBscnV2ZWMgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3RzW05SX0xSVV9MSVNUU107CiAJLyogcGVyIGxydXZlYyBscnVfbG9jayBmb3IgbWVtY2cgKi8KQEAgLTc2Myw5ICYjNDM7NzcxLDEyIEBAIHN0cnVjdCBscnV2ZWMgewogCSAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtCiAJICogb3ZlciB0aGUgb3RoZXIuIEFzIHRoZSBvYnNlcnZlZCBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVQogCSAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci4KJiM0MzsJICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9jawomIzQzOwkgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLgogCSAqLwotCXVuc2lnbmVkIGxvbmcJCQlhbm9uX2Nvc3Q7Ci0JdW5zaWduZWQgbG9uZwkJCWZpbGVfY29zdDsKJiM0MzsJc3RydWN0IGxydV9jb3N0CQkJY29zdFtBTk9OX0FORF9GSUxFXTsKJiM0MzsJLyogUHJvdGVjdHMgY29zdFtdLiAqLwomIzQzOwlzcGlubG9ja190CQkJY29zdF9sb2NrOwogCS8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi8KIAlhdG9taWNfbG9uZ190CQkJbm9ucmVzaWRlbnRfYWdlOwogCS8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zMDksOSAmIzQzOzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIAogCiAvKiBsaW51eC9tbS9zd2FwLmMgKi8KLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLAotCQl1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTsKLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTsKIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7CiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDNjOWMyNjZjZjc4MmFkLi41YjMxZDhlN2FlNDA1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC0yMCw3ICYjNDM7MjAsNiBAQCBzdHJ1Y3QgcmVjbGFpbV9zdGF0IHsKIAl1bnNpZ25lZCBucl9jb25nZXN0ZWQ7CiAJdW5zaWduZWQgbnJfd3JpdGViYWNrOwogCXVuc2lnbmVkIG5yX2ltbWVkaWF0ZTsKLQl1bnNpZ25lZCBucl9wYWdlb3V0OwogCXVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdOwogCXVuc2lnbmVkIG5yX3JlZl9rZWVwOwogCXVuc2lnbmVkIG5yX3VubWFwX2ZhaWw7CkBAIC0xOTQsNiAmIzQzOzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQogCXJldHVybiB4OwogfQogCiYjNDM7LyoKJiM0MzsgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdAomIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy4KJiM0MzsgKiBSZXR1cm5zIHRoZSByYXcgd3JhcHBpbmcgdmFsdWUgc28gdGhhdCB1bnNpZ25lZCBtb2R1bGFyIHN1YnRyYWN0aW9uIHN0YXlzCiYjNDM7ICogY29ycmVjdCBhY3Jvc3MgYSBzaWduZWQtbG9uZyBvdmVyZmxvdyAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQpIHRoYXQgdGhlCiYjNDM7ICogY2xhbXAgaW4gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzCiYjNDM7ICogZGVsdGEuIERvIE5PVCB1c2UgZm9yIG5vbi1tb25vdG9uaWMgcGFnZS1jb3VudCByZWFkcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoJmFtcDt2bV9ub2RlX3N0YXRbaXRlbV0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSkKIHsKIAlWTV9XQVJOX09OX09OQ0Uodm1zdGF0X2l0ZW1faW5fYnl0ZXMoaXRlbSkpOwpAQCAtMjU5LDExICYjNDM7MjcxLDE0IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCQkJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCQkgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pOwomIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKJiM0MzsJCQkJCSAgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pOwogZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHN1bV96b25lX25vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKGl0ZW0pCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGl0ZW0pCiYjNDM7I2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGl0ZW0pCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDc2NTA2OTIxMTU2NzhjLi4wOTFiYzlmZmVlNDRhMCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC12MS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuYwpAQCAtMTk4OCw4ICYjNDM7MTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpCiAJCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewogCQkJbXogPSBtZW1jZy0mZ3Q7bm9kZWluZm9bcGdkYXQtJmd0O25vZGVfaWRdOwogCi0JCQlhbm9uX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuYW5vbl9jb3N0OwotCQkJZmlsZV9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmZpbGVfY29zdDsKJiM0MzsJCQlhbm9uX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0FOT05dLmNvdW50OwomIzQzOwkJCWZpbGVfY29zdCAmIzQzOz0gbXotJmd0O2xydXZlYy5jb3N0W1dPUktJTkdTRVRfRklMRV0uY291bnQ7CiAJCX0KIAkJc2VxX2J1Zl9wcmludGYocywgJiMzNDthbm9uX2Nvc3QgJWx1XG4mIzM0OywgYW5vbl9jb3N0KTsKIAkJc2VxX2J1Zl9wcmludGYocywgJiMzNDtmaWxlX2Nvc3QgJWx1XG4mIzM0OywgZmlsZV9jb3N0KTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2ZGM0ODg4YTkwZjNmZC4uY2U5YzRmYjkyNDcwYjYgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM5Myw2ICYjNDM7MzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHsKIAlOUl9TSE1FTV9USFBTLAogCU5SX0ZJTEVfVEhQUywKIAlOUl9BTk9OX1RIUFMsCiYjNDM7CU5SX1ZNU0NBTl9XUklURSwKIAlOUl9WTUFMTE9DLAogCU5SX0tFUk5FTF9TVEFDS19LQiwKIAlOUl9QQUdFVEFCTEUsCkBAIC00MTksNiAmIzQzOzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7CiAJUEdTQ0FOX1BST0FDVElWRSwKIAlQR1NDQU5fQU5PTiwKIAlQR1NDQU5fRklMRSwKJiM0MzsJUEdST1RBVEVfQU5PTiwKJiM0MzsJUEdST1RBVEVfRklMRSwKIAlQR1JFRklMTCwKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJTlJfSFVHRVRMQiwKQEAgLTUwMiw2ICYjNDM7NTA1LDQyIEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIAlyZXR1cm4geDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZwomIzQzOyAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSByYXcgc3RhdGVbaWR4XSB2YWx1ZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcsIHNraXBwaW5nIHRoZQomIzQzOyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVycwomIzQzOyAqIHRoYXQgc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3bwomIzQzOyAqIHNhbXBsZXM6IHVuc2lnbmVkIG1vZHVsYXIgYXJpdGhtZXRpYyB0aGVuIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3MKJiM0MzsgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZAomIzQzOyAqIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzIGRlbHRhLgomIzQzOyAqCiYjNDM7ICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlCiYjNDM7ICogcmVhZGluZyBmcm9tIHBlci1DUFUgZGVsdGEgc2tldyBtdXN0IHByZXNlbnQgYXMgemVyby4KJiM0MzsgKgomIzQzOyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHNvbWUKJiM0MzsgKiBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGV2ZW50IGNvdW50ZXJzIGFyZSBzdG9yZWQgaW4KJiM0MzsgKiBlbnVtIG5vZGVfc3RhdF9pdGVtLgomIzQzOyAqLwomIzQzO3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKJiM0MzsJCQkJCSAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQomIzQzOwkJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7CiYjNDM7CiYjNDM7CWkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpOwomIzQzOwlpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgaWR4KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwomIzQzOwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpUkVBRF9PTkNFKHBuLSZndDtscnV2ZWNfc3RhdHMtJmd0O3N0YXRlW2ldKTsKJiM0Mzt9CiYjNDM7CiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmMKaW5kZXggMGM4ZjE4MWQ5ZDUwMDYuLjE3MTM5ZGI0ZDI5MWNlIDEwMDY0NAotLS0gYS9tbS9tbXpvbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXpvbmUuYwpAQCAtNzgsNiAmIzQzOzc4LDcgQEAgdm9pZCBscnV2ZWNfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAKIAltZW1zZXQobHJ1dmVjLCAwLCBzaXplb2Yoc3RydWN0IGxydXZlYykpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7bHJ1dmVjLSZndDtjb3N0X2xvY2spOwogCXpzd2FwX2xydXZlY19zdGF0ZV9pbml0KGxydXZlYyk7CiAKIAlmb3JfZWFjaF9scnUobHJ1KQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IDU4OGY1MGQ4ZjFhOGM5Li43NGIyODE3NzhjYmM5MiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuYwpAQCAtMjcyLDczICYjNDM7MjcyLDYgQEAgdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbykKIAlmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpOwogfQogCi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSwKLQkJdW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZCkKLQkJX19yZWxlYXNlcyhscnV2ZWMtJmd0O2xydV9sb2NrKQotCQlfX3JlbGVhc2VzKHJjdSkKLXsKLQl1bnNpZ25lZCBsb25nIGNvc3Q7Ci0KLQkvKgotCSAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFUKLQkgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlCi0JICogY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dCBjb21wYXJhYmxlCi0JICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5Ci0JICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuCi0JICovCi0JY29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCAmIzQzOyBucl9yb3RhdGVkOwotCWlmICghY29zdCkgewotCQlzcGluX3VubG9ja19pcnEoJmFtcDtscnV2ZWMtJmd0O2xydV9sb2NrKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKDs7KSB7Ci0JCXVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTsKLQotCQkvKiBSZWNvcmQgY29zdCBldmVudCAqLwotCQlpZiAoZmlsZSkKLQkJCWxydXZlYy0mZ3Q7ZmlsZV9jb3N0ICYjNDM7PSBjb3N0OwotCQllbHNlCi0JCQlscnV2ZWMtJmd0O2Fub25fY29zdCAmIzQzOz0gY29zdDsKLQotCQkvKgotCQkgKiBEZWNheSBwcmV2aW91cyBldmVudHMKLQkJICoKLQkJICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkCi0JCSAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZwotCQkgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0cwotCQkgKiBtb3JlIHRoYW4gb2xkIG9uZXMuCi0JCSAqLwotCQlscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzOwotCQkJICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzOwotCQkJICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICYjNDM7Ci0JCQkgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpOwotCi0JCWlmIChscnV2ZWMtJmd0O2ZpbGVfY29zdCAmIzQzOyBscnV2ZWMtJmd0O2Fub25fY29zdCAmZ3Q7IGxydXNpemUgLyA0KSB7Ci0JCQlscnV2ZWMtJmd0O2ZpbGVfY29zdCAvPSAyOwotCQkJbHJ1dmVjLSZndDthbm9uX2Nvc3QgLz0gMjsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwotCQlscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7Ci0JCWlmICghbHJ1dmVjKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXNwaW5fbG9ja19pcnEoJmFtcDtscnV2ZWMtJmd0O2xydV9sb2NrKTsKLQl9Ci19Ci0KLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0Jc3RydWN0IGxydXZlYyAqbHJ1dmVjOwotCi0JbHJ1dmVjID0gZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGZvbGlvKTsKLQlscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmb2xpb19pc19maWxlX2xydShmb2xpbyksCi0JCQkJZm9saW9fbnJfcGFnZXMoZm9saW8pLCAwKTsKLX0KLQogc3RhdGljIHZvaWQgbHJ1X2FjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtMTE2NCw4ICYjNDM7MTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50CiAKIAljaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpOwogCXBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTsKLQlwYXJlbnRfbHJ1dmVjLSZndDthbm9uX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy0mZ3Q7YW5vbl9jb3N0OwotCXBhcmVudF9scnV2ZWMtJmd0O2ZpbGVfY29zdCAmIzQzOz0gY2hpbGRfbHJ1dmVjLSZndDtmaWxlX2Nvc3Q7CiAKIAlmb3JfZWFjaF9scnUobHJ1KQogCQlscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAxYTE0MmM1ODcwMGQwMC4uNGQ4YWIxNGUzYmU0NDMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC02NjgsNyAmIzQzOzY2OCw3IEBAIHN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7CiAKIAl0cmFjZV9tbV92bXNjYW5fd3JpdGVfZm9saW8oZm9saW8pOwotCW5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSk7CiYjNDM7CWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCXJldHVybiBQQUdFX1NVQ0NFU1M7CiB9CiAKQEAgLTE0MTMsOCAmIzQzOzE0MTMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsCiAJCQkJCXNjLSZndDtucl9zY2FubmVkIC09IChucl9wYWdlcyAtIDEpOwogCQkJCQlucl9wYWdlcyA9IDE7CiAJCQkJfQotCQkJCXN0YXQtJmd0O25yX3BhZ2VvdXQgJiM0Mzs9IG5yX3BhZ2VzOwotCiAJCQkJaWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkKIAkJCQkJZ290byBrZWVwOwogCQkJCWlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkKQEAgLTIwMzgsMTAgJiM0MzsyMDM2LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAlpdGVtID0gUEdTVEVBTF9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyk7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyBmaWxlLCBucl9yZWNsYWltZWQpOwomIzQzOwlpZiAobnJfc2Nhbm5lZCAmZ3Q7IG5yX3JlY2xhaW1lZCkKJiM0MzsJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsCiYjNDM7CQkJCSBucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTsKIAotCWxydXZlY19sb2NrX2lycShscnV2ZWMpOwotCWxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIHN0YXQubnJfcGFnZW91dCwKLQkJCQkJbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7CiAJaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsICZhbXA7c3RhdCk7CiAJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtJmd0O25vZGVfaWQsCiAJCQlucl9zY2FubmVkLCBucl9yZWNsYWltZWQsICZhbXA7c3RhdCwgc2MtJmd0O3ByaW9yaXR5LCBmaWxlKTsKQEAgLTIxNDcsOSAmIzQzOzIxNDUsOSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCWNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpOwogCWNvdW50X21lbWNnX2V2ZW50cyhscnV2ZWNfbWVtY2cobHJ1dmVjKSwgUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTsKIAltb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIC1ucl90YWtlbik7CiYjNDM7CWlmIChucl9yb3RhdGVkKQomIzQzOwkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSwgbnJfcm90YXRlZCk7CiAKLQlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKLQlscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTsKIAl0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19hY3RpdmUocGdkYXQtJmd0O25vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSwKIAkJCW5yX2RlYWN0aXZhdGUsIG5yX3JvdGF0ZWQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7CiB9CkBAIC0yMjgyLDggJiM0MzsyMjgwLDEwIEBAIGVudW0gc2Nhbl9iYWxhbmNlIHsKIAogc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7Ci0JdW5zaWduZWQgbG9uZyBmaWxlOwomIzQzOwlzdHJ1Y3QgbHJ1X2Nvc3QgKmFub25fY29zdCwgKmZpbGVfY29zdDsKIAlzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjOwomIzQzOwl1bnNpZ25lZCBsb25nIGxydXNpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmlsZTsKIAogCWlmIChscnVfZ2VuX2VuYWJsZWQoKSAmYW1wOyZhbXA7ICFscnVfZ2VuX3N3aXRjaGluZygpKQogCQlyZXR1cm47CkBAIC0yMjk5LDExICYjNDM7MjI5OSw2OSBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCS8qCiAJICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBjb3N0IG1vZGVsIGlzIGJhc2VkIG9uIHJvdGF0aW9ucywgcmVmYXVsdHMgYW5kCiYjNDM7CSAqIHJlY2xhaW0tZHJpdmVuIHdyaXRlcyAoYW5vbiBvbmx5KSBvbiBlYWNoIHNpZGUuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZXNlIGV2ZW50IGNvdW50ZXJzIGFyZSBtb25vdG9uaWMsIHNvIGVhY2ggcmVjbGFpbSBjeWNsZQomIzQzOwkgKiB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3Qgc2NhbiBpcyBleHRyYWN0ZWQgYW5kIGluY29ycG9yYXRlZAomIzQzOwkgKiBpbnRvIGEgZGVjYXlpbmcgYXZlcmFnZS4gVGhpcyBlbnN1cmVzIGN1cnJlbmN5LCBhcyB3b3JrbG9hZHMKJiM0MzsJICogY2hhbmdlIG92ZXIgdGltZSwgYW5kIGF2b2lkcyBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb25zLgomIzQzOwkgKgomIzQzOwkgKiBVc2UgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKCkgc28gdW5zaWduZWQgc3VidHJhY3Rpb24KJiM0MzsJICogeWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zcyBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgb2YKJiM0MzsJICogdGhlIHVuZGVybHlpbmcgY291bnRlciAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQgdGhhdCB0aGUKJiM0MzsJICogY2xhbXAgaW4gbHJ1dmVjX3BhZ2Vfc3RhdGUoKSB3b3VsZCBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZQomIzQzOwkgKiBzcHVyaW91cyBkZWx0YSkuCiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2xydV9sb2NrKTsKLQlzYy0mZ3Q7YW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy0mZ3Q7YW5vbl9jb3N0OwotCXNjLSZndDtmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLSZndDtmaWxlX2Nvc3Q7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2xvY2spOwomIzQzOwomIzQzOwlmb3IgKGludCBmID0gMDsgZiAmbHQ7PSAxOyBmJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGxydV9jb3N0ICpjb3N0ID0gJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0W2ZdOwomIzQzOwkJdW5zaWduZWQgbG9uZyByb3RhdGVkLCBpbywgbnJfcm90YXRlZCwgbnJfaW87CiYjNDM7CiYjNDM7CQlyb3RhdGVkID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsCiYjNDM7CQkJCQkJICAgICAgUEdST1RBVEVfQU5PTiAmIzQzOyBmKTsKJiM0MzsJCWlvID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsCiYjNDM7CQkJCQkJIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICYjNDM7IGYpOwomIzQzOwkJaWYgKGYgPT0gV09SS0lOR1NFVF9BTk9OKQomIzQzOwkJCWlvICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYywKJiM0MzsJCQkJCQkJICBOUl9WTVNDQU5fV1JJVEUpOwomIzQzOwomIzQzOwkJbnJfcm90YXRlZCA9IHJvdGF0ZWQgLSBjb3N0LSZndDtsYXN0X3JvdGF0ZWQ7CiYjNDM7CQlucl9pbyA9IGlvIC0gY29zdC0mZ3Q7bGFzdF9pbzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcKJiM0MzsJCSAqIENQVSB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIG1ha2UgYQomIzQzOwkJICogcHJlY2lzZSBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0CiYjNDM7CQkgKiBjb21wYXJhYmxlIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZQomIzQzOwkJICogb3ZlcndoZWxtaW5nbHkgZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4KJiM0MzsJCSAqIGJhbGFuY2UgZm9yIENQVSB3b3JrLgomIzQzOwkJICovCiYjNDM7CQljb3N0LSZndDtjb3VudCAmIzQzOz0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICYjNDM7IG5yX3JvdGF0ZWQ7CiYjNDM7CiYjNDM7CQljb3N0LSZndDtsYXN0X3JvdGF0ZWQgPSByb3RhdGVkOwomIzQzOwkJY29zdC0mZ3Q7bGFzdF9pbyA9IGlvOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFub25fY29zdCA9ICZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdFtXT1JLSU5HU0VUX0FOT05dOwomIzQzOwlmaWxlX2Nvc3QgPSAmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2Nvc3RbV09SS0lOR1NFVF9GSUxFXTsKJiM0MzsKJiM0MzsJbHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICYjNDM7CiYjNDM7CQkgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSAmIzQzOwomIzQzOwkJICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7CiYjNDM7CiYjNDM7CXdoaWxlIChhbm9uX2Nvc3QtJmd0O2NvdW50ICYjNDM7IGZpbGVfY29zdC0mZ3Q7Y291bnQgJmd0OyBscnVzaXplIC8gNCkgewomIzQzOwkJYW5vbl9jb3N0LSZndDtjb3VudCAvPSAyOwomIzQzOwkJZmlsZV9jb3N0LSZndDtjb3VudCAvPSAyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNjLSZndDthbm9uX2Nvc3QgPSBhbm9uX2Nvc3QtJmd0O2NvdW50OwomIzQzOwlzYy0mZ3Q7ZmlsZV9jb3N0ID0gZmlsZV9jb3N0LSZndDtjb3VudDsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2xvY2spOwogCiAJLyoKIAkgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub24KQEAgLTQ4MDksNyAmIzQzOzQ4NjcsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7CiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsazsKIAlpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkOwotCWludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDsKJiM0MzsJaW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDsKIAlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CkBAIC00ODIxLDYgJiM0Mzs0ODgwLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAKIAlzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywKIAkJCQkgJmFtcDtsaXN0LCAmYW1wO2lzb2xhdGVkLCAmYW1wO3R5cGUsICZhbXA7dHlwZV9zY2FubmVkKTsKJiM0MzsJbnJfaXNvbGF0ZWQgPSBpc29sYXRlZDsKIAogCS8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovCiAJaWYgKHNjYW5uZWQpCkBAIC00ODMzLDYgJiM0Mzs0ODkzLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiByZXRyeToKIAlyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdCgmYW1wO2xpc3QsIHBnZGF0LCBzYywgJmFtcDtzdGF0LCBmYWxzZSwgbWVtY2cpOwogCXNjLSZndDtucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDsKJiM0MzsJdG90YWxfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7CiAJLyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovCiAJaWYgKGlzb2xhdGVkKQogCQloYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgJmFtcDtzdGF0KTsKQEAgLTQ4ODQsNiAmIzQzOzQ5NDUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChucl9pc29sYXRlZCAmZ3Q7IHRvdGFsX3JlY2xhaW1lZCkKJiM0MzsJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7CiYjNDM7CiAJcmV0dXJuIHNjYW5uZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggZjUzNDk3MmY1MTdkZTAuLjg3ZDRhNjc4MTM2NzY3IDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuYwpAQCAtMTAyNCw2ICYjNDM7MTAyNCwxNyBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCiAJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgaXRlbSk7CiB9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0CiYjNDM7ICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLgomIzQzOyAqIFNlZSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYygpIGZvciB0aGUgcmF0aW9uYWxlLgomIzQzOyAqLwomIzQzO3Vuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAomIzQzOwkJCQkJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoJmFtcDtwZ2RhdC0mZ3Q7dm1fc3RhdFtpdGVtXSk7CiYjNDM7fQogI2VuZGlmCiAKIC8qCkBAIC0xMjg5LDYgJiM0MzsxMzAwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7CiAJW0koUEdTQ0FOX1BST0FDVElWRSldCQkJPSAmIzM0O3Bnc2Nhbl9wcm9hY3RpdmUmIzM0OywKIAlbSShQR1NDQU5fQU5PTildCQkJPSAmIzM0O3Bnc2Nhbl9hbm9uJiMzNDssCiAJW0koUEdTQ0FOX0ZJTEUpXQkJCT0gJiMzNDtwZ3NjYW5fZmlsZSYjMzQ7LAomIzQzOwlbSShQR1JPVEFURV9BTk9OKV0JCQk9ICYjMzQ7cGdyb3RhdGVfYW5vbiYjMzQ7LAomIzQzOwlbSShQR1JPVEFURV9GSUxFKV0JCQk9ICYjMzQ7cGdyb3RhdGVfZmlsZSYjMzQ7LAogCVtJKFBHUkVGSUxMKV0JCQkJPSAmIzM0O3BncmVmaWxsJiMzNDssCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCVtJKE5SX0hVR0VUTEIpXQkJCQk9ICYjMzQ7bnJfaHVnZXRsYiYjMzQ7LApkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IGYzNTE3OThlNzIzYWNkLi43YWMyYjg4YzgwYWU1NiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNTg0LDExICYjNDM7NTg0LDYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCS8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi8KIAlpZiAod29ya2luZ3NldCkgewogCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7Ci0JCS8qCi0JCSAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnMKLQkJICogcHV0YmFjawotCQkgKi8KLQkJbHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTsKIAkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICYjNDM7IGZpbGUsIG5yKTsKIAl9CiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjb3N0IGlzIGNvbXB1dGVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgdG91Y2hpbmcgY29yZSBmaWxlcyBsaWtlIGBtbS92bXNjYW4uY2AsIGBtbS9zd2FwLmNgLCBhbmQgc28gb24uIFRoZXkmIzM5O3JlIGRpdGNoaW5nIHRoZSBvbGQgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIG1lY2hhbmlzbXMuIEluc3RlYWQsIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IGFwcHJvYWNoIHVzaW5nIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCB3aGljaCBzb3VuZCBsaWtlIHRoZXkgbGV2ZXJhZ2UgbW9ub3RvbmljIGNvdW50ZXJzLCBhbG9uZ3NpZGUgbmV3IGVudW0gaXRlbXMgYW5kIGNoYW5nZXMgdG8gdGhlIGBscnV2ZWNgIHN0cnVjdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgZGVtYW5kcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIEl04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBidWdzLCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucywgb3IgZXZlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuCgpMZXQmIzM5O3MgcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgdG8gY29uY2VudHJhdGUgb24uIEkgc2VlIG1vZGlmaWNhdGlvbnMgYW5kIGFkZGl0aW9ucyB0byBhIGJ1bmNoIG9mIGZ1bmN0aW9uczogYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AsIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AsIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYGV2aWN0X2ZvbGlvc2AsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHBhZ2VvdXRgLiBQcmV0dHkgbXVjaCB0aGUgaGVhcnQgb2Ygdm1zY2FuLCBpdCBsb29rcyBsaWtlLgoKSSBuZWVkIHRvIGZvY3VzIG9uIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBldmljdF9mb2xpb3NgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBwYWdlb3V0YC4KCldhaXTigKYgYWxsIG9mIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zPyBIbW0uIFRoZSBwcm9tcHQgaXMgcmVtaW5kaW5nIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSAqY2FsbGVycyogb2YgdGhlc2UgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIExldCYjMzk7cyBzZWUuLi4gYHByZXBhcmVfc2Nhbl9jb250cm9sYCBpcyBjYWxsZWQgYnkgYGdldF9zY2FuX2NvdW50YCBvciBgc2hyaW5rX25vZGVgIG9yIGBzaHJpbmtfbHJ1dmVjYC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBvZiB0aGVzZS4gTG9va3MgbGlrZSBJIHdpbGwgbmVlZCB0byBzZWFyY2ggZm9yIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaW4gYG1tL3Ztc2Nhbi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIyNzQ9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyODAtXG5tbS92bXNjYW4uYzoyMjgxOnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjI4Mi17XG4tLVxubW0vdm1zY2FuLmM9NjIwOD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjMwLVxubW0vdm1zY2FuLmM6NjIzMTpcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjMyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDU0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKlN0YXRpYyBGdW5jdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcyBgc2hyaW5rX25vZGVgIGZ1bmN0aW9uLiBBIHF1aWNrIGNoZWNrIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IEkgY2FuJiMzOTt0IHF1aXRlIHJlbWVtYmVyLiBJdCB3b3VsZCBtYWtlIHNlbnNlIGdpdmVuIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGhhcyBiZWVuIGRlY2xhcmVkIGNvcnJlY3RseS4gVGltZSB0byB2ZXJpZnkgaXRzIHNjb3BlLiBJZiBpdCAqaXMqIHN0YXRpYywgdGhlIGltcGxpY2F0aW9ucyBhcmUgdmVyeSBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGdvaW5nIHRvIGNhdXNlIGFueSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lIHdpdGggc2hhcmVkIGRhdGEgb3Igc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTQyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE5ODAtLypcbm1tL3Ztc2Nhbi5jOjE5ODE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMTk4Mi0gKiBvZiByZWNsYWltZWQgcGFnZXNcbi0tXG5tbS92bXNjYW4uYz01MTc3PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOTctXG5tbS92bXNjYW4uYzo1MTk4OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTk5LXtcbi0tXG5tbS92bXNjYW4uYz01OTI2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5MzAtXG5tbS92bXNjYW4uYzo1OTMxOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01OTMyLXtcbi0tXG5tbS92bXNjYW4uYz02MDc3PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYxMjgtXG5tbS92bXNjYW4uYzo2MTI5OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYxMzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTYyMDctXG5tbS92bXNjYW4uYzo2MjA4OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjIwOS17XG4tLVxubW0vdm1zY2FuLmMtNjIxNS1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbm1tL3Ztc2Nhbi5jOjYyMTY6XHRcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyMTctXG4tLVxubW0vdm1zY2FuLmMtNjIzMi1cbm1tL3Ztc2Nhbi5jOjYyMzM6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyMzQtXG4tLVxubW0vdm1zY2FuLmM9NjM5Mz1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjQ3MS1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjY0NzI6XHRcdHNocmlua19ub2RlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjQ3My1cdH1cbi0tXG5tbS92bXNjYW4uYz02NzM4PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3ODMtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njc4NDp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjc4NS1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjgxMC1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxubW0vdm1zY2FuLmM6NjgxMTpcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTY4MTItXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJiMzOTtzIGFzIHdlbGwuIFdlIGhhY2tcbi0tXG5tbS92bXNjYW4uYz02OTMyPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy02OTU2LVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6Njk1NzpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTY5NTgtXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYz03MDE0PXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MDUyLSAqL1xubW0vdm1zY2FuLmM6NzA1MzpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcwNTQtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcwNjktXHQgKi9cbm1tL3Ztc2Nhbi5jOjcwNzA6XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzA3MS1cbi0tXG5tbS92bXNjYW4uYz03MTI2PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzIzNS1cbm1tL3Ztc2Nhbi5jOjcyMzY6XHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xubW0vdm1zY2FuLmMtNzIzNy1cdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNzI0Ny1cdFx0ICovXG5tbS92bXNjYW4uYzo3MjQ4Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MjQ5LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9NzgwMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bXNjYW4uYy03ODMwLVx0XHRkbyB7XG5tbS92bXNjYW4uYzo3ODMxOlx0XHRcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy03ODMyLVx0XHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGVudHJ5IHBvaW50cyBhcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGV4cGVydCwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IFJlY2xhbWF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgbWVtb3J5IHJlY2xhaW0uIEkgc2VlIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBsaXN0ZWQgYXMgdGhlIGVudHJ5IHBvaW50cy4gSW50ZXJlc3RpbmcuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgd2F5cyB3ZSBjYW4gdHJpZ2dlciBtZW1vcnkgcHJlc3N1cmUgcmVzb2x1dGlvbi4KCmB0cnlfdG9fZnJlZV9wYWdlc2Agc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBmaXJzdCBzdG9wLiBJdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3QsIHRyeWluZyB0byBleHBsaWNpdGx5IGZyZWUgcGFnZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGluIHRoZXJlIGFuZCBzZWUgaG93IGl0IHdvcmtzLCB3aGF0IHRyaWdnZXJzIGl0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBzdHJhdGVneSBpcy4gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGF0IHJvdXRpbmUg4oCTIGxldCYjMzk7cyBzZWUgaG93IGl0IG9yY2hlc3RyYXRlcyB0aGUgZnJlZWluZyBwcm9jZXNzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zLiBJIHdvbmRlciBob3cgaXQgZGVjaWRlcyB3aGF0IHRvIHJlY2xhaW0sIGFuZCBob3cgYWdncmVzc2l2ZWx5LiBJdCYjMzk7cyB0aGUgZ2F0ZXdheSwgc28gaXQmIzM5O3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbiBvZiBtZW1vcnkgcmVjbGFtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02NDg1PXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjUxNS0gKi9cbm1tL3Ztc2Nhbi5jOjY1MTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbm1tL3Ztc2Nhbi5jLTY1MTctXHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmM9NjY1OD1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NzM3LVxubW0vdm1zY2FuLmM6NjczODp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTY3MzktXHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vdm1zY2FuLmMtNjc3Mi1cbm1tL3Ztc2Nhbi5jOjY3NzM6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjc3NC1cbi0tXG5tbS92bXNjYW4uYz02ODI0PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjg1NS1cbm1tL3Ztc2Nhbi5jOjY4NTY6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjg1Ny1cbi0tXG5tbS92bXNjYW4uYz03NjIyPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc2NDEtXG5tbS92bXNjYW4uYzo3NjQyOlx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTc2NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gc29tZSBrZXkgYXJlYXMgaGVyZS4gSSYjMzk7bSB0aGlua2luZyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGEgc29saWQgZnVuY3Rpb24gdG8gc3RhcnQgd2l0aDsgaXQgc2VlbXMgbGlrZSBhIGNvcmUgZWxlbWVudCBpbiB0aGlzIGNvbnRleHQuIEJ1dCwgaG1tLCB3aGF0IGFib3V0IGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYD8gWWVzLCB0aGF0JiMzOTtzIGFub3RoZXIgaW1wb3J0YW50IG9uZSwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4gTm93LCB0aGlua2luZyBtb3JlIGJyb2FkbHksIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29uc2lkZXIgc29tZXRoaW5nIHRoYXQgaW50ZXJhY3RzIHdpdGggc3dhcHBpbmcuIExldCYjMzk7cyB0aGluaywgYGJhbGFuY2VfcGdkYXRgIGlzIGNhbGxlZCBieSBga3N3YXBkYC4gT2theSwgc28gYGtzd2FwZGAgaXMgY3JpdGljYWwuIEl0IHNvdW5kcyBsaWtlIGEgY2VudHJhbCBwaWVjZSwgc28gbGV0JiMzOTtzIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc3dhcGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTI0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS92bXNjYW4uYy01LSAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXG5tbS92bXNjYW4uYzo2OiAqICBrc3dhcGQgYWRkZWQ6IDcuMS45NiAgc2N0XG5tbS92bXNjYW4uYzo3OiAqICBSZW1vdmVkIGtzd2FwZF9jdGwgbGltaXRzLCBhbmQgc3dhcCBvdXQgYXMgbWFueSBwYWdlcyBhcyBuZWVkZWRcbm1tL3Ztc2Nhbi5jLTgtICogIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0byBmcmVlcGFnZXMuaGlnaDogMi40Ljk3LCBSaWsgdmFuIFJpZWwuXG5tbS92bXNjYW4uYzo5OiAqICBab25lIGF3YXJlIGtzd2FwZCBzdGFydGVkIDAyLzAwLCBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pLlxubW0vdm1zY2FuLmMtMTAtICogIE11bHRpcXVldWUgVk0gc3RhcnRlZCA1LjguMDAsIFJpayB2YW4gUmllbC5cbi0tXG5tbS92bXNjYW4uYz00NDQ9c3RhdGljIGludCByZWNsYWltZXJfb2Zmc2V0KHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ0OS1cbm1tL3Ztc2Nhbi5jOjQ1MDpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNDUxLVx0XHRyZXR1cm4gMDtcbi0tXG5tbS92bXNjYW4uYz00ODA9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNDg1LVx0Lypcbm1tL3Ztc2Nhbi5jOjQ4NjpcdCAqIElmIGtzd2FwZCBpcyBkaXNhYmxlZCwgcmVzY2hlZHVsZSBpZiBuZWNlc3NhcnkgYnV0IGRvIG5vdFxubW0vdm1zY2FuLmMtNDg3LVx0ICogdGhyb3R0bGUgYXMgdGhlIHN5c3RlbSBpcyBsaWtlbHkgbmVhciBPT00uXG5tbS92bXNjYW4uYy00ODgtXHQgKi9cbm1tL3Ztc2Nhbi5jOjQ4OTpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXG5tbS92bXNjYW4uYy00OTAtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUwOD12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNC1cdC8qXG5tbS92bXNjYW4uYzo1MTU6XHQgKiBEbyBub3QgdGhyb3R0bGUgdXNlciB3b3JrZXJzLCBrdGhyZWFkcyBvdGhlciB0aGFuIGtzd2FwZCBvclxubW0vdm1zY2FuLmMtNTE2LVx0ICogd29ya3F1ZXVlcy4gVGhleSBtYXkgYmUgcmVxdWlyZWQgZm9yIHJlY2xhaW0gdG8gbWFrZVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOC1cdCAqL1xubW0vdm1zY2FuLmM6NTE5Olx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNTIwLVx0ICAgIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTk2Mj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19kZW1vdGVfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vdm1zY2FuLmMtOTcxLVx0ICogbWFrZSBzdXJlIHdlIGFsbG9jYXRlIGZyb20gdGhlIHRhcmdldCBub2RlIGZpcnN0IGFsc28gdHJ5aW5nIHRvXG5tbS92bXNjYW4uYzo5NzI6XHQgKiBkZW1vdGUgb3IgcmVjbGFpbSBwYWdlcyBmcm9tIHRoZSB0YXJnZXQgbm9kZSB2aWEga3N3YXBkIGlmIHdlIGFyZVxubW0vdm1zY2FuLmMtOTczLVx0ICogbG93IG9uIGZyZWUgbWVtb3J5IG9uIHRhcmdldCBub2RlLiBJZiB3ZSBkb24mIzM5O3QgZG8gdGhpcyBhbmQgaWZcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMTE4LVx0XHQgKiBUaGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIGRldGVybWluZXMgaWYgYSBub2RlIGlzIG1hcmtlZFxubW0vdm1zY2FuLmM6MTExOTpcdFx0ICogcmVjbGFpbV9jb25nZXN0ZWQuIGtzd2FwZCB3aWxsIHN0YWxsIGFuZCBzdGFydCB3cml0aW5nXG5tbS92bXNjYW4uYy0xMTIwLVx0XHQgKiBmb2xpb3MgaWYgdGhlIHRhaWwgb2YgdGhlIExSVSBpcyBhbGwgZGlydHkgdW5xdWV1ZWQgZm9saW9zLlxuLS1cbm1tL3Ztc2Nhbi5jLTExODctXHRcdFx0LyogQ2FzZSAxIGFib3ZlICovXG5tbS92bXNjYW4uYzoxMTg4Olx0XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMTE4OS1cdFx0XHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYz0xNTkwPXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS92bXNjYW4uYy0xNjE1LVx0ICogV2Ugc2hvdWxkIGJlIHNhZmUgaGVyZSBzaW5jZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggZmlsZSBwYWdlcyBhbmRcbm1tL3Ztc2Nhbi5jOjE2MTY6XHQgKiB3ZSBhcmUgbm90IGtzd2FwZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB3cml0ZSBkaXJ0eSBmaWxlIHBhZ2VzLiBCdXRcbm1tL3Ztc2Nhbi5jLTE2MTctXHQgKiBjYWxsIG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCkgYW55d2F5LCBqdXN0IGluIGNhc2UgdGhlc2UgY29uZGl0aW9uc1xuLS1cbm1tL3Ztc2Nhbi5jPTE4MjM9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4tLVxubW0vdm1zY2FuLmMtMTgyOC1cbm1tL3Ztc2Nhbi5jOjE4Mjk6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTE4MzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS92bXNjYW4uYz0zODQ5PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxuLS1cbm1tL3Ztc2Nhbi5jLTM4NTItXG5tbS92bXNjYW4uYzozODUzOlx0aWYgKHBnZGF0IFx1MDAyNlx1MDAyNiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7XG5tbS92bXNjYW4uYy0zODU0LVx0XHRWTV9XQVJOX09OX09OQ0Uod2Fsayk7XG4tLVxubW0vdm1zY2FuLmMtMzg1Ny1cdH0gZWxzZSBpZiAoIXdhbGsgXHUwMDI2XHUwMDI2IGZvcmNlX2FsbG9jKSB7XG5tbS92bXNjYW4uYzozODU4Olx0XHRWTV9XQVJOX09OX09OQ0UoY3VycmVudF9pc19rc3dhcGQoKSk7XG5tbS92bXNjYW4uYy0zODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTM4Njk9c3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTM4NzctXG5tbS92bXNjYW4uYzozODc4Olx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtMzg3OS1cdFx0a2ZyZWUod2Fsayk7XG4tLVxubW0vdm1zY2FuLmM9NDE5MT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxOTYtXG5tbS92bXNjYW4uYzo0MTk3Olx0Vk1fV0FSTl9PTl9PTkNFKCFjdXJyZW50X2lzX2tzd2FwZCgpKTtcbm1tL3Ztc2Nhbi5jLTQxOTgtXG4tLVxubW0vdm1zY2FuLmM9NDk4OT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5OTctXHQvKiBjaGVjayB0aGUgb3JkZXIgdG8gZXhjbHVkZSBjb21wYWN0aW9uLWluZHVjZWQgcmVjbGFpbSAqL1xubW0vdm1zY2FuLmM6NDk5ODpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cdTAwM2VvcmRlcilcbm1tL3Ztc2Nhbi5jLTQ5OTktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS92bXNjYW4uYy01MDExLVxubW0vdm1zY2FuLmM6NTAxMjpcdC8qIGtzd2FwZCBzaG91bGQgYWJvcnQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGFyZSBzYWZlICovXG5tbS92bXNjYW4uYy01MDEzLVx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmM9NTE5OD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMjAtXG5tbS92bXNjYW4uYzo1MjIxOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy01MjIyLVx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xuLS1cbm1tL3Ztc2Nhbi5jLTUyMjgtXG5tbS92bXNjYW4uYzo1MjI5Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy01MjMwLVx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbi0tXG5tbS92bXNjYW4uYy01MjM2LVx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2UgcmVjbGFpbWVkKVxubW0vdm1zY2FuLmM6NTIzNzpcdFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXJlY2xhaW1faWR4KTtcbm1tL3Ztc2Nhbi5jLTUyMzgtfVxuLS1cbm1tL3Ztc2Nhbi5jPTU5Mzg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NjctXHQgKiBERUZfUFJJT1JJVFkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZmFjdCB3ZSBhcmUgZGlyZWN0XG5tbS92bXNjYW4uYzo1OTY4Olx0ICogcmVjbGFpbWluZyBpbXBsaWVzIHRoYXQga3N3YXBkIGlzIG5vdCBrZWVwaW5nIHVwIGFuZCBpdCBpcyBiZXN0IHRvXG5tbS92bXNjYW4uYy01OTY5LVx0ICogZG8gYSBiYXRjaCBvZiB3b3JrIGF0IG9uY2UuIEZvciBtZW1jZyByZWNsYWltIG9uZSBjaGVjayBpcyBtYWRlIHRvXG4tLVxubW0vdm1zY2FuLmMtNTk3Mi1cdCAqL1xubW0vdm1zY2FuLmM6NTk3MzpcdHByb3BvcnRpb25hbF9yZWNsYWltID0gKCFjZ3JvdXBfcmVjbGFpbShzYykgXHUwMDI2XHUwMDI2ICFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNTk3NC1cdFx0XHRcdHNjLVx1MDAzZXByaW9yaXR5ID09IERFRl9QUklPUklUWSk7XG4tLVxubW0vdm1zY2FuLmMtNTk5Ny1cdFx0Lypcbm1tL3Ztc2Nhbi5jOjU5OTg6XHRcdCAqIEZvciBrc3dhcGQgYW5kIG1lbWNnLCByZWNsYWltIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgcGFnZXNcbm1tL3Ztc2Nhbi5jLTU5OTktXHRcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxuLS1cbm1tL3Ztc2Nhbi5jPTYxMjk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxNDMtXHQgKlxubW0vdm1zY2FuLmM6NjE0NDpcdCAqIEZvciBrc3dhcGQsIHJlbGlhYmxlIGZvcndhcmQgcHJvZ3Jlc3MgaXMgbW9yZSBpbXBvcnRhbnRcbm1tL3Ztc2Nhbi5jLTYxNDUtXHQgKiB0aGFuIGEgcXVpY2sgcmV0dXJuIHRvIGlkbGUuIEFsd2F5cyBkbyBmdWxsIHdhbGtzLlxubW0vdm1zY2FuLmMtNjE0Ni1cdCAqL1xubW0vdm1zY2FuLmM6NjE0NzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IHNjLVx1MDAzZW1lbWNnX2Z1bGxfd2Fsaylcbm1tL3Ztc2Nhbi5jLTYxNDgtXHRcdHBhcnRpYWwgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jPTYyMDg9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjI0Ni1cbm1tL3Ztc2Nhbi5jOjYyNDc6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSkge1xubW0vdm1zY2FuLmMtNjI0OC1cdFx0Lypcbi0tXG5tbS92bXNjYW4uYy02MjU5LVx0XHQgKlxubW0vdm1zY2FuLmM6NjI2MDpcdFx0ICogT25jZSBhIG5vZGUgaXMgZmxhZ2dlZCBQR0RBVF9XUklURUJBQ0ssIGtzd2FwZCB3aWxsXG5tbS92bXNjYW4uYy02MjYxLVx0XHQgKiBjb3VudCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHVuZGVyIHBhZ2VzIGZsYWdnZWQgZm9yXG4tLVxubW0vdm1zY2FuLmMtNjI2OC1cdFx0Lypcbm1tL3Ztc2Nhbi5jOjYyNjk6XHRcdCAqIElmIGtzd2FwZCBzY2FucyBwYWdlcyBtYXJrZWQgZm9yIGltbWVkaWF0ZVxubW0vdm1zY2FuLmMtNjI3MC1cdFx0ICogcmVjbGFpbSBhbmQgdW5kZXIgd3JpdGViYWNrIChucl9pbW1lZGlhdGUpLCBpdFxuLS1cbm1tL3Ztc2Nhbi5jLTYyODktXG5tbS92bXNjYW4uYzo2MjkwOlx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTYyOTEtXHRcdFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTYyOTUtXHQgKiBTdGFsbCBkaXJlY3QgcmVjbGFpbSBmb3IgSU8gY29tcGxldGlvbnMgaWYgdGhlIGxydXZlYyBpc1xubW0vdm1zY2FuLmM6NjI5NjpcdCAqIG5vZGUgaXMgY29uZ2VzdGVkLiBBbGxvdyBrc3dhcGQgdG8gY29udGludWUgdW50aWwgaXRcbm1tL3Ztc2Nhbi5jLTYyOTctXHQgKiBzdGFydHMgZW5jb3VudGVyaW5nIHVucXVldWVkIGRpcnR5IHBhZ2VzIG9yIGN5Y2xpbmcgdGhyb3VnaFxuLS1cbm1tL3Ztc2Nhbi5jLTYyOTktXHQgKi9cbm1tL3Ztc2Nhbi5jOjYzMDA6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2IGN1cnJlbnRfbWF5X3Rocm90dGxlKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02MzAxLVx0ICAgICFzYy1cdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jLTYzMTItXHQgKiBzbGVlcC4gT24gcmVjbGFpbSBwcm9ncmVzcywgcmVzZXQgdGhlIGZhaWx1cmUgY291bnRlci4gQVxubW0vdm1zY2FuLmM6NjMxMzpcdCAqIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gcnVuIHdpbGwgcmV2aXZlIGEgZG9ybWFudCBrc3dhcGQuXG5tbS92bXNjYW4uYy02MzE0LVx0ICovXG5tbS92bXNjYW4uYy02MzE1LVx0aWYgKHJlY2xhaW1hYmxlKVxubW0vdm1zY2FuLmM6NjMxNjpcdFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXJlY2xhaW1faWR4KTtcbm1tL3Ztc2Nhbi5jLTYzMTctXHRlbHNlIGlmIChzYy1cdTAwM2VjYWNoZV90cmltX21vZGUpXG4tLVxubW0vdm1zY2FuLmM9NjM1NT1zdGF0aWMgdm9pZCBjb25zaWRlcl9yZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzNzEtXHQvKlxubW0vdm1zY2FuLmM6NjM3MjpcdCAqIERvIG5vdCB0aHJvdHRsZSBrc3dhcGQgb3IgY2dyb3VwIHJlY2xhaW0gb24gTk9QUk9HUkVTUyBhcyBpdCB3aWxsXG5tbS92bXNjYW4uYy02MzczLVx0ICogdGhyb3R0bGUgb24gVk1TQ0FOX1RIUk9UVExFX1dSSVRFQkFDSyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgcGFnZXNcbi0tXG5tbS92bXNjYW4uYy02Mzc2LVx0ICovXG5tbS92bXNjYW4uYzo2Mzc3Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY2dyb3VwX3JlY2xhaW0oc2MpKVxubW0vdm1zY2FuLmMtNjM3OC1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTY2MTM9c3RhdGljIGJvb2wgYWxsb3dfZGlyZWN0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NjIwLVxubW0vdm1zY2FuLmM6NjYyMTpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXG5tbS92bXNjYW4uYy02NjIyLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYy02NjM3LVxubW0vdm1zY2FuLmM6NjYzODpcdC8qIGtzd2FwZCBtdXN0IGJlIGF3YWtlIGlmIHByb2Nlc3NlcyBhcmUgYmVpbmcgdGhyb3R0bGVkICovXG5tbS92bXNjYW4uYzo2NjM5Olx0aWYgKCF3bWFya19vayBcdTAwMjZcdTAwMjYgd2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCkpIHtcbm1tL3Ztc2Nhbi5jOjY2NDA6XHRcdGlmIChSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCkgXHUwMDNlIFpPTkVfTk9STUFMKVxubW0vdm1zY2FuLmM6NjY0MTpcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIFpPTkVfTk9STUFMKTtcbm1tL3Ztc2Nhbi5jLTY2NDItXG5tbS92bXNjYW4uYzo2NjQzOlx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpO1xubW0vdm1zY2FuLmMtNjY0NC1cdH1cbi0tXG5tbS92bXNjYW4uYy02NjUxLSAqIGFuZCB0aGUgUEZNRU1BTExPQyByZXNlcnZlIGZvciB0aGUgcHJlZmVycmVkIG5vZGUgaXMgZ2V0dGluZyBkYW5nZXJvdXNseVxubW0vdm1zY2FuLmM6NjY1MjogKiBkZXBsZXRlZC4ga3N3YXBkIHdpbGwgY29udGludWUgdG8gbWFrZSBwcm9ncmVzcyBhbmQgd2FrZSB0aGUgcHJvY2Vzc2VzXG5tbS92bXNjYW4uYy02NjUzLSAqIHdoZW4gdGhlIGxvdyB3YXRlcm1hcmsgaXMgcmVhY2hlZC5cbi0tXG5tbS92bXNjYW4uYz02NjU4PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY2ODgtXHQgKiBUaHJvdHRsaW5nIGlzIGJhc2VkIG9uIHRoZSBmaXJzdCB1c2FibGUgbm9kZSBhbmQgdGhyb3R0bGVkIHByb2Nlc3Nlc1xubW0vdm1zY2FuLmM6NjY4OTpcdCAqIHdhaXQgb24gYSBxdWV1ZSB1bnRpbCBrc3dhcGQgbWFrZXMgcHJvZ3Jlc3MgYW5kIHdha2VzIHRoZW0uIFRoZXJlXG5tbS92bXNjYW4uYy02NjkwLVx0ICogaXMgYW4gYWZmaW5pdHkgdGhlbiBiZXR3ZWVuIHByb2Nlc3NlcyB3YWtpbmcgdXAgYW5kIHdoZXJlIHJlY2xhaW1cbi0tXG5tbS92bXNjYW4uYy02NzE4LVx0ICogdHJhbnNhY3Rpb24gaW4gdGhlIGNhc2Ugb2YgYSBmaWxlc3lzdGVtIGxpa2UgZXh0WzN8NF0uIEluIHRoaXMgY2FzZSxcbm1tL3Ztc2Nhbi5jOjY3MTk6XHQgKiBpdCBpcyBub3Qgc2FmZSB0byBibG9jayBvbiBwZm1lbWFsbG9jX3dhaXQgYXMga3N3YXBkIGNvdWxkIGJlXG5tbS92bXNjYW4uYy02NzIwLVx0ICogYmxvY2tlZCB3YWl0aW5nIG9uIHRoZSBzYW1lIGxvY2suIEluc3RlYWQsIHRocm90dGxlIGZvciB1cCB0byBhXG4tLVxubW0vdm1zY2FuLmMtNjcyNi1cdGVsc2Vcbm1tL3Ztc2Nhbi5jOjY3Mjc6XHRcdC8qIFRocm90dGxlIHVudGlsIGtzd2FwZCB3YWtlcyB0aGUgcHJvY2VzcyAqL1xubW0vdm1zY2FuLmMtNjcyOC1cdFx0d2FpdF9ldmVudF9raWxsYWJsZSh6b25lLVx1MDAzZXpvbmVfcGdkYXQtXHUwMDNlcGZtZW1hbGxvY193YWl0LFxuLS1cbm1tL3Ztc2Nhbi5jPTY4NjU9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODc0LVxubW0vdm1zY2FuLmM6Njg3NTpzdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02ODc2LXtcbi0tXG5tbS92bXNjYW4uYz02OTMyPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy02OTU0LVx0XHQgKlxubW0vdm1zY2FuLmM6Njk1NTpcdFx0ICogSG93ZXZlciwga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2ggdGhpcyBvblxubW0vdm1zY2FuLmMtNjk1Ni1cdFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQmIzM5O3Ncbm1tL3Ztc2Nhbi5jOjY5NTc6XHRcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXG5tbS92bXNjYW4uYy02OTU4LVx0XHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXG4tLVxubW0vdm1zY2FuLmMtNjk4OS1cdCAqIG5lZWQgYmFsYW5jaW5nIGJ5IGRlZmluaXRpb24uIFRoaXMgY2FuIGhhcHBlbiBpZiBhIHpvbmUtcmVzdHJpY3RlZFxubW0vdm1zY2FuLmM6Njk5MDpcdCAqIGFsbG9jYXRpb24gdHJpZXMgdG8gd2FrZSBhIHJlbW90ZSBrc3dhcGQuXG5tbS92bXNjYW4uYy02OTkxLVx0ICovXG4tLVxubW0vdm1zY2FuLmM9Njk5OT1zdGF0aWMgdm9pZCBjbGVhcl9wZ2RhdF9jb25nZXN0ZWQocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03MDA4LS8qXG5tbS92bXNjYW4uYzo3MDA5OiAqIFByZXBhcmUga3N3YXBkIGZvciBzbGVlcGluZy4gVGhpcyB2ZXJpZmllcyB0aGF0IHRoZXJlIGFyZSBubyBwcm9jZXNzZXNcbm1tL3Ztc2Nhbi5jLTcwMTAtICogd2FpdGluZyBpbiB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbSgpIGFuZCB0aGF0IHdhdGVybWFya3MgaGF2ZSBiZWVuIG1ldC5cbm1tL3Ztc2Nhbi5jLTcwMTEtICpcbm1tL3Ztc2Nhbi5jOjcwMTI6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBpcyByZWFkeSB0byBzbGVlcFxubW0vdm1zY2FuLmMtNzAxMy0gKi9cbm1tL3Ztc2Nhbi5jOjcwMTQ6c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNzAxNS1cdFx0XHRcdGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzAxOS1cdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcbm1tL3Ztc2Nhbi5jOjcwMjA6XHQgKiByYWNlIGJldHdlZW4gd2hlbiBrc3dhcGQgY2hlY2tzIHRoZSB3YXRlcm1hcmtzIGFuZCBhIHByb2Nlc3MgZ2V0c1xubW0vdm1zY2FuLmMtNzAyMS1cdCAqIHRocm90dGxlZC4gVGhlcmUgaXMgYWxzbyBhIHBvdGVudGlhbCByYWNlIGlmIHByb2Nlc3NlcyBnZXRcbm1tL3Ztc2Nhbi5jOjcwMjI6XHQgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZVxubW0vdm1zY2FuLmM6NzAyMzpcdCAqIHpvbmVzLCB3aGljaCBjYXVzZXMga3N3YXBkIHRvIGV4aXQgYmFsYW5jZV9wZ2RhdCgpIGJlZm9yZSByZWFjaGluZ1xubW0vdm1zY2FuLmM6NzAyNDpcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxubW0vdm1zY2FuLmMtNzAyNS1cdCAqIGJlIHNsZWVwaW5nIG9uIHBmbWVtYWxsb2Nfd2FpdCwgc28gd2FrZSB0aGVtIG5vdyBpZiBuZWNlc3NhcnkuIElmXG5tbS92bXNjYW4uYzo3MDI2Olx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XG5tbS92bXNjYW4uYy03MDI3LVx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTcwMzMtXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSAqL1xubW0vdm1zY2FuLmM6NzAzNDpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXG5tbS92bXNjYW4uYy03MDM1LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYy03MDQ1LS8qXG5tbS92bXNjYW4uYzo3MDQ2OiAqIGtzd2FwZCBzaHJpbmtzIGEgbm9kZSBvZiBwYWdlcyB0aGF0IGFyZSBhdCBvciBiZWxvdyB0aGUgaGlnaGVzdCB1c2FibGVcbm1tL3Ztc2Nhbi5jLTcwNDctICogem9uZSB0aGF0IGlzIGN1cnJlbnRseSB1bmJhbGFuY2VkLlxubW0vdm1zY2FuLmMtNzA0OC0gKlxubW0vdm1zY2FuLmM6NzA0OTogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIHNjYW5uZWQgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcGFnZXMgdG9cbm1tL3Ztc2Nhbi5jLTcwNTAtICogcmVjbGFpbSBvciBpZiB0aGUgbGFjayBvZiBwcm9ncmVzcyB3YXMgZHVlIHRvIHBhZ2VzIHVuZGVyIHdyaXRlYmFjay5cbi0tXG5tbS92bXNjYW4uYy03MDUyLSAqL1xubW0vdm1zY2FuLmM6NzA1MzpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcwNTQtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTcxMDg9Y2xlYXJfcmVjbGFpbV9hY3RpdmUocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MTEzLS8qXG5tbS92bXNjYW4uYzo3MTE0OiAqIEZvciBrc3dhcGQsIGJhbGFuY2VfcGdkYXQoKSB3aWxsIHJlY2xhaW0gcGFnZXMgYWNyb3NzIGEgbm9kZSBmcm9tIHpvbmVzXG5tbS92bXNjYW4uYy03MTE1LSAqIHRoYXQgYXJlIGVsaWdpYmxlIGZvciB1c2UgYnkgdGhlIGNhbGxlciB1bnRpbCBhdCBsZWFzdCBvbmUgem9uZSBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTcxMTctICpcbm1tL3Ztc2Nhbi5jOjcxMTg6ICogUmV0dXJucyB0aGUgb3JkZXIga3N3YXBkIGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQuXG5tbS92bXNjYW4uYy03MTE5LSAqXG5tbS92bXNjYW4uYzo3MTIwOiAqIGtzd2FwZCBzY2FucyB0aGUgem9uZXMgaW4gdGhlIGhpZ2htZW0tXHUwMDNlbm9ybWFsLVx1MDAzZWRtYSBkaXJlY3Rpb24uICBJdCBza2lwc1xubW0vdm1zY2FuLmMtNzEyMS0gKiB6b25lcyB3aGljaCBoYXZlIGZyZWVfcGFnZXMgXHUwMDNlIGhpZ2hfd21hcmtfcGFnZXMoem9uZSksIGJ1dCBvbmNlIGEgem9uZSBpc1xuLS1cbm1tL3Ztc2Nhbi5jPTcxMjY9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MTUyLVx0ICogcGxhY2Ugc28gdGhhdCBwYXJhbGxlbCBhbGxvY2F0aW9ucyB0aGF0IGFyZSBuZWFyIHRoZSB3YXRlcm1hcmsgd2lsbFxubW0vdm1zY2FuLmM6NzE1MzpcdCAqIHN0YWxsIG9yIGRpcmVjdCByZWNsYWltIHVudGlsIGtzd2FwZCBpcyBmaW5pc2hlZC5cbm1tL3Ztc2Nhbi5jLTcxNTQtXHQgKi9cbi0tXG5tbS92bXNjYW4uYy03MTgxLVx0XHQgKiBnbyBhaGVhZCBpZiBhbGwgZWxpZ2libGUgem9uZXMgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uXG5tbS92bXNjYW4uYzo3MTgyOlx0XHQgKiByZXF1ZXN0IGFyZSBiYWxhbmNlZCB0byBhdm9pZCBleGNlc3NpdmUgcmVjbGFpbSBmcm9tIGtzd2FwZC5cbm1tL3Ztc2Nhbi5jLTcxODMtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jLTcxOTktXHRcdCAqIG9uIHRoZSBncm91bmRzIHRoYXQgdGhlIG5vcm1hbCByZWNsYWltIHNob3VsZCBiZSBlbm91Z2ggdG9cbm1tL3Ztc2Nhbi5jOjcyMDA6XHRcdCAqIHJlLWV2YWx1YXRlIGlmIGJvb3N0aW5nIGlzIHJlcXVpcmVkIHdoZW4ga3N3YXBkIG5leHQgd2FrZXMuXG5tbS92bXNjYW4uYy03MjAxLVx0XHQgKi9cbi0tXG5tbS92bXNjYW4uYy03MjMzLVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjcyMzQ6XHRcdGtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzIzNS1cbi0tXG5tbS92bXNjYW4uYy03MjQ3LVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjcyNDg6XHRcdGlmIChrc3dhcGRfc2hyaW5rX25vZGUocGdkYXQsIFx1MDAyNnNjKSlcbm1tL3Ztc2Nhbi5jLTcyNDktXHRcdFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcbi0tXG5tbS92bXNjYW4uYy03MjU5LVxubW0vdm1zY2FuLmM6NzI2MDpcdFx0LyogQ2hlY2sgaWYga3N3YXBkIHNob3VsZCBiZSBzdXNwZW5kaW5nICovXG5tbS92bXNjYW4uYy03MjYxLVx0XHRfX2ZzX3JlY2xhaW1fcmVsZWFzZShfVEhJU19JUF8pO1xuLS1cbm1tL3Ztc2Nhbi5jLTcyOTgtXHQgKiB3YXRlcm1hcmtfaGlnaCBhdCB0aGlzIHBvaW50LiBXZSBuZWVkIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlXG5tbS92bXNjYW4uYzo3Mjk5Olx0ICogZmFpbHVyZSBjb3VudCB0byBwcmV2ZW50IHRoZSBrc3dhcGQgdGhyZWFkIGZyb20gc3RvcHBpbmcuXG5tbS92bXNjYW4uYy03MzAwLVx0ICovXG5tbS92bXNjYW4uYy03MzAxLVx0aWYgKCFzYy5ucl9yZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFib29zdGVkKSB7XG5tbS92bXNjYW4uYzo3MzAyOlx0XHRpbnQgZmFpbF9jbnQgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMpO1xubW0vdm1zY2FuLmM6NzMwMzpcdFx0Lyoga3N3YXBkIGNvbnRleHQsIGxvdyBvdmVyaGVhZCB0byB0cmFjZSBldmVyeSBmYWlsdXJlICovXG5tbS92bXNjYW4uYzo3MzA0Olx0XHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3JlY2xhaW1fZmFpbChwZ2RhdC1cdTAwM2Vub2RlX2lkLCBmYWlsX2NudCk7XG5tbS92bXNjYW4uYy03MzA1LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTczNDAtXHQvKlxubW0vdm1zY2FuLmM6NzM0MTpcdCAqIFJldHVybiB0aGUgb3JkZXIga3N3YXBkIHN0b3BwZWQgcmVjbGFpbWluZyBhdCBhc1xubW0vdm1zY2FuLmM6NzM0MjpcdCAqIHByZXBhcmVfa3N3YXBkX3NsZWVwKCkgdGFrZXMgaXQgaW50byBhY2NvdW50LiBJZiBhbm90aGVyIGNhbGxlclxubW0vdm1zY2FuLmM6NzM0MzpcdCAqIGVudGVyZWQgdGhlIGFsbG9jYXRvciBzbG93IHBhdGggd2hpbGUga3N3YXBkIHdhcyBhd2FrZSwgb3JkZXIgd2lsbFxubW0vdm1zY2FuLmMtNzM0NC1cdCAqIHJlbWFpbiBhdCB0aGUgaGlnaGVyIGxldmVsLlxuLS1cbm1tL3Ztc2Nhbi5jLTczNDktLypcbm1tL3Ztc2Nhbi5jOjczNTA6ICogVGhlIHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHggaXMgdXNlZCB0byBwYXNzIHRoZSBoaWdoZXN0IHpvbmUgaW5kZXggdG9cbm1tL3Ztc2Nhbi5jOjczNTE6ICogYmUgcmVjbGFpbWVkIGJ5IGtzd2FwZCBmcm9tIHRoZSB3YWtlci4gSWYgdGhlIHZhbHVlIGlzIE1BWF9OUl9aT05FUyB3aGljaCBpc1xubW0vdm1zY2FuLmM6NzM1MjogKiBub3QgYSB2YWxpZCBpbmRleCB0aGVuIGVpdGhlciBrc3dhcGQgcnVucyBmb3IgZmlyc3QgdGltZSBvciBrc3dhcGQgY291bGRuJiMzOTt0XG5tbS92bXNjYW4uYy03MzUzLSAqIHNsZWVwIGFmdGVyIHByZXZpb3VzIHJlY2xhaW0gYXR0ZW1wdCAobm9kZSBpcyBzdGlsbCB1bmJhbGFuY2VkKS4gSW4gdGhhdFxubW0vdm1zY2FuLmM6NzM1NDogKiBjYXNlIHJldHVybiB0aGUgem9uZSBpbmRleCBvZiB0aGUgcHJldmlvdXMga3N3YXBkIHJlY2xhaW0gY3ljbGUuXG5tbS92bXNjYW4uYy03MzU1LSAqL1xubW0vdm1zY2FuLmM6NzM1NjpzdGF0aWMgZW51bSB6b25lX3R5cGUga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ19kYXRhX3QgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzM1Ny1cdFx0XHRcdFx0ICAgZW51bSB6b25lX3R5cGUgcHJldl9oaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYy03MzU4LXtcbm1tL3Ztc2Nhbi5jOjczNTk6XHRlbnVtIHpvbmVfdHlwZSBjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTczNjAtXG4tLVxubW0vdm1zY2FuLmMtNzM2My1cbm1tL3Ztc2Nhbi5jOjczNjQ6c3RhdGljIHZvaWQga3N3YXBkX3RyeV90b19zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgYWxsb2Nfb3JkZXIsIGludCByZWNsYWltX29yZGVyLFxubW0vdm1zY2FuLmMtNzM2NS1cdFx0XHRcdHVuc2lnbmVkIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzM3Mi1cbm1tL3Ztc2Nhbi5jOjczNzM6XHRwcmVwYXJlX3RvX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG5tbS92bXNjYW4uYy03Mzc0LVxuLS1cbm1tL3Ztc2Nhbi5jLTczODEtXHQgKi9cbm1tL3Ztc2Nhbi5jOjczODI6XHRpZiAocHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcbm1tL3Ztc2Nhbi5jLTczODMtXHRcdC8qXG4tLVxubW0vdm1zY2FuLmMtNzM4NS1cdFx0ICogaXNvbGF0ZSBwYWdlcyBmcm9tIGFuZCBza2lwcyB0aGVtIGluIHRoZSBmdXR1cmUgc2Nhbm5pbmcuXG5tbS92bXNjYW4uYzo3Mzg2Olx0XHQgKiBXaGVuIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgaXQgaXMgcmVhc29uYWJsZSB0byBhc3N1bWVcbm1tL3Ztc2Nhbi5jLTczODctXHRcdCAqIHRoYXQgcGFnZXMgYW5kIGNvbXBhY3Rpb24gbWF5IHN1Y2NlZWQgc28gcmVzZXQgdGhlIGNhY2hlLlxuLS1cbm1tL3Ztc2Nhbi5jLTczOTktXHRcdC8qXG5tbS92bXNjYW4uYzo3NDAwOlx0XHQgKiBJZiB3b2tlbiBwcmVtYXR1cmVseSB0aGVuIHJlc2V0IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHggYW5kXG5tbS92bXNjYW4uYy03NDAxLVx0XHQgKiBvcmRlci4gVGhlIHZhbHVlcyB3aWxsIGVpdGhlciBiZSBmcm9tIGEgd2FrZXVwIHJlcXVlc3Qgb3Jcbi0tXG5tbS92bXNjYW4uYy03NDA0LVx0XHRpZiAocmVtYWluaW5nKSB7XG5tbS92bXNjYW4uYzo3NDA1Olx0XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCxcbm1tL3Ztc2Nhbi5jOjc0MDY6XHRcdFx0XHRcdGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXG5tbS92bXNjYW4uYy03NDA3LVx0XHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KSk7XG5tbS92bXNjYW4uYy03NDA4LVxubW0vdm1zY2FuLmM6NzQwOTpcdFx0XHRpZiAoUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlcikgXHUwMDNjIHJlY2xhaW1fb3JkZXIpXG5tbS92bXNjYW4uYzo3NDEwOlx0XHRcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIsIHJlY2xhaW1fb3JkZXIpO1xubW0vdm1zY2FuLmMtNzQxMS1cdFx0fVxubW0vdm1zY2FuLmMtNzQxMi1cbm1tL3Ztc2Nhbi5jOjc0MTM6XHRcdGZpbmlzaF93YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0KTtcbm1tL3Ztc2Nhbi5jOjc0MTQ6XHRcdHByZXBhcmVfdG9fd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbm1tL3Ztc2Nhbi5jLTc0MTUtXHR9XG4tLVxubW0vdm1zY2FuLmMtNzQyMS1cdGlmICghcmVtYWluaW5nIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmM6NzQyMjpcdCAgICBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xubW0vdm1zY2FuLmM6NzQyMzpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9zbGVlcChwZ2RhdC1cdTAwM2Vub2RlX2lkKTtcbm1tL3Ztc2Nhbi5jLTc0MjQtXG4tLVxubW0vdm1zY2FuLmMtNzQyOS1cdFx0ICogd2F0ZXJtYXJrcyBiZWluZyBicmVhY2hlZCB3aGlsZSB1bmRlciBwcmVzc3VyZSwgd2UgcmVkdWNlIHRoZVxubW0vdm1zY2FuLmM6NzQzMDpcdFx0ICogcGVyLWNwdSB2bXN0YXQgdGhyZXNob2xkIHdoaWxlIGtzd2FwZCBpcyBhd2FrZSBhbmQgcmVzdG9yZVxubW0vdm1zY2FuLmMtNzQzMS1cdFx0ICogdGhlbSBiZWZvcmUgZ29pbmcgYmFjayB0byBzbGVlcC5cbi0tXG5tbS92bXNjYW4uYy03NDQ0LVx0fVxubW0vdm1zY2FuLmM6NzQ0NTpcdGZpbmlzaF93YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0KTtcbm1tL3Ztc2Nhbi5jLTc0NDYtfVxuLS1cbm1tL3Ztc2Nhbi5jLTc0NjAtICovXG5tbS92bXNjYW4uYzo3NDYxOnN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG5tbS92bXNjYW4uYy03NDYyLXtcbi0tXG5tbS92bXNjYW4uYy03NDcwLVx0ICogYW5kIHRoYXQgaWYgd2UgbmVlZCBtb3JlIG1lbW9yeSB3ZSBzaG91bGQgZ2V0IGFjY2VzcyB0byBpdFxubW0vdm1zY2FuLmM6NzQ3MTpcdCAqIHJlZ2FyZGxlc3MgKHNlZSBcJiMzNDtfX2FsbG9jX3BhZ2VzKClcJiMzNDspLiBcJiMzNDtrc3dhcGRcJiMzNDsgc2hvdWxkXG5tbS92bXNjYW4uYy03NDcyLVx0ICogbmV2ZXIgZ2V0IGNhdWdodCBpbiB0aGUgbm9ybWFsIHBhZ2UgZnJlZWluZyBsb2dpYy5cbi0tXG5tbS92bXNjYW4uYy03NDgyLVxubW0vdm1zY2FuLmM6NzQ4MzpcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcbm1tL3Ztc2Nhbi5jOjc0ODQ6XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIE1BWF9OUl9aT05FUyk7XG5tbS92bXNjYW4uYy03NDg1LVx0YXRvbWljX3NldChcdTAwMjZwZ2RhdC1cdTAwM2Vucl93cml0ZWJhY2tfdGhyb3R0bGVkLCAwKTtcbi0tXG5tbS92bXNjYW4uYy03NDg4LVxubW0vdm1zY2FuLmM6NzQ4OTpcdFx0YWxsb2Nfb3JkZXIgPSByZWNsYWltX29yZGVyID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlcik7XG5tbS92bXNjYW4uYzo3NDkwOlx0XHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxubW0vdm1zY2FuLmMtNzQ5MS1cdFx0XHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NDkyLVxubW0vdm1zY2FuLmM6NzQ5Mzprc3dhcGRfdHJ5X3NsZWVwOlxubW0vdm1zY2FuLmM6NzQ5NDpcdFx0a3N3YXBkX3RyeV90b19zbGVlcChwZ2RhdCwgYWxsb2Nfb3JkZXIsIHJlY2xhaW1fb3JkZXIsXG5tbS92bXNjYW4uYy03NDk1LVx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc0OTctXHRcdC8qIFJlYWQgdGhlIG5ldyBvcmRlciBhbmQgaGlnaGVzdF96b25laWR4ICovXG5tbS92bXNjYW4uYzo3NDk4Olx0XHRhbGxvY19vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzQ5OTpcdFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc1MDAtXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmM6NzUwMTpcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIsIDApO1xubW0vdm1zY2FuLmM6NzUwMjpcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xubW0vdm1zY2FuLmMtNzUwMy1cbi0tXG5tbS92bXNjYW4uYy03NTE1LVx0XHQgKiBSZWNsYWltIGJlZ2lucyBhdCB0aGUgcmVxdWVzdGVkIG9yZGVyIGJ1dCBpZiBhIGhpZ2gtb3JkZXJcbm1tL3Ztc2Nhbi5jOjc1MTY6XHRcdCAqIHJlY2xhaW0gZmFpbHMgdGhlbiBrc3dhcGQgZmFsbHMgYmFjayB0byByZWNsYWltaW5nIGZvclxubW0vdm1zY2FuLmM6NzUxNzpcdFx0ICogb3JkZXItMC4gSWYgdGhhdCBoYXBwZW5zLCBrc3dhcGQgd2lsbCBjb25zaWRlciBzbGVlcGluZ1xubW0vdm1zY2FuLmMtNzUxOC1cdFx0ICogZm9yIHRoZSBvcmRlciBpdCBmaW5pc2hlZCByZWNsYWltaW5nIGF0IChyZWNsYWltX29yZGVyKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1MjEtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzUyMjpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF93YWtlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCxcbm1tL3Ztc2Nhbi5jLTc1MjMtXHRcdFx0XHRcdFx0YWxsb2Nfb3JkZXIpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc1MjYtXHRcdGlmIChyZWNsYWltX29yZGVyIFx1MDAzYyBhbGxvY19vcmRlcilcbm1tL3Ztc2Nhbi5jOjc1Mjc6XHRcdFx0Z290byBrc3dhcGRfdHJ5X3NsZWVwO1xubW0vdm1zY2FuLmMtNzUyOC1cdH1cbi0tXG5tbS92bXNjYW4uYy03NTM2LSAqIEEgem9uZSBpcyBsb3cgb24gZnJlZSBtZW1vcnkgb3IgdG9vIGZyYWdtZW50ZWQgZm9yIGhpZ2gtb3JkZXIgbWVtb3J5LiAgSWZcbm1tL3Ztc2Nhbi5jOjc1Mzc6ICoga3N3YXBkIHNob3VsZCByZWNsYWltIChkaXJlY3QgcmVjbGFpbSBpcyBkZWZlcnJlZCksIHdha2UgaXQgdXAgZm9yIHRoZSB6b25lJiMzOTtzXG5tbS92bXNjYW4uYzo3NTM4OiAqIHBnZGF0LiAgSXQgd2lsbCB3YWtlIHVwIGtjb21wYWN0ZCBhZnRlciByZWNsYWltaW5nIG1lbW9yeS4gIElmIGtzd2FwZCByZWNsYWltXG5tbS92bXNjYW4uYy03NTM5LSAqIGhhcyBmYWlsZWQgb3IgaXMgbm90IG5lZWRlZCwgc3RpbGwgd2FrZSB1cCBrY29tcGFjdGQgaWYgb25seSBjb21wYWN0aW9uIGlzXG4tLVxubW0vdm1zY2FuLmMtNzU0MS0gKi9cbm1tL3Ztc2Nhbi5jOjc1NDI6dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTc1NDMtXHRcdCAgIGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03NTU0LVx0cGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG5tbS92bXNjYW4uYzo3NTU1Olx0Y3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NTU2LVxubW0vdm1zY2FuLmMtNzU1Ny1cdGlmIChjdXJyX2lkeCA9PSBNQVhfTlJfWk9ORVMgfHwgY3Vycl9pZHggXHUwMDNjIGhpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jOjc1NTg6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTc1NTktXG5tbS92bXNjYW4uYzo3NTYwOlx0aWYgKFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpIFx1MDAzYyBvcmRlcilcbm1tL3Ztc2Nhbi5jOjc1NjE6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCBvcmRlcik7XG5tbS92bXNjYW4uYy03NTYyLVxubW0vdm1zY2FuLmM6NzU2MzpcdGlmICghd2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCkpXG5tbS92bXNjYW4uYy03NTY0LVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmMtNzU2Ni1cdC8qIEhvcGVsZXNzIG5vZGUsIGxlYXZlIGl0IHRvIGRpcmVjdCByZWNsYWltIGlmIHBvc3NpYmxlICovXG5tbS92bXNjYW4uYzo3NTY3Olx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSB8fFxubW0vdm1zY2FuLmMtNzU2OC1cdCAgICAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jLTc1ODEtXG5tbS92bXNjYW4uYzo3NTgyOlx0dHJhY2VfbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQocGdkYXQtXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTc1ODMtXHRcdFx0XHQgICAgICBnZnBfZmxhZ3MpO1xubW0vdm1zY2FuLmM6NzU4NDpcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCk7XG5tbS92bXNjYW4uYy03NTg1LX1cbm1tL3Ztc2Nhbi5jLTc1ODYtXG5tbS92bXNjYW4uYzo3NTg3OnZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXG5tbS92bXNjYW4uYy03NTg4LXtcbm1tL3Ztc2Nhbi5jLTc1ODktXHQvKiBPbmx5IHRyYWNlIGFjdHVhbCByZXNldHMsIG5vdCByZWR1bmRhbnQgemVyby10by16ZXJvICovXG5tbS92bXNjYW4uYzo3NTkwOlx0aWYgKGF0b21pY194Y2hnKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF9mYWlsdXJlcywgMCkpXG5tbS92bXNjYW4uYzo3NTkxOlx0XHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LVx1MDAzZW5vZGVfaWQsIHJlYXNvbik7XG5tbS92bXNjYW4uYy03NTkyLX1cbi0tXG5tbS92bXNjYW4uYy03NTk0LS8qXG5tbS92bXNjYW4uYzo3NTk1OiAqIFJlc2V0IGtzd2FwZF9mYWlsdXJlcyBvbmx5IHdoZW4gdGhlIG5vZGUgaXMgYmFsYW5jZWQuIFdpdGhvdXQgdGhpc1xubW0vdm1zY2FuLmMtNzU5Ni0gKiBjaGVjaywgc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSAoZS5nLiwgZnJvbSBjZ3JvdXAgbWVtb3J5LmhpZ2hcbm1tL3Ztc2Nhbi5jOjc1OTc6ICogdGhyb3R0bGluZykgY2FuIGtlZXAgcmVzZXR0aW5nIGtzd2FwZF9mYWlsdXJlcyBldmVuIHdoZW4gdGhlIG5vZGVcbm1tL3Ztc2Nhbi5jOjc1OTg6ICogY2Fubm90IGJlIGJhbGFuY2VkLCBjYXVzaW5nIGtzd2FwZCB0byBydW4gZW5kbGVzc2x5LlxubW0vdm1zY2FuLmMtNzU5OS0gKi9cbm1tL3Ztc2Nhbi5jOjc2MDA6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03NjAxLVx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzYwMy1cdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpXG5tbS92bXNjYW4uYzo3NjA0Olx0XHRrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQsIGN1cnJlbnRfaXNfa3N3YXBkKCkgP1xubW0vdm1zY2FuLmMtNzYwNS1cdFx0XHRLU1dBUERfQ0xFQVJfSE9QRUxFU1NfS1NXQVBEIDogS1NXQVBEX0NMRUFSX0hPUEVMRVNTX0RJUkVDVCk7XG4tLVxubW0vdm1zY2FuLmMtNzYwNy1cbm1tL3Ztc2Nhbi5jOjc2MDg6Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxubW0vdm1zY2FuLmMtNzYwOS17XG5tbS92bXNjYW4uYzo3NjEwOlx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF9mYWlsdXJlcykgXHUwMDNlPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xubW0vdm1zY2FuLmMtNzYxMS19XG4tLVxubW0vdm1zY2FuLmM9NzYyMj11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03NjUyLS8qXG5tbS92bXNjYW4uYzo3NjUzOiAqIFRoaXMga3N3YXBkIHN0YXJ0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGluaXQgYW5kIG5vZGUtaG90LWFkZC5cbm1tL3Ztc2Nhbi5jLTc2NTQtICovXG5tbS92bXNjYW4uYzo3NjU1OnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTc2NTYte1xuLS1cbm1tL3Ztc2Nhbi5jLTc2NTgtXG5tbS92bXNjYW4uYzo3NjU5Olx0cGdkYXRfa3N3YXBkX2xvY2socGdkYXQpO1xubW0vdm1zY2FuLmM6NzY2MDpcdGlmICghcGdkYXQtXHUwMDNla3N3YXBkKSB7XG5tbS92bXNjYW4uYzo3NjYxOlx0XHRwZ2RhdC1cdTAwM2Vrc3dhcGQgPSBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKGtzd2FwZCwgcGdkYXQsIG5pZCwgXCYjMzQ7a3N3YXBkJWRcJiMzNDssIG5pZCk7XG5tbS92bXNjYW4uYzo3NjYyOlx0XHRpZiAoSVNfRVJSKHBnZGF0LVx1MDAzZWtzd2FwZCkpIHtcbm1tL3Ztc2Nhbi5jLTc2NjMtXHRcdFx0LyogZmFpbHVyZSBhdCBib290IGlzIGZhdGFsICovXG5tbS92bXNjYW4uYzo3NjY0Olx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gc3RhcnQga3N3YXBkIG9uIG5vZGUgJWQsIHJldD0lcGVcXG5cJiMzNDssXG5tbS92bXNjYW4uYzo3NjY1Olx0XHRcdFx0ICAgbmlkLCBwZ2RhdC1cdTAwM2Vrc3dhcGQpO1xubW0vdm1zY2FuLmMtNzY2Ni1cdFx0XHRCVUdfT04oc3lzdGVtX3N0YXRlIFx1MDAzYyBTWVNURU1fUlVOTklORyk7XG5tbS92bXNjYW4uYzo3NjY3Olx0XHRcdHBnZGF0LVx1MDAzZWtzd2FwZCA9IE5VTEw7XG5tbS92bXNjYW4uYy03NjY4LVx0XHR9IGVsc2Uge1xubW0vdm1zY2FuLmM6NzY2OTpcdFx0XHR3YWtlX3VwX3Byb2Nlc3MocGdkYXQtXHUwMDNla3N3YXBkKTtcbm1tL3Ztc2Nhbi5jLTc2NzAtXHRcdH1cbm1tL3Ztc2Nhbi5jLTc2NzEtXHR9XG5tbS92bXNjYW4uYzo3NjcyOlx0cGdkYXRfa3N3YXBkX3VubG9jayhwZ2RhdCk7XG5tbS92bXNjYW4uYy03NjczLX1cbi0tXG5tbS92bXNjYW4uYy03Njc4LSAqL1xubW0vdm1zY2FuLmM6NzY3OTp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKVxubW0vdm1zY2FuLmMtNzY4MC17XG5tbS92bXNjYW4uYy03NjgxLVx0cGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjk4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUGFnZSBSZWNsYWltKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYWdlIHJlY2xhaW0gYnVzaW5lc3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgd2FrZXVwX2tzd2FwZGAg4oCTIGl0JiMzOTtzIGEga3RocmVhZCwgc28gdGhhdCYjMzk7cyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWVzIEkga25vdywgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBkaXJlY3QgcmVjbGFpbSwgcmlnaHQ/IExldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGdldCB1cyBpbnRvIHRoZSByZWNsYWltIHByb2Nlc3M/CgpIbW0sIEkgc2VlIGBzaHJpbmtfbm9kZWAgaXMgdGhlIGNvcmUgd29ya2hvcnNlLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCBsb29rcyBsaWtlIGBzaHJpbmtfbHJ1dmVjYCBpcyBjYWxsZWQgYnkgYHNocmlua19ub2RlYCwgd2hpY2ggaXMgdGhlbiBjYWxsaW5nIGBldmljdF9mb2xpb3NgLiBJIHNob3VsZCBsb29rIGludG8gdGhpcyB3aG9sZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHByb2Nlc3MuIEFuZCBJIHNlZSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgIGFzIHdlbGwuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBleGFtaW5lIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBtb3JlIGNsb3NlbHkuIEkgc2hvdWxkIGZpcnN0IGNoZWNrIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuIElmIG5vdCwgdGhlbiBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdG8gY2FsbCB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byBgbW0vdm1zY2FuLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHRyeV90b19mcmVlX3BhZ2VzYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIHBhZ2UgcmVjbGFpbSBtZWNoYW5pc20ga2lja3MgaW4uIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsIHRyaWVzIHRvIHBoeXNpY2FsbHkgZnJlZSB1cCBtZW1vcnksIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIExSVSBsaXN0cywgem9uZXMsIGFuZCByZWNsYWltIHRhcmdldHMuIFdoYXQgYXJlIHRoZSBrZXkgaGV1cmlzdGljcyBhbmQgdGhyZXNob2xkcyBpdCB1c2VzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gdGhhdCBqdW1wIG91dD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBOVU1BIG5vZGVzIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSB0eXBlcy4gQW55IHJlY2VudCBjaGFuZ2VzIHRvIG1lbW9yeSBwcmVzc3VyZSBjYWxjdWxhdGlvbnMgd291bGQgYmUgd29ydGggcmV2aWV3aW5nIGhlcmUgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY0ODU9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NTE1LSAqL1xubW0vdm1zY2FuLmM6NjUxNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxubW0vdm1zY2FuLmMtNjUxNy1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz02NjU4PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY3MzctXG5tbS92bXNjYW4uYzo2NzM4OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNjczOS1cdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS92bXNjYW4uYy02NzcyLVxubW0vdm1zY2FuLmM6Njc3MzpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02Nzc0LVxuLS1cbm1tL3Ztc2Nhbi5jPTY4MjQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODU1LVxubW0vdm1zY2FuLmM6Njg1NjpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02ODU3LVxuLS1cbm1tL3Ztc2Nhbi5jPTc2MjI9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzY0MS1cbm1tL3Ztc2Nhbi5jOjc2NDI6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzY0My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSWRlbnRpZnlpbmcgS2V5IEZ1bmN0aW9uIFN5bWJvbHMgYW5kIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBqdW1wIG91dCBpbW1lZGlhdGVseSBhcyBnb29kIHBvaW50cyBvZiBmb2N1czogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgd2FrZXVwX2tzd2FwZGAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBvciBjb250cm9sIHBvaW50cyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoYXQmIzM5O3MgY2hhbmdpbmcgKmFyb3VuZCogdGhlbSwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCB0aGUgY29udGV4dC4gVGhpcyBwYXRjaCB0b3VjaGVzIGEgc2xldyBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzOiBgbW0vdm1zY2FuLmNgLCBgbW0vc3dhcC5jYCwgYG1tL3dvcmtpbmdzZXQuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbW16b25lLmNgLCBhbmQgYG1tL3Ztc3RhdC5jYC4gVGhhdCYjMzk7cyBiYXNpY2FsbHkgdGhlIHdob2xlIHNoZWJhbmcgd2hlbiBpdCBjb21lcyB0byB0aGUgVk0gc3Vic3lzdGVtLiBJdCYjMzk7cyBhIGJyb2FkIHJhbmdlIGFuZCBjb25maXJtcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuCgpTaW5jZSBpdCBtb2RpZmllcyBgbW0vbWVtY29udHJvbC5jYCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGBDT05GSUdfTUVNQ0dgLiBJZiB0aGlzIHBhdGNoJiMzOTtzIGNoYW5nZXMgZGVwZW5kIG9uIG1lbW9yeSBjb250cm9sIGdyb3VwcywgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIGNhbiBjb25maXJtLCBmcm9tIGV4cGVyaWVuY2UsIHRoYXQgYG1tL21lbWNvbnRyb2wuY2AgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhcm91bmQgaG93IGFuZCB3aGVyZSB0aGlzIGNvbmZpZyB3aWxsIGNvbWUgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzM5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL21lbWNvbnRyb2wtdjEuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IHJhZGFyIGFzIG1lbWNnLXJlbGF0ZWQuIEJ1dCwgaXQgYWxzbyBoaXRzIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9zd2FwLmNgLCB3aGljaCBhcmUgY29yZSwgYWx3YXlzLWNvbXBpbGVkIGNvbXBvbmVudHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiDigJMgYXJlIHdlIGludHJvZHVjaW5nIGFueSBuZXcgYCNpZmRlZmAgYmxvY2tzPyBJIGRvdmUgaW50byBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAsIGNoZWNraW5nIHRoZSBgZW51bSBub2RlX3N0YXRfaXRlbWAgZm9yIGFueSBjbHVlcy4gTm9wZSwgbm8gbmV3IGAjaWZkZWZgcyB0aGVyZS4KCk5leHQsIEkganVtcGVkIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrZWQgYHByZXBhcmVfc2Nhbl9jb250cm9sKClgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEFnYWluLCBubyBuZXcgYCNpZmRlZmBzLiBTbywgdGhlIGNvcmUgY2hhbmdlcyBpbiBgbW0vdm1zY2FuLmNgIGRvbiYjMzk7dCBzdHJpY3RseSAqcmVxdWlyZSogYENPTkZJR19NRU1DR2AuIEhvd2V2ZXIsIGJlY2F1c2UgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgIGFyZSBiZWluZyBtb2RpZmllZCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgZW5hYmxpbmcgYm90aCBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgIGlzIHRoZSByaWdodCBtb3ZlIHRvIGVuc3VyZSB3ZSBmdWxseSBjb3ZlciB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBNRU1DR19WMWAgaXMgYWN0dWFsbHkgZGVmaW5lZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR19WMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAzMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBNRU1DR19WMWAgS2NvbmZpZyBvcHRpb24gaXMgZGVmaW5lZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlc2Ugc29ydHMgb2Yga2VybmVsIGZlYXR1cmVzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgb3B0aW9ucy4gYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhcyBpdCBvZnRlbiBoYW5kbGVzIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb25zLiBCdXQsIGdpdmVuIHRoYXQgYE1FTUNHX1YxYCBzY3JlYW1zIG1lbW9yeSBtYW5hZ2VtZW50LCBJJiMzOTttIGxlYW5pbmcgbW9yZSB0b3dhcmRzIGBtbS9LY29uZmlnYCByaWdodCBhd2F5LiBJdCYjMzk7cyB0aGUgbW9yZSBsb2dpY2FsIGhvbWUgZm9yIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBpdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gZmlsZXMsIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjY9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzUtXG5pbml0L0tjb25maWc6MTA3Njpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc3LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkxLVxuaW5pdC9LY29uZmlnOjEwOTI6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5My1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5OC1cbmluaXQvS2NvbmZpZzoxMDk5OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDAtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0OTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgaG93IHRvIGJlc3QgYXBwcm9hY2ggYSBkZWVwZXIgZGl2ZS4gRW5hYmxpbmcgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCBzZWVtcyBsaWtlIGEgc29saWQgZm91bmRhdGlvbiwgSSB1c3VhbGx5IHN0YXJ0IHRoZXJlIHRvIGJlIGFibGUgdG8gZ2V0IGdvb2Qgb2JzZXJ2YWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQga2V5IGVudHJ5IHBvaW50cyBmb3IgbWVtb3J5IHJlY2xhaW0uIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IGFyZWFzIHdoZXJlIHRoZSB3b3JraW5nc2V0IGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB3YWtldXBfa3N3YXBkYC4KCkkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29uc2lkZXIgYHNocmlua19hbGxfbWVtb3J5YCwgYXMgdGhhdCYjMzk7cyB1c2VkIGZvciBoaWJlcm5hdGlvbiwgdGhvdWdoIGl0IG1heSBub3QgYmUgZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIHdvcmtpbmdzZXQgZm9jdXMgcmlnaHQgbm93LiBMZXQgbWUgc2VlLi4uIEkgc2VlIGBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGVgIGlzIG1lbnRpb25lZCBpbiBgbW0vc3dhcC5jYCwgYnV0IGl0IGp1c3QgYXBwZWFycyB0byBiZSBjb250ZXh0IGhlcmUsIG5vdCBzb21ldGhpbmcgdG8gZm9jdXMgb24uCgpJIGFsc28gc2VlIHRoYXQgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIHdlcmUgcmVtb3ZlZC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbmFsaXR5IGhhcyBnb25lLiBBaCwgaGVyZSBpdCBpczogYHdvcmtpbmdzZXRfcmVmYXVsdGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gcmVtb3ZlIHRoZSBvbGQgcmVmYXVsdCBjb3N0IGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyByZWZhdWx0ZWQsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gZXhhbWluZS4KClNvLCAqaXMqIGB3b3JraW5nc2V0X3JlZmF1bHRgIHRoZSBjb3JyZWN0IHN5bWJvbCB0byBmb2N1cyBvbj8gWWVwLCBhYnNvbHV0ZWx5LiBUaGF0IHNlZW1zIGxpa2UgYW4gaWRlYWwgZW50cnkgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIHdvcmtpbmdzZXQgY29kZSBhbmQgc2VlaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBJdCYjMzk7cyBhIGtleSBzcG90IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgd2hlbiBtZW1vcnkgaXMgYWN0aXZlbHkgYmVpbmcgdXNlZCBhbmQgcmUtdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXG5tbS93b3JraW5nc2V0LmM6NTQwOiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNTQ3LSAqL1xubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyOTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHM6CgoqKlJlZmxlY3Rpbmcgb24gYHdvcmtpbmdzZXRfcmVmYXVsdGAqKgoKQWxyaWdodCwgbGV0IG1lIHRoaW5rLiBgd29ya2luZ3NldF9yZWZhdWx0YC4uLiBpcyB0aGF0IGFuIGV4cG9ydGVkIGZ1bmN0aW9uIG9yIHZhcmlhYmxlPyBJIG5lZWQgdG8ga25vdyBpZiBpdCYjMzk7cyBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgaXRzIGRlZmluaW5nIG1vZHVsZSBvciBpZiBpdCYjMzk7cyBhbiBpbnRlcm5hbCBkZXRhaWwuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGF0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgbWFpbnRhaW5hYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGJyZWFraW5nIGNoYW5nZXMgaW4gZnV0dXJlIHJldmlzaW9ucyBvZiB0aGUgc29mdHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYmVoaW5kIGl0cyBleHBvc3VyZS4gSXMgaXQgZm9yIHBlcmZvcm1hbmNlIHByb2ZpbGluZywgZGVidWdnaW5nLCBhIHNwZWNpZmljIG9wdGltaXphdGlvbiBzdHJhdGVneSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIHJlYXNvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIGl0cyBpbXBhY3QgYW5kIGFueSBwb3RlbnRpYWwgYWx0ZXJuYXRpdmVzLiBUaGlzIGltcGFjdHMgaG93IEkgc2hvdWxkIHByb2NlZWQgd2l0aCB3aGF0ZXZlciB0YXNrIGlzIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qd29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGZvciBzd2FwIG1hbmFnZW1lbnQgYXJlIGxvY2F0ZWQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UuKiogQW5kIGdpdmVuIG15IGV4cGVyaWVuY2UsIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIGNoZWNrIHRoZXJlIGZpcnN0OyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlbGF0ZWQgdG8gc3dhcCBzcGFjZSwgcGFnZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBpbiB0aGF0IGNvbnRleHQsIGFuZCB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzIG9mIHN3YXBwaW5nIHBhZ2VzIHRvIGFuZCBmcm9tIGRpc2suIEl0JiMzOTtzIGEgc29saWQsIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmg9MzAwPXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozMDE6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTMwMi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBUaGlzIEFQSSBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBub24tc3RhdGljIEFQSSBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gdmFyaW91cyBwYXJ0cyBvZiB0aGUga2VybmVsLCBub3QganVzdCBhIGxvY2FsaXplZCBtb2R1bGUuIFRoYXQgbmFycm93cyBkb3duIHRoZSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiBjb250ZXh0LCB3ZSBzaG91bGQgbG9vayBjbG9zZWx5IGF0OgoKKiAgIGB0cnlfdG9fZnJlZV9wYWdlc2AKKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYAoqICAgYHdha2V1cF9rc3dhcGRgCiogICBgd29ya2luZ3NldF9yZWZhdWx0YAoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IG15IGluaXRpYWwgaHVuY2guIEl0IHNlZW1zIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgaW5kZWVkIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciAqZGlyZWN0KiByZWNsYWltLCBtYWtpbmcgaXQgYSB2ZXJ5IHN0cm9uZyBjYW5kaWRhdGUuIGB3YWtldXBfa3N3YXBkYCBpcyB0aGUgdHJpZ2dlciBmb3Igd2FraW5nIHVwIHRoZSBrc3dhcGQga2VybmVsIHRocmVhZCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHdvcmtpbmdzZXQgcmVmYXVsdCBtZWNoYW5pc20uCgpXYWl0LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlPyBMb29raW5nIGF0IHRoZSBjb2RlLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBhbHNvIGEgcG90ZW50aWFsLCBidXQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbmxpbmUgb3IgZXhwb3J0ZWQ/IE9oLCB3YWl0LCBpdCYjMzk7cyBhY3R1YWxseSBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGFzIGEgcG90ZW50aWFsIHBvaW50IGZvciBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00ODY9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDgtLyoqXG5tbS9tZW1jb250cm9sLmM6NTA5OiAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZ1xubW0vbWVtY29udHJvbC5jLTUxMC0gKiBAbHJ1dmVjOiB0aGUgTFJVIHZlY3RvciB0byByZWFkIGZyb21cbi0tXG5tbS9tZW1jb250cm9sLmMtNTI2LSAqL1xubW0vbWVtY29udHJvbC5jOjUyNzp1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS9tZW1jb250cm9sLmMtNTI4LVx0XHRcdFx0XHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ5OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBGbG93KioKClRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlLCBkaXJlY3QgcmVhZDsgaXQmIzM5O3MgYSBkeW5hbWljIHByb2Nlc3MgdGllZCB0byBnZXR0ZXJzLCB3aXRoIHRoZSByZWFsIG1lYXQgYmVpbmcgaW4gYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhbmQgYGV2aWN0X2ZvbGlvc2AuIEJlY2F1c2UgdGhleSBhcmUgc3RhdGljLCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBrZXkuCgpgc2hyaW5rX25vZGVgIGlzIGNhbGxpbmcgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgd2hpY2ggaXMgaXRzZWxmIGJlaW5nIGNhbGxlZCBieSBhIHNlcmllcyBvZiBmdW5jdGlvbnM6IGBrc3dhcGRfc2hyaW5rX25vZGVgLCBgc2hyaW5rX3pvbmVzYCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4KCmBzaHJpbmtfem9uZXNgIHRoZW4gY2FsbHMgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgYW5kIHRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuCgpUaGVyZWZvcmUsIHRoZSBwbGFjZXMgSSB3YW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcyB0aGUgcG9pbnRzIHdoZXJlIHRoaXMgZmxvdyBpcyBraWNrZWQgb2ZmLiBOb3csIGxldCYjMzk7cyBzaGlmdCBmb2N1cyB0byBgZXZpY3RfZm9saW9zYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDgyNT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4NTgtXG5tbS92bXNjYW4uYzo0ODU5OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDg2MC1cdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmM9NTAyMT1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwNDQtXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTA0NTpcdFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmMtNTA0Ni1cdFx0aWYgKCFkZWx0YSlcbi0tXG5tbS92bXNjYW4uYz01NjQ4PXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU2NjgtXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTY2OTpcdFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxubW0vdm1zY2FuLmMtNTY3MC1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzOTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWx2aW5nIGludG8gdGhlIE1HTFJVIEV2aWN0aW9uIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBgZXZpY3RfZm9saW9zYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLCBhbmQgdGhvc2UgYXJlIGNvcmUgY29tcG9uZW50cyBvZiBgbHJ1X2dlbmAsIHRoZSBNdWx0aXBsZS1HZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgbWVjaGFuaXNtLiBCdXQgaGFuZyBvbiwgaXMgYGV2aWN0X2ZvbGlvc2AgYWN0dWFsbHkgKnBhcnQqIG9mIE1HTFJVPyBNeSBtZW1vcnkmIzM5O3MgYSBiaXQgZnV6enkgb24gdGhhdCBzcGVjaWZpYyByZWxhdGlvbnNoaXAuIFRpbWUgdG8gdmVyaWZ5LiBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBgZXZpY3RfZm9saW9zYCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgbW0vdm1zY2FuLmNgIHRvIGNsYXJpZnkgaXRzIGV4YWN0IHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIE1HTFJVIGZyYW1ld29yayBhbmQgY29uZmlybSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIExSVSBnZW5lcmF0aW9uIG1hbmFnZW1lbnQuIEl0JiMzOTtzIGltcG9ydGFudCB0byBoYXZlIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmbG93IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4MjU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODU4LVxubW0vdm1zY2FuLmM6NDg1OTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4NjAtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwMjE9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ0LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUwNDU6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwNDYtXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTY0OD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NjY4LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU2Njk6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU2NzAtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDgyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1HTFJVIENvbnNpZGVyYXRpb24gZm9yIFRlc3RpbmcqKgoKT2theSwgTUdMUlUuIFJpZ2h0LiBOb3csIGEga2V5IHF1ZXN0aW9uIHBvcHMgdXA6IGlzIE1HTFJVIGFjdHVhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdD8gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gQWgsIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGNvbmZpZyBvcHRpb24gZm9yIE1HTFJVLCBzbyB0aGF0JiMzOTtzIHRoZSBvbmUgdG8gY2hlY2suIExldCYjMzk7cyBzZWUgaWYgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGEgcmVxdWlyZW1lbnQgaW4gdGhpcyBzY2VuYXJpby4KClRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AsIGFuZCB0aGF0IGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgTUdMUlUgY29kZWJhc2UuIEludGVyZXN0aW5nLCBpdCAqYWxzbyogdG91Y2hlcyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YC4gVGhvc2UgYXJlIHBhcnQgb2YgdGhlIGFjdGl2ZS9pbmFjdGl2ZSBMUlUsIHNvIHRoZSBsZWdhY3kgTFJVLiBTbywgdGhpcyBwYXRjaCBjbGVhcmx5IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIE1HTFJVLgoKVGhlcmVmb3JlLCB0byB0aG9yb3VnaGx5IGV2YWx1YXRlIHRoaXMgcGF0Y2gsIEkgdGhpbmsgd2UgKnJlYWxseSogbmVlZCB0byBlbmFibGUgYENPTkZJR19MUlVfR0VOYCBkdXJpbmcgdGVzdGluZyB0byBlbnN1cmUgd2UmIzM5O3JlIGV4ZXJjaXNpbmcgdGhlIE1HTFJVIHBhdGggYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlIHRvIGJlIHN1cmUuIExldCYjMzk7cyBzZWUgd2hhdCBgTFJVX0dFTmAgYnJpbmdzIHRvIHRoZSB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTQwNj1lbmRpZiAjIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xNDA4LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDk6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQxMC1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxNy1cbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTktXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDIzLVxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjUtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQzMi1cbm1tL0tjb25maWc6MTQzMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQzNC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3NDMKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogOTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgcGF0Y2guIEZpcnN0LCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGxvb2sgbGlrZSBnb29kIGZsYWdzIHRvIGVuYWJsZSDigJMgdGhleSYjMzk7cmUga2V5IHRvIHRoZSBuZXcgTFJVIGltcGxlbWVudGF0aW9uLiBOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBjb2RlLiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGlzIGhhbmRsaW5nIHRoZSBsZWdhY3kgTFJVLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYm90aCB0aGUgbGVnYWN5IExSVSBhbmQgdGhlIE1HTFJVLiBTcGVjaWZpY2FsbHksIHRoZSBsZWdhY3kgTFJVIHRvdWNoZXMgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCB3aGlsZSBNR0xSVSB1c2VzIGBldmljdF9mb2xpb3NgLiBJIHNob3VsZCBiZSB0ZXN0aW5nIGJvdGguIFdlIGNhbiBqdXN0IHNwZWNpZnkgYExSVV9HRU5gLCBhbmQgdGhlIHN5c3RlbSB3aWxsIGhhbmRsZSBgTFJVX0dFTl9FTkFCTEVEYC4KClRoZSBpbml0aWFsIHBsYW4gaXMgdG8gZW5hYmxlIGBMUlVfR0VOYCBzbyB0aGF0IHRoZSBmZWF0dXJlIGlzIGNvbXBpbGVkIGluLiBgTFJVX0dFTl9FTkFCTEVEYCBtaWdodCBiZSBmaW5lIHRvIGVuYWJsZSB0b28uIEl0IG1pZ2h0IGJlIGJldHRlciB0byBoYXZlIGxlZ2FjeSBMUlUgdGVzdGVkIG1vcmUuIEJ1dCBpdCYjMzk7cyBmaW5lLCBzeXprYWxsZXIgY2FuIHRvZ2dsZSBgTFJVX0dFTl9FTkFCTEVEYCBpZiBpdCBrbm93cyBob3csIG9yIHdlIGNhbiBqdXN0IHByb3ZpZGUgYExSVV9HRU5gIGFuZCBsZXQgdGhlIGRlZmF1bHQgYmUgd2hhdGV2ZXIuIElmIHdlIGRvbiYjMzk7dCBzcGVjaWZ5IGBMUlVfR0VOX0VOQUJMRURgLCBpdCBtaWdodCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0LCB3aGljaCB0ZXN0cyBsZWdhY3kgTFJVLiBJZiB3ZSBzcGVjaWZ5IGl0LCBpdCB0ZXN0cyBNR0xSVS4gU28gaXQmIzM5O3MgYmVzdCB0byBlbmFibGUgYExSVV9HRU5gIGluIHRoZSBjb25maWcuCgpUaGVyZWZvcmUsIHRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTtsbCB1c2UgYXJlOgoqICAgYE1FTUNHYAoqICAgYE1FTUNHX1YxYAoqICAgYExSVV9HRU5gCgpJJiMzOTt2ZSBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgYE1FTUNHX1YxYCBpcyBwcmVzZW50IGluIGBpbml0L0tjb25maWdgLgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBjcml0aWNhbCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgdG8gY292ZXIgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNoYW5nZWQgZnVuY3Rpb25zLCBzbyBJJiMzOTttIGxvb2tpbmcgYXQ6CiogICBgdHJ5X3RvX2ZyZWVfcGFnZXNgCiogICBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AKKiAgIGB3YWtldXBfa3N3YXBkYAoqICAgYHdvcmtpbmdzZXRfcmVmYXVsdGAKCkFyZSB0aGVyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIGZvciBNR0xSVT8gYGxydV9nZW5fc2hyaW5rX25vZGVgIGlzIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGNvdmVycyBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGVyZS4KCkkmIzM5O20gbG9va2luZyBhdCBgcGFnZW91dGAuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCBieSBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBgc2hyaW5rX2ZvbGlvX2xpc3RgIGlzIGNhbGxlZCBieSBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCwgc28gSSB0aGluayB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2Agd2lsbCBjb3ZlciBpdC4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGVzZS4KKiAgIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGNhbGxlZCBieSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLgoqICAgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGNhbGxlZCBieSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCB3aGVuIG1lbWNnIGlzIGRpc2FibGVkLgoqICAgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3Ztc3RhdC5oYC4KClRoZSBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBJIGNhdGVnb3JpemUgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAuCgpJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoZSBmaW5hbCBsaXN0IG9mIEZvY3VzIFN5bWJvbHM6CgoqICAgYHRyeV90b19mcmVlX3BhZ2VzYAoqICAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgCiogICBgd2FrZXVwX2tzd2FwZGAKKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRgCgpGaW5hbCBDb25maWdzOgoKKiAgIGBNRU1DR2AKKiAgIGBNRU1DR19WMWAKKiAgIGBMUlVfR0VOYAoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgTUVNQ0dfVjFgIGlzIGNvcnJlY3QuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYExSVV9HRU5gIGlzIGNvcnJlY3QuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBjb3JyZWN0LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBjb3JyZWN0LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGB3YWtldXBfa3N3YXBkYCBpcyBjb3JyZWN0LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGNvcnJlY3QuIEFsbCBjaGVja3MgYXJlIGdyZWVuLiBOb3cgSSYjMzk7bGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIExSVSByZWNsYWltIGxvZ2ljIGFuZCBjb3N0IGNhbGN1bGF0aW9uIGZvciBib3RoIGxlZ2FjeSBMUlUgYW5kIE1HTFJVLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBjb3VudGVycyBmb3IgTFJVIHN0YXRzIGFuZCBjaGFuZ2VzIGhvdyBzY2FuIGJhbGFuY2UgaXMgZGV0ZXJtaW5lZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3dha2V1cF9rc3dhcGQmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NDk6MjQuNzA4MzI0NTg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUxNzEwOTcxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OToyNC43MDgzMzA1NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjIxNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMyM2JkMzA4ZDRhNzc2ZDU2MDEyYjhjMmM4ZmZmMWUzZmRlMmEyYTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDg6NDk6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDgxNzBiYjgwNjZhMjJmLi43YWU2N2FjMjM1MTA3NiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTk0Nyw2ICs5NDcsOCBAQCB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcXG4gYm9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpO1xcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbiBcXG5AQCAtMTM5OSw2ICsxNDAxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4re1xcbitcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjg1MzAzYzU4NjdjODRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTMyMyw2ICszMjMsOCBAQCBlbnVtIG5vZGVfc3RhdF9pdGVtIHtcXG4gXFx0UEdTQ0FOX1BST0FDVElWRSxcXG4gXFx0UEdTQ0FOX0FOT04sXFxuIFxcdFBHU0NBTl9GSUxFLFxcbitcXHRQR1JPVEFURV9BTk9OLFxcbitcXHRQR1JPVEFURV9GSUxFLFxcbiBcXHRQR1JFRklMTCxcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gXFx0TlJfSFVHRVRMQixcXG5AQCAtNzU1LDYgKzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbitzdHJ1Y3QgbHJ1X2Nvc3Qge1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0Y291bnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRsYXN0X3JvdGF0ZWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRsYXN0X2lvO1xcbit9O1xcbitcXG4gc3RydWN0IGxydXZlYyB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRsaXN0c1tOUl9MUlVfTElTVFNdO1xcbiBcXHQvKiBwZXIgbHJ1dmVjIGxydV9sb2NrIGZvciBtZW1jZyAqL1xcbkBAIC03NjMsOSArNzcxLDEyIEBAIHN0cnVjdCBscnV2ZWMge1xcbiBcXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxcbiBcXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXFxuIFxcdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cXG4rXFx0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xcbitcXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxcbiBcXHQgKi9cXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGFub25fY29zdDtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZpbGVfY29zdDtcXG4rXFx0c3RydWN0IGxydV9jb3N0XFx0XFx0XFx0Y29zdFtBTk9OX0FORF9GSUxFXTtcXG4rXFx0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xcbitcXHRzcGlubG9ja190XFx0XFx0XFx0Y29zdF9sb2NrO1xcbiBcXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXFxuIFxcdGF0b21pY19sb25nX3RcXHRcXHRcXHRub25yZXNpZGVudF9hZ2U7XFxuIFxcdC8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMzA5LDkgKzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlcztcXG4gXFxuIFxcbiAvKiBsaW51eC9tbS9zd2FwLmMgKi9cXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXFxuLVxcdFxcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XFxuIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7XFxuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcXG4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oXFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oXFxuQEAgLTIwLDcgKzIwLDYgQEAgc3RydWN0IHJlY2xhaW1fc3RhdCB7XFxuIFxcdHVuc2lnbmVkIG5yX2Nvbmdlc3RlZDtcXG4gXFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xcbiBcXHR1bnNpZ25lZCBucl9pbW1lZGlhdGU7XFxuLVxcdHVuc2lnbmVkIG5yX3BhZ2VvdXQ7XFxuIFxcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xcbiBcXHR1bnNpZ25lZCBucl9yZWZfa2VlcDtcXG4gXFx0dW5zaWduZWQgbnJfdW5tYXBfZmFpbDtcXG5AQCAtMTk0LDYgKzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxcbiBcXHRyZXR1cm4geDtcXG4gfVxcbiBcXG4rLypcXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2YgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcXG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxcbisgKiBSZXR1cm5zIHRoZSByYXcgd3JhcHBpbmcgdmFsdWUgc28gdGhhdCB1bnNpZ25lZCBtb2R1bGFyIHN1YnRyYWN0aW9uIHN0YXlzXFxuKyAqIGNvcnJlY3QgYWNyb3NzIGEgc2lnbmVkLWxvbmcgb3ZlcmZsb3cgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZVxcbisgKiBjbGFtcCBpbiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2Ugc3B1cmlvdXNcXG4rICogZGVsdGEuIERvIE5PVCB1c2UgZm9yIG5vbi1tb25vdG9uaWMgcGFnZS1jb3VudCByZWFkcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuK3tcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXFx1MDAyNnZtX25vZGVfc3RhdFtpdGVtXSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcXG4ge1xcbiBcXHRWTV9XQVJOX09OX09OQ0Uodm1zdGF0X2l0ZW1faW5fYnl0ZXMoaXRlbSkpO1xcbkBAIC0yNTksMTEgKzI3MSwxNCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuIGV4dGVybiB2b2lkIGZvbGRfdm1fbnVtYV9ldmVudHModm9pZCk7XFxuICNlbHNlXFxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGUobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShpdGVtKVxcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGl0ZW0pXFxuKyNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhpdGVtKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxcbiB7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXFxuaW5kZXggNzY1MDY5MjExNTY3OGMuLjA5MWJjOWZmZWU0NGEwIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xcbkBAIC0xOTg4LDggKzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbiBcXHRcXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcXG4gXFx0XFx0XFx0bXogPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbiBcXG4tXFx0XFx0XFx0YW5vbl9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuYW5vbl9jb3N0O1xcbi1cXHRcXHRcXHRmaWxlX2Nvc3QgKz0gbXotXFx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XFxuK1xcdFxcdFxcdGFub25fY29zdCArPSBtei1cXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcXG4rXFx0XFx0XFx0ZmlsZV9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50O1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNlcV9idWZfcHJpbnRmKHMsIFxcXCJhbm9uX2Nvc3QgJWx1XFxcXG5cXFwiLCBhbm9uX2Nvc3QpO1xcbiBcXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiZmlsZV9jb3N0ICVsdVxcXFxuXFxcIiwgZmlsZV9jb3N0KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZmQuLmNlOWM0ZmI5MjQ3MGI2IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zOTMsNiArMzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcXG4gXFx0TlJfU0hNRU1fVEhQUyxcXG4gXFx0TlJfRklMRV9USFBTLFxcbiBcXHROUl9BTk9OX1RIUFMsXFxuK1xcdE5SX1ZNU0NBTl9XUklURSxcXG4gXFx0TlJfVk1BTExPQyxcXG4gXFx0TlJfS0VSTkVMX1NUQUNLX0tCLFxcbiBcXHROUl9QQUdFVEFCTEUsXFxuQEAgLTQxOSw2ICs0MjAsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbiBcXHRQR1NDQU5fUFJPQUNUSVZFLFxcbiBcXHRQR1NDQU5fQU5PTixcXG4gXFx0UEdTQ0FOX0ZJTEUsXFxuK1xcdFBHUk9UQVRFX0FOT04sXFxuK1xcdFBHUk9UQVRFX0ZJTEUsXFxuIFxcdFBHUkVGSUxMLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHROUl9IVUdFVExCLFxcbkBAIC01MDIsNiArNTA1LDQyIEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4gXFx0cmV0dXJuIHg7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcXG4rICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXFxuKyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXFxuKyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xcbisgKiB0aGF0IHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d29cXG4rICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xcbisgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxcbisgKiBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91cyBkZWx0YS5cXG4rICpcXG4rICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXFxuKyAqIHJlYWRpbmcgZnJvbSBwZXItQ1BVIGRlbHRhIHNrZXcgbXVzdCBwcmVzZW50IGFzIHplcm8uXFxuKyAqXFxuKyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHNvbWVcXG4rICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyBhcmUgc3RvcmVkIGluXFxuKyAqIGVudW0gbm9kZV9zdGF0X2l0ZW0uXFxuKyAqL1xcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuK1xcdFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xcbitcXG4rXFx0aSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XFxuK1xcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpUkVBRF9PTkNFKHBuLVxcdTAwM2VscnV2ZWNfc3RhdHMtXFx1MDAzZXN0YXRlW2ldKTtcXG4rfVxcbitcXG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmNcXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XFxuLS0tIGEvbW0vbW16b25lLmNcXG4rKysgYi9tbS9tbXpvbmUuY1xcbkBAIC03OCw2ICs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXG4gXFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bHJ1dmVjLVxcdTAwM2Vjb3N0X2xvY2spO1xcbiBcXHR6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpO1xcbiBcXG4gXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXFxuaW5kZXggNTg4ZjUwZDhmMWE4YzkuLjc0YjI4MTc3OGNiYzkyIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuY1xcbisrKyBiL21tL3N3YXAuY1xcbkBAIC0yNzIsNzMgKzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGZvbGlvX2JhdGNoX2FkZF9hbmRfbW92ZShmb2xpbywgbHJ1X21vdmVfdGFpbCk7XFxuIH1cXG4gXFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKVxcbi1cXHRcXHRfX3JlbGVhc2VzKGxydXZlYy1cXHUwMDNlbHJ1X2xvY2spXFxuLVxcdFxcdF9fcmVsZWFzZXMocmN1KVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgY29zdDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFVcXG4tXFx0ICogdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24ndCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlXFxuLVxcdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxcbi1cXHQgKiBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmUgb3ZlcndoZWxtaW5nbHlcXG4tXFx0ICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXFxuLVxcdCAqL1xcbi1cXHRjb3N0ID0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcXG4tXFx0aWYgKCFjb3N0KSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGZvciAoOzspIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xcbi1cXG4tXFx0XFx0LyogUmVjb3JkIGNvc3QgZXZlbnQgKi9cXG4tXFx0XFx0aWYgKGZpbGUpXFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICs9IGNvc3Q7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3QgKz0gY29zdDtcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIERlY2F5IHByZXZpb3VzIGV2ZW50c1xcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBCZWNhdXNlIHdvcmtsb2FkcyBjaGFuZ2Ugb3ZlciB0aW1lIChhbmQgdG8gYXZvaWRcXG4tXFx0XFx0ICogb3ZlcmZsb3cpIHdlIGtlZXAgdGhlc2Ugc3RhdGlzdGljcyBhcyBhIGZsb2F0aW5nXFxuLVxcdFxcdCAqIGF2ZXJhZ2UsIHdoaWNoIGVuZHMgdXAgd2VpZ2hpbmcgcmVjZW50IHJlZmF1bHRzXFxuLVxcdFxcdCAqIG1vcmUgdGhhbiBvbGQgb25lcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4tXFx0XFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XFxuLVxcbi1cXHRcXHRpZiAobHJ1dmVjLVxcdTAwM2VmaWxlX2Nvc3QgKyBscnV2ZWMtXFx1MDAzZWFub25fY29zdCBcXHUwMDNlIGxydXNpemUgLyA0KSB7XFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0IC89IDI7XFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlYW5vbl9jb3N0IC89IDI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdFxcdGxydXZlYyA9IHBhcmVudF9scnV2ZWMobHJ1dmVjKTtcXG4tXFx0XFx0aWYgKCFscnV2ZWMpIHtcXG4tXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHR9XFxuLX1cXG4tXFxuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbi1cXG4tXFx0bHJ1dmVjID0gZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGZvbGlvKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLFxcbi1cXHRcXHRcXHRcXHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuQEAgLTExNjQsOCArMTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XFxuIFxcbiBcXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xcbiBcXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XFxuLVxcdHBhcmVudF9scnV2ZWMtXFx1MDAzZWFub25fY29zdCArPSBjaGlsZF9scnV2ZWMtXFx1MDAzZWFub25fY29zdDtcXG4tXFx0cGFyZW50X2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICs9IGNoaWxkX2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0O1xcbiBcXG4gXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG4gXFx0XFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDFhMTQyYzU4NzAwZDAwLi40ZDhhYjE0ZTNiZTQ0MyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTY2OCw3ICs2NjgsNyBAQCBzdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xcbiBcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX3dyaXRlX2ZvbGlvKGZvbGlvKTtcXG4tXFx0bm9kZV9zdGF0X2FkZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFKTtcXG4rXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIFxcdHJldHVybiBQQUdFX1NVQ0NFU1M7XFxuIH1cXG4gXFxuQEAgLTE0MTMsOCArMTQxMyw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4gXFx0XFx0XFx0XFx0XFx0c2MtXFx1MDAzZW5yX3NjYW5uZWQgLT0gKG5yX3BhZ2VzIC0gMSk7XFxuIFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzID0gMTtcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRzdGF0LVxcdTAwM2Vucl9wYWdlb3V0ICs9IG5yX3BhZ2VzO1xcbi1cXG4gXFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBrZWVwO1xcbiBcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuQEAgLTIwMzgsMTAgKzIwMzYsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRpdGVtID0gUEdTVEVBTF9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcXG4gXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xcbitcXHRpZiAobnJfc2Nhbm5lZCBcXHUwMDNlIG5yX3JlY2xhaW1lZClcXG4rXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxcbitcXHRcXHRcXHRcXHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XFxuIFxcbi1cXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgc3RhdC5ucl9wYWdlb3V0LFxcbi1cXHRcXHRcXHRcXHRcXHRucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcXG4gXFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXFx1MDAzZW5vZGVfaWQsXFxuIFxcdFxcdFxcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXFx1MDAyNnN0YXQsIHNjLVxcdTAwM2Vwcmlvcml0eSwgZmlsZSk7XFxuQEAgLTIxNDcsOSArMjE0NSw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdGNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xcbiBcXHRjb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7XFxuIFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xcbitcXHRpZiAobnJfcm90YXRlZClcXG4rXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLCBucl9yb3RhdGVkKTtcXG4gXFxuLVxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbi1cXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTtcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsXFxuIFxcdFxcdFxcdG5yX2RlYWN0aXZhdGUsIG5yX3JvdGF0ZWQsIHNjLVxcdTAwM2Vwcmlvcml0eSwgZmlsZSk7XFxuIH1cXG5AQCAtMjI4Miw4ICsyMjgwLDEwIEBAIGVudW0gc2Nhbl9iYWxhbmNlIHtcXG4gXFxuIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmlsZTtcXG4rXFx0c3RydWN0IGxydV9jb3N0ICphbm9uX2Nvc3QsICpmaWxlX2Nvc3Q7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmaWxlO1xcbiBcXG4gXFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTIyOTksMTEgKzIyOTksNjkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEZXRlcm1pbmUgdGhlIHNjYW4gYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVcy5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGNvc3QgbW9kZWwgaXMgYmFzZWQgb24gcm90YXRpb25zLCByZWZhdWx0cyBhbmRcXG4rXFx0ICogcmVjbGFpbS1kcml2ZW4gd3JpdGVzIChhbm9uIG9ubHkpIG9uIGVhY2ggc2lkZS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlc2UgZXZlbnQgY291bnRlcnMgYXJlIG1vbm90b25pYywgc28gZWFjaCByZWNsYWltIGN5Y2xlXFxuK1xcdCAqIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCBzY2FuIGlzIGV4dHJhY3RlZCBhbmQgaW5jb3Jwb3JhdGVkXFxuK1xcdCAqIGludG8gYSBkZWNheWluZyBhdmVyYWdlLiBUaGlzIGVuc3VyZXMgY3VycmVuY3ksIGFzIHdvcmtsb2Fkc1xcbitcXHQgKiBjaGFuZ2Ugb3ZlciB0aW1lLCBhbmQgYXZvaWRzIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbnMuXFxuK1xcdCAqXFxuK1xcdCAqIFVzZSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBzbyB1bnNpZ25lZCBzdWJ0cmFjdGlvblxcbitcXHQgKiB5aWVsZHMgdGhlIGNvcnJlY3QgZGVsdGEgYWNyb3NzIGEgc2lnbmVkLWxvbmcgd3JhcGFyb3VuZCBvZlxcbitcXHQgKiB0aGUgdW5kZXJseWluZyBjb3VudGVyIChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCB0aGF0IHRoZVxcbitcXHQgKiBjbGFtcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlXFxuK1xcdCAqIHNwdXJpb3VzIGRlbHRhKS5cXG4gXFx0ICovXFxuLVxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG4tXFx0c2MtXFx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWFub25fY29zdDtcXG4tXFx0c2MtXFx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWZpbGVfY29zdDtcXG4tXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdF9sb2NrKTtcXG4rXFxuK1xcdGZvciAoaW50IGYgPSAwOyBmIFxcdTAwM2M9IDE7IGYrKykge1xcbitcXHRcXHRzdHJ1Y3QgbHJ1X2Nvc3QgKmNvc3QgPSBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdFtmXTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyByb3RhdGVkLCBpbywgbnJfcm90YXRlZCwgbnJfaW87XFxuK1xcbitcXHRcXHRyb3RhdGVkID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFBHUk9UQVRFX0FOT04gKyBmKTtcXG4rXFx0XFx0aW8gPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZik7XFxuK1xcdFxcdGlmIChmID09IFdPUktJTkdTRVRfQU5PTilcXG4rXFx0XFx0XFx0aW8gKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgTlJfVk1TQ0FOX1dSSVRFKTtcXG4rXFxuK1xcdFxcdG5yX3JvdGF0ZWQgPSByb3RhdGVkIC0gY29zdC1cXHUwMDNlbGFzdF9yb3RhdGVkO1xcbitcXHRcXHRucl9pbyA9IGlvIC0gY29zdC1cXHUwMDNlbGFzdF9pbztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZ1xcbitcXHRcXHQgKiBDUFUgdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24ndCBhdHRlbXB0IHRvIG1ha2UgYVxcbitcXHRcXHQgKiBwcmVjaXNlIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXRcXG4rXFx0XFx0ICogY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmVcXG4rXFx0XFx0ICogb3ZlcndoZWxtaW5nbHkgZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW5cXG4rXFx0XFx0ICogYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjb3N0LVxcdTAwM2Vjb3VudCArPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggKyBucl9yb3RhdGVkO1xcbitcXG4rXFx0XFx0Y29zdC1cXHUwMDNlbGFzdF9yb3RhdGVkID0gcm90YXRlZDtcXG4rXFx0XFx0Y29zdC1cXHUwMDNlbGFzdF9pbyA9IGlvO1xcbitcXHR9XFxuK1xcbitcXHRhbm9uX2Nvc3QgPSBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdFtXT1JLSU5HU0VUX0FOT05dO1xcbitcXHRmaWxlX2Nvc3QgPSBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdFtXT1JLSU5HU0VUX0ZJTEVdO1xcbitcXG4rXFx0bHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4rXFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgK1xcbitcXHRcXHQgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG4rXFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XFxuK1xcbitcXHR3aGlsZSAoYW5vbl9jb3N0LVxcdTAwM2Vjb3VudCArIGZpbGVfY29zdC1cXHUwMDNlY291bnQgXFx1MDAzZSBscnVzaXplIC8gNCkge1xcbitcXHRcXHRhbm9uX2Nvc3QtXFx1MDAzZWNvdW50IC89IDI7XFxuK1xcdFxcdGZpbGVfY29zdC1cXHUwMDNlY291bnQgLz0gMjtcXG4rXFx0fVxcbitcXG4rXFx0c2MtXFx1MDAzZWFub25fY29zdCA9IGFub25fY29zdC1cXHUwMDNlY291bnQ7XFxuK1xcdHNjLVxcdTAwM2VmaWxlX2Nvc3QgPSBmaWxlX2Nvc3QtXFx1MDAzZWNvdW50O1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfbG9jayk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub25cXG5AQCAtNDgwOSw3ICs0ODY3LDggQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG4gXFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4tXFx0aW50IGlzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xcbitcXHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcXG4rXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9yZWNsYWltZWQgPSAwO1xcbiBcXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG5AQCAtNDgyMSw2ICs0ODgwLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcbiBcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZsaXN0LCBcXHUwMDI2aXNvbGF0ZWQsIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dHlwZV9zY2FubmVkKTtcXG4rXFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG4gXFxuIFxcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXFxuIFxcdGlmIChzY2FubmVkKVxcbkBAIC00ODMzLDYgKzQ4OTMsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gcmV0cnk6XFxuIFxcdHJlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFxcdTAwMjZsaXN0LCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0LCBmYWxzZSwgbWVtY2cpO1xcbiBcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4rXFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4gXFx0LyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovXFxuIFxcdGlmIChpc29sYXRlZClcXG4gXFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG5AQCAtNDg4NCw2ICs0OTQ1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAobnJfaXNvbGF0ZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuK1xcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcXG4rXFx0XFx0XFx0XFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcXG4rXFxuIFxcdHJldHVybiBzY2FubmVkO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jXFxuaW5kZXggZjUzNDk3MmY1MTdkZTAuLjg3ZDRhNjc4MTM2NzY3IDEwMDY0NFxcbi0tLSBhL21tL3Ztc3RhdC5jXFxuKysrIGIvbW0vdm1zdGF0LmNcXG5AQCAtMTAyNCw2ICsxMDI0LDE3IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcbiBcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBpdGVtKTtcXG4gfVxcbitcXG4rLypcXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2Ygbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdFxcbisgKiBzbmFwc2hvdCBhIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgY291bnRlciBhbmQgc3VidHJhY3QgdHdvIHNhbXBsZXMuXFxuKyAqIFNlZSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYygpIGZvciB0aGUgcmF0aW9uYWxlLlxcbisgKi9cXG4rdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuK1xcdFxcdFxcdFxcdFxcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcXG4re1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2cGdkYXQtXFx1MDAzZXZtX3N0YXRbaXRlbV0pO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gLypcXG5AQCAtMTI4OSw2ICsxMzAwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuIFxcdFtJKFBHU0NBTl9QUk9BQ1RJVkUpXVxcdFxcdFxcdD0gXFxcInBnc2Nhbl9wcm9hY3RpdmVcXFwiLFxcbiBcXHRbSShQR1NDQU5fQU5PTildXFx0XFx0XFx0PSBcXFwicGdzY2FuX2Fub25cXFwiLFxcbiBcXHRbSShQR1NDQU5fRklMRSldXFx0XFx0XFx0PSBcXFwicGdzY2FuX2ZpbGVcXFwiLFxcbitcXHRbSShQR1JPVEFURV9BTk9OKV1cXHRcXHRcXHQ9IFxcXCJwZ3JvdGF0ZV9hbm9uXFxcIixcXG4rXFx0W0koUEdST1RBVEVfRklMRSldXFx0XFx0XFx0PSBcXFwicGdyb3RhdGVfZmlsZVxcXCIsXFxuIFxcdFtJKFBHUkVGSUxMKV1cXHRcXHRcXHRcXHQ9IFxcXCJwZ3JlZmlsbFxcXCIsXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIFxcdFtJKE5SX0hVR0VUTEIpXVxcdFxcdFxcdFxcdD0gXFxcIm5yX2h1Z2V0bGJcXFwiLFxcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcXG5pbmRleCBmMzUxNzk4ZTcyM2FjZC4uN2FjMmI4OGM4MGFlNTYgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTU4NCwxMSArNTg0LDYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbiBcXHQvKiBGb2xpbyB3YXMgYWN0aXZlIHByaW9yIHRvIGV2aWN0aW9uICovXFxuIFxcdGlmICh3b3JraW5nc2V0KSB7XFxuIFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogWFhYOiBNb3ZlIHRvIGZvbGlvX2FkZF9scnUoKSB3aGVuIGl0IHN1cHBvcnRzIG5ldyB2c1xcbi1cXHRcXHQgKiBwdXRiYWNrXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRscnVfbm90ZV9jb3N0X3JlZmF1bHQoZm9saW8pO1xcbiBcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmaWxlLCBucik7XFxuIFxcdH1cXG4gb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OToyNS4yNTUxNjEyOTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NDYyNDI1MTAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIixcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwid2FrZXVwX2tzd2FwZFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIExSVSByZWNsYWltIGxvZ2ljIGFuZCBjb3N0IGNhbGN1bGF0aW9uIGZvciBib3RoIGxlZ2FjeSBMUlUgYW5kIE1HTFJVLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBjb3VudGVycyBmb3IgTFJVIHN0YXRzIGFuZCBjaGFuZ2VzIGhvdyBzY2FuIGJhbGFuY2UgaXMgZGV0ZXJtaW5lZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMyM2JkMzA4ZDRhNzc2ZDU2MDEyYjhjMmM4ZmZmMWUzZmRlMmEyYTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwODo0OToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjJmLi43YWU2N2FjMjM1MTA3NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk0Nyw2ICs5NDcsOCBAQCB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuIGJvb2wgbWVtY2dfc3RhdF9pdGVtX3ZhbGlkKGludCBpZHgpO1xuIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTtcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gXG5AQCAtMTM5OSw2ICsxNDAxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuK3tcbitcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0XHRcdCAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi44NTMwM2M1ODY3Yzg0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC0zMjMsNiArMzIzLDggQEAgZW51bSBub2RlX3N0YXRfaXRlbSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbitcdFBHUk9UQVRFX0FOT04sXG4rXHRQR1JPVEFURV9GSUxFLFxuIFx0UEdSRUZJTEwsXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdE5SX0hVR0VUTEIsXG5AQCAtNzU1LDYgKzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuIFxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuK3N0cnVjdCBscnVfY29zdCB7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGNvdW50O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRsYXN0X3JvdGF0ZWQ7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGxhc3RfaW87XG4rfTtcbitcbiBzdHJ1Y3QgbHJ1dmVjIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0bGlzdHNbTlJfTFJVX0xJU1RTXTtcbiBcdC8qIHBlciBscnV2ZWMgbHJ1X2xvY2sgZm9yIG1lbWNnICovXG5AQCAtNzYzLDkgKzc3MSwxMiBAQCBzdHJ1Y3QgbHJ1dmVjIHtcbiBcdCAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtXG4gXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXG4gXHQgKiBpbmNyZWFzZXMsIHRoZSByZWNsYWltIHNjYW4gYmFsYW5jZSB0aXBzIHRvd2FyZCB0aGUgb3RoZXIuXG4rXHQgKiBVcGRhdGVkIGFuZCBkZWNheWVkIGF0IHByZXBhcmVfc2Nhbl9jb250cm9sKCkgdGltZTsgY29zdF9sb2NrXG4rXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxuIFx0ICovXG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0YW5vbl9jb3N0O1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRcdGZpbGVfY29zdDtcbitcdHN0cnVjdCBscnVfY29zdFx0XHRcdGNvc3RbQU5PTl9BTkRfRklMRV07XG4rXHQvKiBQcm90ZWN0cyBjb3N0W10uICovXG4rXHRzcGlubG9ja190XHRcdFx0Y29zdF9sb2NrO1xuIFx0LyogTm9uLXJlc2lkZW50IGFnZSwgZHJpdmVuIGJ5IExSVSBtb3ZlbWVudCAqL1xuIFx0YXRvbWljX2xvbmdfdFx0XHRcdG5vbnJlc2lkZW50X2FnZTtcbiBcdC8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEzLi5iOGUyZTFhZjJiMTQyNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTMwOSw5ICszMDksNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gXG4gLyogbGludXgvbW0vc3dhcC5jICovXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4tXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuQEAgLTIwLDcgKzIwLDYgQEAgc3RydWN0IHJlY2xhaW1fc3RhdCB7XG4gXHR1bnNpZ25lZCBucl9jb25nZXN0ZWQ7XG4gXHR1bnNpZ25lZCBucl93cml0ZWJhY2s7XG4gXHR1bnNpZ25lZCBucl9pbW1lZGlhdGU7XG4tXHR1bnNpZ25lZCBucl9wYWdlb3V0O1xuIFx0dW5zaWduZWQgbnJfYWN0aXZhdGVbQU5PTl9BTkRfRklMRV07XG4gXHR1bnNpZ25lZCBucl9yZWZfa2VlcDtcbiBcdHVuc2lnbmVkIG5yX3VubWFwX2ZhaWw7XG5AQCAtMTk0LDYgKzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuIFx0cmV0dXJuIHg7XG4gfVxuIFxuKy8qXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2YgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcbisgKiBzbmFwc2hvdCBhIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgY291bnRlciBhbmQgc3VidHJhY3QgdHdvIHNhbXBsZXMuXG4rICogUmV0dXJucyB0aGUgcmF3IHdyYXBwaW5nIHZhbHVlIHNvIHRoYXQgdW5zaWduZWQgbW9kdWxhciBzdWJ0cmFjdGlvbiBzdGF5c1xuKyAqIGNvcnJlY3QgYWNyb3NzIGEgc2lnbmVkLWxvbmcgb3ZlcmZsb3cgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZVxuKyAqIGNsYW1wIGluIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoKSB3b3VsZCBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91c1xuKyAqIGRlbHRhLiBEbyBOT1QgdXNlIGZvciBub24tbW9ub3RvbmljIHBhZ2UtY291bnQgcmVhZHMuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbit7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ2bV9ub2RlX3N0YXRbaXRlbV0pO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4ge1xuIFx0Vk1fV0FSTl9PTl9PTkNFKHZtc3RhdF9pdGVtX2luX2J5dGVzKGl0ZW0pKTtcbkBAIC0yNTksMTEgKzI3MSwxNCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0XHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pO1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIFx0XHRcdFx0XHQgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pO1xuK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbitcdFx0XHRcdFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG4gZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTtcbiAjZWxzZVxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhpdGVtKVxuKyNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhpdGVtKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xkX3ZtX251bWFfZXZlbnRzKHZvaWQpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmNcbmluZGV4IDc2NTA2OTIxMTU2NzhjLi4wOTFiYzlmZmVlNDRhMCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xuKysrIGIvbW0vbWVtY29udHJvbC12MS5jXG5AQCAtMTk4OCw4ICsxOTg4LDggQEAgdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbiBcdFx0Zm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KSB7XG4gXHRcdFx0bXogPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1twZ2RhdC1cdTAwM2Vub2RlX2lkXTtcbiBcbi1cdFx0XHRhbm9uX2Nvc3QgKz0gbXotXHUwMDNlbHJ1dmVjLmFub25fY29zdDtcbi1cdFx0XHRmaWxlX2Nvc3QgKz0gbXotXHUwMDNlbHJ1dmVjLmZpbGVfY29zdDtcbitcdFx0XHRhbm9uX2Nvc3QgKz0gbXotXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcbitcdFx0XHRmaWxlX2Nvc3QgKz0gbXotXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9GSUxFXS5jb3VudDtcbiBcdFx0fVxuIFx0XHRzZXFfYnVmX3ByaW50ZihzLCBcImFub25fY29zdCAlbHVcXG5cIiwgYW5vbl9jb3N0KTtcbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCJmaWxlX2Nvc3QgJWx1XFxuXCIsIGZpbGVfY29zdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uY2U5YzRmYjkyNDcwYjYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5Myw2ICszOTMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuIFx0TlJfU0hNRU1fVEhQUyxcbiBcdE5SX0ZJTEVfVEhQUyxcbiBcdE5SX0FOT05fVEhQUyxcbitcdE5SX1ZNU0NBTl9XUklURSxcbiBcdE5SX1ZNQUxMT0MsXG4gXHROUl9LRVJORUxfU1RBQ0tfS0IsXG4gXHROUl9QQUdFVEFCTEUsXG5AQCAtNDE5LDYgKzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbitcdFBHUk9UQVRFX0FOT04sXG4rXHRQR1JPVEFURV9GSUxFLFxuIFx0UEdSRUZJTEwsXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdE5SX0hVR0VUTEIsXG5AQCAtNTAyLDYgKzUwNSw0MiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4rLyoqXG4rICogbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljIC0gbm9uLWNsYW1waW5nIGxydXZlYyBzdGF0IHJlYWQgZm9yIGRlbHRhIHNhbXBsaW5nXG4rICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXG4rICogQGlkeDogdGhlIG5vZGVfc3RhdF9pdGVtIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXG4rICogY2xhbXAtbmVnYXRpdmUtdG8temVybyBzdGVwIGluIGxydXZlY19wYWdlX3N0YXRlKCkuIEludGVuZGVkIGZvciBjYWxsZXJzXG4rICogdGhhdCBzbmFwc2hvdCBhIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgY291bnRlciBhbmQgc3VidHJhY3QgdHdvXG4rICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xuKyAqIGEgc2lnbmVkLWxvbmcgd3JhcGFyb3VuZCAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQpIHRoYXQgdGhlIGNsYW1wIHdvdWxkXG4rICogb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2Ugc3B1cmlvdXMgZGVsdGEuXG4rICpcbisgKiBEbyBOT1QgdXNlIGZvciBub24tbW9ub3RvbmljIHBhZ2UtY291bnQgcmVhZHMgd2hlcmUgYSB0cmFuc2llbnQgbmVnYXRpdmVcbisgKiByZWFkaW5nIGZyb20gcGVyLUNQVSBkZWx0YSBza2V3IG11c3QgcHJlc2VudCBhcyB6ZXJvLlxuKyAqXG4rICogWFhYOiBUaGlzIGhlbHBlciAoYW5kIGl0cyBub2RlL2dsb2JhbCBwZWVycykgZXhpc3RzIGJlY2F1c2Ugc29tZVxuKyAqIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgZXZlbnQgY291bnRlcnMgYXJlIHN0b3JlZCBpblxuKyAqIGVudW0gbm9kZV9zdGF0X2l0ZW0uXG4rICovXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuK1x0XHRcdFx0XHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcbitcdGludCBpO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbitcdFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4rXG4rXHRpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbitcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcIiVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwiLCBfX2Z1bmNfXywgaWR4KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVbaV0pO1xuK31cbitcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XG4tLS0gYS9tbS9tbXpvbmUuY1xuKysrIGIvbW0vbW16b25lLmNcbkBAIC03OCw2ICs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZscnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbiBcdHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KGxydXZlYyk7XG4gXG4gXHRmb3JfZWFjaF9scnUobHJ1KVxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuY1xuaW5kZXggNTg4ZjUwZDhmMWE4YzkuLjc0YjI4MTc3OGNiYzkyIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5jXG4rKysgYi9tbS9zd2FwLmNcbkBAIC0yNzIsNzMgKzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xuIH1cbiBcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcbi1cdFx0X19yZWxlYXNlcyhscnV2ZWMtXHUwMDNlbHJ1X2xvY2spXG4tXHRcdF9fcmVsZWFzZXMocmN1KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgY29zdDtcbi1cbi1cdC8qXG4tXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXG4tXHQgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2Vzbid0IGF0dGVtcHQgdG8gbWFrZSBhIHByZWNpc2Vcbi1cdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxuLVx0ICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5XG4tXHQgKiBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhbiBiYWxhbmNlIGZvciBDUFUgd29yay5cbi1cdCAqL1xuLVx0Y29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCArIG5yX3JvdGF0ZWQ7XG4tXHRpZiAoIWNvc3QpIHtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRmb3IgKDs7KSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcbi1cbi1cdFx0LyogUmVjb3JkIGNvc3QgZXZlbnQgKi9cbi1cdFx0aWYgKGZpbGUpXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArPSBjb3N0O1xuLVx0XHRlbHNlXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCArPSBjb3N0O1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBEZWNheSBwcmV2aW91cyBldmVudHNcbi1cdFx0ICpcbi1cdFx0ICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkXG4tXHRcdCAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZ1xuLVx0XHQgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0c1xuLVx0XHQgKiBtb3JlIHRoYW4gb2xkIG9uZXMuXG4tXHRcdCAqL1xuLVx0XHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICtcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuLVxuLVx0XHRpZiAobHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArIGxydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgXHUwMDNlIGxydXNpemUgLyA0KSB7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAvPSAyO1xuLVx0XHRcdGxydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgLz0gMjtcbi1cdFx0fVxuLVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0bHJ1dmVjID0gcGFyZW50X2xydXZlYyhscnV2ZWMpO1xuLVx0XHRpZiAoIWxydXZlYykge1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdH1cbi19XG4tXG4tdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4tXG4tXHRscnV2ZWMgPSBmb2xpb19scnV2ZWNfbG9ja19pcnEoZm9saW8pO1xuLVx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLFxuLVx0XHRcdFx0Zm9saW9fbnJfcGFnZXMoZm9saW8pLCAwKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgbHJ1X2FjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuQEAgLTExNjQsOCArMTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXG4gXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xuIFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgKz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHBhcmVudF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICs9IGNoaWxkX2xydXZlYy1cdTAwM2VmaWxlX2Nvc3Q7XG4gXG4gXHRmb3JfZWFjaF9scnUobHJ1KVxuIFx0XHRscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDFhMTQyYzU4NzAwZDAwLi40ZDhhYjE0ZTNiZTQ0MyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTY2OCw3ICs2NjgsNyBAQCBzdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuIFxuIFx0dHJhY2VfbW1fdm1zY2FuX3dyaXRlX2ZvbGlvKGZvbGlvKTtcbi1cdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSk7XG4rXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiBcdHJldHVybiBQQUdFX1NVQ0NFU1M7XG4gfVxuIFxuQEAgLTE0MTMsOCArMTQxMyw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0XHRcdFx0c2MtXHUwMDNlbnJfc2Nhbm5lZCAtPSAobnJfcGFnZXMgLSAxKTtcbiBcdFx0XHRcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0c3RhdC1cdTAwM2Vucl9wYWdlb3V0ICs9IG5yX3BhZ2VzO1xuLVxuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbiBcdFx0XHRcdFx0Z290byBrZWVwO1xuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuQEAgLTIwMzgsMTAgKzIwMzYsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xuK1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbitcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxuK1x0XHRcdFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsXG4tXHRcdFx0XHRcdG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbiBcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbkBAIC0yMTQ3LDkgKzIxNDUsOSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0Y291bnRfdm1fZXZlbnRzKFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7XG4gXHRjb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7XG4gXHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgLW5yX3Rha2VuKTtcbitcdGlmIChucl9yb3RhdGVkKVxuK1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIGZpbGUsIG5yX3JvdGF0ZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2FjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsXG4gXHRcdFx0bnJfZGVhY3RpdmF0ZSwgbnJfcm90YXRlZCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuIH1cbkBAIC0yMjgyLDggKzIyODAsMTAgQEAgZW51bSBzY2FuX2JhbGFuY2Uge1xuIFxuIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmlsZTtcbitcdHN0cnVjdCBscnVfY29zdCAqYW5vbl9jb3N0LCAqZmlsZV9jb3N0O1xuIFx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcbitcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcbitcdHVuc2lnbmVkIGxvbmcgZmlsZTtcbiBcbiBcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG4gXHRcdHJldHVybjtcbkBAIC0yMjk5LDExICsyMjk5LDY5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFxuIFx0LypcbiBcdCAqIERldGVybWluZSB0aGUgc2NhbiBiYWxhbmNlIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzLlxuK1x0ICpcbitcdCAqIFRoZSBjb3N0IG1vZGVsIGlzIGJhc2VkIG9uIHJvdGF0aW9ucywgcmVmYXVsdHMgYW5kXG4rXHQgKiByZWNsYWltLWRyaXZlbiB3cml0ZXMgKGFub24gb25seSkgb24gZWFjaCBzaWRlLlxuK1x0ICpcbitcdCAqIFRoZXNlIGV2ZW50IGNvdW50ZXJzIGFyZSBtb25vdG9uaWMsIHNvIGVhY2ggcmVjbGFpbSBjeWNsZVxuK1x0ICogdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHNjYW4gaXMgZXh0cmFjdGVkIGFuZCBpbmNvcnBvcmF0ZWRcbitcdCAqIGludG8gYSBkZWNheWluZyBhdmVyYWdlLiBUaGlzIGVuc3VyZXMgY3VycmVuY3ksIGFzIHdvcmtsb2Fkc1xuK1x0ICogY2hhbmdlIG92ZXIgdGltZSwgYW5kIGF2b2lkcyBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb25zLlxuK1x0ICpcbitcdCAqIFVzZSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBzbyB1bnNpZ25lZCBzdWJ0cmFjdGlvblxuK1x0ICogeWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zcyBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgb2ZcbitcdCAqIHRoZSB1bmRlcmx5aW5nIGNvdW50ZXIgKGEgcmVhbCBoYXphcmQgb24gMzItYml0IHRoYXQgdGhlXG4rXHQgKiBjbGFtcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlXG4rXHQgKiBzcHVyaW91cyBkZWx0YSkuXG4gXHQgKi9cbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHNjLVx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0O1xuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbitcbitcdGZvciAoaW50IGYgPSAwOyBmIFx1MDAzYz0gMTsgZisrKSB7XG4rXHRcdHN0cnVjdCBscnVfY29zdCAqY29zdCA9IFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdFtmXTtcbitcdFx0dW5zaWduZWQgbG9uZyByb3RhdGVkLCBpbywgbnJfcm90YXRlZCwgbnJfaW87XG4rXG4rXHRcdHJvdGF0ZWQgPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbitcdFx0XHRcdFx0XHQgICAgICBQR1JPVEFURV9BTk9OICsgZik7XG4rXHRcdGlvID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXG4rXHRcdFx0XHRcdFx0IFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZik7XG4rXHRcdGlmIChmID09IFdPUktJTkdTRVRfQU5PTilcbitcdFx0XHRpbyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbitcdFx0XHRcdFx0XHRcdCAgTlJfVk1TQ0FOX1dSSVRFKTtcbitcbitcdFx0bnJfcm90YXRlZCA9IHJvdGF0ZWQgLSBjb3N0LVx1MDAzZWxhc3Rfcm90YXRlZDtcbitcdFx0bnJfaW8gPSBpbyAtIGNvc3QtXHUwMDNlbGFzdF9pbztcbitcbitcdFx0LypcbitcdFx0ICogUmVmbGVjdCB0aGUgcmVsYXRpdmUgY29zdCBvZiBpbmN1cnJpbmcgSU8gYW5kIHNwZW5kaW5nXG4rXHRcdCAqIENQVSB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2Vzbid0IGF0dGVtcHQgdG8gbWFrZSBhXG4rXHRcdCAqIHByZWNpc2UgY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dFxuK1x0XHQgKiBjb21wYXJhYmxlIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZVxuK1x0XHQgKiBvdmVyd2hlbG1pbmdseSBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhblxuK1x0XHQgKiBiYWxhbmNlIGZvciBDUFUgd29yay5cbitcdFx0ICovXG4rXHRcdGNvc3QtXHUwMDNlY291bnQgKz0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcbitcbitcdFx0Y29zdC1cdTAwM2VsYXN0X3JvdGF0ZWQgPSByb3RhdGVkO1xuK1x0XHRjb3N0LVx1MDAzZWxhc3RfaW8gPSBpbztcbitcdH1cbitcbitcdGFub25fY29zdCA9IFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdFtXT1JLSU5HU0VUX0FOT05dO1xuK1x0ZmlsZV9jb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W1dPUktJTkdTRVRfRklMRV07XG4rXG4rXHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgK1xuK1x0XHQgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXG4rXHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgK1xuK1x0XHQgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcbitcbitcdHdoaWxlIChhbm9uX2Nvc3QtXHUwMDNlY291bnQgKyBmaWxlX2Nvc3QtXHUwMDNlY291bnQgXHUwMDNlIGxydXNpemUgLyA0KSB7XG4rXHRcdGFub25fY29zdC1cdTAwM2Vjb3VudCAvPSAyO1xuK1x0XHRmaWxlX2Nvc3QtXHUwMDNlY291bnQgLz0gMjtcbitcdH1cbitcbitcdHNjLVx1MDAzZWFub25fY29zdCA9IGFub25fY29zdC1cdTAwM2Vjb3VudDtcbitcdHNjLVx1MDAzZWZpbGVfY29zdCA9IGZpbGVfY29zdC1cdTAwM2Vjb3VudDtcbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbiBcbiBcdC8qXG4gXHQgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub25cbkBAIC00ODA5LDcgKzQ4NjcsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG4gXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuLVx0aW50IGlzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xuK1x0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4rXHR1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7XG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuQEAgLTQ4MjEsNiArNDg4MCw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFxuIFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4gXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4rXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ4MzMsNiArNDg5Myw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIHJldHJ5OlxuIFx0cmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0LCBmYWxzZSwgbWVtY2cpO1xuIFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcbitcdHRvdGFsX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XG4gXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbiBcdGlmIChpc29sYXRlZClcbiBcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuQEAgLTQ4ODQsNiArNDk0NSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuK1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXG4rXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuK1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi44N2Q0YTY3ODEzNjc2NyAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4rKysgYi9tbS92bXN0YXQuY1xuQEAgLTEwMjQsNiArMTAyNCwxNyBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIFxuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgaXRlbSk7XG4gfVxuK1xuKy8qXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2Ygbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdFxuKyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbisgKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS5cbisgKi9cbit1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbitcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuK3tcbitcdHJldHVybiAodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnBnZGF0LVx1MDAzZXZtX3N0YXRbaXRlbV0pO1xuK31cbiAjZW5kaWZcbiBcbiAvKlxuQEAgLTEyODksNiArMTMwMCw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xuIFx0W0koUEdTQ0FOX1BST0FDVElWRSldXHRcdFx0PSBcInBnc2Nhbl9wcm9hY3RpdmVcIixcbiBcdFtJKFBHU0NBTl9BTk9OKV1cdFx0XHQ9IFwicGdzY2FuX2Fub25cIixcbiBcdFtJKFBHU0NBTl9GSUxFKV1cdFx0XHQ9IFwicGdzY2FuX2ZpbGVcIixcbitcdFtJKFBHUk9UQVRFX0FOT04pXVx0XHRcdD0gXCJwZ3JvdGF0ZV9hbm9uXCIsXG4rXHRbSShQR1JPVEFURV9GSUxFKV1cdFx0XHQ9IFwicGdyb3RhdGVfZmlsZVwiLFxuIFx0W0koUEdSRUZJTEwpXVx0XHRcdFx0PSBcInBncmVmaWxsXCIsXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdFtJKE5SX0hVR0VUTEIpXVx0XHRcdFx0PSBcIm5yX2h1Z2V0bGJcIixcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IGYzNTE3OThlNzIzYWNkLi43YWMyYjg4YzgwYWU1NiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTg0LDExICs1ODQsNiBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHQvKiBGb2xpbyB3YXMgYWN0aXZlIHByaW9yIHRvIGV2aWN0aW9uICovXG4gXHRpZiAod29ya2luZ3NldCkge1xuIFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4tXHRcdC8qXG4tXHRcdCAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnNcbi1cdFx0ICogcHV0YmFja1xuLVx0XHQgKi9cbi1cdFx0bHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTtcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZmlsZSwgbnIpO1xuIFx0fVxuIG91dDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjI1LjI1NTE2MjYwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjkxNjgzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY29zdCBpcyBjb21wdXRlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUgZmlsZXMgbGlrZSBgbW0vdm1zY2FuLmNgLCBgbW0vc3dhcC5jYCwgYW5kIHNvIG9uLiBUaGV5J3JlIGRpdGNoaW5nIHRoZSBvbGQgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIG1lY2hhbmlzbXMuIEluc3RlYWQsIHRoZXkncmUgaW50cm9kdWNpbmcgYSBuZXcgYXBwcm9hY2ggdXNpbmcgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhbmQgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AsIHdoaWNoIHNvdW5kIGxpa2UgdGhleSBsZXZlcmFnZSBtb25vdG9uaWMgY291bnRlcnMsIGFsb25nc2lkZSBuZXcgZW51bSBpdGVtcyBhbmQgY2hhbmdlcyB0byB0aGUgYGxydXZlY2Agc3RydWN0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGRlbWFuZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncywgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMsIG9yIGV2ZW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLlxuXG5MZXQncyBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbi4gSSBzZWUgbW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zIHRvIGEgYnVuY2ggb2YgZnVuY3Rpb25zOiBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgZXZpY3RfZm9saW9zYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgcGFnZW91dGAuIFByZXR0eSBtdWNoIHRoZSBoZWFydCBvZiB2bXNjYW4sIGl0IGxvb2tzIGxpa2UuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgZXZpY3RfZm9saW9zYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgcGFnZW91dGAuXG5cbldhaXTigKYgYWxsIG9mIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zPyBIbW0uIFRoZSBwcm9tcHQgaXMgcmVtaW5kaW5nIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSAqY2FsbGVycyogb2YgdGhlc2UgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIExldCdzIHNlZS4uLiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGlzIGNhbGxlZCBieSBgZ2V0X3NjYW5fY291bnRgIG9yIGBzaHJpbmtfbm9kZWAgb3IgYHNocmlua19scnV2ZWNgLiBJJ2xsIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGNhbGxlcnMgb2YgdGhlc2UuIExvb2tzIGxpa2UgSSB3aWxsIG5lZWQgdG8gc2VhcmNoIGZvciBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGluIGBtbS92bXNjYW4uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTozMy4wMjQzMzQwNDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1MzA4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjI3ND1lbnVtIHNjYW5fYmFsYW5jZSB7XFxuLS1cXG5tbS92bXNjYW4uYy0yMjgwLVxcbm1tL3Ztc2Nhbi5jOjIyODE6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjI4Mi17XFxuLS1cXG5tbS92bXNjYW4uYz02MjA4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIzMC1cXG5tbS92bXNjYW4uYzo2MjMxOlxcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjIzMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NDk6MzMuMDg1ODcyMzUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MjI4ODU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEknbSByZXZpc2l0aW5nIHRoaXMgYHNocmlua19ub2RlYCBmdW5jdGlvbi4gQSBxdWljayBjaGVjayB0ZWxscyBtZSBpdCdzIGxpa2VseSBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IEkgY2FuJ3QgcXVpdGUgcmVtZW1iZXIuIEl0IHdvdWxkIG1ha2Ugc2Vuc2UgZ2l2ZW4gaXRzIHB1cnBvc2UuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBoYXMgYmVlbiBkZWNsYXJlZCBjb3JyZWN0bHkuIFRpbWUgdG8gdmVyaWZ5IGl0cyBzY29wZS4gSWYgaXQgKmlzKiBzdGF0aWMsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHZlcnkgaW1wb3J0YW50LCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGdvaW5nIHRvIGNhdXNlIGFueSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lIHdpdGggc2hhcmVkIGRhdGEgb3Igc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NDk6MzYuMDI4MTY0NDQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTMwODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NDI9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xOTgwLS8qXFxubW0vdm1zY2FuLmM6MTk4MTogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMTk4Mi0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxNzc9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTk3LVxcbm1tL3Ztc2Nhbi5jOjUxOTg6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MTk5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5MjY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTMwLVxcbm1tL3Ztc2Nhbi5jOjU5MzE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01OTMyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwNzc9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MTI4LVxcbm1tL3Ztc2Nhbi5jOjYxMjk6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYxMzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNjIwNy1cXG5tbS92bXNjYW4uYzo2MjA4OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYyMDkte1xcbi0tXFxubW0vdm1zY2FuLmMtNjIxNS1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYyMTY6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyMTctXFxuLS1cXG5tbS92bXNjYW4uYy02MjMyLVxcbm1tL3Ztc2Nhbi5jOjYyMzM6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjIzNC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzOTM9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjQ3MS1cXHRcXHRsYXN0X3BnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo2NDcyOlxcdFxcdHNocmlua19ub2RlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02NDczLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3Mzg9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzgzLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2Nzg0OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjc4NS1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS92bXNjYW4uYy02ODEwLVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY4MTE6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjgxMi1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NjkzMj1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy02OTU2LVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo2OTU3OlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNjk1OC1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYz03MDE0PXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNTItICovXFxubW0vdm1zY2FuLmM6NzA1MzpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MDU0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNjktXFx0ICovXFxubW0vdm1zY2FuLmM6NzA3MDpcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTcwNzEtXFxuLS1cXG5tbS92bXNjYW4uYz03MTI2PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MjM1LVxcbm1tL3Ztc2Nhbi5jOjcyMzY6XFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxubW0vdm1zY2FuLmMtNzIzNy1cXHRcXHRzYy5ucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyNDctXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzI0ODpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTcyNDktXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4MDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bXNjYW4uYy03ODMwLVxcdFxcdGRvIHtcXG5tbS92bXNjYW4uYzo3ODMxOlxcdFxcdFxcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNzgzMi1cXHRcXHR9IHdoaWxlIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2MgbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgLS1zYy1cXHUwMDNlcHJpb3JpdHkgXFx1MDAzZT0gMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjM2LjA4ODA5OTgxNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODk4MDI5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGVudHJ5IHBvaW50cyBhcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGV4cGVydCwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgUmVjbGFtYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgbWVtb3J5IHJlY2xhaW0uIEkgc2VlIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBsaXN0ZWQgYXMgdGhlIGVudHJ5IHBvaW50cy4gSW50ZXJlc3RpbmcuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgd2F5cyB3ZSBjYW4gdHJpZ2dlciBtZW1vcnkgcHJlc3N1cmUgcmVzb2x1dGlvbi5cblxuYHRyeV90b19mcmVlX3BhZ2VzYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIGZpcnN0IHN0b3AuIEl0J3MgdGhlIG1vc3QgZGlyZWN0LCB0cnlpbmcgdG8gZXhwbGljaXRseSBmcmVlIHBhZ2VzLiBJJ2xsIG5lZWQgdG8gZGlnIGluIHRoZXJlIGFuZCBzZWUgaG93IGl0IHdvcmtzLCB3aGF0IHRyaWdnZXJzIGl0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBzdHJhdGVneSBpcy4gSSdsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoYXQgcm91dGluZSDigJMgbGV0J3Mgc2VlIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIGZyZWVpbmcgcHJvY2VzcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucy4gSSB3b25kZXIgaG93IGl0IGRlY2lkZXMgd2hhdCB0byByZWNsYWltLCBhbmQgaG93IGFnZ3Jlc3NpdmVseS4gSXQncyB0aGUgZ2F0ZXdheSwgc28gaXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBmb3VuZGF0aW9uIG9mIG1lbW9yeSByZWNsYW1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTozOS43Nzc5MDY3MjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3NjU5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjQ4NT1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjUxNS0gKi9cXG5tbS92bXNjYW4uYzo2NTE2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxubW0vdm1zY2FuLmMtNjUxNy1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NjY1OD1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MzctXFxubW0vdm1zY2FuLmM6NjczODp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02NzM5LVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NzItXFxubW0vdm1zY2FuLmM6Njc3MzpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02Nzc0LVxcbi0tXFxubW0vdm1zY2FuLmM9NjgyND11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg1NS1cXG5tbS92bXNjYW4uYzo2ODU2OlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4NTctXFxuLS1cXG5tbS92bXNjYW4uYz03NjIyPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmMtNzY0MS1cXG5tbS92bXNjYW4uYzo3NjQyOlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc2NDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjM5LjgzOTY3NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTAzNDIxNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgYXJlYXMgaGVyZS4gSSdtIHRoaW5raW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYSBzb2xpZCBmdW5jdGlvbiB0byBzdGFydCB3aXRoOyBpdCBzZWVtcyBsaWtlIGEgY29yZSBlbGVtZW50IGluIHRoaXMgY29udGV4dC4gQnV0LCBobW0sIHdoYXQgYWJvdXQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgPyBZZXMsIHRoYXQncyBhbm90aGVyIGltcG9ydGFudCBvbmUsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhhdCdzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBOb3csIHRoaW5raW5nIG1vcmUgYnJvYWRseSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjb25zaWRlciBzb21ldGhpbmcgdGhhdCBpbnRlcmFjdHMgd2l0aCBzd2FwcGluZy4gTGV0J3MgdGhpbmssIGBiYWxhbmNlX3BnZGF0YCBpcyBjYWxsZWQgYnkgYGtzd2FwZGAuIE9rYXksIHNvIGBrc3dhcGRgIGlzIGNyaXRpY2FsLiBJdCBzb3VuZHMgbGlrZSBhIGNlbnRyYWwgcGllY2UsIHNvIGxldCdzIGNoZWNrIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk4MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjQzLjM0MzEwMjY1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2MzA4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N3YXBkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTI0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS92bXNjYW4uYy01LSAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXFxubW0vdm1zY2FuLmM6NjogKiAga3N3YXBkIGFkZGVkOiA3LjEuOTYgIHNjdFxcbm1tL3Ztc2Nhbi5jOjc6ICogIFJlbW92ZWQga3N3YXBkX2N0bCBsaW1pdHMsIGFuZCBzd2FwIG91dCBhcyBtYW55IHBhZ2VzIGFzIG5lZWRlZFxcbm1tL3Ztc2Nhbi5jLTgtICogIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0byBmcmVlcGFnZXMuaGlnaDogMi40Ljk3LCBSaWsgdmFuIFJpZWwuXFxubW0vdm1zY2FuLmM6OTogKiAgWm9uZSBhd2FyZSBrc3dhcGQgc3RhcnRlZCAwMi8wMCwgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKS5cXG5tbS92bXNjYW4uYy0xMC0gKiAgTXVsdGlxdWV1ZSBWTSBzdGFydGVkIDUuOC4wMCwgUmlrIHZhbiBSaWVsLlxcbi0tXFxubW0vdm1zY2FuLmM9NDQ0PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0OS1cXG5tbS92bXNjYW4uYzo0NTA6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNDUxLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NDgwPXN0YXRpYyBib29sIHNraXBfdGhyb3R0bGVfbm9wcm9ncmVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNDg1LVxcdC8qXFxubW0vdm1zY2FuLmM6NDg2OlxcdCAqIElmIGtzd2FwZCBpcyBkaXNhYmxlZCwgcmVzY2hlZHVsZSBpZiBuZWNlc3NhcnkgYnV0IGRvIG5vdFxcbm1tL3Ztc2Nhbi5jLTQ4Ny1cXHQgKiB0aHJvdHRsZSBhcyB0aGUgc3lzdGVtIGlzIGxpa2VseSBuZWFyIE9PTS5cXG5tbS92bXNjYW4uYy00ODgtXFx0ICovXFxubW0vdm1zY2FuLmM6NDg5OlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXFxubW0vdm1zY2FuLmMtNDkwLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTA4PXZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pXFxuLS1cXG5tbS92bXNjYW4uYy01MTQtXFx0LypcXG5tbS92bXNjYW4uYzo1MTU6XFx0ICogRG8gbm90IHRocm90dGxlIHVzZXIgd29ya2Vycywga3RocmVhZHMgb3RoZXIgdGhhbiBrc3dhcGQgb3JcXG5tbS92bXNjYW4uYy01MTYtXFx0ICogd29ya3F1ZXVlcy4gVGhleSBtYXkgYmUgcmVxdWlyZWQgZm9yIHJlY2xhaW0gdG8gbWFrZVxcbi0tXFxubW0vdm1zY2FuLmMtNTE4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjUxOTpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy01MjAtXFx0ICAgIGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKFBGX1VTRVJfV09SS0VSfFBGX0tUSFJFQUQpKSB7XFxuLS1cXG5tbS92bXNjYW4uYz05NjI9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZGVtb3RlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxubW0vdm1zY2FuLmMtOTcxLVxcdCAqIG1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSBmcm9tIHRoZSB0YXJnZXQgbm9kZSBmaXJzdCBhbHNvIHRyeWluZyB0b1xcbm1tL3Ztc2Nhbi5jOjk3MjpcXHQgKiBkZW1vdGUgb3IgcmVjbGFpbSBwYWdlcyBmcm9tIHRoZSB0YXJnZXQgbm9kZSB2aWEga3N3YXBkIGlmIHdlIGFyZVxcbm1tL3Ztc2Nhbi5jLTk3My1cXHQgKiBsb3cgb24gZnJlZSBtZW1vcnkgb24gdGFyZ2V0IG5vZGUuIElmIHdlIGRvbid0IGRvIHRoaXMgYW5kIGlmXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTExMTgtXFx0XFx0ICogVGhlIG51bWJlciBvZiBkaXJ0eSBwYWdlcyBkZXRlcm1pbmVzIGlmIGEgbm9kZSBpcyBtYXJrZWRcXG5tbS92bXNjYW4uYzoxMTE5OlxcdFxcdCAqIHJlY2xhaW1fY29uZ2VzdGVkLiBrc3dhcGQgd2lsbCBzdGFsbCBhbmQgc3RhcnQgd3JpdGluZ1xcbm1tL3Ztc2Nhbi5jLTExMjAtXFx0XFx0ICogZm9saW9zIGlmIHRoZSB0YWlsIG9mIHRoZSBMUlUgaXMgYWxsIGRpcnR5IHVucXVldWVkIGZvbGlvcy5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTExODctXFx0XFx0XFx0LyogQ2FzZSAxIGFib3ZlICovXFxubW0vdm1zY2FuLmM6MTE4ODpcXHRcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTExODktXFx0XFx0XFx0ICAgIGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE1OTA9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vdm1zY2FuLmMtMTYxNS1cXHQgKiBXZSBzaG91bGQgYmUgc2FmZSBoZXJlIHNpbmNlIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCBmaWxlIHBhZ2VzIGFuZFxcbm1tL3Ztc2Nhbi5jOjE2MTY6XFx0ICogd2UgYXJlIG5vdCBrc3dhcGQgYW5kIHRoZXJlZm9yZSBjYW5ub3Qgd3JpdGUgZGlydHkgZmlsZSBwYWdlcy4gQnV0XFxubW0vdm1zY2FuLmMtMTYxNy1cXHQgKiBjYWxsIG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCkgYW55d2F5LCBqdXN0IGluIGNhc2UgdGhlc2UgY29uZGl0aW9uc1xcbi0tXFxubW0vdm1zY2FuLmM9MTgyMz1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4MjgtXFxubW0vdm1zY2FuLmM6MTgyOTpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy0xODMwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM4NDk9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnNldF9tbV93YWxrKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZm9yY2VfYWxsb2MpXFxuLS1cXG5tbS92bXNjYW4uYy0zODUyLVxcbm1tL3Ztc2Nhbi5jOjM4NTM6XFx0aWYgKHBnZGF0IFxcdTAwMjZcXHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcXG5tbS92bXNjYW4uYy0zODU0LVxcdFxcdFZNX1dBUk5fT05fT05DRSh3YWxrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4NTctXFx0fSBlbHNlIGlmICghd2FsayBcXHUwMDI2XFx1MDAyNiBmb3JjZV9hbGxvYykge1xcbm1tL3Ztc2Nhbi5jOjM4NTg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbm1tL3Ztc2Nhbi5jLTM4NTktXFxuLS1cXG5tbS92bXNjYW4uYz0zODY5PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4NzctXFxubW0vdm1zY2FuLmM6Mzg3ODpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtMzg3OS1cXHRcXHRrZnJlZSh3YWxrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxOTE9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxOTYtXFxubW0vdm1zY2FuLmM6NDE5NzpcXHRWTV9XQVJOX09OX09OQ0UoIWN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbm1tL3Ztc2Nhbi5jLTQxOTgtXFxuLS1cXG5tbS92bXNjYW4uYz00OTg5PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTk3LVxcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXFxubW0vdm1zY2FuLmM6NDk5ODpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTQ5OTktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmMtNTAxMS1cXG5tbS92bXNjYW4uYzo1MDEyOlxcdC8qIGtzd2FwZCBzaG91bGQgYWJvcnQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGFyZSBzYWZlICovXFxubW0vdm1zY2FuLmMtNTAxMy1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMjAtXFxubW0vdm1zY2FuLmM6NTIyMTpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy01MjIyLVxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xcbi0tXFxubW0vdm1zY2FuLmMtNTIyOC1cXG5tbS92bXNjYW4uYzo1MjI5OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTUyMzAtXFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuLS1cXG5tbS92bXNjYW4uYy01MjM2LVxcdGlmIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2UgcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jOjUyMzc6XFx0XFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNlcmVjbGFpbV9pZHgpO1xcbm1tL3Ztc2Nhbi5jLTUyMzgtfVxcbi0tXFxubW0vdm1zY2FuLmM9NTkzOD1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTY3LVxcdCAqIERFRl9QUklPUklUWSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBmYWN0IHdlIGFyZSBkaXJlY3RcXG5tbS92bXNjYW4uYzo1OTY4OlxcdCAqIHJlY2xhaW1pbmcgaW1wbGllcyB0aGF0IGtzd2FwZCBpcyBub3Qga2VlcGluZyB1cCBhbmQgaXQgaXMgYmVzdCB0b1xcbm1tL3Ztc2Nhbi5jLTU5NjktXFx0ICogZG8gYSBiYXRjaCBvZiB3b3JrIGF0IG9uY2UuIEZvciBtZW1jZyByZWNsYWltIG9uZSBjaGVjayBpcyBtYWRlIHRvXFxuLS1cXG5tbS92bXNjYW4uYy01OTcyLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjU5NzM6XFx0cHJvcG9ydGlvbmFsX3JlY2xhaW0gPSAoIWNncm91cF9yZWNsYWltKHNjKSBcXHUwMDI2XFx1MDAyNiAhY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTU5NzQtXFx0XFx0XFx0XFx0c2MtXFx1MDAzZXByaW9yaXR5ID09IERFRl9QUklPUklUWSk7XFxuLS1cXG5tbS92bXNjYW4uYy01OTk3LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NTk5ODpcXHRcXHQgKiBGb3Iga3N3YXBkIGFuZCBtZW1jZywgcmVjbGFpbSBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHBhZ2VzXFxubW0vdm1zY2FuLmMtNTk5OS1cXHRcXHQgKiByZXF1ZXN0ZWQuIEVuc3VyZSB0aGF0IHRoZSBhbm9uIGFuZCBmaWxlIExSVXMgYXJlIHNjYW5uZWRcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxMjk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE0My1cXHQgKlxcbm1tL3Ztc2Nhbi5jOjYxNDQ6XFx0ICogRm9yIGtzd2FwZCwgcmVsaWFibGUgZm9yd2FyZCBwcm9ncmVzcyBpcyBtb3JlIGltcG9ydGFudFxcbm1tL3Ztc2Nhbi5jLTYxNDUtXFx0ICogdGhhbiBhIHF1aWNrIHJldHVybiB0byBpZGxlLiBBbHdheXMgZG8gZnVsbCB3YWxrcy5cXG5tbS92bXNjYW4uYy02MTQ2LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjYxNDc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW1lbWNnX2Z1bGxfd2FsaylcXG5tbS92bXNjYW4uYy02MTQ4LVxcdFxcdHBhcnRpYWwgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmM9NjIwOD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNDYtXFxubW0vdm1zY2FuLmM6NjI0NzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSkge1xcbm1tL3Ztc2Nhbi5jLTYyNDgtXFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNTktXFx0XFx0ICpcXG5tbS92bXNjYW4uYzo2MjYwOlxcdFxcdCAqIE9uY2UgYSBub2RlIGlzIGZsYWdnZWQgUEdEQVRfV1JJVEVCQUNLLCBrc3dhcGQgd2lsbFxcbm1tL3Ztc2Nhbi5jLTYyNjEtXFx0XFx0ICogY291bnQgdGhlIG51bWJlciBvZiBwYWdlcyB1bmRlciBwYWdlcyBmbGFnZ2VkIGZvclxcbi0tXFxubW0vdm1zY2FuLmMtNjI2OC1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjYyNjk6XFx0XFx0ICogSWYga3N3YXBkIHNjYW5zIHBhZ2VzIG1hcmtlZCBmb3IgaW1tZWRpYXRlXFxubW0vdm1zY2FuLmMtNjI3MC1cXHRcXHQgKiByZWNsYWltIGFuZCB1bmRlciB3cml0ZWJhY2sgKG5yX2ltbWVkaWF0ZSksIGl0XFxuLS1cXG5tbS92bXNjYW4uYy02Mjg5LVxcbm1tL3Ztc2Nhbi5jOjYyOTA6XFx0XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNjI5MS1cXHRcXHRcXHRzZXRfYml0KExSVVZFQ19OT0RFX0NPTkdFU1RFRCwgXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyOTUtXFx0ICogU3RhbGwgZGlyZWN0IHJlY2xhaW0gZm9yIElPIGNvbXBsZXRpb25zIGlmIHRoZSBscnV2ZWMgaXNcXG5tbS92bXNjYW4uYzo2Mjk2OlxcdCAqIG5vZGUgaXMgY29uZ2VzdGVkLiBBbGxvdyBrc3dhcGQgdG8gY29udGludWUgdW50aWwgaXRcXG5tbS92bXNjYW4uYy02Mjk3LVxcdCAqIHN0YXJ0cyBlbmNvdW50ZXJpbmcgdW5xdWV1ZWQgZGlydHkgcGFnZXMgb3IgY3ljbGluZyB0aHJvdWdoXFxuLS1cXG5tbS92bXNjYW4uYy02Mjk5LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjYzMDA6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2IGN1cnJlbnRfbWF5X3Rocm90dGxlKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy02MzAxLVxcdCAgICAhc2MtXFx1MDAzZWhpYmVybmF0aW9uX21vZGUgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMTItXFx0ICogc2xlZXAuIE9uIHJlY2xhaW0gcHJvZ3Jlc3MsIHJlc2V0IHRoZSBmYWlsdXJlIGNvdW50ZXIuIEFcXG5tbS92bXNjYW4uYzo2MzEzOlxcdCAqIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gcnVuIHdpbGwgcmV2aXZlIGEgZG9ybWFudCBrc3dhcGQuXFxubW0vdm1zY2FuLmMtNjMxNC1cXHQgKi9cXG5tbS92bXNjYW4uYy02MzE1LVxcdGlmIChyZWNsYWltYWJsZSlcXG5tbS92bXNjYW4uYzo2MzE2OlxcdFxcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KTtcXG5tbS92bXNjYW4uYy02MzE3LVxcdGVsc2UgaWYgKHNjLVxcdTAwM2VjYWNoZV90cmltX21vZGUpXFxuLS1cXG5tbS92bXNjYW4uYz02MzU1PXN0YXRpYyB2b2lkIGNvbnNpZGVyX3JlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MzcxLVxcdC8qXFxubW0vdm1zY2FuLmM6NjM3MjpcXHQgKiBEbyBub3QgdGhyb3R0bGUga3N3YXBkIG9yIGNncm91cCByZWNsYWltIG9uIE5PUFJPR1JFU1MgYXMgaXQgd2lsbFxcbm1tL3Ztc2Nhbi5jLTYzNzMtXFx0ICogdGhyb3R0bGUgb24gVk1TQ0FOX1RIUk9UVExFX1dSSVRFQkFDSyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNzYtXFx0ICovXFxubW0vdm1zY2FuLmM6NjM3NzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBjZ3JvdXBfcmVjbGFpbShzYykpXFxubW0vdm1zY2FuLmMtNjM3OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz02NjEzPXN0YXRpYyBib29sIGFsbG93X2RpcmVjdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NjIwLVxcbm1tL3Ztc2Nhbi5jOjY2MjE6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcXG5tbS92bXNjYW4uYy02NjIyLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjYzNy1cXG5tbS92bXNjYW4uYzo2NjM4OlxcdC8qIGtzd2FwZCBtdXN0IGJlIGF3YWtlIGlmIHByb2Nlc3NlcyBhcmUgYmVpbmcgdGhyb3R0bGVkICovXFxubW0vdm1zY2FuLmM6NjYzOTpcXHRpZiAoIXdtYXJrX29rIFxcdTAwMjZcXHUwMDI2IHdhaXRxdWV1ZV9hY3RpdmUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCkpIHtcXG5tbS92bXNjYW4uYzo2NjQwOlxcdFxcdGlmIChSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpIFxcdTAwM2UgWk9ORV9OT1JNQUwpXFxubW0vdm1zY2FuLmM6NjY0MTpcXHRcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBaT05FX05PUk1BTCk7XFxubW0vdm1zY2FuLmMtNjY0Mi1cXG5tbS92bXNjYW4uYzo2NjQzOlxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KTtcXG5tbS92bXNjYW4uYy02NjQ0LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2NTEtICogYW5kIHRoZSBQRk1FTUFMTE9DIHJlc2VydmUgZm9yIHRoZSBwcmVmZXJyZWQgbm9kZSBpcyBnZXR0aW5nIGRhbmdlcm91c2x5XFxubW0vdm1zY2FuLmM6NjY1MjogKiBkZXBsZXRlZC4ga3N3YXBkIHdpbGwgY29udGludWUgdG8gbWFrZSBwcm9ncmVzcyBhbmQgd2FrZSB0aGUgcHJvY2Vzc2VzXFxubW0vdm1zY2FuLmMtNjY1My0gKiB3aGVuIHRoZSBsb3cgd2F0ZXJtYXJrIGlzIHJlYWNoZWQuXFxuLS1cXG5tbS92bXNjYW4uYz02NjU4PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjY4OC1cXHQgKiBUaHJvdHRsaW5nIGlzIGJhc2VkIG9uIHRoZSBmaXJzdCB1c2FibGUgbm9kZSBhbmQgdGhyb3R0bGVkIHByb2Nlc3Nlc1xcbm1tL3Ztc2Nhbi5jOjY2ODk6XFx0ICogd2FpdCBvbiBhIHF1ZXVlIHVudGlsIGtzd2FwZCBtYWtlcyBwcm9ncmVzcyBhbmQgd2FrZXMgdGhlbS4gVGhlcmVcXG5tbS92bXNjYW4uYy02NjkwLVxcdCAqIGlzIGFuIGFmZmluaXR5IHRoZW4gYmV0d2VlbiBwcm9jZXNzZXMgd2FraW5nIHVwIGFuZCB3aGVyZSByZWNsYWltXFxuLS1cXG5tbS92bXNjYW4uYy02NzE4LVxcdCAqIHRyYW5zYWN0aW9uIGluIHRoZSBjYXNlIG9mIGEgZmlsZXN5c3RlbSBsaWtlIGV4dFszfDRdLiBJbiB0aGlzIGNhc2UsXFxubW0vdm1zY2FuLmM6NjcxOTpcXHQgKiBpdCBpcyBub3Qgc2FmZSB0byBibG9jayBvbiBwZm1lbWFsbG9jX3dhaXQgYXMga3N3YXBkIGNvdWxkIGJlXFxubW0vdm1zY2FuLmMtNjcyMC1cXHQgKiBibG9ja2VkIHdhaXRpbmcgb24gdGhlIHNhbWUgbG9jay4gSW5zdGVhZCwgdGhyb3R0bGUgZm9yIHVwIHRvIGFcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MjYtXFx0ZWxzZVxcbm1tL3Ztc2Nhbi5jOjY3Mjc6XFx0XFx0LyogVGhyb3R0bGUgdW50aWwga3N3YXBkIHdha2VzIHRoZSBwcm9jZXNzICovXFxubW0vdm1zY2FuLmMtNjcyOC1cXHRcXHR3YWl0X2V2ZW50X2tpbGxhYmxlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQtXFx1MDAzZXBmbWVtYWxsb2Nfd2FpdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NjU9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NzQtXFxubW0vdm1zY2FuLmM6Njg3NTpzdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjg3Ni17XFxuLS1cXG5tbS92bXNjYW4uYz02OTMyPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NTQtXFx0XFx0ICpcXG5tbS92bXNjYW4uYzo2OTU1OlxcdFxcdCAqIEhvd2V2ZXIsIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoIHRoaXMgb25cXG5tbS92bXNjYW4uYy02OTU2LVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo2OTU3OlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNjk1OC1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYy02OTg5LVxcdCAqIG5lZWQgYmFsYW5jaW5nIGJ5IGRlZmluaXRpb24uIFRoaXMgY2FuIGhhcHBlbiBpZiBhIHpvbmUtcmVzdHJpY3RlZFxcbm1tL3Ztc2Nhbi5jOjY5OTA6XFx0ICogYWxsb2NhdGlvbiB0cmllcyB0byB3YWtlIGEgcmVtb3RlIGtzd2FwZC5cXG5tbS92bXNjYW4uYy02OTkxLVxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmM9Njk5OT1zdGF0aWMgdm9pZCBjbGVhcl9wZ2RhdF9jb25nZXN0ZWQocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwMDgtLypcXG5tbS92bXNjYW4uYzo3MDA5OiAqIFByZXBhcmUga3N3YXBkIGZvciBzbGVlcGluZy4gVGhpcyB2ZXJpZmllcyB0aGF0IHRoZXJlIGFyZSBubyBwcm9jZXNzZXNcXG5tbS92bXNjYW4uYy03MDEwLSAqIHdhaXRpbmcgaW4gdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oKSBhbmQgdGhhdCB3YXRlcm1hcmtzIGhhdmUgYmVlbiBtZXQuXFxubW0vdm1zY2FuLmMtNzAxMS0gKlxcbm1tL3Ztc2Nhbi5jOjcwMTI6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBpcyByZWFkeSB0byBzbGVlcFxcbm1tL3Ztc2Nhbi5jLTcwMTMtICovXFxubW0vdm1zY2FuLmM6NzAxNDpzdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzAxNS1cXHRcXHRcXHRcXHRpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzAxOS1cXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXFxubW0vdm1zY2FuLmM6NzAyMDpcXHQgKiByYWNlIGJldHdlZW4gd2hlbiBrc3dhcGQgY2hlY2tzIHRoZSB3YXRlcm1hcmtzIGFuZCBhIHByb2Nlc3MgZ2V0c1xcbm1tL3Ztc2Nhbi5jLTcwMjEtXFx0ICogdGhyb3R0bGVkLiBUaGVyZSBpcyBhbHNvIGEgcG90ZW50aWFsIHJhY2UgaWYgcHJvY2Vzc2VzIGdldFxcbm1tL3Ztc2Nhbi5jOjcwMjI6XFx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcXG5tbS92bXNjYW4uYzo3MDIzOlxcdCAqIHpvbmVzLCB3aGljaCBjYXVzZXMga3N3YXBkIHRvIGV4aXQgYmFsYW5jZV9wZ2RhdCgpIGJlZm9yZSByZWFjaGluZ1xcbm1tL3Ztc2Nhbi5jOjcwMjQ6XFx0ICogdGhlIHdha2UgdXAgY2hlY2tzLiBJZiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIG5vIHByb2Nlc3Mgc2hvdWxkXFxubW0vdm1zY2FuLmMtNzAyNS1cXHQgKiBiZSBzbGVlcGluZyBvbiBwZm1lbWFsbG9jX3dhaXQsIHNvIHdha2UgdGhlbSBub3cgaWYgbmVjZXNzYXJ5LiBJZlxcbm1tL3Ztc2Nhbi5jOjcwMjY6XFx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XFxubW0vdm1zY2FuLmMtNzAyNy1cXHQgKiB0aHJvdHRsZWQgYWdhaW4uIFRoZSBkaWZmZXJlbmNlIGZyb20gd2FrZSB1cHMgaW4gYmFsYW5jZV9wZ2RhdCgpIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MDMzLVxcdC8qIEhvcGVsZXNzIG5vZGUsIGxlYXZlIGl0IHRvIGRpcmVjdCByZWNsYWltICovXFxubW0vdm1zY2FuLmM6NzAzNDpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTcwMzUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYy03MDQ1LS8qXFxubW0vdm1zY2FuLmM6NzA0NjogKiBrc3dhcGQgc2hyaW5rcyBhIG5vZGUgb2YgcGFnZXMgdGhhdCBhcmUgYXQgb3IgYmVsb3cgdGhlIGhpZ2hlc3QgdXNhYmxlXFxubW0vdm1zY2FuLmMtNzA0Ny0gKiB6b25lIHRoYXQgaXMgY3VycmVudGx5IHVuYmFsYW5jZWQuXFxubW0vdm1zY2FuLmMtNzA0OC0gKlxcbm1tL3Ztc2Nhbi5jOjcwNDk6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBzY2FubmVkIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHBhZ2VzIHRvXFxubW0vdm1zY2FuLmMtNzA1MC0gKiByZWNsYWltIG9yIGlmIHRoZSBsYWNrIG9mIHByb2dyZXNzIHdhcyBkdWUgdG8gcGFnZXMgdW5kZXIgd3JpdGViYWNrLlxcbi0tXFxubW0vdm1zY2FuLmMtNzA1Mi0gKi9cXG5tbS92bXNjYW4uYzo3MDUzOnN0YXRpYyBib29sIGtzd2FwZF9zaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTcwNTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NzEwOD1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzExMy0vKlxcbm1tL3Ztc2Nhbi5jOjcxMTQ6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcXG5tbS92bXNjYW4uYy03MTE1LSAqIHRoYXQgYXJlIGVsaWdpYmxlIGZvciB1c2UgYnkgdGhlIGNhbGxlciB1bnRpbCBhdCBsZWFzdCBvbmUgem9uZSBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzExNy0gKlxcbm1tL3Ztc2Nhbi5jOjcxMTg6ICogUmV0dXJucyB0aGUgb3JkZXIga3N3YXBkIGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQuXFxubW0vdm1zY2FuLmMtNzExOS0gKlxcbm1tL3Ztc2Nhbi5jOjcxMjA6ICoga3N3YXBkIHNjYW5zIHRoZSB6b25lcyBpbiB0aGUgaGlnaG1lbS1cXHUwMDNlbm9ybWFsLVxcdTAwM2VkbWEgZGlyZWN0aW9uLiAgSXQgc2tpcHNcXG5tbS92bXNjYW4uYy03MTIxLSAqIHpvbmVzIHdoaWNoIGhhdmUgZnJlZV9wYWdlcyBcXHUwMDNlIGhpZ2hfd21hcmtfcGFnZXMoem9uZSksIGJ1dCBvbmNlIGEgem9uZSBpc1xcbi0tXFxubW0vdm1zY2FuLmM9NzEyNj1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzE1Mi1cXHQgKiBwbGFjZSBzbyB0aGF0IHBhcmFsbGVsIGFsbG9jYXRpb25zIHRoYXQgYXJlIG5lYXIgdGhlIHdhdGVybWFyayB3aWxsXFxubW0vdm1zY2FuLmM6NzE1MzpcXHQgKiBzdGFsbCBvciBkaXJlY3QgcmVjbGFpbSB1bnRpbCBrc3dhcGQgaXMgZmluaXNoZWQuXFxubW0vdm1zY2FuLmMtNzE1NC1cXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxODEtXFx0XFx0ICogZ28gYWhlYWQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvblxcbm1tL3Ztc2Nhbi5jOjcxODI6XFx0XFx0ICogcmVxdWVzdCBhcmUgYmFsYW5jZWQgdG8gYXZvaWQgZXhjZXNzaXZlIHJlY2xhaW0gZnJvbSBrc3dhcGQuXFxubW0vdm1zY2FuLmMtNzE4My1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxOTktXFx0XFx0ICogb24gdGhlIGdyb3VuZHMgdGhhdCB0aGUgbm9ybWFsIHJlY2xhaW0gc2hvdWxkIGJlIGVub3VnaCB0b1xcbm1tL3Ztc2Nhbi5jOjcyMDA6XFx0XFx0ICogcmUtZXZhbHVhdGUgaWYgYm9vc3RpbmcgaXMgcmVxdWlyZWQgd2hlbiBrc3dhcGQgbmV4dCB3YWtlcy5cXG5tbS92bXNjYW4uYy03MjAxLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzIzMy1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3MjM0OlxcdFxcdGtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03MjM1LVxcbi0tXFxubW0vdm1zY2FuLmMtNzI0Ny1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3MjQ4OlxcdFxcdGlmIChrc3dhcGRfc2hyaW5rX25vZGUocGdkYXQsIFxcdTAwMjZzYykpXFxubW0vdm1zY2FuLmMtNzI0OS1cXHRcXHRcXHRyYWlzZV9wcmlvcml0eSA9IGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmMtNzI1OS1cXG5tbS92bXNjYW4uYzo3MjYwOlxcdFxcdC8qIENoZWNrIGlmIGtzd2FwZCBzaG91bGQgYmUgc3VzcGVuZGluZyAqL1xcbm1tL3Ztc2Nhbi5jLTcyNjEtXFx0XFx0X19mc19yZWNsYWltX3JlbGVhc2UoX1RISVNfSVBfKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyOTgtXFx0ICogd2F0ZXJtYXJrX2hpZ2ggYXQgdGhpcyBwb2ludC4gV2UgbmVlZCB0byBhdm9pZCBpbmNyZWFzaW5nIHRoZVxcbm1tL3Ztc2Nhbi5jOjcyOTk6XFx0ICogZmFpbHVyZSBjb3VudCB0byBwcmV2ZW50IHRoZSBrc3dhcGQgdGhyZWFkIGZyb20gc3RvcHBpbmcuXFxubW0vdm1zY2FuLmMtNzMwMC1cXHQgKi9cXG5tbS92bXNjYW4uYy03MzAxLVxcdGlmICghc2MubnJfcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFib29zdGVkKSB7XFxubW0vdm1zY2FuLmM6NzMwMjpcXHRcXHRpbnQgZmFpbF9jbnQgPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF9mYWlsdXJlcyk7XFxubW0vdm1zY2FuLmM6NzMwMzpcXHRcXHQvKiBrc3dhcGQgY29udGV4dCwgbG93IG92ZXJoZWFkIHRvIHRyYWNlIGV2ZXJ5IGZhaWx1cmUgKi9cXG5tbS92bXNjYW4uYzo3MzA0OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfcmVjbGFpbV9mYWlsKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBmYWlsX2NudCk7XFxubW0vdm1zY2FuLmMtNzMwNS1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy03MzQwLVxcdC8qXFxubW0vdm1zY2FuLmM6NzM0MTpcXHQgKiBSZXR1cm4gdGhlIG9yZGVyIGtzd2FwZCBzdG9wcGVkIHJlY2xhaW1pbmcgYXQgYXNcXG5tbS92bXNjYW4uYzo3MzQyOlxcdCAqIHByZXBhcmVfa3N3YXBkX3NsZWVwKCkgdGFrZXMgaXQgaW50byBhY2NvdW50LiBJZiBhbm90aGVyIGNhbGxlclxcbm1tL3Ztc2Nhbi5jOjczNDM6XFx0ICogZW50ZXJlZCB0aGUgYWxsb2NhdG9yIHNsb3cgcGF0aCB3aGlsZSBrc3dhcGQgd2FzIGF3YWtlLCBvcmRlciB3aWxsXFxubW0vdm1zY2FuLmMtNzM0NC1cXHQgKiByZW1haW4gYXQgdGhlIGhpZ2hlciBsZXZlbC5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNDktLypcXG5tbS92bXNjYW4uYzo3MzUwOiAqIFRoZSBwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCBpcyB1c2VkIHRvIHBhc3MgdGhlIGhpZ2hlc3Qgem9uZSBpbmRleCB0b1xcbm1tL3Ztc2Nhbi5jOjczNTE6ICogYmUgcmVjbGFpbWVkIGJ5IGtzd2FwZCBmcm9tIHRoZSB3YWtlci4gSWYgdGhlIHZhbHVlIGlzIE1BWF9OUl9aT05FUyB3aGljaCBpc1xcbm1tL3Ztc2Nhbi5jOjczNTI6ICogbm90IGEgdmFsaWQgaW5kZXggdGhlbiBlaXRoZXIga3N3YXBkIHJ1bnMgZm9yIGZpcnN0IHRpbWUgb3Iga3N3YXBkIGNvdWxkbid0XFxubW0vdm1zY2FuLmMtNzM1My0gKiBzbGVlcCBhZnRlciBwcmV2aW91cyByZWNsYWltIGF0dGVtcHQgKG5vZGUgaXMgc3RpbGwgdW5iYWxhbmNlZCkuIEluIHRoYXRcXG5tbS92bXNjYW4uYzo3MzU0OiAqIGNhc2UgcmV0dXJuIHRoZSB6b25lIGluZGV4IG9mIHRoZSBwcmV2aW91cyBrc3dhcGQgcmVjbGFpbSBjeWNsZS5cXG5tbS92bXNjYW4uYy03MzU1LSAqL1xcbm1tL3Ztc2Nhbi5jOjczNTY6c3RhdGljIGVudW0gem9uZV90eXBlIGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MzU3LVxcdFxcdFxcdFxcdFxcdCAgIGVudW0gem9uZV90eXBlIHByZXZfaGlnaGVzdF96b25laWR4KVxcbm1tL3Ztc2Nhbi5jLTczNTgte1xcbm1tL3Ztc2Nhbi5jOjczNTk6XFx0ZW51bSB6b25lX3R5cGUgY3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTczNjAtXFxuLS1cXG5tbS92bXNjYW4uYy03MzYzLVxcbm1tL3Ztc2Nhbi5jOjczNjQ6c3RhdGljIHZvaWQga3N3YXBkX3RyeV90b19zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgYWxsb2Nfb3JkZXIsIGludCByZWNsYWltX29yZGVyLFxcbm1tL3Ztc2Nhbi5jLTczNjUtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNzItXFxubW0vdm1zY2FuLmM6NzM3MzpcXHRwcmVwYXJlX3RvX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxubW0vdm1zY2FuLmMtNzM3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTczODEtXFx0ICovXFxubW0vdm1zY2FuLmM6NzM4MjpcXHRpZiAocHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcXG5tbS92bXNjYW4uYy03MzgzLVxcdFxcdC8qXFxuLS1cXG5tbS92bXNjYW4uYy03Mzg1LVxcdFxcdCAqIGlzb2xhdGUgcGFnZXMgZnJvbSBhbmQgc2tpcHMgdGhlbSBpbiB0aGUgZnV0dXJlIHNjYW5uaW5nLlxcbm1tL3Ztc2Nhbi5jOjczODY6XFx0XFx0ICogV2hlbiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIGl0IGlzIHJlYXNvbmFibGUgdG8gYXNzdW1lXFxubW0vdm1zY2FuLmMtNzM4Ny1cXHRcXHQgKiB0aGF0IHBhZ2VzIGFuZCBjb21wYWN0aW9uIG1heSBzdWNjZWVkIHNvIHJlc2V0IHRoZSBjYWNoZS5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTczOTktXFx0XFx0LypcXG5tbS92bXNjYW4uYzo3NDAwOlxcdFxcdCAqIElmIHdva2VuIHByZW1hdHVyZWx5IHRoZW4gcmVzZXQga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCBhbmRcXG5tbS92bXNjYW4uYy03NDAxLVxcdFxcdCAqIG9yZGVyLiBUaGUgdmFsdWVzIHdpbGwgZWl0aGVyIGJlIGZyb20gYSB3YWtldXAgcmVxdWVzdCBvclxcbi0tXFxubW0vdm1zY2FuLmMtNzQwNC1cXHRcXHRpZiAocmVtYWluaW5nKSB7XFxubW0vdm1zY2FuLmM6NzQwNTpcXHRcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LFxcbm1tL3Ztc2Nhbi5jOjc0MDY6XFx0XFx0XFx0XFx0XFx0a3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcXG5tbS92bXNjYW4uYy03NDA3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCkpO1xcbm1tL3Ztc2Nhbi5jLTc0MDgtXFxubW0vdm1zY2FuLmM6NzQwOTpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpIFxcdTAwM2MgcmVjbGFpbV9vcmRlcilcXG5tbS92bXNjYW4uYzo3NDEwOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgcmVjbGFpbV9vcmRlcik7XFxubW0vdm1zY2FuLmMtNzQxMS1cXHRcXHR9XFxubW0vdm1zY2FuLmMtNzQxMi1cXG5tbS92bXNjYW4uYzo3NDEzOlxcdFxcdGZpbmlzaF93YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0KTtcXG5tbS92bXNjYW4uYzo3NDE0OlxcdFxcdHByZXBhcmVfdG9fd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG5tbS92bXNjYW4uYy03NDE1LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MjEtXFx0aWYgKCFyZW1haW5pbmcgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo3NDIyOlxcdCAgICBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xcbm1tL3Ztc2Nhbi5jOjc0MjM6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9zbGVlcChwZ2RhdC1cXHUwMDNlbm9kZV9pZCk7XFxubW0vdm1zY2FuLmMtNzQyNC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MjktXFx0XFx0ICogd2F0ZXJtYXJrcyBiZWluZyBicmVhY2hlZCB3aGlsZSB1bmRlciBwcmVzc3VyZSwgd2UgcmVkdWNlIHRoZVxcbm1tL3Ztc2Nhbi5jOjc0MzA6XFx0XFx0ICogcGVyLWNwdSB2bXN0YXQgdGhyZXNob2xkIHdoaWxlIGtzd2FwZCBpcyBhd2FrZSBhbmQgcmVzdG9yZVxcbm1tL3Ztc2Nhbi5jLTc0MzEtXFx0XFx0ICogdGhlbSBiZWZvcmUgZ29pbmcgYmFjayB0byBzbGVlcC5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0NDQtXFx0fVxcbm1tL3Ztc2Nhbi5jOjc0NDU6XFx0ZmluaXNoX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL3Ztc2Nhbi5jLTc0NDYtfVxcbi0tXFxubW0vdm1zY2FuLmMtNzQ2MC0gKi9cXG5tbS92bXNjYW4uYzo3NDYxOnN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxubW0vdm1zY2FuLmMtNzQ2Mi17XFxuLS1cXG5tbS92bXNjYW4uYy03NDcwLVxcdCAqIGFuZCB0aGF0IGlmIHdlIG5lZWQgbW9yZSBtZW1vcnkgd2Ugc2hvdWxkIGdldCBhY2Nlc3MgdG8gaXRcXG5tbS92bXNjYW4uYzo3NDcxOlxcdCAqIHJlZ2FyZGxlc3MgKHNlZSBcXFwiX19hbGxvY19wYWdlcygpXFxcIikuIFxcXCJrc3dhcGRcXFwiIHNob3VsZFxcbm1tL3Ztc2Nhbi5jLTc0NzItXFx0ICogbmV2ZXIgZ2V0IGNhdWdodCBpbiB0aGUgbm9ybWFsIHBhZ2UgZnJlZWluZyBsb2dpYy5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0ODItXFxubW0vdm1zY2FuLmM6NzQ4MzpcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIDApO1xcbm1tL3Ztc2Nhbi5jOjc0ODQ6XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcXG5tbS92bXNjYW4uYy03NDg1LVxcdGF0b21pY19zZXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vucl93cml0ZWJhY2tfdGhyb3R0bGVkLCAwKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0ODgtXFxubW0vdm1zY2FuLmM6NzQ4OTpcXHRcXHRhbGxvY19vcmRlciA9IHJlY2xhaW1fb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcik7XFxubW0vdm1zY2FuLmM6NzQ5MDpcXHRcXHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc0OTEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYy03NDkyLVxcbm1tL3Ztc2Nhbi5jOjc0OTM6a3N3YXBkX3RyeV9zbGVlcDpcXG5tbS92bXNjYW4uYzo3NDk0OlxcdFxcdGtzd2FwZF90cnlfdG9fc2xlZXAocGdkYXQsIGFsbG9jX29yZGVyLCByZWNsYWltX29yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc0OTUtXFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0OTctXFx0XFx0LyogUmVhZCB0aGUgbmV3IG9yZGVyIGFuZCBoaWdoZXN0X3pvbmVpZHggKi9cXG5tbS92bXNjYW4uYzo3NDk4OlxcdFxcdGFsbG9jX29yZGVyID0gUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jOjc0OTk6XFx0XFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcXG5tbS92bXNjYW4uYy03NTAwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmM6NzUwMTpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIDApO1xcbm1tL3Ztc2Nhbi5jOjc1MDI6XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcXG5tbS92bXNjYW4uYy03NTAzLVxcbi0tXFxubW0vdm1zY2FuLmMtNzUxNS1cXHRcXHQgKiBSZWNsYWltIGJlZ2lucyBhdCB0aGUgcmVxdWVzdGVkIG9yZGVyIGJ1dCBpZiBhIGhpZ2gtb3JkZXJcXG5tbS92bXNjYW4uYzo3NTE2OlxcdFxcdCAqIHJlY2xhaW0gZmFpbHMgdGhlbiBrc3dhcGQgZmFsbHMgYmFjayB0byByZWNsYWltaW5nIGZvclxcbm1tL3Ztc2Nhbi5jOjc1MTc6XFx0XFx0ICogb3JkZXItMC4gSWYgdGhhdCBoYXBwZW5zLCBrc3dhcGQgd2lsbCBjb25zaWRlciBzbGVlcGluZ1xcbm1tL3Ztc2Nhbi5jLTc1MTgtXFx0XFx0ICogZm9yIHRoZSBvcmRlciBpdCBmaW5pc2hlZCByZWNsYWltaW5nIGF0IChyZWNsYWltX29yZGVyKVxcbi0tXFxubW0vdm1zY2FuLmMtNzUyMS1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3NTIyOlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfd2FrZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LFxcbm1tL3Ztc2Nhbi5jLTc1MjMtXFx0XFx0XFx0XFx0XFx0XFx0YWxsb2Nfb3JkZXIpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzUyNi1cXHRcXHRpZiAocmVjbGFpbV9vcmRlciBcXHUwMDNjIGFsbG9jX29yZGVyKVxcbm1tL3Ztc2Nhbi5jOjc1Mjc6XFx0XFx0XFx0Z290byBrc3dhcGRfdHJ5X3NsZWVwO1xcbm1tL3Ztc2Nhbi5jLTc1MjgtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNzUzNi0gKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXFxubW0vdm1zY2FuLmM6NzUzNzogKiBrc3dhcGQgc2hvdWxkIHJlY2xhaW0gKGRpcmVjdCByZWNsYWltIGlzIGRlZmVycmVkKSwgd2FrZSBpdCB1cCBmb3IgdGhlIHpvbmUnc1xcbm1tL3Ztc2Nhbi5jOjc1Mzg6ICogcGdkYXQuICBJdCB3aWxsIHdha2UgdXAga2NvbXBhY3RkIGFmdGVyIHJlY2xhaW1pbmcgbWVtb3J5LiAgSWYga3N3YXBkIHJlY2xhaW1cXG5tbS92bXNjYW4uYy03NTM5LSAqIGhhcyBmYWlsZWQgb3IgaXMgbm90IG5lZWRlZCwgc3RpbGwgd2FrZSB1cCBrY29tcGFjdGQgaWYgb25seSBjb21wYWN0aW9uIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03NTQxLSAqL1xcbm1tL3Ztc2Nhbi5jOjc1NDI6dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy03NTQzLVxcdFxcdCAgIGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NTQtXFx0cGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbm1tL3Ztc2Nhbi5jOjc1NTU6XFx0Y3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc1NTYtXFxubW0vdm1zY2FuLmMtNzU1Ny1cXHRpZiAoY3Vycl9pZHggPT0gTUFYX05SX1pPTkVTIHx8IGN1cnJfaWR4IFxcdTAwM2MgaGlnaGVzdF96b25laWR4KVxcbm1tL3Ztc2Nhbi5jOjc1NTg6XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgaGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYy03NTU5LVxcbm1tL3Ztc2Nhbi5jOjc1NjA6XFx0aWYgKFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKSBcXHUwMDNjIG9yZGVyKVxcbm1tL3Ztc2Nhbi5jOjc1NjE6XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCBvcmRlcik7XFxubW0vdm1zY2FuLmMtNzU2Mi1cXG5tbS92bXNjYW4uYzo3NTYzOlxcdGlmICghd2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KSlcXG5tbS92bXNjYW4uYy03NTY0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NjYtXFx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gaWYgcG9zc2libGUgKi9cXG5tbS92bXNjYW4uYzo3NTY3OlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkgfHxcXG5tbS92bXNjYW4uYy03NTY4LVxcdCAgICAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYy03NTgxLVxcbm1tL3Ztc2Nhbi5jOjc1ODI6XFx0dHJhY2VfbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU4My1cXHRcXHRcXHRcXHQgICAgICBnZnBfZmxhZ3MpO1xcbm1tL3Ztc2Nhbi5jOjc1ODQ6XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpO1xcbm1tL3Ztc2Nhbi5jLTc1ODUtfVxcbm1tL3Ztc2Nhbi5jLTc1ODYtXFxubW0vdm1zY2FuLmM6NzU4Nzp2b2lkIGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIGtzd2FwZF9jbGVhcl9ob3BlbGVzc19yZWFzb24gcmVhc29uKVxcbm1tL3Ztc2Nhbi5jLTc1ODgte1xcbm1tL3Ztc2Nhbi5jLTc1ODktXFx0LyogT25seSB0cmFjZSBhY3R1YWwgcmVzZXRzLCBub3QgcmVkdW5kYW50IHplcm8tdG8temVybyAqL1xcbm1tL3Ztc2Nhbi5jOjc1OTA6XFx0aWYgKGF0b21pY194Y2hnKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX2ZhaWx1cmVzLCAwKSlcXG5tbS92bXNjYW4uYzo3NTkxOlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHJlYXNvbik7XFxubW0vdm1zY2FuLmMtNzU5Mi19XFxuLS1cXG5tbS92bXNjYW4uYy03NTk0LS8qXFxubW0vdm1zY2FuLmM6NzU5NTogKiBSZXNldCBrc3dhcGRfZmFpbHVyZXMgb25seSB3aGVuIHRoZSBub2RlIGlzIGJhbGFuY2VkLiBXaXRob3V0IHRoaXNcXG5tbS92bXNjYW4uYy03NTk2LSAqIGNoZWNrLCBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIChlLmcuLCBmcm9tIGNncm91cCBtZW1vcnkuaGlnaFxcbm1tL3Ztc2Nhbi5jOjc1OTc6ICogdGhyb3R0bGluZykgY2FuIGtlZXAgcmVzZXR0aW5nIGtzd2FwZF9mYWlsdXJlcyBldmVuIHdoZW4gdGhlIG5vZGVcXG5tbS92bXNjYW4uYzo3NTk4OiAqIGNhbm5vdCBiZSBiYWxhbmNlZCwgY2F1c2luZyBrc3dhcGQgdG8gcnVuIGVuZGxlc3NseS5cXG5tbS92bXNjYW4uYy03NTk5LSAqL1xcbm1tL3Ztc2Nhbi5jOjc2MDA6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzYwMS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzYwMy1cXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxcbm1tL3Ztc2Nhbi5jOjc2MDQ6XFx0XFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cXG5tbS92bXNjYW4uYy03NjA1LVxcdFxcdFxcdEtTV0FQRF9DTEVBUl9IT1BFTEVTU19LU1dBUEQgOiBLU1dBUERfQ0xFQVJfSE9QRUxFU1NfRElSRUNUKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MDctXFxubW0vdm1zY2FuLmM6NzYwODpib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxubW0vdm1zY2FuLmMtNzYwOS17XFxubW0vdm1zY2FuLmM6NzYxMDpcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfZmFpbHVyZXMpIFxcdTAwM2U9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxubW0vdm1zY2FuLmMtNzYxMS19XFxuLS1cXG5tbS92bXNjYW4uYz03NjIyPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmMtNzY1Mi0vKlxcbm1tL3Ztc2Nhbi5jOjc2NTM6ICogVGhpcyBrc3dhcGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxcbm1tL3Ztc2Nhbi5jLTc2NTQtICovXFxubW0vdm1zY2FuLmM6NzY1NTp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpXFxubW0vdm1zY2FuLmMtNzY1Ni17XFxuLS1cXG5tbS92bXNjYW4uYy03NjU4LVxcbm1tL3Ztc2Nhbi5jOjc2NTk6XFx0cGdkYXRfa3N3YXBkX2xvY2socGdkYXQpO1xcbm1tL3Ztc2Nhbi5jOjc2NjA6XFx0aWYgKCFwZ2RhdC1cXHUwMDNla3N3YXBkKSB7XFxubW0vdm1zY2FuLmM6NzY2MTpcXHRcXHRwZ2RhdC1cXHUwMDNla3N3YXBkID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShrc3dhcGQsIHBnZGF0LCBuaWQsIFxcXCJrc3dhcGQlZFxcXCIsIG5pZCk7XFxubW0vdm1zY2FuLmM6NzY2MjpcXHRcXHRpZiAoSVNfRVJSKHBnZGF0LVxcdTAwM2Vrc3dhcGQpKSB7XFxubW0vdm1zY2FuLmMtNzY2My1cXHRcXHRcXHQvKiBmYWlsdXJlIGF0IGJvb3QgaXMgZmF0YWwgKi9cXG5tbS92bXNjYW4uYzo3NjY0OlxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHN0YXJ0IGtzd2FwZCBvbiBub2RlICVkLCByZXQ9JXBlXFxcXG5cXFwiLFxcbm1tL3Ztc2Nhbi5jOjc2NjU6XFx0XFx0XFx0XFx0ICAgbmlkLCBwZ2RhdC1cXHUwMDNla3N3YXBkKTtcXG5tbS92bXNjYW4uYy03NjY2LVxcdFxcdFxcdEJVR19PTihzeXN0ZW1fc3RhdGUgXFx1MDAzYyBTWVNURU1fUlVOTklORyk7XFxubW0vdm1zY2FuLmM6NzY2NzpcXHRcXHRcXHRwZ2RhdC1cXHUwMDNla3N3YXBkID0gTlVMTDtcXG5tbS92bXNjYW4uYy03NjY4LVxcdFxcdH0gZWxzZSB7XFxubW0vdm1zY2FuLmM6NzY2OTpcXHRcXHRcXHR3YWtlX3VwX3Byb2Nlc3MocGdkYXQtXFx1MDAzZWtzd2FwZCk7XFxubW0vdm1zY2FuLmMtNzY3MC1cXHRcXHR9XFxubW0vdm1zY2FuLmMtNzY3MS1cXHR9XFxubW0vdm1zY2FuLmM6NzY3MjpcXHRwZ2RhdF9rc3dhcGRfdW5sb2NrKHBnZGF0KTtcXG5tbS92bXNjYW4uYy03NjczLX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NzgtICovXFxubW0vdm1zY2FuLmM6NzY3OTp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTc2ODAte1xcbm1tL3Ztc2Nhbi5jLTc2ODEtXFx0cGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo0My40MDI3NDI5MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNDEyMjc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFBhZ2UgUmVjbGFpbSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhZ2UgcmVjbGFpbSBidXNpbmVzcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGB3YWtldXBfa3N3YXBkYCDigJMgaXQncyBhIGt0aHJlYWQsIHNvIHRoYXQncyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWVzIEkga25vdywgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBkaXJlY3QgcmVjbGFpbSwgcmlnaHQ/IExldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHksIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgZ2V0IHVzIGludG8gdGhlIHJlY2xhaW0gcHJvY2Vzcz9cblxuSG1tLCBJIHNlZSBgc2hyaW5rX25vZGVgIGlzIHRoZSBjb3JlIHdvcmtob3JzZS4gVGhhdCBtYWtlcyBzZW5zZS4gSXQgbG9va3MgbGlrZSBgc2hyaW5rX2xydXZlY2AgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbm9kZWAsIHdoaWNoIGlzIHRoZW4gY2FsbGluZyBgZXZpY3RfZm9saW9zYC4gSSBzaG91bGQgbG9vayBpbnRvIHRoaXMgd2hvbGUgY2FsbCBjaGFpbiB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwcm9jZXNzLiBBbmQgSSBzZWUgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBjYWxsZWQgYnkgYHNocmlua19ub2RlYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgZmlyc3QgY2hlY2sgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gSWYgbm90LCB0aGVuIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0byBjYWxsIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjk4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjQ4LjIwNjg2ODM4N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMzUzOTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRyeV90b19mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo0OC4yNjcwMTE4NTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4ODAxMjc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHRyeV90b19mcmVlX3BhZ2VzYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXZlIGludG8gYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGB0cnlfdG9fZnJlZV9wYWdlc2AgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBwYWdlIHJlY2xhaW0gbWVjaGFuaXNtIGtpY2tzIGluLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsIHRyaWVzIHRvIHBoeXNpY2FsbHkgZnJlZSB1cCBtZW1vcnksIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIExSVSBsaXN0cywgem9uZXMsIGFuZCByZWNsYWltIHRhcmdldHMuIFdoYXQgYXJlIHRoZSBrZXkgaGV1cmlzdGljcyBhbmQgdGhyZXNob2xkcyBpdCB1c2VzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gdGhhdCBqdW1wIG91dD8gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIE5VTUEgbm9kZXMgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHR5cGVzLiBBbnkgcmVjZW50IGNoYW5nZXMgdG8gbWVtb3J5IHByZXNzdXJlIGNhbGN1bGF0aW9ucyB3b3VsZCBiZSB3b3J0aCByZXZpZXdpbmcgaGVyZSBhcyB3ZWxsLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gdGVsbCB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo1Mi41NTUwMjgxMDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODQ5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY0ODU9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1MTUtICovXFxubW0vdm1zY2FuLmM6NjUxNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbm1tL3Ztc2Nhbi5jLTY1MTctXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2NTg9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NzM3LVxcbm1tL3Ztc2Nhbi5jOjY3Mzg6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNjczOS1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS92bXNjYW4uYy02NzcyLVxcbm1tL3Ztc2Nhbi5jOjY3NzM6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjc3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MjQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NTUtXFxubW0vdm1zY2FuLmM6Njg1NjpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODU3LVxcbi0tXFxubW0vdm1zY2FuLmM9NzYyMj11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NDEtXFxubW0vdm1zY2FuLmM6NzY0MjpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03NjQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo1Mi42MjI4ODIzNzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NjU4NTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBLZXkgRnVuY3Rpb24gU3ltYm9scyBhbmQgUmVsZXZhbnQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBqdW1wIG91dCBpbW1lZGlhdGVseSBhcyBnb29kIHBvaW50cyBvZiBmb2N1czogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgd2FrZXVwX2tzd2FwZGAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBvciBjb250cm9sIHBvaW50cyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoYXQncyBjaGFuZ2luZyAqYXJvdW5kKiB0aGVtLCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zLlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCB0aGUgY29udGV4dC4gVGhpcyBwYXRjaCB0b3VjaGVzIGEgc2xldyBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzOiBgbW0vdm1zY2FuLmNgLCBgbW0vc3dhcC5jYCwgYG1tL3dvcmtpbmdzZXQuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbW16b25lLmNgLCBhbmQgYG1tL3Ztc3RhdC5jYC4gVGhhdCdzIGJhc2ljYWxseSB0aGUgd2hvbGUgc2hlYmFuZyB3aGVuIGl0IGNvbWVzIHRvIHRoZSBWTSBzdWJzeXN0ZW0uIEl0J3MgYSBicm9hZCByYW5nZSBhbmQgY29uZmlybXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLlxuXG5TaW5jZSBpdCBtb2RpZmllcyBgbW0vbWVtY29udHJvbC5jYCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGBDT05GSUdfTUVNQ0dgLiBJZiB0aGlzIHBhdGNoJ3MgY2hhbmdlcyBkZXBlbmQgb24gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCB0aGF0J3MgY3J1Y2lhbC4gSSBjYW4gY29uZmlybSwgZnJvbSBleHBlcmllbmNlLCB0aGF0IGBtbS9tZW1jb250cm9sLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGhvdyBhbmQgd2hlcmUgdGhpcyBjb25maWcgd2lsbCBjb21lIGludG8gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NDk6NTcuNjk5NDcyMzMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDQ5MzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo1Ny43NjM5NzE3NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA2MjEyNjI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vbWVtY29udHJvbC12MS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgcmFkYXIgYXMgbWVtY2ctcmVsYXRlZC4gQnV0LCBpdCBhbHNvIGhpdHMgYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3N3YXAuY2AsIHdoaWNoIGFyZSBjb3JlLCBhbHdheXMtY29tcGlsZWQgY29tcG9uZW50cy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyBhcmUgd2UgaW50cm9kdWNpbmcgYW55IG5ldyBgI2lmZGVmYCBibG9ja3M/IEkgZG92ZSBpbnRvIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgY2hlY2tpbmcgdGhlIGBlbnVtIG5vZGVfc3RhdF9pdGVtYCBmb3IgYW55IGNsdWVzLiBOb3BlLCBubyBuZXcgYCNpZmRlZmBzIHRoZXJlLlxuXG5OZXh0LCBJIGp1bXBlZCBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHNwZWNpZmljYWxseSBjaGVja2VkIGBwcmVwYXJlX3NjYW5fY29udHJvbCgpYCwganVzdCB0byBiZSBjZXJ0YWluLiBBZ2Fpbiwgbm8gbmV3IGAjaWZkZWZgcy4gU28sIHRoZSBjb3JlIGNoYW5nZXMgaW4gYG1tL3Ztc2Nhbi5jYCBkb24ndCBzdHJpY3RseSAqcmVxdWlyZSogYENPTkZJR19NRU1DR2AuIEhvd2V2ZXIsIGJlY2F1c2UgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgIGFyZSBiZWluZyBtb2RpZmllZCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBlbmFibGluZyBib3RoIGBNRU1DR2AgYW5kIGBNRU1DR19WMWAgaXMgdGhlIHJpZ2h0IG1vdmUgdG8gZW5zdXJlIHdlIGZ1bGx5IGNvdmVyIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBgTUVNQ0dfVjFgIGlzIGFjdHVhbGx5IGRlZmluZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MDYuODI2MTAxMDg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDk3ODcyOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjA2Ljg4NzA5MjEzM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk1NDM0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBNRU1DR19WMWAgS2NvbmZpZyBvcHRpb24gaXMgZGVmaW5lZC4gVGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IHN0ZXAgd2hlbiBJJ20gZGVhbGluZyB3aXRoIHRoZXNlIHNvcnRzIG9mIGtlcm5lbCBmZWF0dXJlcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgbW9zdCBsaWtlbHkgcGxhY2VzIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIG9wdGlvbnMuIGBpbml0L0tjb25maWdgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgaXQgb2Z0ZW4gaGFuZGxlcyBjb3JlIGluaXRpYWxpemF0aW9uIGFuZCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9ucy4gQnV0LCBnaXZlbiB0aGF0IGBNRU1DR19WMWAgc2NyZWFtcyBtZW1vcnkgbWFuYWdlbWVudCwgSSdtIGxlYW5pbmcgbW9yZSB0b3dhcmRzIGBtbS9LY29uZmlnYCByaWdodCBhd2F5LiBJdCdzIHRoZSBtb3JlIGxvZ2ljYWwgaG9tZSBmb3Igb3B0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3VwcywgYW5kIGl0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSdsbCBzdGFydCB3aXRoIHRob3NlIHR3byBmaWxlcywgYW5kIGdvIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDMzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MTAuNDgyNTI5MTkzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgyMzYzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjY9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3NS1cXG5pbml0L0tjb25maWc6MTA3Njpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3Ny1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTEtXFxuaW5pdC9LY29uZmlnOjEwOTI6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTMtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTgtXFxuaW5pdC9LY29uZmlnOjEwOTk6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDAtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MTIuNDY0ODk5MjE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDI3NTQ3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB0byBiZXN0IGFwcHJvYWNoIGEgZGVlcGVyIGRpdmUuIEVuYWJsaW5nIGBNRU1DR2AgYW5kIGBNRU1DR19WMWAgc2VlbXMgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24sIEkgdXN1YWxseSBzdGFydCB0aGVyZSB0byBiZSBhYmxlIHRvIGdldCBnb29kIG9ic2VydmFiaWxpdHkuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCBrZXkgZW50cnkgcG9pbnRzIGZvciBtZW1vcnkgcmVjbGFpbS4gSSdtIHRyeWluZyB0byBpZGVudGlmeSBhcmVhcyB3aGVyZSB0aGUgd29ya2luZ3NldCBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB3YWtldXBfa3N3YXBkYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjb25zaWRlciBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhcyB0aGF0J3MgdXNlZCBmb3IgaGliZXJuYXRpb24sIHRob3VnaCBpdCBtYXkgbm90IGJlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBzcGVjaWZpYyB3b3JraW5nc2V0IGZvY3VzIHJpZ2h0IG5vdy4gTGV0IG1lIHNlZS4uLiBJIHNlZSBgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlYCBpcyBtZW50aW9uZWQgaW4gYG1tL3N3YXAuY2AsIGJ1dCBpdCBqdXN0IGFwcGVhcnMgdG8gYmUgY29udGV4dCBoZXJlLCBub3Qgc29tZXRoaW5nIHRvIGZvY3VzIG9uLlxuXG5JIGFsc28gc2VlIHRoYXQgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIHdlcmUgcmVtb3ZlZC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbmFsaXR5IGhhcyBnb25lLiBBaCwgaGVyZSBpdCBpczogYHdvcmtpbmdzZXRfcmVmYXVsdGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gcmVtb3ZlIHRoZSBvbGQgcmVmYXVsdCBjb3N0IGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyByZWZhdWx0ZWQsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gZXhhbWluZS5cblxuU28sICppcyogYHdvcmtpbmdzZXRfcmVmYXVsdGAgdGhlIGNvcnJlY3Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBZZXAsIGFic29sdXRlbHkuIFRoYXQgc2VlbXMgbGlrZSBhbiBpZGVhbCBlbnRyeSBwb2ludCBmb3IgdHJhY2luZyB0aGUgd29ya2luZ3NldCBjb2RlIGFuZCBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0J3MgYSBrZXkgc3BvdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nIHdoZW4gbWVtb3J5IGlzIGFjdGl2ZWx5IGJlaW5nIHVzZWQgYW5kIHJlLXVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDkzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjE3LjgwNzY1Njc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY4ODEwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXFxubW0vd29ya2luZ3NldC5jOjU0MDogKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cXG5tbS93b3JraW5nc2V0LmMtNTQxLSAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU0Ny0gKi9cXG5tbS93b3JraW5nc2V0LmM6NTQ4OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MTguMTE0NTQ0MjQ0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTk4NzY3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHM6XG5cbioqUmVmbGVjdGluZyBvbiBgd29ya2luZ3NldF9yZWZhdWx0YCoqXG5cbkFscmlnaHQsIGxldCBtZSB0aGluay4gYHdvcmtpbmdzZXRfcmVmYXVsdGAuLi4gaXMgdGhhdCBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciB2YXJpYWJsZT8gSSBuZWVkIHRvIGtub3cgaWYgaXQncyBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgaXRzIGRlZmluaW5nIG1vZHVsZSBvciBpZiBpdCdzIGFuIGludGVybmFsIGRldGFpbC4gSWYgaXQncyBleHBvcnRlZCwgdGhhdCBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIG1haW50YWluYWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBicmVha2luZyBjaGFuZ2VzIGluIGZ1dHVyZSByZXZpc2lvbnMgb2YgdGhlIHNvZnR3YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCBpdHMgZXhwb3N1cmUuIElzIGl0IGZvciBwZXJmb3JtYW5jZSBwcm9maWxpbmcsIGRlYnVnZ2luZywgYSBzcGVjaWZpYyBvcHRpbWl6YXRpb24gc3RyYXRlZ3ksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSByZWFzb24gaXMga2V5IHRvIGFzc2Vzc2luZyBpdHMgaW1wYWN0IGFuZCBhbnkgcG90ZW50aWFsIGFsdGVybmF0aXZlcy4gVGhpcyBpbXBhY3RzIGhvdyBJIHNob3VsZCBwcm9jZWVkIHdpdGggd2hhdGV2ZXIgdGFzayBpcyBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjIxLjIzNDQyNDA5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MzA1Mjg2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vd29ya2luZ3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MDoyMS40MTM3Mzk5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY2NTE2ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBmb3Igc3dhcCBtYW5hZ2VtZW50IGFyZSBsb2NhdGVkIGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlLioqIEFuZCBnaXZlbiBteSBleHBlcmllbmNlLCBgaW5jbHVkZS9saW51eC9zd2FwLmhgIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBJJ2xsIGNoZWNrIHRoZXJlIGZpcnN0OyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIHN3YXAgc3BhY2UsIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gaW4gdGhhdCBjb250ZXh0LCBhbmQgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmljcyBvZiBzd2FwcGluZyBwYWdlcyB0byBhbmQgZnJvbSBkaXNrLiBJdCdzIGEgc29saWQsIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjI0LjU4MDI2MDA3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NzcxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oPTMwMD12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjMwMTp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTMwMi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MjQuNjQ0ODQyODA3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTg4NjQ2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBUaGlzIEFQSSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG5vbi1zdGF0aWMgQVBJIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBmcm9tIHZhcmlvdXMgcGFydHMgb2YgdGhlIGtlcm5lbCwgbm90IGp1c3QgYSBsb2NhbGl6ZWQgbW9kdWxlLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgd2UgbmVlZCB0byBjb25zaWRlci4gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiBjb250ZXh0LCB3ZSBzaG91bGQgbG9vayBjbG9zZWx5IGF0OlxuXG4qICAgYHRyeV90b19mcmVlX3BhZ2VzYFxuKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYFxuKiAgIGB3YWtldXBfa3N3YXBkYFxuKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRgXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IG15IGluaXRpYWwgaHVuY2guIEl0IHNlZW1zIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgaW5kZWVkIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciAqZGlyZWN0KiByZWNsYWltLCBtYWtpbmcgaXQgYSB2ZXJ5IHN0cm9uZyBjYW5kaWRhdGUuIGB3YWtldXBfa3N3YXBkYCBpcyB0aGUgdHJpZ2dlciBmb3Igd2FraW5nIHVwIHRoZSBrc3dhcGQga2VybmVsIHRocmVhZCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHdvcmtpbmdzZXQgcmVmYXVsdCBtZWNoYW5pc20uXG5cbldhaXQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGFwcGxpY2FibGU/IExvb2tpbmcgYXQgdGhlIGNvZGUsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGFsc28gYSBwb3RlbnRpYWwsIGJ1dCBpdCBsb29rcyBsaWtlIGl0J3MgaW5saW5lIG9yIGV4cG9ydGVkPyBPaCwgd2FpdCwgaXQncyBhY3R1YWxseSBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGFzIGEgcG90ZW50aWFsIHBvaW50IGZvciBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MjkuNTAzNzEwNTkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTgzMzQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00ODY9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwOC0vKipcXG5tbS9tZW1jb250cm9sLmM6NTA5OiAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZ1xcbm1tL21lbWNvbnRyb2wuYy01MTAtICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1Mjc6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL21lbWNvbnRyb2wuYy01MjgtXFx0XFx0XFx0XFx0XFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MjkuNTY5NTUzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzAzNTQ4MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBGbG93KipcblxuVGhpcyBpc24ndCBhIHNpbXBsZSwgZGlyZWN0IHJlYWQ7IGl0J3MgYSBkeW5hbWljIHByb2Nlc3MgdGllZCB0byBnZXR0ZXJzLCB3aXRoIHRoZSByZWFsIG1lYXQgYmVpbmcgaW4gYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhbmQgYGV2aWN0X2ZvbGlvc2AuIEJlY2F1c2UgdGhleSBhcmUgc3RhdGljLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQncyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUga2V5LlxuXG5gc2hyaW5rX25vZGVgIGlzIGNhbGxpbmcgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgd2hpY2ggaXMgaXRzZWxmIGJlaW5nIGNhbGxlZCBieSBhIHNlcmllcyBvZiBmdW5jdGlvbnM6IGBrc3dhcGRfc2hyaW5rX25vZGVgLCBgc2hyaW5rX3pvbmVzYCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC5cblxuYHNocmlua196b25lc2AgdGhlbiBjYWxscyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhbmQgdGhpcyBpcyB0cmlnZ2VyZWQgYnkgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC5cblxuVGhlcmVmb3JlLCB0aGUgcGxhY2VzIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGFyZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgYXMgdGhlIHBvaW50cyB3aGVyZSB0aGlzIGZsb3cgaXMga2lja2VkIG9mZi4gTm93LCBsZXQncyBzaGlmdCBmb2N1cyB0byBgZXZpY3RfZm9saW9zYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MzUuMjczMTA0MDY5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3MTI5NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4MjU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4NTgtXFxubW0vdm1zY2FuLmM6NDg1OTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODYwLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMjE9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDQtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTA0NTpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTA0Ni1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTY0OD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2NjgtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU2Njk6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU2NzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjM1LjQ5NTgyNjAwNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEzODc5NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlbHZpbmcgaW50byB0aGUgTUdMUlUgRXZpY3Rpb24gTWVjaGFuaXNtKipcblxuT2theSwgc28gYGV2aWN0X2ZvbGlvc2AuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBieSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCwgYW5kIHRob3NlIGFyZSBjb3JlIGNvbXBvbmVudHMgb2YgYGxydV9nZW5gLCB0aGUgTXVsdGlwbGUtR2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIG1lY2hhbmlzbS4gQnV0IGhhbmcgb24sIGlzIGBldmljdF9mb2xpb3NgIGFjdHVhbGx5ICpwYXJ0KiBvZiBNR0xSVT8gTXkgbWVtb3J5J3MgYSBiaXQgZnV6enkgb24gdGhhdCBzcGVjaWZpYyByZWxhdGlvbnNoaXAuIFRpbWUgdG8gdmVyaWZ5LiBMZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBldmljdF9mb2xpb3NgIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBtbS92bXNjYW4uY2AgdG8gY2xhcmlmeSBpdHMgZXhhY3Qgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgTUdMUlUgZnJhbWV3b3JrIGFuZCBjb25maXJtIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTFJVIGdlbmVyYXRpb24gbWFuYWdlbWVudC4gSXQncyBpbXBvcnRhbnQgdG8gaGF2ZSBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxvdyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM5MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjQxLjgwOTcxMDAyMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMxNjAwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4MjU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4NTgtXFxubW0vdm1zY2FuLmM6NDg1OTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODYwLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMjE9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDQtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTA0NTpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTA0Ni1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTY0OD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2NjgtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU2Njk6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU2NzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjQxLjg3Mjg4MDM5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3MzQ5MjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1HTFJVIENvbnNpZGVyYXRpb24gZm9yIFRlc3RpbmcqKlxuXG5Pa2F5LCBNR0xSVS4gUmlnaHQuIE5vdywgYSBrZXkgcXVlc3Rpb24gcG9wcyB1cDogaXMgTUdMUlUgYWN0dWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBBaCwgYENPTkZJR19MUlVfR0VOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiBmb3IgTUdMUlUsIHNvIHRoYXQncyB0aGUgb25lIHRvIGNoZWNrLiBMZXQncyBzZWUgaWYgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGEgcmVxdWlyZW1lbnQgaW4gdGhpcyBzY2VuYXJpby5cblxuVGhlIHBhdGNoIEknbSBsb29raW5nIGF0IG1vZGlmaWVzIGBldmljdF9mb2xpb3NgLCBhbmQgdGhhdCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIE1HTFJVIGNvZGViYXNlLiBJbnRlcmVzdGluZywgaXQgKmFsc28qIHRvdWNoZXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAuIFRob3NlIGFyZSBwYXJ0IG9mIHRoZSBhY3RpdmUvaW5hY3RpdmUgTFJVLCBzbyB0aGUgbGVnYWN5IExSVS4gU28sIHRoaXMgcGF0Y2ggY2xlYXJseSBoYXMgaW1wbGljYXRpb25zIGZvciBib3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBNR0xSVS5cblxuVGhlcmVmb3JlLCB0byB0aG9yb3VnaGx5IGV2YWx1YXRlIHRoaXMgcGF0Y2gsIEkgdGhpbmsgd2UgKnJlYWxseSogbmVlZCB0byBlbmFibGUgYENPTkZJR19MUlVfR0VOYCBkdXJpbmcgdGVzdGluZyB0byBlbnN1cmUgd2UncmUgZXhlcmNpc2luZyB0aGUgTUdMUlUgcGF0aCBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSB0byBiZSBzdXJlLiBMZXQncyBzZWUgd2hhdCBgTFJVX0dFTmAgYnJpbmdzIHRvIHRoZSB0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NDYuMjUwMjMyNzM1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExNDQxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MDY9ZW5kaWYgIyBVU0VSRkFVTFRGRFxcbi0tXFxubW0vS2NvbmZpZy0xNDA4LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA5OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDEwLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTctXFxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTktXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjMtXFxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDI1LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQzMi1cXG5tbS9LY29uZmlnOjE0MzM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDM0LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NDYuNDAxMzg1NzIyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzk4MDE3NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGNoLiBGaXJzdCwgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBsb29rIGxpa2UgZ29vZCBmbGFncyB0byBlbmFibGUg4oCTIHRoZXkncmUga2V5IHRvIHRoZSBuZXcgTFJVIGltcGxlbWVudGF0aW9uLiBOb3csIGxldCdzIGV4YW1pbmUgdGhlIGNvZGUuIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgaGFuZGxpbmcgdGhlIGxlZ2FjeSBMUlUsIHRoZSBwYXRjaCBtb2RpZmllcyBib3RoIHRoZSBsZWdhY3kgTFJVIGFuZCB0aGUgTUdMUlUuIFNwZWNpZmljYWxseSwgdGhlIGxlZ2FjeSBMUlUgdG91Y2hlcyBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAsIHdoaWxlIE1HTFJVIHVzZXMgYGV2aWN0X2ZvbGlvc2AuIEkgc2hvdWxkIGJlIHRlc3RpbmcgYm90aC4gV2UgY2FuIGp1c3Qgc3BlY2lmeSBgTFJVX0dFTmAsIGFuZCB0aGUgc3lzdGVtIHdpbGwgaGFuZGxlIGBMUlVfR0VOX0VOQUJMRURgLlxuXG5UaGUgaW5pdGlhbCBwbGFuIGlzIHRvIGVuYWJsZSBgTFJVX0dFTmAgc28gdGhhdCB0aGUgZmVhdHVyZSBpcyBjb21waWxlZCBpbi4gYExSVV9HRU5fRU5BQkxFRGAgbWlnaHQgYmUgZmluZSB0byBlbmFibGUgdG9vLiBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gaGF2ZSBsZWdhY3kgTFJVIHRlc3RlZCBtb3JlLiBCdXQgaXQncyBmaW5lLCBzeXprYWxsZXIgY2FuIHRvZ2dsZSBgTFJVX0dFTl9FTkFCTEVEYCBpZiBpdCBrbm93cyBob3csIG9yIHdlIGNhbiBqdXN0IHByb3ZpZGUgYExSVV9HRU5gIGFuZCBsZXQgdGhlIGRlZmF1bHQgYmUgd2hhdGV2ZXIuIElmIHdlIGRvbid0IHNwZWNpZnkgYExSVV9HRU5fRU5BQkxFRGAsIGl0IG1pZ2h0IGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIHRlc3RzIGxlZ2FjeSBMUlUuIElmIHdlIHNwZWNpZnkgaXQsIGl0IHRlc3RzIE1HTFJVLiBTbyBpdCdzIGJlc3QgdG8gZW5hYmxlIGBMUlVfR0VOYCBpbiB0aGUgY29uZmlnLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25maWd1cmF0aW9ucyBJJ2xsIHVzZSBhcmU6XG4qICAgYE1FTUNHYFxuKiAgIGBNRU1DR19WMWBcbiogICBgTFJVX0dFTmBcblxuSSd2ZSBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgYE1FTUNHX1YxYCBpcyBwcmVzZW50IGluIGBpbml0L0tjb25maWdgLlxuXG5Ob3csIGxldCdzIHJldmlldyB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZy4gSSd2ZSBnb3QgdG8gY292ZXIgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNoYW5nZWQgZnVuY3Rpb25zLCBzbyBJJ20gbG9va2luZyBhdDpcbiogICBgdHJ5X3RvX2ZyZWVfcGFnZXNgXG4qICAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgXG4qICAgYHdha2V1cF9rc3dhcGRgXG4qICAgYHdvcmtpbmdzZXRfcmVmYXVsdGBcblxuQXJlIHRoZXJlIGFueSBvdGhlciBlbnRyeSBwb2ludHMgZm9yIE1HTFJVPyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbm9kZWAuIGB0cnlfdG9fZnJlZV9wYWdlc2AgY292ZXJzIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZXJlLlxuXG5JJ20gbG9va2luZyBhdCBgcGFnZW91dGAuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGBzaHJpbmtfZm9saW9fbGlzdGAuIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLCBzbyBJIHRoaW5rIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCB3aWxsIGNvdmVyIGl0LlxuXG5JIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlc2UuXG4qICAgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgY2FsbGVkIGJ5IGBwcmVwYXJlX3NjYW5fY29udHJvbGAuXG4qICAgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGNhbGxlZCBieSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCB3aGVuIG1lbWNnIGlzIGRpc2FibGVkLlxuKiAgIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC92bXN0YXQuaGAuXG5cblRoZSBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBJIGNhdGVnb3JpemUgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAuXG5cbkkndmUgZGV0ZXJtaW5lZCB0aGUgZmluYWwgbGlzdCBvZiBGb2N1cyBTeW1ib2xzOlxuXG4qICAgYHRyeV90b19mcmVlX3BhZ2VzYFxuKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYFxuKiAgIGB3YWtldXBfa3N3YXBkYFxuKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRgXG5cbkZpbmFsIENvbmZpZ3M6XG5cbiogICBgTUVNQ0dgXG4qICAgYE1FTUNHX1YxYFxuKiAgIGBMUlVfR0VOYFxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYE1FTUNHX1YxYCBpcyBjb3JyZWN0LiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYExSVV9HRU5gIGlzIGNvcnJlY3QuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNvcnJlY3QuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY29ycmVjdC4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGB3YWtldXBfa3N3YXBkYCBpcyBjb3JyZWN0LiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgY29ycmVjdC4gQWxsIGNoZWNrcyBhcmUgZ3JlZW4uIE5vdyBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NDMsIk91dHB1dFRva2VucyI6MTUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjU5Ljc5OTQwNjEyMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDAyNTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIixcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwid2FrZXVwX2tzd2FwZFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIExSVSByZWNsYWltIGxvZ2ljIGFuZCBjb3N0IGNhbGN1bGF0aW9uIGZvciBib3RoIGxlZ2FjeSBMUlUgYW5kIE1HTFJVLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBjb3VudGVycyBmb3IgTFJVIHN0YXRzIGFuZCBjaGFuZ2VzIGhvdyBzY2FuIGJhbGFuY2UgaXMgZGV0ZXJtaW5lZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 08:18:46 +0000 UTC FinishedAt: 2026-07-28 08:51:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "62cc90241548d5570ee68e01aaba6506964e9811", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "62cc90241548d5570ee68e01aaba6506964e9811", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "LRU_GEN" ], "series_id": "a0e68350-67b9-49cf-a254-2bb599f72b94" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "try_to_free_mem_cgroup_pages", "wakeup_kswapd", "workingset_refault" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3dha2V1cF9rc3dhcGQmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzIzYmQzMDhkNGE3NzZkNTYwMTJiOGMyYzhmZmYxZTNmZGUyYTJhMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDA4OjQ5OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjJmLi43YWU2N2FjMjM1MTA3NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk0Nyw2ICYjNDM7OTQ3LDggQEAgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcbiBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gXG5AQCAtMTM5OSw2ICYjNDM7MTQwMSwxMiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0XHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uODUzMDNjNTg2N2M4NGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMzIzLDYgJiM0MzszMjMsOCBAQCBlbnVtIG5vZGVfc3RhdF9pdGVtIHtcbiBcdFBHU0NBTl9QUk9BQ1RJVkUsXG4gXHRQR1NDQU5fQU5PTixcbiBcdFBHU0NBTl9GSUxFLFxuJiM0MztcdFBHUk9UQVRFX0FOT04sXG4mIzQzO1x0UEdST1RBVEVfRklMRSxcbiBcdFBHUkVGSUxMLFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXHROUl9IVUdFVExCLFxuQEAgLTc1NSw2ICYjNDM7NzU3LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG4mIzQzO3N0cnVjdCBscnVfY29zdCB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRjb3VudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGxhc3Rfcm90YXRlZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGxhc3RfaW87XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBscnV2ZWMge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0c1tOUl9MUlVfTElTVFNdO1xuIFx0LyogcGVyIGxydXZlYyBscnVfbG9jayBmb3IgbWVtY2cgKi9cbkBAIC03NjMsOSAmIzQzOzc3MSwxMiBAQCBzdHJ1Y3QgbHJ1dmVjIHtcbiBcdCAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtXG4gXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXG4gXHQgKiBpbmNyZWFzZXMsIHRoZSByZWNsYWltIHNjYW4gYmFsYW5jZSB0aXBzIHRvd2FyZCB0aGUgb3RoZXIuXG4mIzQzO1x0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xuJiM0MztcdCAqIHNlcmlhbGlzZXMgdGhhdCB1cGRhdGUuXG4gXHQgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0XHRhbm9uX2Nvc3Q7XG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0ZmlsZV9jb3N0O1xuJiM0MztcdHN0cnVjdCBscnVfY29zdFx0XHRcdGNvc3RbQU5PTl9BTkRfRklMRV07XG4mIzQzO1x0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0XHRjb3N0X2xvY2s7XG4gXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXG4gXHRhdG9taWNfbG9uZ190XHRcdFx0bm9ucmVzaWRlbnRfYWdlO1xuIFx0LyogUmVmYXVsdHMgYXQgdGhlIHRpbWUgb2YgbGFzdCByZWNsYWltIGN5Y2xlICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDkgJiM0MzszMDksNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gXG4gLyogbGludXgvbW0vc3dhcC5jICovXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4tXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuQEAgLTIwLDcgJiM0MzsyMCw2IEBAIHN0cnVjdCByZWNsYWltX3N0YXQge1xuIFx0dW5zaWduZWQgbnJfY29uZ2VzdGVkO1xuIFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xuIFx0dW5zaWduZWQgbnJfaW1tZWRpYXRlO1xuLVx0dW5zaWduZWQgbnJfcGFnZW91dDtcbiBcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xuIFx0dW5zaWduZWQgbnJfcmVmX2tlZXA7XG4gXHR1bnNpZ25lZCBucl91bm1hcF9mYWlsO1xuQEAgLTE5NCw2ICYjNDM7MTkzLDE5IEBAIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0XG4mIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbiYjNDM7ICogUmV0dXJucyB0aGUgcmF3IHdyYXBwaW5nIHZhbHVlIHNvIHRoYXQgdW5zaWduZWQgbW9kdWxhciBzdWJ0cmFjdGlvbiBzdGF5c1xuJiM0MzsgKiBjb3JyZWN0IGFjcm9zcyBhIHNpZ25lZC1sb25nIG92ZXJmbG93IChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCkgdGhhdCB0aGVcbiYjNDM7ICogY2xhbXAgaW4gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzXG4mIzQzOyAqIGRlbHRhLiBEbyBOT1QgdXNlIGZvciBub24tbW9ub3RvbmljIHBhZ2UtY291bnQgcmVhZHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1fbm9kZV9zdGF0W2l0ZW1dKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4ge1xuIFx0Vk1fV0FSTl9PTl9PTkNFKHZtc3RhdF9pdGVtX2luX2J5dGVzKGl0ZW0pKTtcbkBAIC0yNTksMTEgJiM0MzsyNzEsMTQgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0ICAgZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcbiYjNDM7ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG4gZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTtcbiAjZWxzZVxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhpdGVtKVxuJiM0MzsjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoaXRlbSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uMDkxYmM5ZmZlZTQ0YTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTE5ODgsOCAmIzQzOzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuIFx0XHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcbiBcdFx0XHRteiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuIFxuLVx0XHRcdGFub25fY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmFub25fY29zdDtcbi1cdFx0XHRmaWxlX2Nvc3QgJiM0Mzs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4mIzQzO1x0XHRcdGFub25fY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcbiYjNDM7XHRcdFx0ZmlsZV9jb3N0ICYjNDM7PSBtei1cdTAwM2VscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50O1xuIFx0XHR9XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0O2Fub25fY29zdCAlbHVcXG5cJiMzNDssIGFub25fY29zdCk7XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0O2ZpbGVfY29zdCAlbHVcXG5cJiMzNDssIGZpbGVfY29zdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uY2U5YzRmYjkyNDcwYjYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5Myw2ICYjNDM7MzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbiBcdE5SX1NITUVNX1RIUFMsXG4gXHROUl9GSUxFX1RIUFMsXG4gXHROUl9BTk9OX1RIUFMsXG4mIzQzO1x0TlJfVk1TQ0FOX1dSSVRFLFxuIFx0TlJfVk1BTExPQyxcbiBcdE5SX0tFUk5FTF9TVEFDS19LQixcbiBcdE5SX1BBR0VUQUJMRSxcbkBAIC00MTksNiAmIzQzOzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbiYjNDM7XHRQR1JPVEFURV9BTk9OLFxuJiM0MztcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbkBAIC01MDIsNiAmIzQzOzUwNSw0MiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcbiYjNDM7ICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXG4mIzQzOyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xuJiM0MzsgKiB0aGF0IHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d29cbiYjNDM7ICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xuJiM0MzsgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxuJiM0MzsgKiBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91cyBkZWx0YS5cbiYjNDM7ICpcbiYjNDM7ICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXG4mIzQzOyAqIHJlYWRpbmcgZnJvbSBwZXItQ1BVIGRlbHRhIHNrZXcgbXVzdCBwcmVzZW50IGFzIHplcm8uXG4mIzQzOyAqXG4mIzQzOyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHNvbWVcbiYjNDM7ICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyBhcmUgc3RvcmVkIGluXG4mIzQzOyAqIGVudW0gbm9kZV9zdGF0X2l0ZW0uXG4mIzQzOyAqL1xuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuJiM0MztcdFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4mIzQzO1xuJiM0MztcdGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuJiM0MztcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVbaV0pO1xuJiM0Mzt9XG4mIzQzO1xuIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmNcbmluZGV4IDBjOGYxODFkOWQ1MDA2Li4xNzEzOWRiNGQyOTFjZSAxMDA2NDRcbi0tLSBhL21tL21tem9uZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXpvbmUuY1xuQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bHJ1dmVjLVx1MDAzZWNvc3RfbG9jayk7XG4gXHR6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpO1xuIFxuIFx0Zm9yX2VhY2hfbHJ1KGxydSlcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmNcbmluZGV4IDU4OGY1MGQ4ZjFhOGM5Li43NGIyODE3NzhjYmM5MiAxMDA2NDRcbi0tLSBhL21tL3N3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5jXG5AQCAtMjcyLDczICYjNDM7MjcyLDYgQEAgdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGZvbGlvX2JhdGNoX2FkZF9hbmRfbW92ZShmb2xpbywgbHJ1X21vdmVfdGFpbCk7XG4gfVxuIFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKVxuLVx0XHRfX3JlbGVhc2VzKGxydXZlYy1cdTAwM2VscnVfbG9jaylcbi1cdFx0X19yZWxlYXNlcyhyY3UpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBjb3N0O1xuLVxuLVx0Lypcbi1cdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFVcbi1cdCAqIHRpbWUgb24gcm90YXRpb25zLiBUaGlzIGRvZXNuJiMzOTt0IGF0dGVtcHQgdG8gbWFrZSBhIHByZWNpc2Vcbi1cdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxuLVx0ICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5XG4tXHQgKiBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhbiBiYWxhbmNlIGZvciBDUFUgd29yay5cbi1cdCAqL1xuLVx0Y29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCAmIzQzOyBucl9yb3RhdGVkO1xuLVx0aWYgKCFjb3N0KSB7XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0Zm9yICg7Oykge1xuLVx0XHR1bnNpZ25lZCBsb25nIGxydXNpemU7XG4tXG4tXHRcdC8qIFJlY29yZCBjb3N0IGV2ZW50ICovXG4tXHRcdGlmIChmaWxlKVxuLVx0XHRcdGxydXZlYy1cdTAwM2VmaWxlX2Nvc3QgJiM0Mzs9IGNvc3Q7XG4tXHRcdGVsc2Vcbi1cdFx0XHRscnV2ZWMtXHUwMDNlYW5vbl9jb3N0ICYjNDM7PSBjb3N0O1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBEZWNheSBwcmV2aW91cyBldmVudHNcbi1cdFx0ICpcbi1cdFx0ICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkXG4tXHRcdCAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZ1xuLVx0XHQgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0c1xuLVx0XHQgKiBtb3JlIHRoYW4gb2xkIG9uZXMuXG4tXHRcdCAqL1xuLVx0XHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuLVx0XHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0Mztcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0Mztcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuLVxuLVx0XHRpZiAobHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAmIzQzOyBscnV2ZWMtXHUwMDNlYW5vbl9jb3N0IFx1MDAzZSBscnVzaXplIC8gNCkge1xuLVx0XHRcdGxydXZlYy1cdTAwM2VmaWxlX2Nvc3QgLz0gMjtcbi1cdFx0XHRscnV2ZWMtXHUwMDNlYW5vbl9jb3N0IC89IDI7XG4tXHRcdH1cbi1cbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRcdGxydXZlYyA9IHBhcmVudF9scnV2ZWMobHJ1dmVjKTtcbi1cdFx0aWYgKCFscnV2ZWMpIHtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHR9XG4tfVxuLVxuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuLVxuLVx0bHJ1dmVjID0gZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGZvbGlvKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSxcbi1cdFx0XHRcdGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgMCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGxydV9hY3RpdmF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbkBAIC0xMTY0LDggJiM0MzsxMDk3LDYgQEAgdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnRcbiBcbiBcdGNoaWxkX2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEobmlkKSk7XG4gXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWFub25fY29zdCAmIzQzOz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHBhcmVudF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICYjNDM7PSBjaGlsZF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0O1xuIFxuIFx0Zm9yX2VhY2hfbHJ1KGxydSlcbiBcdFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAxYTE0MmM1ODcwMGQwMC4uNGQ4YWIxNGUzYmU0NDMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC02NjgsNyAmIzQzOzY2OCw3IEBAIHN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHR0cmFjZV9tbV92bXNjYW5fd3JpdGVfZm9saW8oZm9saW8pO1xuLVx0bm9kZV9zdGF0X2FkZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFKTtcbiYjNDM7XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiBcdHJldHVybiBQQUdFX1NVQ0NFU1M7XG4gfVxuIFxuQEAgLTE0MTMsOCAmIzQzOzE0MTMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHRcdHNjLVx1MDAzZW5yX3NjYW5uZWQgLT0gKG5yX3BhZ2VzIC0gMSk7XG4gXHRcdFx0XHRcdG5yX3BhZ2VzID0gMTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdHN0YXQtXHUwMDNlbnJfcGFnZW91dCAmIzQzOz0gbnJfcGFnZXM7XG4tXG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGtlZXA7XG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG5AQCAtMjAzOCwxMCAmIzQzOzIwMzYsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IGZpbGUsIG5yX3JlY2xhaW1lZCk7XG4mIzQzO1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbiYjNDM7XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsXG4mIzQzO1x0XHRcdFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsXG4tXHRcdFx0XHRcdG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbiBcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbkBAIC0yMTQ3LDkgJiM0MzsyMTQ1LDkgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdGNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xuIFx0Y291bnRfbWVtY2dfZXZlbnRzKGxydXZlY19tZW1jZyhscnV2ZWMpLCBQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xuIFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pO1xuJiM0MztcdGlmIChucl9yb3RhdGVkKVxuJiM0MztcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSwgbnJfcm90YXRlZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIDAsIG5yX3JvdGF0ZWQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSxcbiBcdFx0XHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4gfVxuQEAgLTIyODIsOCAmIzQzOzIyODAsMTAgQEAgZW51bSBzY2FuX2JhbGFuY2Uge1xuIFxuIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmlsZTtcbiYjNDM7XHRzdHJ1Y3QgbHJ1X2Nvc3QgKmFub25fY29zdCwgKmZpbGVfY29zdDtcbiBcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmlsZTtcbiBcbiBcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG4gXHRcdHJldHVybjtcbkBAIC0yMjk5LDExICYjNDM7MjI5OSw2OSBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcbiBcdC8qXG4gXHQgKiBEZXRlcm1pbmUgdGhlIHNjYW4gYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBjb3N0IG1vZGVsIGlzIGJhc2VkIG9uIHJvdGF0aW9ucywgcmVmYXVsdHMgYW5kXG4mIzQzO1x0ICogcmVjbGFpbS1kcml2ZW4gd3JpdGVzIChhbm9uIG9ubHkpIG9uIGVhY2ggc2lkZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZXNlIGV2ZW50IGNvdW50ZXJzIGFyZSBtb25vdG9uaWMsIHNvIGVhY2ggcmVjbGFpbSBjeWNsZVxuJiM0MztcdCAqIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCBzY2FuIGlzIGV4dHJhY3RlZCBhbmQgaW5jb3Jwb3JhdGVkXG4mIzQzO1x0ICogaW50byBhIGRlY2F5aW5nIGF2ZXJhZ2UuIFRoaXMgZW5zdXJlcyBjdXJyZW5jeSwgYXMgd29ya2xvYWRzXG4mIzQzO1x0ICogY2hhbmdlIG92ZXIgdGltZSwgYW5kIGF2b2lkcyBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb25zLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVXNlIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYygpIHNvIHVuc2lnbmVkIHN1YnRyYWN0aW9uXG4mIzQzO1x0ICogeWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zcyBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgb2ZcbiYjNDM7XHQgKiB0aGUgdW5kZXJseWluZyBjb3VudGVyIChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCB0aGF0IHRoZVxuJiM0MztcdCAqIGNsYW1wIGluIGxydXZlY19wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2VcbiYjNDM7XHQgKiBzcHVyaW91cyBkZWx0YSkuXG4gXHQgKi9cbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHNjLVx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0O1xuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfbG9jayk7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGYgPSAwOyBmIFx1MDAzYz0gMTsgZiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBscnVfY29zdCAqY29zdCA9IFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdFtmXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcm90YXRlZCwgaW8sIG5yX3JvdGF0ZWQsIG5yX2lvO1xuJiM0MztcbiYjNDM7XHRcdHJvdGF0ZWQgPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgUEdST1RBVEVfQU5PTiAmIzQzOyBmKTtcbiYjNDM7XHRcdGlvID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHRcdCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmKTtcbiYjNDM7XHRcdGlmIChmID09IFdPUktJTkdTRVRfQU5PTilcbiYjNDM7XHRcdFx0aW8gJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyh0YXJnZXRfbHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgTlJfVk1TQ0FOX1dSSVRFKTtcbiYjNDM7XG4mIzQzO1x0XHRucl9yb3RhdGVkID0gcm90YXRlZCAtIGNvc3QtXHUwMDNlbGFzdF9yb3RhdGVkO1xuJiM0MztcdFx0bnJfaW8gPSBpbyAtIGNvc3QtXHUwMDNlbGFzdF9pbztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVmbGVjdCB0aGUgcmVsYXRpdmUgY29zdCBvZiBpbmN1cnJpbmcgSU8gYW5kIHNwZW5kaW5nXG4mIzQzO1x0XHQgKiBDUFUgdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBtYWtlIGFcbiYjNDM7XHRcdCAqIHByZWNpc2UgY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dFxuJiM0MztcdFx0ICogY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmVcbiYjNDM7XHRcdCAqIG92ZXJ3aGVsbWluZ2x5IGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuXG4mIzQzO1x0XHQgKiBiYWxhbmNlIGZvciBDUFUgd29yay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y29zdC1cdTAwM2Vjb3VudCAmIzQzOz0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICYjNDM7IG5yX3JvdGF0ZWQ7XG4mIzQzO1xuJiM0MztcdFx0Y29zdC1cdTAwM2VsYXN0X3JvdGF0ZWQgPSByb3RhdGVkO1xuJiM0MztcdFx0Y29zdC1cdTAwM2VsYXN0X2lvID0gaW87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhbm9uX2Nvc3QgPSBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RbV09SS0lOR1NFVF9BTk9OXTtcbiYjNDM7XHRmaWxlX2Nvc3QgPSBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RbV09SS0lOR1NFVF9GSUxFXTtcbiYjNDM7XG4mIzQzO1x0bHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICYjNDM7XG4mIzQzO1x0XHQgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSAmIzQzO1xuJiM0MztcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhbm9uX2Nvc3QtXHUwMDNlY291bnQgJiM0MzsgZmlsZV9jb3N0LVx1MDAzZWNvdW50IFx1MDAzZSBscnVzaXplIC8gNCkge1xuJiM0MztcdFx0YW5vbl9jb3N0LVx1MDAzZWNvdW50IC89IDI7XG4mIzQzO1x0XHRmaWxlX2Nvc3QtXHUwMDNlY291bnQgLz0gMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjLVx1MDAzZWFub25fY29zdCA9IGFub25fY29zdC1cdTAwM2Vjb3VudDtcbiYjNDM7XHRzYy1cdTAwM2VmaWxlX2Nvc3QgPSBmaWxlX2Nvc3QtXHUwMDNlY291bnQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbiBcbiBcdC8qXG4gXHQgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub25cbkBAIC00ODA5LDcgJiM0Mzs0ODY3LDggQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xuIFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbi1cdGludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbiYjNDM7XHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7XG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuQEAgLTQ4MjEsNiAmIzQzOzQ4ODAsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuJiM0MztcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG4gXG4gXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuIFx0aWYgKHNjYW5uZWQpXG5AQCAtNDgzMyw2ICYjNDM7NDg5Myw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIHJldHJ5OlxuIFx0cmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0LCBmYWxzZSwgbWVtY2cpO1xuIFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG4mIzQzO1x0dG90YWxfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG4gXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbiBcdGlmIChpc29sYXRlZClcbiBcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuQEAgLTQ4ODQsNiAmIzQzOzQ5NDUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4mIzQzO1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLFxuJiM0MztcdFx0XHRcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4mIzQzO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi44N2Q0YTY3ODEzNjc2NyAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuY1xuQEAgLTEwMjQsNiAmIzQzOzEwMjQsMTcgQEAgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcbiBcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIGl0ZW0pO1xuIH1cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE5vbi1jbGFtcGluZyB2YXJpYW50IG9mIG5vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcbiYjNDM7ICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxuJiM0MzsgKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS5cbiYjNDM7ICovXG4mIzQzO3Vuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuJiM0MztcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXHUwMDI2cGdkYXQtXHUwMDNldm1fc3RhdFtpdGVtXSk7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAvKlxuQEAgLTEyODksNiAmIzQzOzEzMDAsOCBAQCBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbiBcdFtJKFBHU0NBTl9QUk9BQ1RJVkUpXVx0XHRcdD0gXCYjMzQ7cGdzY2FuX3Byb2FjdGl2ZVwmIzM0OyxcbiBcdFtJKFBHU0NBTl9BTk9OKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9hbm9uXCYjMzQ7LFxuIFx0W0koUEdTQ0FOX0ZJTEUpXVx0XHRcdD0gXCYjMzQ7cGdzY2FuX2ZpbGVcJiMzNDssXG4mIzQzO1x0W0koUEdST1RBVEVfQU5PTildXHRcdFx0PSBcJiMzNDtwZ3JvdGF0ZV9hbm9uXCYjMzQ7LFxuJiM0MztcdFtJKFBHUk9UQVRFX0ZJTEUpXVx0XHRcdD0gXCYjMzQ7cGdyb3RhdGVfZmlsZVwmIzM0OyxcbiBcdFtJKFBHUkVGSUxMKV1cdFx0XHRcdD0gXCYjMzQ7cGdyZWZpbGxcJiMzNDssXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdFtJKE5SX0hVR0VUTEIpXVx0XHRcdFx0PSBcJiMzNDtucl9odWdldGxiXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01ODQsMTEgJiM0Mzs1ODQsNiBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHQvKiBGb2xpbyB3YXMgYWN0aXZlIHByaW9yIHRvIGV2aWN0aW9uICovXG4gXHRpZiAod29ya2luZ3NldCkge1xuIFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4tXHRcdC8qXG4tXHRcdCAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnNcbi1cdFx0ICogcHV0YmFja1xuLVx0XHQgKi9cbi1cdFx0bHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTtcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICYjNDM7IGZpbGUsIG5yKTtcbiBcdH1cbiBvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3dha2V1cF9rc3dhcGQmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzIzYmQzMDhkNGE3NzZkNTYwMTJiOGMyYzhmZmYxZTNmZGUyYTJhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDA4OjQ5OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA4MTcwYmI4MDY2YTIyZi4uN2FlNjdhYzIzNTEwNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC05NDcsNiAmIzQzOzk0Nyw4IEBAIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSk7CiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTsKIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTsKIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzOwkJCQkJICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7CiAKQEAgLTEzOTksNiAmIzQzOzE0MDEsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkJCWVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkJCSAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi44NTMwM2M1ODY3Yzg0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0zMjMsNiAmIzQzOzMyMyw4IEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0gewogCVBHU0NBTl9QUk9BQ1RJVkUsCiAJUEdTQ0FOX0FOT04sCiAJUEdTQ0FOX0ZJTEUsCiYjNDM7CVBHUk9UQVRFX0FOT04sCiYjNDM7CVBHUk9UQVRFX0ZJTEUsCiAJUEdSRUZJTEwsCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCU5SX0hVR0VUTEIsCkBAIC03NTUsNiAmIzQzOzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LAogCiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIAomIzQzO3N0cnVjdCBscnVfY29zdCB7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWNvdW50OwomIzQzOwl1bnNpZ25lZCBsb25nCQlsYXN0X3JvdGF0ZWQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWxhc3RfaW87CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBscnV2ZWMgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3RzW05SX0xSVV9MSVNUU107CiAJLyogcGVyIGxydXZlYyBscnVfbG9jayBmb3IgbWVtY2cgKi8KQEAgLTc2Myw5ICYjNDM7NzcxLDEyIEBAIHN0cnVjdCBscnV2ZWMgewogCSAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtCiAJICogb3ZlciB0aGUgb3RoZXIuIEFzIHRoZSBvYnNlcnZlZCBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVQogCSAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci4KJiM0MzsJICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9jawomIzQzOwkgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLgogCSAqLwotCXVuc2lnbmVkIGxvbmcJCQlhbm9uX2Nvc3Q7Ci0JdW5zaWduZWQgbG9uZwkJCWZpbGVfY29zdDsKJiM0MzsJc3RydWN0IGxydV9jb3N0CQkJY29zdFtBTk9OX0FORF9GSUxFXTsKJiM0MzsJLyogUHJvdGVjdHMgY29zdFtdLiAqLwomIzQzOwlzcGlubG9ja190CQkJY29zdF9sb2NrOwogCS8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi8KIAlhdG9taWNfbG9uZ190CQkJbm9ucmVzaWRlbnRfYWdlOwogCS8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zMDksOSAmIzQzOzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIAogCiAvKiBsaW51eC9tbS9zd2FwLmMgKi8KLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLAotCQl1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTsKLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTsKIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7CiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDNjOWMyNjZjZjc4MmFkLi41YjMxZDhlN2FlNDA1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC0yMCw3ICYjNDM7MjAsNiBAQCBzdHJ1Y3QgcmVjbGFpbV9zdGF0IHsKIAl1bnNpZ25lZCBucl9jb25nZXN0ZWQ7CiAJdW5zaWduZWQgbnJfd3JpdGViYWNrOwogCXVuc2lnbmVkIG5yX2ltbWVkaWF0ZTsKLQl1bnNpZ25lZCBucl9wYWdlb3V0OwogCXVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdOwogCXVuc2lnbmVkIG5yX3JlZl9rZWVwOwogCXVuc2lnbmVkIG5yX3VubWFwX2ZhaWw7CkBAIC0xOTQsNiAmIzQzOzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQogCXJldHVybiB4OwogfQogCiYjNDM7LyoKJiM0MzsgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdAomIzQzOyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy4KJiM0MzsgKiBSZXR1cm5zIHRoZSByYXcgd3JhcHBpbmcgdmFsdWUgc28gdGhhdCB1bnNpZ25lZCBtb2R1bGFyIHN1YnRyYWN0aW9uIHN0YXlzCiYjNDM7ICogY29ycmVjdCBhY3Jvc3MgYSBzaWduZWQtbG9uZyBvdmVyZmxvdyAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQpIHRoYXQgdGhlCiYjNDM7ICogY2xhbXAgaW4gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzCiYjNDM7ICogZGVsdGEuIERvIE5PVCB1c2UgZm9yIG5vbi1tb25vdG9uaWMgcGFnZS1jb3VudCByZWFkcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoJmFtcDt2bV9ub2RlX3N0YXRbaXRlbV0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSkKIHsKIAlWTV9XQVJOX09OX09OQ0Uodm1zdGF0X2l0ZW1faW5fYnl0ZXMoaXRlbSkpOwpAQCAtMjU5LDExICYjNDM7MjcxLDE0IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCQkJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCQkJCQkgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pOwomIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKJiM0MzsJCQkJCSAgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pOwogZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHN1bV96b25lX25vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKGl0ZW0pCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pCiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGl0ZW0pCiYjNDM7I2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKG5vZGUsIGl0ZW0pIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGl0ZW0pCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDc2NTA2OTIxMTU2NzhjLi4wOTFiYzlmZmVlNDRhMCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC12MS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuYwpAQCAtMTk4OCw4ICYjNDM7MTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpCiAJCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewogCQkJbXogPSBtZW1jZy0mZ3Q7bm9kZWluZm9bcGdkYXQtJmd0O25vZGVfaWRdOwogCi0JCQlhbm9uX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuYW5vbl9jb3N0OwotCQkJZmlsZV9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmZpbGVfY29zdDsKJiM0MzsJCQlhbm9uX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0FOT05dLmNvdW50OwomIzQzOwkJCWZpbGVfY29zdCAmIzQzOz0gbXotJmd0O2xydXZlYy5jb3N0W1dPUktJTkdTRVRfRklMRV0uY291bnQ7CiAJCX0KIAkJc2VxX2J1Zl9wcmludGYocywgJiMzNDthbm9uX2Nvc3QgJWx1XG4mIzM0OywgYW5vbl9jb3N0KTsKIAkJc2VxX2J1Zl9wcmludGYocywgJiMzNDtmaWxlX2Nvc3QgJWx1XG4mIzM0OywgZmlsZV9jb3N0KTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2ZGM0ODg4YTkwZjNmZC4uY2U5YzRmYjkyNDcwYjYgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM5Myw2ICYjNDM7MzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHsKIAlOUl9TSE1FTV9USFBTLAogCU5SX0ZJTEVfVEhQUywKIAlOUl9BTk9OX1RIUFMsCiYjNDM7CU5SX1ZNU0NBTl9XUklURSwKIAlOUl9WTUFMTE9DLAogCU5SX0tFUk5FTF9TVEFDS19LQiwKIAlOUl9QQUdFVEFCTEUsCkBAIC00MTksNiAmIzQzOzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7CiAJUEdTQ0FOX1BST0FDVElWRSwKIAlQR1NDQU5fQU5PTiwKIAlQR1NDQU5fRklMRSwKJiM0MzsJUEdST1RBVEVfQU5PTiwKJiM0MzsJUEdST1RBVEVfRklMRSwKIAlQR1JFRklMTCwKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJTlJfSFVHRVRMQiwKQEAgLTUwMiw2ICYjNDM7NTA1LDQyIEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIAlyZXR1cm4geDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZwomIzQzOyAqIEBscnV2ZWM6IHRoZSBMUlUgdmVjdG9yIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSByYXcgc3RhdGVbaWR4XSB2YWx1ZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcsIHNraXBwaW5nIHRoZQomIzQzOyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVycwomIzQzOyAqIHRoYXQgc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3bwomIzQzOyAqIHNhbXBsZXM6IHVuc2lnbmVkIG1vZHVsYXIgYXJpdGhtZXRpYyB0aGVuIHlpZWxkcyB0aGUgY29ycmVjdCBkZWx0YSBhY3Jvc3MKJiM0MzsgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZAomIzQzOyAqIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlIHNwdXJpb3VzIGRlbHRhLgomIzQzOyAqCiYjNDM7ICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlCiYjNDM7ICogcmVhZGluZyBmcm9tIHBlci1DUFUgZGVsdGEgc2tldyBtdXN0IHByZXNlbnQgYXMgemVyby4KJiM0MzsgKgomIzQzOyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHNvbWUKJiM0MzsgKiBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGV2ZW50IGNvdW50ZXJzIGFyZSBzdG9yZWQgaW4KJiM0MzsgKiBlbnVtIG5vZGVfc3RhdF9pdGVtLgomIzQzOyAqLwomIzQzO3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKJiM0MzsJCQkJCSAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQomIzQzOwkJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7CiYjNDM7CiYjNDM7CWkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpOwomIzQzOwlpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgaWR4KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwomIzQzOwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpUkVBRF9PTkNFKHBuLSZndDtscnV2ZWNfc3RhdHMtJmd0O3N0YXRlW2ldKTsKJiM0Mzt9CiYjNDM7CiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmMKaW5kZXggMGM4ZjE4MWQ5ZDUwMDYuLjE3MTM5ZGI0ZDI5MWNlIDEwMDY0NAotLS0gYS9tbS9tbXpvbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXpvbmUuYwpAQCAtNzgsNiAmIzQzOzc4LDcgQEAgdm9pZCBscnV2ZWNfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAKIAltZW1zZXQobHJ1dmVjLCAwLCBzaXplb2Yoc3RydWN0IGxydXZlYykpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7bHJ1dmVjLSZndDtjb3N0X2xvY2spOwogCXpzd2FwX2xydXZlY19zdGF0ZV9pbml0KGxydXZlYyk7CiAKIAlmb3JfZWFjaF9scnUobHJ1KQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IDU4OGY1MGQ4ZjFhOGM5Li43NGIyODE3NzhjYmM5MiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuYwpAQCAtMjcyLDczICYjNDM7MjcyLDYgQEAgdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbykKIAlmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpOwogfQogCi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSwKLQkJdW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZCkKLQkJX19yZWxlYXNlcyhscnV2ZWMtJmd0O2xydV9sb2NrKQotCQlfX3JlbGVhc2VzKHJjdSkKLXsKLQl1bnNpZ25lZCBsb25nIGNvc3Q7Ci0KLQkvKgotCSAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFUKLQkgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlCi0JICogY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dCBjb21wYXJhYmxlCi0JICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5Ci0JICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuCi0JICovCi0JY29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCAmIzQzOyBucl9yb3RhdGVkOwotCWlmICghY29zdCkgewotCQlzcGluX3VubG9ja19pcnEoJmFtcDtscnV2ZWMtJmd0O2xydV9sb2NrKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKDs7KSB7Ci0JCXVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTsKLQotCQkvKiBSZWNvcmQgY29zdCBldmVudCAqLwotCQlpZiAoZmlsZSkKLQkJCWxydXZlYy0mZ3Q7ZmlsZV9jb3N0ICYjNDM7PSBjb3N0OwotCQllbHNlCi0JCQlscnV2ZWMtJmd0O2Fub25fY29zdCAmIzQzOz0gY29zdDsKLQotCQkvKgotCQkgKiBEZWNheSBwcmV2aW91cyBldmVudHMKLQkJICoKLQkJICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkCi0JCSAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZwotCQkgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0cwotCQkgKiBtb3JlIHRoYW4gb2xkIG9uZXMuCi0JCSAqLwotCQlscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzOwotCQkJICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzOwotCQkJICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICYjNDM7Ci0JCQkgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpOwotCi0JCWlmIChscnV2ZWMtJmd0O2ZpbGVfY29zdCAmIzQzOyBscnV2ZWMtJmd0O2Fub25fY29zdCAmZ3Q7IGxydXNpemUgLyA0KSB7Ci0JCQlscnV2ZWMtJmd0O2ZpbGVfY29zdCAvPSAyOwotCQkJbHJ1dmVjLSZndDthbm9uX2Nvc3QgLz0gMjsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwotCQlscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7Ci0JCWlmICghbHJ1dmVjKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXNwaW5fbG9ja19pcnEoJmFtcDtscnV2ZWMtJmd0O2xydV9sb2NrKTsKLQl9Ci19Ci0KLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0Jc3RydWN0IGxydXZlYyAqbHJ1dmVjOwotCi0JbHJ1dmVjID0gZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGZvbGlvKTsKLQlscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmb2xpb19pc19maWxlX2xydShmb2xpbyksCi0JCQkJZm9saW9fbnJfcGFnZXMoZm9saW8pLCAwKTsKLX0KLQogc3RhdGljIHZvaWQgbHJ1X2FjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtMTE2NCw4ICYjNDM7MTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50CiAKIAljaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpOwogCXBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTsKLQlwYXJlbnRfbHJ1dmVjLSZndDthbm9uX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy0mZ3Q7YW5vbl9jb3N0OwotCXBhcmVudF9scnV2ZWMtJmd0O2ZpbGVfY29zdCAmIzQzOz0gY2hpbGRfbHJ1dmVjLSZndDtmaWxlX2Nvc3Q7CiAKIAlmb3JfZWFjaF9scnUobHJ1KQogCQlscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAxYTE0MmM1ODcwMGQwMC4uNGQ4YWIxNGUzYmU0NDMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC02NjgsNyAmIzQzOzY2OCw3IEBAIHN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7CiAKIAl0cmFjZV9tbV92bXNjYW5fd3JpdGVfZm9saW8oZm9saW8pOwotCW5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSk7CiYjNDM7CWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCXJldHVybiBQQUdFX1NVQ0NFU1M7CiB9CiAKQEAgLTE0MTMsOCAmIzQzOzE0MTMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsCiAJCQkJCXNjLSZndDtucl9zY2FubmVkIC09IChucl9wYWdlcyAtIDEpOwogCQkJCQlucl9wYWdlcyA9IDE7CiAJCQkJfQotCQkJCXN0YXQtJmd0O25yX3BhZ2VvdXQgJiM0Mzs9IG5yX3BhZ2VzOwotCiAJCQkJaWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkKIAkJCQkJZ290byBrZWVwOwogCQkJCWlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkKQEAgLTIwMzgsMTAgJiM0MzsyMDM2LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAlpdGVtID0gUEdTVEVBTF9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyk7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyBmaWxlLCBucl9yZWNsYWltZWQpOwomIzQzOwlpZiAobnJfc2Nhbm5lZCAmZ3Q7IG5yX3JlY2xhaW1lZCkKJiM0MzsJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsCiYjNDM7CQkJCSBucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTsKIAotCWxydXZlY19sb2NrX2lycShscnV2ZWMpOwotCWxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIHN0YXQubnJfcGFnZW91dCwKLQkJCQkJbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7CiAJaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsICZhbXA7c3RhdCk7CiAJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtJmd0O25vZGVfaWQsCiAJCQlucl9zY2FubmVkLCBucl9yZWNsYWltZWQsICZhbXA7c3RhdCwgc2MtJmd0O3ByaW9yaXR5LCBmaWxlKTsKQEAgLTIxNDcsOSAmIzQzOzIxNDUsOSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCWNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpOwogCWNvdW50X21lbWNnX2V2ZW50cyhscnV2ZWNfbWVtY2cobHJ1dmVjKSwgUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTsKIAltb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIC1ucl90YWtlbik7CiYjNDM7CWlmIChucl9yb3RhdGVkKQomIzQzOwkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSwgbnJfcm90YXRlZCk7CiAKLQlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKLQlscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTsKIAl0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19hY3RpdmUocGdkYXQtJmd0O25vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSwKIAkJCW5yX2RlYWN0aXZhdGUsIG5yX3JvdGF0ZWQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7CiB9CkBAIC0yMjgyLDggJiM0MzsyMjgwLDEwIEBAIGVudW0gc2Nhbl9iYWxhbmNlIHsKIAogc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7Ci0JdW5zaWduZWQgbG9uZyBmaWxlOwomIzQzOwlzdHJ1Y3QgbHJ1X2Nvc3QgKmFub25fY29zdCwgKmZpbGVfY29zdDsKIAlzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjOwomIzQzOwl1bnNpZ25lZCBsb25nIGxydXNpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmlsZTsKIAogCWlmIChscnVfZ2VuX2VuYWJsZWQoKSAmYW1wOyZhbXA7ICFscnVfZ2VuX3N3aXRjaGluZygpKQogCQlyZXR1cm47CkBAIC0yMjk5LDExICYjNDM7MjI5OSw2OSBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCS8qCiAJICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBjb3N0IG1vZGVsIGlzIGJhc2VkIG9uIHJvdGF0aW9ucywgcmVmYXVsdHMgYW5kCiYjNDM7CSAqIHJlY2xhaW0tZHJpdmVuIHdyaXRlcyAoYW5vbiBvbmx5KSBvbiBlYWNoIHNpZGUuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZXNlIGV2ZW50IGNvdW50ZXJzIGFyZSBtb25vdG9uaWMsIHNvIGVhY2ggcmVjbGFpbSBjeWNsZQomIzQzOwkgKiB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3Qgc2NhbiBpcyBleHRyYWN0ZWQgYW5kIGluY29ycG9yYXRlZAomIzQzOwkgKiBpbnRvIGEgZGVjYXlpbmcgYXZlcmFnZS4gVGhpcyBlbnN1cmVzIGN1cnJlbmN5LCBhcyB3b3JrbG9hZHMKJiM0MzsJICogY2hhbmdlIG92ZXIgdGltZSwgYW5kIGF2b2lkcyBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb25zLgomIzQzOwkgKgomIzQzOwkgKiBVc2UgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKCkgc28gdW5zaWduZWQgc3VidHJhY3Rpb24KJiM0MzsJICogeWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zcyBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgb2YKJiM0MzsJICogdGhlIHVuZGVybHlpbmcgY291bnRlciAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQgdGhhdCB0aGUKJiM0MzsJICogY2xhbXAgaW4gbHJ1dmVjX3BhZ2Vfc3RhdGUoKSB3b3VsZCBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZQomIzQzOwkgKiBzcHVyaW91cyBkZWx0YSkuCiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2xydV9sb2NrKTsKLQlzYy0mZ3Q7YW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy0mZ3Q7YW5vbl9jb3N0OwotCXNjLSZndDtmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLSZndDtmaWxlX2Nvc3Q7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2xvY2spOwomIzQzOwomIzQzOwlmb3IgKGludCBmID0gMDsgZiAmbHQ7PSAxOyBmJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGxydV9jb3N0ICpjb3N0ID0gJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0W2ZdOwomIzQzOwkJdW5zaWduZWQgbG9uZyByb3RhdGVkLCBpbywgbnJfcm90YXRlZCwgbnJfaW87CiYjNDM7CiYjNDM7CQlyb3RhdGVkID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsCiYjNDM7CQkJCQkJICAgICAgUEdST1RBVEVfQU5PTiAmIzQzOyBmKTsKJiM0MzsJCWlvID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsCiYjNDM7CQkJCQkJIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICYjNDM7IGYpOwomIzQzOwkJaWYgKGYgPT0gV09SS0lOR1NFVF9BTk9OKQomIzQzOwkJCWlvICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYywKJiM0MzsJCQkJCQkJICBOUl9WTVNDQU5fV1JJVEUpOwomIzQzOwomIzQzOwkJbnJfcm90YXRlZCA9IHJvdGF0ZWQgLSBjb3N0LSZndDtsYXN0X3JvdGF0ZWQ7CiYjNDM7CQlucl9pbyA9IGlvIC0gY29zdC0mZ3Q7bGFzdF9pbzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcKJiM0MzsJCSAqIENQVSB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIG1ha2UgYQomIzQzOwkJICogcHJlY2lzZSBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0CiYjNDM7CQkgKiBjb21wYXJhYmxlIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZQomIzQzOwkJICogb3ZlcndoZWxtaW5nbHkgZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4KJiM0MzsJCSAqIGJhbGFuY2UgZm9yIENQVSB3b3JrLgomIzQzOwkJICovCiYjNDM7CQljb3N0LSZndDtjb3VudCAmIzQzOz0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICYjNDM7IG5yX3JvdGF0ZWQ7CiYjNDM7CiYjNDM7CQljb3N0LSZndDtsYXN0X3JvdGF0ZWQgPSByb3RhdGVkOwomIzQzOwkJY29zdC0mZ3Q7bGFzdF9pbyA9IGlvOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFub25fY29zdCA9ICZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdFtXT1JLSU5HU0VUX0FOT05dOwomIzQzOwlmaWxlX2Nvc3QgPSAmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2Nvc3RbV09SS0lOR1NFVF9GSUxFXTsKJiM0MzsKJiM0MzsJbHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICYjNDM7CiYjNDM7CQkgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSAmIzQzOwomIzQzOwkJICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7CiYjNDM7CiYjNDM7CXdoaWxlIChhbm9uX2Nvc3QtJmd0O2NvdW50ICYjNDM7IGZpbGVfY29zdC0mZ3Q7Y291bnQgJmd0OyBscnVzaXplIC8gNCkgewomIzQzOwkJYW5vbl9jb3N0LSZndDtjb3VudCAvPSAyOwomIzQzOwkJZmlsZV9jb3N0LSZndDtjb3VudCAvPSAyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNjLSZndDthbm9uX2Nvc3QgPSBhbm9uX2Nvc3QtJmd0O2NvdW50OwomIzQzOwlzYy0mZ3Q7ZmlsZV9jb3N0ID0gZmlsZV9jb3N0LSZndDtjb3VudDsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2xvY2spOwogCiAJLyoKIAkgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub24KQEAgLTQ4MDksNyAmIzQzOzQ4NjcsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7CiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsazsKIAlpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkOwotCWludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDsKJiM0MzsJaW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDsKIAlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CkBAIC00ODIxLDYgJiM0Mzs0ODgwLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAKIAlzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywKIAkJCQkgJmFtcDtsaXN0LCAmYW1wO2lzb2xhdGVkLCAmYW1wO3R5cGUsICZhbXA7dHlwZV9zY2FubmVkKTsKJiM0MzsJbnJfaXNvbGF0ZWQgPSBpc29sYXRlZDsKIAogCS8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovCiAJaWYgKHNjYW5uZWQpCkBAIC00ODMzLDYgJiM0Mzs0ODkzLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiByZXRyeToKIAlyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdCgmYW1wO2xpc3QsIHBnZGF0LCBzYywgJmFtcDtzdGF0LCBmYWxzZSwgbWVtY2cpOwogCXNjLSZndDtucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDsKJiM0MzsJdG90YWxfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7CiAJLyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovCiAJaWYgKGlzb2xhdGVkKQogCQloYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgJmFtcDtzdGF0KTsKQEAgLTQ4ODQsNiAmIzQzOzQ5NDUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChucl9pc29sYXRlZCAmZ3Q7IHRvdGFsX3JlY2xhaW1lZCkKJiM0MzsJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7CiYjNDM7CiAJcmV0dXJuIHNjYW5uZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggZjUzNDk3MmY1MTdkZTAuLjg3ZDRhNjc4MTM2NzY3IDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuYwpAQCAtMTAyNCw2ICYjNDM7MTAyNCwxNyBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogCiAJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgaXRlbSk7CiB9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBOb24tY2xhbXBpbmcgdmFyaWFudCBvZiBub2RlX3BhZ2Vfc3RhdGUoKSBpbnRlbmRlZCBmb3IgY2FsbGVycyB0aGF0CiYjNDM7ICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLgomIzQzOyAqIFNlZSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYygpIGZvciB0aGUgcmF0aW9uYWxlLgomIzQzOyAqLwomIzQzO3Vuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAomIzQzOwkJCQkJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoJmFtcDtwZ2RhdC0mZ3Q7dm1fc3RhdFtpdGVtXSk7CiYjNDM7fQogI2VuZGlmCiAKIC8qCkBAIC0xMjg5LDYgJiM0MzsxMzAwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7CiAJW0koUEdTQ0FOX1BST0FDVElWRSldCQkJPSAmIzM0O3Bnc2Nhbl9wcm9hY3RpdmUmIzM0OywKIAlbSShQR1NDQU5fQU5PTildCQkJPSAmIzM0O3Bnc2Nhbl9hbm9uJiMzNDssCiAJW0koUEdTQ0FOX0ZJTEUpXQkJCT0gJiMzNDtwZ3NjYW5fZmlsZSYjMzQ7LAomIzQzOwlbSShQR1JPVEFURV9BTk9OKV0JCQk9ICYjMzQ7cGdyb3RhdGVfYW5vbiYjMzQ7LAomIzQzOwlbSShQR1JPVEFURV9GSUxFKV0JCQk9ICYjMzQ7cGdyb3RhdGVfZmlsZSYjMzQ7LAogCVtJKFBHUkVGSUxMKV0JCQkJPSAmIzM0O3BncmVmaWxsJiMzNDssCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCVtJKE5SX0hVR0VUTEIpXQkJCQk9ICYjMzQ7bnJfaHVnZXRsYiYjMzQ7LApkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IGYzNTE3OThlNzIzYWNkLi43YWMyYjg4YzgwYWU1NiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNTg0LDExICYjNDM7NTg0LDYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCS8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi8KIAlpZiAod29ya2luZ3NldCkgewogCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7Ci0JCS8qCi0JCSAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnMKLQkJICogcHV0YmFjawotCQkgKi8KLQkJbHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTsKIAkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICYjNDM7IGZpbGUsIG5yKTsKIAl9CiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjb3N0IGlzIGNvbXB1dGVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgdG91Y2hpbmcgY29yZSBmaWxlcyBsaWtlIGBtbS92bXNjYW4uY2AsIGBtbS9zd2FwLmNgLCBhbmQgc28gb24uIFRoZXkmIzM5O3JlIGRpdGNoaW5nIHRoZSBvbGQgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIG1lY2hhbmlzbXMuIEluc3RlYWQsIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IGFwcHJvYWNoIHVzaW5nIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCB3aGljaCBzb3VuZCBsaWtlIHRoZXkgbGV2ZXJhZ2UgbW9ub3RvbmljIGNvdW50ZXJzLCBhbG9uZ3NpZGUgbmV3IGVudW0gaXRlbXMgYW5kIGNoYW5nZXMgdG8gdGhlIGBscnV2ZWNgIHN0cnVjdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgZGVtYW5kcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIEl04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBidWdzLCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucywgb3IgZXZlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuCgpMZXQmIzM5O3MgcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgdG8gY29uY2VudHJhdGUgb24uIEkgc2VlIG1vZGlmaWNhdGlvbnMgYW5kIGFkZGl0aW9ucyB0byBhIGJ1bmNoIG9mIGZ1bmN0aW9uczogYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AsIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AsIGBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYGV2aWN0X2ZvbGlvc2AsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHBhZ2VvdXRgLiBQcmV0dHkgbXVjaCB0aGUgaGVhcnQgb2Ygdm1zY2FuLCBpdCBsb29rcyBsaWtlLgoKSSBuZWVkIHRvIGZvY3VzIG9uIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBldmljdF9mb2xpb3NgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBwYWdlb3V0YC4KCldhaXTigKYgYWxsIG9mIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zPyBIbW0uIFRoZSBwcm9tcHQgaXMgcmVtaW5kaW5nIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSAqY2FsbGVycyogb2YgdGhlc2UgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIExldCYjMzk7cyBzZWUuLi4gYHByZXBhcmVfc2Nhbl9jb250cm9sYCBpcyBjYWxsZWQgYnkgYGdldF9zY2FuX2NvdW50YCBvciBgc2hyaW5rX25vZGVgIG9yIGBzaHJpbmtfbHJ1dmVjYC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBvZiB0aGVzZS4gTG9va3MgbGlrZSBJIHdpbGwgbmVlZCB0byBzZWFyY2ggZm9yIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaW4gYG1tL3Ztc2Nhbi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIyNzQ9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyODAtXG5tbS92bXNjYW4uYzoyMjgxOnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjI4Mi17XG4tLVxubW0vdm1zY2FuLmM9NjIwOD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjMwLVxubW0vdm1zY2FuLmM6NjIzMTpcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjMyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDU0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKlN0YXRpYyBGdW5jdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcyBgc2hyaW5rX25vZGVgIGZ1bmN0aW9uLiBBIHF1aWNrIGNoZWNrIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IEkgY2FuJiMzOTt0IHF1aXRlIHJlbWVtYmVyLiBJdCB3b3VsZCBtYWtlIHNlbnNlIGdpdmVuIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGhhcyBiZWVuIGRlY2xhcmVkIGNvcnJlY3RseS4gVGltZSB0byB2ZXJpZnkgaXRzIHNjb3BlLiBJZiBpdCAqaXMqIHN0YXRpYywgdGhlIGltcGxpY2F0aW9ucyBhcmUgdmVyeSBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGdvaW5nIHRvIGNhdXNlIGFueSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lIHdpdGggc2hhcmVkIGRhdGEgb3Igc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTQyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE5ODAtLypcbm1tL3Ztc2Nhbi5jOjE5ODE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMTk4Mi0gKiBvZiByZWNsYWltZWQgcGFnZXNcbi0tXG5tbS92bXNjYW4uYz01MTc3PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOTctXG5tbS92bXNjYW4uYzo1MTk4OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTk5LXtcbi0tXG5tbS92bXNjYW4uYz01OTI2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5MzAtXG5tbS92bXNjYW4uYzo1OTMxOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01OTMyLXtcbi0tXG5tbS92bXNjYW4uYz02MDc3PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYxMjgtXG5tbS92bXNjYW4uYzo2MTI5OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYxMzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTYyMDctXG5tbS92bXNjYW4uYzo2MjA4OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjIwOS17XG4tLVxubW0vdm1zY2FuLmMtNjIxNS1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbm1tL3Ztc2Nhbi5jOjYyMTY6XHRcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyMTctXG4tLVxubW0vdm1zY2FuLmMtNjIzMi1cbm1tL3Ztc2Nhbi5jOjYyMzM6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyMzQtXG4tLVxubW0vdm1zY2FuLmM9NjM5Mz1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjQ3MS1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjY0NzI6XHRcdHNocmlua19ub2RlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjQ3My1cdH1cbi0tXG5tbS92bXNjYW4uYz02NzM4PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3ODMtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njc4NDp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjc4NS1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjgxMC1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxubW0vdm1zY2FuLmM6NjgxMTpcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTY4MTItXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJiMzOTtzIGFzIHdlbGwuIFdlIGhhY2tcbi0tXG5tbS92bXNjYW4uYz02OTMyPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy02OTU2LVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6Njk1NzpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTY5NTgtXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYz03MDE0PXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MDUyLSAqL1xubW0vdm1zY2FuLmM6NzA1MzpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcwNTQtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcwNjktXHQgKi9cbm1tL3Ztc2Nhbi5jOjcwNzA6XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzA3MS1cbi0tXG5tbS92bXNjYW4uYz03MTI2PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzIzNS1cbm1tL3Ztc2Nhbi5jOjcyMzY6XHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xubW0vdm1zY2FuLmMtNzIzNy1cdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNzI0Ny1cdFx0ICovXG5tbS92bXNjYW4uYzo3MjQ4Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MjQ5LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9NzgwMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bXNjYW4uYy03ODMwLVx0XHRkbyB7XG5tbS92bXNjYW4uYzo3ODMxOlx0XHRcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy03ODMyLVx0XHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGVudHJ5IHBvaW50cyBhcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGV4cGVydCwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IFJlY2xhbWF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgbWVtb3J5IHJlY2xhaW0uIEkgc2VlIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBsaXN0ZWQgYXMgdGhlIGVudHJ5IHBvaW50cy4gSW50ZXJlc3RpbmcuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgd2F5cyB3ZSBjYW4gdHJpZ2dlciBtZW1vcnkgcHJlc3N1cmUgcmVzb2x1dGlvbi4KCmB0cnlfdG9fZnJlZV9wYWdlc2Agc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBmaXJzdCBzdG9wLiBJdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3QsIHRyeWluZyB0byBleHBsaWNpdGx5IGZyZWUgcGFnZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGluIHRoZXJlIGFuZCBzZWUgaG93IGl0IHdvcmtzLCB3aGF0IHRyaWdnZXJzIGl0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBzdHJhdGVneSBpcy4gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGF0IHJvdXRpbmUg4oCTIGxldCYjMzk7cyBzZWUgaG93IGl0IG9yY2hlc3RyYXRlcyB0aGUgZnJlZWluZyBwcm9jZXNzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zLiBJIHdvbmRlciBob3cgaXQgZGVjaWRlcyB3aGF0IHRvIHJlY2xhaW0sIGFuZCBob3cgYWdncmVzc2l2ZWx5LiBJdCYjMzk7cyB0aGUgZ2F0ZXdheSwgc28gaXQmIzM5O3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbiBvZiBtZW1vcnkgcmVjbGFtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02NDg1PXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjUxNS0gKi9cbm1tL3Ztc2Nhbi5jOjY1MTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbm1tL3Ztc2Nhbi5jLTY1MTctXHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmM9NjY1OD1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NzM3LVxubW0vdm1zY2FuLmM6NjczODp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTY3MzktXHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vdm1zY2FuLmMtNjc3Mi1cbm1tL3Ztc2Nhbi5jOjY3NzM6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjc3NC1cbi0tXG5tbS92bXNjYW4uYz02ODI0PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjg1NS1cbm1tL3Ztc2Nhbi5jOjY4NTY6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjg1Ny1cbi0tXG5tbS92bXNjYW4uYz03NjIyPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc2NDEtXG5tbS92bXNjYW4uYzo3NjQyOlx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTc2NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gc29tZSBrZXkgYXJlYXMgaGVyZS4gSSYjMzk7bSB0aGlua2luZyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGEgc29saWQgZnVuY3Rpb24gdG8gc3RhcnQgd2l0aDsgaXQgc2VlbXMgbGlrZSBhIGNvcmUgZWxlbWVudCBpbiB0aGlzIGNvbnRleHQuIEJ1dCwgaG1tLCB3aGF0IGFib3V0IGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYD8gWWVzLCB0aGF0JiMzOTtzIGFub3RoZXIgaW1wb3J0YW50IG9uZSwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4gTm93LCB0aGlua2luZyBtb3JlIGJyb2FkbHksIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29uc2lkZXIgc29tZXRoaW5nIHRoYXQgaW50ZXJhY3RzIHdpdGggc3dhcHBpbmcuIExldCYjMzk7cyB0aGluaywgYGJhbGFuY2VfcGdkYXRgIGlzIGNhbGxlZCBieSBga3N3YXBkYC4gT2theSwgc28gYGtzd2FwZGAgaXMgY3JpdGljYWwuIEl0IHNvdW5kcyBsaWtlIGEgY2VudHJhbCBwaWVjZSwgc28gbGV0JiMzOTtzIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc3dhcGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTI0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS92bXNjYW4uYy01LSAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXG5tbS92bXNjYW4uYzo2OiAqICBrc3dhcGQgYWRkZWQ6IDcuMS45NiAgc2N0XG5tbS92bXNjYW4uYzo3OiAqICBSZW1vdmVkIGtzd2FwZF9jdGwgbGltaXRzLCBhbmQgc3dhcCBvdXQgYXMgbWFueSBwYWdlcyBhcyBuZWVkZWRcbm1tL3Ztc2Nhbi5jLTgtICogIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0byBmcmVlcGFnZXMuaGlnaDogMi40Ljk3LCBSaWsgdmFuIFJpZWwuXG5tbS92bXNjYW4uYzo5OiAqICBab25lIGF3YXJlIGtzd2FwZCBzdGFydGVkIDAyLzAwLCBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pLlxubW0vdm1zY2FuLmMtMTAtICogIE11bHRpcXVldWUgVk0gc3RhcnRlZCA1LjguMDAsIFJpayB2YW4gUmllbC5cbi0tXG5tbS92bXNjYW4uYz00NDQ9c3RhdGljIGludCByZWNsYWltZXJfb2Zmc2V0KHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ0OS1cbm1tL3Ztc2Nhbi5jOjQ1MDpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNDUxLVx0XHRyZXR1cm4gMDtcbi0tXG5tbS92bXNjYW4uYz00ODA9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNDg1LVx0Lypcbm1tL3Ztc2Nhbi5jOjQ4NjpcdCAqIElmIGtzd2FwZCBpcyBkaXNhYmxlZCwgcmVzY2hlZHVsZSBpZiBuZWNlc3NhcnkgYnV0IGRvIG5vdFxubW0vdm1zY2FuLmMtNDg3LVx0ICogdGhyb3R0bGUgYXMgdGhlIHN5c3RlbSBpcyBsaWtlbHkgbmVhciBPT00uXG5tbS92bXNjYW4uYy00ODgtXHQgKi9cbm1tL3Ztc2Nhbi5jOjQ4OTpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXG5tbS92bXNjYW4uYy00OTAtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUwOD12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNC1cdC8qXG5tbS92bXNjYW4uYzo1MTU6XHQgKiBEbyBub3QgdGhyb3R0bGUgdXNlciB3b3JrZXJzLCBrdGhyZWFkcyBvdGhlciB0aGFuIGtzd2FwZCBvclxubW0vdm1zY2FuLmMtNTE2LVx0ICogd29ya3F1ZXVlcy4gVGhleSBtYXkgYmUgcmVxdWlyZWQgZm9yIHJlY2xhaW0gdG8gbWFrZVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOC1cdCAqL1xubW0vdm1zY2FuLmM6NTE5Olx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNTIwLVx0ICAgIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTk2Mj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19kZW1vdGVfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vdm1zY2FuLmMtOTcxLVx0ICogbWFrZSBzdXJlIHdlIGFsbG9jYXRlIGZyb20gdGhlIHRhcmdldCBub2RlIGZpcnN0IGFsc28gdHJ5aW5nIHRvXG5tbS92bXNjYW4uYzo5NzI6XHQgKiBkZW1vdGUgb3IgcmVjbGFpbSBwYWdlcyBmcm9tIHRoZSB0YXJnZXQgbm9kZSB2aWEga3N3YXBkIGlmIHdlIGFyZVxubW0vdm1zY2FuLmMtOTczLVx0ICogbG93IG9uIGZyZWUgbWVtb3J5IG9uIHRhcmdldCBub2RlLiBJZiB3ZSBkb24mIzM5O3QgZG8gdGhpcyBhbmQgaWZcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMTE4LVx0XHQgKiBUaGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIGRldGVybWluZXMgaWYgYSBub2RlIGlzIG1hcmtlZFxubW0vdm1zY2FuLmM6MTExOTpcdFx0ICogcmVjbGFpbV9jb25nZXN0ZWQuIGtzd2FwZCB3aWxsIHN0YWxsIGFuZCBzdGFydCB3cml0aW5nXG5tbS92bXNjYW4uYy0xMTIwLVx0XHQgKiBmb2xpb3MgaWYgdGhlIHRhaWwgb2YgdGhlIExSVSBpcyBhbGwgZGlydHkgdW5xdWV1ZWQgZm9saW9zLlxuLS1cbm1tL3Ztc2Nhbi5jLTExODctXHRcdFx0LyogQ2FzZSAxIGFib3ZlICovXG5tbS92bXNjYW4uYzoxMTg4Olx0XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMTE4OS1cdFx0XHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYz0xNTkwPXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS92bXNjYW4uYy0xNjE1LVx0ICogV2Ugc2hvdWxkIGJlIHNhZmUgaGVyZSBzaW5jZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggZmlsZSBwYWdlcyBhbmRcbm1tL3Ztc2Nhbi5jOjE2MTY6XHQgKiB3ZSBhcmUgbm90IGtzd2FwZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB3cml0ZSBkaXJ0eSBmaWxlIHBhZ2VzLiBCdXRcbm1tL3Ztc2Nhbi5jLTE2MTctXHQgKiBjYWxsIG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCkgYW55d2F5LCBqdXN0IGluIGNhc2UgdGhlc2UgY29uZGl0aW9uc1xuLS1cbm1tL3Ztc2Nhbi5jPTE4MjM9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4tLVxubW0vdm1zY2FuLmMtMTgyOC1cbm1tL3Ztc2Nhbi5jOjE4Mjk6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTE4MzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS92bXNjYW4uYz0zODQ5PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxuLS1cbm1tL3Ztc2Nhbi5jLTM4NTItXG5tbS92bXNjYW4uYzozODUzOlx0aWYgKHBnZGF0IFx1MDAyNlx1MDAyNiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7XG5tbS92bXNjYW4uYy0zODU0LVx0XHRWTV9XQVJOX09OX09OQ0Uod2Fsayk7XG4tLVxubW0vdm1zY2FuLmMtMzg1Ny1cdH0gZWxzZSBpZiAoIXdhbGsgXHUwMDI2XHUwMDI2IGZvcmNlX2FsbG9jKSB7XG5tbS92bXNjYW4uYzozODU4Olx0XHRWTV9XQVJOX09OX09OQ0UoY3VycmVudF9pc19rc3dhcGQoKSk7XG5tbS92bXNjYW4uYy0zODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTM4Njk9c3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTM4NzctXG5tbS92bXNjYW4uYzozODc4Olx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtMzg3OS1cdFx0a2ZyZWUod2Fsayk7XG4tLVxubW0vdm1zY2FuLmM9NDE5MT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxOTYtXG5tbS92bXNjYW4uYzo0MTk3Olx0Vk1fV0FSTl9PTl9PTkNFKCFjdXJyZW50X2lzX2tzd2FwZCgpKTtcbm1tL3Ztc2Nhbi5jLTQxOTgtXG4tLVxubW0vdm1zY2FuLmM9NDk4OT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5OTctXHQvKiBjaGVjayB0aGUgb3JkZXIgdG8gZXhjbHVkZSBjb21wYWN0aW9uLWluZHVjZWQgcmVjbGFpbSAqL1xubW0vdm1zY2FuLmM6NDk5ODpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cdTAwM2VvcmRlcilcbm1tL3Ztc2Nhbi5jLTQ5OTktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS92bXNjYW4uYy01MDExLVxubW0vdm1zY2FuLmM6NTAxMjpcdC8qIGtzd2FwZCBzaG91bGQgYWJvcnQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGFyZSBzYWZlICovXG5tbS92bXNjYW4uYy01MDEzLVx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmM9NTE5OD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMjAtXG5tbS92bXNjYW4uYzo1MjIxOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy01MjIyLVx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xuLS1cbm1tL3Ztc2Nhbi5jLTUyMjgtXG5tbS92bXNjYW4uYzo1MjI5Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy01MjMwLVx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbi0tXG5tbS92bXNjYW4uYy01MjM2LVx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2UgcmVjbGFpbWVkKVxubW0vdm1zY2FuLmM6NTIzNzpcdFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXJlY2xhaW1faWR4KTtcbm1tL3Ztc2Nhbi5jLTUyMzgtfVxuLS1cbm1tL3Ztc2Nhbi5jPTU5Mzg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NjctXHQgKiBERUZfUFJJT1JJVFkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZmFjdCB3ZSBhcmUgZGlyZWN0XG5tbS92bXNjYW4uYzo1OTY4Olx0ICogcmVjbGFpbWluZyBpbXBsaWVzIHRoYXQga3N3YXBkIGlzIG5vdCBrZWVwaW5nIHVwIGFuZCBpdCBpcyBiZXN0IHRvXG5tbS92bXNjYW4uYy01OTY5LVx0ICogZG8gYSBiYXRjaCBvZiB3b3JrIGF0IG9uY2UuIEZvciBtZW1jZyByZWNsYWltIG9uZSBjaGVjayBpcyBtYWRlIHRvXG4tLVxubW0vdm1zY2FuLmMtNTk3Mi1cdCAqL1xubW0vdm1zY2FuLmM6NTk3MzpcdHByb3BvcnRpb25hbF9yZWNsYWltID0gKCFjZ3JvdXBfcmVjbGFpbShzYykgXHUwMDI2XHUwMDI2ICFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNTk3NC1cdFx0XHRcdHNjLVx1MDAzZXByaW9yaXR5ID09IERFRl9QUklPUklUWSk7XG4tLVxubW0vdm1zY2FuLmMtNTk5Ny1cdFx0Lypcbm1tL3Ztc2Nhbi5jOjU5OTg6XHRcdCAqIEZvciBrc3dhcGQgYW5kIG1lbWNnLCByZWNsYWltIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgcGFnZXNcbm1tL3Ztc2Nhbi5jLTU5OTktXHRcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxuLS1cbm1tL3Ztc2Nhbi5jPTYxMjk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxNDMtXHQgKlxubW0vdm1zY2FuLmM6NjE0NDpcdCAqIEZvciBrc3dhcGQsIHJlbGlhYmxlIGZvcndhcmQgcHJvZ3Jlc3MgaXMgbW9yZSBpbXBvcnRhbnRcbm1tL3Ztc2Nhbi5jLTYxNDUtXHQgKiB0aGFuIGEgcXVpY2sgcmV0dXJuIHRvIGlkbGUuIEFsd2F5cyBkbyBmdWxsIHdhbGtzLlxubW0vdm1zY2FuLmMtNjE0Ni1cdCAqL1xubW0vdm1zY2FuLmM6NjE0NzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IHNjLVx1MDAzZW1lbWNnX2Z1bGxfd2Fsaylcbm1tL3Ztc2Nhbi5jLTYxNDgtXHRcdHBhcnRpYWwgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jPTYyMDg9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjI0Ni1cbm1tL3Ztc2Nhbi5jOjYyNDc6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSkge1xubW0vdm1zY2FuLmMtNjI0OC1cdFx0Lypcbi0tXG5tbS92bXNjYW4uYy02MjU5LVx0XHQgKlxubW0vdm1zY2FuLmM6NjI2MDpcdFx0ICogT25jZSBhIG5vZGUgaXMgZmxhZ2dlZCBQR0RBVF9XUklURUJBQ0ssIGtzd2FwZCB3aWxsXG5tbS92bXNjYW4uYy02MjYxLVx0XHQgKiBjb3VudCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHVuZGVyIHBhZ2VzIGZsYWdnZWQgZm9yXG4tLVxubW0vdm1zY2FuLmMtNjI2OC1cdFx0Lypcbm1tL3Ztc2Nhbi5jOjYyNjk6XHRcdCAqIElmIGtzd2FwZCBzY2FucyBwYWdlcyBtYXJrZWQgZm9yIGltbWVkaWF0ZVxubW0vdm1zY2FuLmMtNjI3MC1cdFx0ICogcmVjbGFpbSBhbmQgdW5kZXIgd3JpdGViYWNrIChucl9pbW1lZGlhdGUpLCBpdFxuLS1cbm1tL3Ztc2Nhbi5jLTYyODktXG5tbS92bXNjYW4uYzo2MjkwOlx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTYyOTEtXHRcdFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTYyOTUtXHQgKiBTdGFsbCBkaXJlY3QgcmVjbGFpbSBmb3IgSU8gY29tcGxldGlvbnMgaWYgdGhlIGxydXZlYyBpc1xubW0vdm1zY2FuLmM6NjI5NjpcdCAqIG5vZGUgaXMgY29uZ2VzdGVkLiBBbGxvdyBrc3dhcGQgdG8gY29udGludWUgdW50aWwgaXRcbm1tL3Ztc2Nhbi5jLTYyOTctXHQgKiBzdGFydHMgZW5jb3VudGVyaW5nIHVucXVldWVkIGRpcnR5IHBhZ2VzIG9yIGN5Y2xpbmcgdGhyb3VnaFxuLS1cbm1tL3Ztc2Nhbi5jLTYyOTktXHQgKi9cbm1tL3Ztc2Nhbi5jOjYzMDA6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2IGN1cnJlbnRfbWF5X3Rocm90dGxlKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02MzAxLVx0ICAgICFzYy1cdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jLTYzMTItXHQgKiBzbGVlcC4gT24gcmVjbGFpbSBwcm9ncmVzcywgcmVzZXQgdGhlIGZhaWx1cmUgY291bnRlci4gQVxubW0vdm1zY2FuLmM6NjMxMzpcdCAqIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gcnVuIHdpbGwgcmV2aXZlIGEgZG9ybWFudCBrc3dhcGQuXG5tbS92bXNjYW4uYy02MzE0LVx0ICovXG5tbS92bXNjYW4uYy02MzE1LVx0aWYgKHJlY2xhaW1hYmxlKVxubW0vdm1zY2FuLmM6NjMxNjpcdFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXJlY2xhaW1faWR4KTtcbm1tL3Ztc2Nhbi5jLTYzMTctXHRlbHNlIGlmIChzYy1cdTAwM2VjYWNoZV90cmltX21vZGUpXG4tLVxubW0vdm1zY2FuLmM9NjM1NT1zdGF0aWMgdm9pZCBjb25zaWRlcl9yZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzNzEtXHQvKlxubW0vdm1zY2FuLmM6NjM3MjpcdCAqIERvIG5vdCB0aHJvdHRsZSBrc3dhcGQgb3IgY2dyb3VwIHJlY2xhaW0gb24gTk9QUk9HUkVTUyBhcyBpdCB3aWxsXG5tbS92bXNjYW4uYy02MzczLVx0ICogdGhyb3R0bGUgb24gVk1TQ0FOX1RIUk9UVExFX1dSSVRFQkFDSyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgcGFnZXNcbi0tXG5tbS92bXNjYW4uYy02Mzc2LVx0ICovXG5tbS92bXNjYW4uYzo2Mzc3Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY2dyb3VwX3JlY2xhaW0oc2MpKVxubW0vdm1zY2FuLmMtNjM3OC1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTY2MTM9c3RhdGljIGJvb2wgYWxsb3dfZGlyZWN0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NjIwLVxubW0vdm1zY2FuLmM6NjYyMTpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXG5tbS92bXNjYW4uYy02NjIyLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYy02NjM3LVxubW0vdm1zY2FuLmM6NjYzODpcdC8qIGtzd2FwZCBtdXN0IGJlIGF3YWtlIGlmIHByb2Nlc3NlcyBhcmUgYmVpbmcgdGhyb3R0bGVkICovXG5tbS92bXNjYW4uYzo2NjM5Olx0aWYgKCF3bWFya19vayBcdTAwMjZcdTAwMjYgd2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCkpIHtcbm1tL3Ztc2Nhbi5jOjY2NDA6XHRcdGlmIChSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCkgXHUwMDNlIFpPTkVfTk9STUFMKVxubW0vdm1zY2FuLmM6NjY0MTpcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIFpPTkVfTk9STUFMKTtcbm1tL3Ztc2Nhbi5jLTY2NDItXG5tbS92bXNjYW4uYzo2NjQzOlx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpO1xubW0vdm1zY2FuLmMtNjY0NC1cdH1cbi0tXG5tbS92bXNjYW4uYy02NjUxLSAqIGFuZCB0aGUgUEZNRU1BTExPQyByZXNlcnZlIGZvciB0aGUgcHJlZmVycmVkIG5vZGUgaXMgZ2V0dGluZyBkYW5nZXJvdXNseVxubW0vdm1zY2FuLmM6NjY1MjogKiBkZXBsZXRlZC4ga3N3YXBkIHdpbGwgY29udGludWUgdG8gbWFrZSBwcm9ncmVzcyBhbmQgd2FrZSB0aGUgcHJvY2Vzc2VzXG5tbS92bXNjYW4uYy02NjUzLSAqIHdoZW4gdGhlIGxvdyB3YXRlcm1hcmsgaXMgcmVhY2hlZC5cbi0tXG5tbS92bXNjYW4uYz02NjU4PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY2ODgtXHQgKiBUaHJvdHRsaW5nIGlzIGJhc2VkIG9uIHRoZSBmaXJzdCB1c2FibGUgbm9kZSBhbmQgdGhyb3R0bGVkIHByb2Nlc3Nlc1xubW0vdm1zY2FuLmM6NjY4OTpcdCAqIHdhaXQgb24gYSBxdWV1ZSB1bnRpbCBrc3dhcGQgbWFrZXMgcHJvZ3Jlc3MgYW5kIHdha2VzIHRoZW0uIFRoZXJlXG5tbS92bXNjYW4uYy02NjkwLVx0ICogaXMgYW4gYWZmaW5pdHkgdGhlbiBiZXR3ZWVuIHByb2Nlc3NlcyB3YWtpbmcgdXAgYW5kIHdoZXJlIHJlY2xhaW1cbi0tXG5tbS92bXNjYW4uYy02NzE4LVx0ICogdHJhbnNhY3Rpb24gaW4gdGhlIGNhc2Ugb2YgYSBmaWxlc3lzdGVtIGxpa2UgZXh0WzN8NF0uIEluIHRoaXMgY2FzZSxcbm1tL3Ztc2Nhbi5jOjY3MTk6XHQgKiBpdCBpcyBub3Qgc2FmZSB0byBibG9jayBvbiBwZm1lbWFsbG9jX3dhaXQgYXMga3N3YXBkIGNvdWxkIGJlXG5tbS92bXNjYW4uYy02NzIwLVx0ICogYmxvY2tlZCB3YWl0aW5nIG9uIHRoZSBzYW1lIGxvY2suIEluc3RlYWQsIHRocm90dGxlIGZvciB1cCB0byBhXG4tLVxubW0vdm1zY2FuLmMtNjcyNi1cdGVsc2Vcbm1tL3Ztc2Nhbi5jOjY3Mjc6XHRcdC8qIFRocm90dGxlIHVudGlsIGtzd2FwZCB3YWtlcyB0aGUgcHJvY2VzcyAqL1xubW0vdm1zY2FuLmMtNjcyOC1cdFx0d2FpdF9ldmVudF9raWxsYWJsZSh6b25lLVx1MDAzZXpvbmVfcGdkYXQtXHUwMDNlcGZtZW1hbGxvY193YWl0LFxuLS1cbm1tL3Ztc2Nhbi5jPTY4NjU9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODc0LVxubW0vdm1zY2FuLmM6Njg3NTpzdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02ODc2LXtcbi0tXG5tbS92bXNjYW4uYz02OTMyPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy02OTU0LVx0XHQgKlxubW0vdm1zY2FuLmM6Njk1NTpcdFx0ICogSG93ZXZlciwga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2ggdGhpcyBvblxubW0vdm1zY2FuLmMtNjk1Ni1cdFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQmIzM5O3Ncbm1tL3Ztc2Nhbi5jOjY5NTc6XHRcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXG5tbS92bXNjYW4uYy02OTU4LVx0XHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXG4tLVxubW0vdm1zY2FuLmMtNjk4OS1cdCAqIG5lZWQgYmFsYW5jaW5nIGJ5IGRlZmluaXRpb24uIFRoaXMgY2FuIGhhcHBlbiBpZiBhIHpvbmUtcmVzdHJpY3RlZFxubW0vdm1zY2FuLmM6Njk5MDpcdCAqIGFsbG9jYXRpb24gdHJpZXMgdG8gd2FrZSBhIHJlbW90ZSBrc3dhcGQuXG5tbS92bXNjYW4uYy02OTkxLVx0ICovXG4tLVxubW0vdm1zY2FuLmM9Njk5OT1zdGF0aWMgdm9pZCBjbGVhcl9wZ2RhdF9jb25nZXN0ZWQocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03MDA4LS8qXG5tbS92bXNjYW4uYzo3MDA5OiAqIFByZXBhcmUga3N3YXBkIGZvciBzbGVlcGluZy4gVGhpcyB2ZXJpZmllcyB0aGF0IHRoZXJlIGFyZSBubyBwcm9jZXNzZXNcbm1tL3Ztc2Nhbi5jLTcwMTAtICogd2FpdGluZyBpbiB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbSgpIGFuZCB0aGF0IHdhdGVybWFya3MgaGF2ZSBiZWVuIG1ldC5cbm1tL3Ztc2Nhbi5jLTcwMTEtICpcbm1tL3Ztc2Nhbi5jOjcwMTI6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBpcyByZWFkeSB0byBzbGVlcFxubW0vdm1zY2FuLmMtNzAxMy0gKi9cbm1tL3Ztc2Nhbi5jOjcwMTQ6c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNzAxNS1cdFx0XHRcdGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzAxOS1cdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcbm1tL3Ztc2Nhbi5jOjcwMjA6XHQgKiByYWNlIGJldHdlZW4gd2hlbiBrc3dhcGQgY2hlY2tzIHRoZSB3YXRlcm1hcmtzIGFuZCBhIHByb2Nlc3MgZ2V0c1xubW0vdm1zY2FuLmMtNzAyMS1cdCAqIHRocm90dGxlZC4gVGhlcmUgaXMgYWxzbyBhIHBvdGVudGlhbCByYWNlIGlmIHByb2Nlc3NlcyBnZXRcbm1tL3Ztc2Nhbi5jOjcwMjI6XHQgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZVxubW0vdm1zY2FuLmM6NzAyMzpcdCAqIHpvbmVzLCB3aGljaCBjYXVzZXMga3N3YXBkIHRvIGV4aXQgYmFsYW5jZV9wZ2RhdCgpIGJlZm9yZSByZWFjaGluZ1xubW0vdm1zY2FuLmM6NzAyNDpcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxubW0vdm1zY2FuLmMtNzAyNS1cdCAqIGJlIHNsZWVwaW5nIG9uIHBmbWVtYWxsb2Nfd2FpdCwgc28gd2FrZSB0aGVtIG5vdyBpZiBuZWNlc3NhcnkuIElmXG5tbS92bXNjYW4uYzo3MDI2Olx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XG5tbS92bXNjYW4uYy03MDI3LVx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTcwMzMtXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSAqL1xubW0vdm1zY2FuLmM6NzAzNDpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXG5tbS92bXNjYW4uYy03MDM1LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYy03MDQ1LS8qXG5tbS92bXNjYW4uYzo3MDQ2OiAqIGtzd2FwZCBzaHJpbmtzIGEgbm9kZSBvZiBwYWdlcyB0aGF0IGFyZSBhdCBvciBiZWxvdyB0aGUgaGlnaGVzdCB1c2FibGVcbm1tL3Ztc2Nhbi5jLTcwNDctICogem9uZSB0aGF0IGlzIGN1cnJlbnRseSB1bmJhbGFuY2VkLlxubW0vdm1zY2FuLmMtNzA0OC0gKlxubW0vdm1zY2FuLmM6NzA0OTogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIHNjYW5uZWQgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcGFnZXMgdG9cbm1tL3Ztc2Nhbi5jLTcwNTAtICogcmVjbGFpbSBvciBpZiB0aGUgbGFjayBvZiBwcm9ncmVzcyB3YXMgZHVlIHRvIHBhZ2VzIHVuZGVyIHdyaXRlYmFjay5cbi0tXG5tbS92bXNjYW4uYy03MDUyLSAqL1xubW0vdm1zY2FuLmM6NzA1MzpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcwNTQtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTcxMDg9Y2xlYXJfcmVjbGFpbV9hY3RpdmUocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MTEzLS8qXG5tbS92bXNjYW4uYzo3MTE0OiAqIEZvciBrc3dhcGQsIGJhbGFuY2VfcGdkYXQoKSB3aWxsIHJlY2xhaW0gcGFnZXMgYWNyb3NzIGEgbm9kZSBmcm9tIHpvbmVzXG5tbS92bXNjYW4uYy03MTE1LSAqIHRoYXQgYXJlIGVsaWdpYmxlIGZvciB1c2UgYnkgdGhlIGNhbGxlciB1bnRpbCBhdCBsZWFzdCBvbmUgem9uZSBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTcxMTctICpcbm1tL3Ztc2Nhbi5jOjcxMTg6ICogUmV0dXJucyB0aGUgb3JkZXIga3N3YXBkIGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQuXG5tbS92bXNjYW4uYy03MTE5LSAqXG5tbS92bXNjYW4uYzo3MTIwOiAqIGtzd2FwZCBzY2FucyB0aGUgem9uZXMgaW4gdGhlIGhpZ2htZW0tXHUwMDNlbm9ybWFsLVx1MDAzZWRtYSBkaXJlY3Rpb24uICBJdCBza2lwc1xubW0vdm1zY2FuLmMtNzEyMS0gKiB6b25lcyB3aGljaCBoYXZlIGZyZWVfcGFnZXMgXHUwMDNlIGhpZ2hfd21hcmtfcGFnZXMoem9uZSksIGJ1dCBvbmNlIGEgem9uZSBpc1xuLS1cbm1tL3Ztc2Nhbi5jPTcxMjY9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MTUyLVx0ICogcGxhY2Ugc28gdGhhdCBwYXJhbGxlbCBhbGxvY2F0aW9ucyB0aGF0IGFyZSBuZWFyIHRoZSB3YXRlcm1hcmsgd2lsbFxubW0vdm1zY2FuLmM6NzE1MzpcdCAqIHN0YWxsIG9yIGRpcmVjdCByZWNsYWltIHVudGlsIGtzd2FwZCBpcyBmaW5pc2hlZC5cbm1tL3Ztc2Nhbi5jLTcxNTQtXHQgKi9cbi0tXG5tbS92bXNjYW4uYy03MTgxLVx0XHQgKiBnbyBhaGVhZCBpZiBhbGwgZWxpZ2libGUgem9uZXMgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uXG5tbS92bXNjYW4uYzo3MTgyOlx0XHQgKiByZXF1ZXN0IGFyZSBiYWxhbmNlZCB0byBhdm9pZCBleGNlc3NpdmUgcmVjbGFpbSBmcm9tIGtzd2FwZC5cbm1tL3Ztc2Nhbi5jLTcxODMtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jLTcxOTktXHRcdCAqIG9uIHRoZSBncm91bmRzIHRoYXQgdGhlIG5vcm1hbCByZWNsYWltIHNob3VsZCBiZSBlbm91Z2ggdG9cbm1tL3Ztc2Nhbi5jOjcyMDA6XHRcdCAqIHJlLWV2YWx1YXRlIGlmIGJvb3N0aW5nIGlzIHJlcXVpcmVkIHdoZW4ga3N3YXBkIG5leHQgd2FrZXMuXG5tbS92bXNjYW4uYy03MjAxLVx0XHQgKi9cbi0tXG5tbS92bXNjYW4uYy03MjMzLVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjcyMzQ6XHRcdGtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzIzNS1cbi0tXG5tbS92bXNjYW4uYy03MjQ3LVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjcyNDg6XHRcdGlmIChrc3dhcGRfc2hyaW5rX25vZGUocGdkYXQsIFx1MDAyNnNjKSlcbm1tL3Ztc2Nhbi5jLTcyNDktXHRcdFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcbi0tXG5tbS92bXNjYW4uYy03MjU5LVxubW0vdm1zY2FuLmM6NzI2MDpcdFx0LyogQ2hlY2sgaWYga3N3YXBkIHNob3VsZCBiZSBzdXNwZW5kaW5nICovXG5tbS92bXNjYW4uYy03MjYxLVx0XHRfX2ZzX3JlY2xhaW1fcmVsZWFzZShfVEhJU19JUF8pO1xuLS1cbm1tL3Ztc2Nhbi5jLTcyOTgtXHQgKiB3YXRlcm1hcmtfaGlnaCBhdCB0aGlzIHBvaW50LiBXZSBuZWVkIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlXG5tbS92bXNjYW4uYzo3Mjk5Olx0ICogZmFpbHVyZSBjb3VudCB0byBwcmV2ZW50IHRoZSBrc3dhcGQgdGhyZWFkIGZyb20gc3RvcHBpbmcuXG5tbS92bXNjYW4uYy03MzAwLVx0ICovXG5tbS92bXNjYW4uYy03MzAxLVx0aWYgKCFzYy5ucl9yZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFib29zdGVkKSB7XG5tbS92bXNjYW4uYzo3MzAyOlx0XHRpbnQgZmFpbF9jbnQgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMpO1xubW0vdm1zY2FuLmM6NzMwMzpcdFx0Lyoga3N3YXBkIGNvbnRleHQsIGxvdyBvdmVyaGVhZCB0byB0cmFjZSBldmVyeSBmYWlsdXJlICovXG5tbS92bXNjYW4uYzo3MzA0Olx0XHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3JlY2xhaW1fZmFpbChwZ2RhdC1cdTAwM2Vub2RlX2lkLCBmYWlsX2NudCk7XG5tbS92bXNjYW4uYy03MzA1LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTczNDAtXHQvKlxubW0vdm1zY2FuLmM6NzM0MTpcdCAqIFJldHVybiB0aGUgb3JkZXIga3N3YXBkIHN0b3BwZWQgcmVjbGFpbWluZyBhdCBhc1xubW0vdm1zY2FuLmM6NzM0MjpcdCAqIHByZXBhcmVfa3N3YXBkX3NsZWVwKCkgdGFrZXMgaXQgaW50byBhY2NvdW50LiBJZiBhbm90aGVyIGNhbGxlclxubW0vdm1zY2FuLmM6NzM0MzpcdCAqIGVudGVyZWQgdGhlIGFsbG9jYXRvciBzbG93IHBhdGggd2hpbGUga3N3YXBkIHdhcyBhd2FrZSwgb3JkZXIgd2lsbFxubW0vdm1zY2FuLmMtNzM0NC1cdCAqIHJlbWFpbiBhdCB0aGUgaGlnaGVyIGxldmVsLlxuLS1cbm1tL3Ztc2Nhbi5jLTczNDktLypcbm1tL3Ztc2Nhbi5jOjczNTA6ICogVGhlIHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHggaXMgdXNlZCB0byBwYXNzIHRoZSBoaWdoZXN0IHpvbmUgaW5kZXggdG9cbm1tL3Ztc2Nhbi5jOjczNTE6ICogYmUgcmVjbGFpbWVkIGJ5IGtzd2FwZCBmcm9tIHRoZSB3YWtlci4gSWYgdGhlIHZhbHVlIGlzIE1BWF9OUl9aT05FUyB3aGljaCBpc1xubW0vdm1zY2FuLmM6NzM1MjogKiBub3QgYSB2YWxpZCBpbmRleCB0aGVuIGVpdGhlciBrc3dhcGQgcnVucyBmb3IgZmlyc3QgdGltZSBvciBrc3dhcGQgY291bGRuJiMzOTt0XG5tbS92bXNjYW4uYy03MzUzLSAqIHNsZWVwIGFmdGVyIHByZXZpb3VzIHJlY2xhaW0gYXR0ZW1wdCAobm9kZSBpcyBzdGlsbCB1bmJhbGFuY2VkKS4gSW4gdGhhdFxubW0vdm1zY2FuLmM6NzM1NDogKiBjYXNlIHJldHVybiB0aGUgem9uZSBpbmRleCBvZiB0aGUgcHJldmlvdXMga3N3YXBkIHJlY2xhaW0gY3ljbGUuXG5tbS92bXNjYW4uYy03MzU1LSAqL1xubW0vdm1zY2FuLmM6NzM1NjpzdGF0aWMgZW51bSB6b25lX3R5cGUga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ19kYXRhX3QgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzM1Ny1cdFx0XHRcdFx0ICAgZW51bSB6b25lX3R5cGUgcHJldl9oaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYy03MzU4LXtcbm1tL3Ztc2Nhbi5jOjczNTk6XHRlbnVtIHpvbmVfdHlwZSBjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTczNjAtXG4tLVxubW0vdm1zY2FuLmMtNzM2My1cbm1tL3Ztc2Nhbi5jOjczNjQ6c3RhdGljIHZvaWQga3N3YXBkX3RyeV90b19zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgYWxsb2Nfb3JkZXIsIGludCByZWNsYWltX29yZGVyLFxubW0vdm1zY2FuLmMtNzM2NS1cdFx0XHRcdHVuc2lnbmVkIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzM3Mi1cbm1tL3Ztc2Nhbi5jOjczNzM6XHRwcmVwYXJlX3RvX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG5tbS92bXNjYW4uYy03Mzc0LVxuLS1cbm1tL3Ztc2Nhbi5jLTczODEtXHQgKi9cbm1tL3Ztc2Nhbi5jOjczODI6XHRpZiAocHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcbm1tL3Ztc2Nhbi5jLTczODMtXHRcdC8qXG4tLVxubW0vdm1zY2FuLmMtNzM4NS1cdFx0ICogaXNvbGF0ZSBwYWdlcyBmcm9tIGFuZCBza2lwcyB0aGVtIGluIHRoZSBmdXR1cmUgc2Nhbm5pbmcuXG5tbS92bXNjYW4uYzo3Mzg2Olx0XHQgKiBXaGVuIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgaXQgaXMgcmVhc29uYWJsZSB0byBhc3N1bWVcbm1tL3Ztc2Nhbi5jLTczODctXHRcdCAqIHRoYXQgcGFnZXMgYW5kIGNvbXBhY3Rpb24gbWF5IHN1Y2NlZWQgc28gcmVzZXQgdGhlIGNhY2hlLlxuLS1cbm1tL3Ztc2Nhbi5jLTczOTktXHRcdC8qXG5tbS92bXNjYW4uYzo3NDAwOlx0XHQgKiBJZiB3b2tlbiBwcmVtYXR1cmVseSB0aGVuIHJlc2V0IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHggYW5kXG5tbS92bXNjYW4uYy03NDAxLVx0XHQgKiBvcmRlci4gVGhlIHZhbHVlcyB3aWxsIGVpdGhlciBiZSBmcm9tIGEgd2FrZXVwIHJlcXVlc3Qgb3Jcbi0tXG5tbS92bXNjYW4uYy03NDA0LVx0XHRpZiAocmVtYWluaW5nKSB7XG5tbS92bXNjYW4uYzo3NDA1Olx0XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCxcbm1tL3Ztc2Nhbi5jOjc0MDY6XHRcdFx0XHRcdGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXG5tbS92bXNjYW4uYy03NDA3LVx0XHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KSk7XG5tbS92bXNjYW4uYy03NDA4LVxubW0vdm1zY2FuLmM6NzQwOTpcdFx0XHRpZiAoUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlcikgXHUwMDNjIHJlY2xhaW1fb3JkZXIpXG5tbS92bXNjYW4uYzo3NDEwOlx0XHRcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIsIHJlY2xhaW1fb3JkZXIpO1xubW0vdm1zY2FuLmMtNzQxMS1cdFx0fVxubW0vdm1zY2FuLmMtNzQxMi1cbm1tL3Ztc2Nhbi5jOjc0MTM6XHRcdGZpbmlzaF93YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0KTtcbm1tL3Ztc2Nhbi5jOjc0MTQ6XHRcdHByZXBhcmVfdG9fd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbm1tL3Ztc2Nhbi5jLTc0MTUtXHR9XG4tLVxubW0vdm1zY2FuLmMtNzQyMS1cdGlmICghcmVtYWluaW5nIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmM6NzQyMjpcdCAgICBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xubW0vdm1zY2FuLmM6NzQyMzpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9zbGVlcChwZ2RhdC1cdTAwM2Vub2RlX2lkKTtcbm1tL3Ztc2Nhbi5jLTc0MjQtXG4tLVxubW0vdm1zY2FuLmMtNzQyOS1cdFx0ICogd2F0ZXJtYXJrcyBiZWluZyBicmVhY2hlZCB3aGlsZSB1bmRlciBwcmVzc3VyZSwgd2UgcmVkdWNlIHRoZVxubW0vdm1zY2FuLmM6NzQzMDpcdFx0ICogcGVyLWNwdSB2bXN0YXQgdGhyZXNob2xkIHdoaWxlIGtzd2FwZCBpcyBhd2FrZSBhbmQgcmVzdG9yZVxubW0vdm1zY2FuLmMtNzQzMS1cdFx0ICogdGhlbSBiZWZvcmUgZ29pbmcgYmFjayB0byBzbGVlcC5cbi0tXG5tbS92bXNjYW4uYy03NDQ0LVx0fVxubW0vdm1zY2FuLmM6NzQ0NTpcdGZpbmlzaF93YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0KTtcbm1tL3Ztc2Nhbi5jLTc0NDYtfVxuLS1cbm1tL3Ztc2Nhbi5jLTc0NjAtICovXG5tbS92bXNjYW4uYzo3NDYxOnN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG5tbS92bXNjYW4uYy03NDYyLXtcbi0tXG5tbS92bXNjYW4uYy03NDcwLVx0ICogYW5kIHRoYXQgaWYgd2UgbmVlZCBtb3JlIG1lbW9yeSB3ZSBzaG91bGQgZ2V0IGFjY2VzcyB0byBpdFxubW0vdm1zY2FuLmM6NzQ3MTpcdCAqIHJlZ2FyZGxlc3MgKHNlZSBcJiMzNDtfX2FsbG9jX3BhZ2VzKClcJiMzNDspLiBcJiMzNDtrc3dhcGRcJiMzNDsgc2hvdWxkXG5tbS92bXNjYW4uYy03NDcyLVx0ICogbmV2ZXIgZ2V0IGNhdWdodCBpbiB0aGUgbm9ybWFsIHBhZ2UgZnJlZWluZyBsb2dpYy5cbi0tXG5tbS92bXNjYW4uYy03NDgyLVxubW0vdm1zY2FuLmM6NzQ4MzpcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcbm1tL3Ztc2Nhbi5jOjc0ODQ6XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIE1BWF9OUl9aT05FUyk7XG5tbS92bXNjYW4uYy03NDg1LVx0YXRvbWljX3NldChcdTAwMjZwZ2RhdC1cdTAwM2Vucl93cml0ZWJhY2tfdGhyb3R0bGVkLCAwKTtcbi0tXG5tbS92bXNjYW4uYy03NDg4LVxubW0vdm1zY2FuLmM6NzQ4OTpcdFx0YWxsb2Nfb3JkZXIgPSByZWNsYWltX29yZGVyID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlcik7XG5tbS92bXNjYW4uYzo3NDkwOlx0XHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxubW0vdm1zY2FuLmMtNzQ5MS1cdFx0XHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NDkyLVxubW0vdm1zY2FuLmM6NzQ5Mzprc3dhcGRfdHJ5X3NsZWVwOlxubW0vdm1zY2FuLmM6NzQ5NDpcdFx0a3N3YXBkX3RyeV90b19zbGVlcChwZ2RhdCwgYWxsb2Nfb3JkZXIsIHJlY2xhaW1fb3JkZXIsXG5tbS92bXNjYW4uYy03NDk1LVx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc0OTctXHRcdC8qIFJlYWQgdGhlIG5ldyBvcmRlciBhbmQgaGlnaGVzdF96b25laWR4ICovXG5tbS92bXNjYW4uYzo3NDk4Olx0XHRhbGxvY19vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzQ5OTpcdFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc1MDAtXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmM6NzUwMTpcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIsIDApO1xubW0vdm1zY2FuLmM6NzUwMjpcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xubW0vdm1zY2FuLmMtNzUwMy1cbi0tXG5tbS92bXNjYW4uYy03NTE1LVx0XHQgKiBSZWNsYWltIGJlZ2lucyBhdCB0aGUgcmVxdWVzdGVkIG9yZGVyIGJ1dCBpZiBhIGhpZ2gtb3JkZXJcbm1tL3Ztc2Nhbi5jOjc1MTY6XHRcdCAqIHJlY2xhaW0gZmFpbHMgdGhlbiBrc3dhcGQgZmFsbHMgYmFjayB0byByZWNsYWltaW5nIGZvclxubW0vdm1zY2FuLmM6NzUxNzpcdFx0ICogb3JkZXItMC4gSWYgdGhhdCBoYXBwZW5zLCBrc3dhcGQgd2lsbCBjb25zaWRlciBzbGVlcGluZ1xubW0vdm1zY2FuLmMtNzUxOC1cdFx0ICogZm9yIHRoZSBvcmRlciBpdCBmaW5pc2hlZCByZWNsYWltaW5nIGF0IChyZWNsYWltX29yZGVyKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1MjEtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzUyMjpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF93YWtlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCxcbm1tL3Ztc2Nhbi5jLTc1MjMtXHRcdFx0XHRcdFx0YWxsb2Nfb3JkZXIpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc1MjYtXHRcdGlmIChyZWNsYWltX29yZGVyIFx1MDAzYyBhbGxvY19vcmRlcilcbm1tL3Ztc2Nhbi5jOjc1Mjc6XHRcdFx0Z290byBrc3dhcGRfdHJ5X3NsZWVwO1xubW0vdm1zY2FuLmMtNzUyOC1cdH1cbi0tXG5tbS92bXNjYW4uYy03NTM2LSAqIEEgem9uZSBpcyBsb3cgb24gZnJlZSBtZW1vcnkgb3IgdG9vIGZyYWdtZW50ZWQgZm9yIGhpZ2gtb3JkZXIgbWVtb3J5LiAgSWZcbm1tL3Ztc2Nhbi5jOjc1Mzc6ICoga3N3YXBkIHNob3VsZCByZWNsYWltIChkaXJlY3QgcmVjbGFpbSBpcyBkZWZlcnJlZCksIHdha2UgaXQgdXAgZm9yIHRoZSB6b25lJiMzOTtzXG5tbS92bXNjYW4uYzo3NTM4OiAqIHBnZGF0LiAgSXQgd2lsbCB3YWtlIHVwIGtjb21wYWN0ZCBhZnRlciByZWNsYWltaW5nIG1lbW9yeS4gIElmIGtzd2FwZCByZWNsYWltXG5tbS92bXNjYW4uYy03NTM5LSAqIGhhcyBmYWlsZWQgb3IgaXMgbm90IG5lZWRlZCwgc3RpbGwgd2FrZSB1cCBrY29tcGFjdGQgaWYgb25seSBjb21wYWN0aW9uIGlzXG4tLVxubW0vdm1zY2FuLmMtNzU0MS0gKi9cbm1tL3Ztc2Nhbi5jOjc1NDI6dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTc1NDMtXHRcdCAgIGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03NTU0LVx0cGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG5tbS92bXNjYW4uYzo3NTU1Olx0Y3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NTU2LVxubW0vdm1zY2FuLmMtNzU1Ny1cdGlmIChjdXJyX2lkeCA9PSBNQVhfTlJfWk9ORVMgfHwgY3Vycl9pZHggXHUwMDNjIGhpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jOjc1NTg6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTc1NTktXG5tbS92bXNjYW4uYzo3NTYwOlx0aWYgKFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpIFx1MDAzYyBvcmRlcilcbm1tL3Ztc2Nhbi5jOjc1NjE6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCBvcmRlcik7XG5tbS92bXNjYW4uYy03NTYyLVxubW0vdm1zY2FuLmM6NzU2MzpcdGlmICghd2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCkpXG5tbS92bXNjYW4uYy03NTY0LVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmMtNzU2Ni1cdC8qIEhvcGVsZXNzIG5vZGUsIGxlYXZlIGl0IHRvIGRpcmVjdCByZWNsYWltIGlmIHBvc3NpYmxlICovXG5tbS92bXNjYW4uYzo3NTY3Olx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSB8fFxubW0vdm1zY2FuLmMtNzU2OC1cdCAgICAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jLTc1ODEtXG5tbS92bXNjYW4uYzo3NTgyOlx0dHJhY2VfbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQocGdkYXQtXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTc1ODMtXHRcdFx0XHQgICAgICBnZnBfZmxhZ3MpO1xubW0vdm1zY2FuLmM6NzU4NDpcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCk7XG5tbS92bXNjYW4uYy03NTg1LX1cbm1tL3Ztc2Nhbi5jLTc1ODYtXG5tbS92bXNjYW4uYzo3NTg3OnZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXG5tbS92bXNjYW4uYy03NTg4LXtcbm1tL3Ztc2Nhbi5jLTc1ODktXHQvKiBPbmx5IHRyYWNlIGFjdHVhbCByZXNldHMsIG5vdCByZWR1bmRhbnQgemVyby10by16ZXJvICovXG5tbS92bXNjYW4uYzo3NTkwOlx0aWYgKGF0b21pY194Y2hnKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF9mYWlsdXJlcywgMCkpXG5tbS92bXNjYW4uYzo3NTkxOlx0XHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LVx1MDAzZW5vZGVfaWQsIHJlYXNvbik7XG5tbS92bXNjYW4uYy03NTkyLX1cbi0tXG5tbS92bXNjYW4uYy03NTk0LS8qXG5tbS92bXNjYW4uYzo3NTk1OiAqIFJlc2V0IGtzd2FwZF9mYWlsdXJlcyBvbmx5IHdoZW4gdGhlIG5vZGUgaXMgYmFsYW5jZWQuIFdpdGhvdXQgdGhpc1xubW0vdm1zY2FuLmMtNzU5Ni0gKiBjaGVjaywgc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSAoZS5nLiwgZnJvbSBjZ3JvdXAgbWVtb3J5LmhpZ2hcbm1tL3Ztc2Nhbi5jOjc1OTc6ICogdGhyb3R0bGluZykgY2FuIGtlZXAgcmVzZXR0aW5nIGtzd2FwZF9mYWlsdXJlcyBldmVuIHdoZW4gdGhlIG5vZGVcbm1tL3Ztc2Nhbi5jOjc1OTg6ICogY2Fubm90IGJlIGJhbGFuY2VkLCBjYXVzaW5nIGtzd2FwZCB0byBydW4gZW5kbGVzc2x5LlxubW0vdm1zY2FuLmMtNzU5OS0gKi9cbm1tL3Ztc2Nhbi5jOjc2MDA6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03NjAxLVx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzYwMy1cdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpXG5tbS92bXNjYW4uYzo3NjA0Olx0XHRrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQsIGN1cnJlbnRfaXNfa3N3YXBkKCkgP1xubW0vdm1zY2FuLmMtNzYwNS1cdFx0XHRLU1dBUERfQ0xFQVJfSE9QRUxFU1NfS1NXQVBEIDogS1NXQVBEX0NMRUFSX0hPUEVMRVNTX0RJUkVDVCk7XG4tLVxubW0vdm1zY2FuLmMtNzYwNy1cbm1tL3Ztc2Nhbi5jOjc2MDg6Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxubW0vdm1zY2FuLmMtNzYwOS17XG5tbS92bXNjYW4uYzo3NjEwOlx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF9mYWlsdXJlcykgXHUwMDNlPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xubW0vdm1zY2FuLmMtNzYxMS19XG4tLVxubW0vdm1zY2FuLmM9NzYyMj11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03NjUyLS8qXG5tbS92bXNjYW4uYzo3NjUzOiAqIFRoaXMga3N3YXBkIHN0YXJ0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGluaXQgYW5kIG5vZGUtaG90LWFkZC5cbm1tL3Ztc2Nhbi5jLTc2NTQtICovXG5tbS92bXNjYW4uYzo3NjU1OnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTc2NTYte1xuLS1cbm1tL3Ztc2Nhbi5jLTc2NTgtXG5tbS92bXNjYW4uYzo3NjU5Olx0cGdkYXRfa3N3YXBkX2xvY2socGdkYXQpO1xubW0vdm1zY2FuLmM6NzY2MDpcdGlmICghcGdkYXQtXHUwMDNla3N3YXBkKSB7XG5tbS92bXNjYW4uYzo3NjYxOlx0XHRwZ2RhdC1cdTAwM2Vrc3dhcGQgPSBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKGtzd2FwZCwgcGdkYXQsIG5pZCwgXCYjMzQ7a3N3YXBkJWRcJiMzNDssIG5pZCk7XG5tbS92bXNjYW4uYzo3NjYyOlx0XHRpZiAoSVNfRVJSKHBnZGF0LVx1MDAzZWtzd2FwZCkpIHtcbm1tL3Ztc2Nhbi5jLTc2NjMtXHRcdFx0LyogZmFpbHVyZSBhdCBib290IGlzIGZhdGFsICovXG5tbS92bXNjYW4uYzo3NjY0Olx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gc3RhcnQga3N3YXBkIG9uIG5vZGUgJWQsIHJldD0lcGVcXG5cJiMzNDssXG5tbS92bXNjYW4uYzo3NjY1Olx0XHRcdFx0ICAgbmlkLCBwZ2RhdC1cdTAwM2Vrc3dhcGQpO1xubW0vdm1zY2FuLmMtNzY2Ni1cdFx0XHRCVUdfT04oc3lzdGVtX3N0YXRlIFx1MDAzYyBTWVNURU1fUlVOTklORyk7XG5tbS92bXNjYW4uYzo3NjY3Olx0XHRcdHBnZGF0LVx1MDAzZWtzd2FwZCA9IE5VTEw7XG5tbS92bXNjYW4uYy03NjY4LVx0XHR9IGVsc2Uge1xubW0vdm1zY2FuLmM6NzY2OTpcdFx0XHR3YWtlX3VwX3Byb2Nlc3MocGdkYXQtXHUwMDNla3N3YXBkKTtcbm1tL3Ztc2Nhbi5jLTc2NzAtXHRcdH1cbm1tL3Ztc2Nhbi5jLTc2NzEtXHR9XG5tbS92bXNjYW4uYzo3NjcyOlx0cGdkYXRfa3N3YXBkX3VubG9jayhwZ2RhdCk7XG5tbS92bXNjYW4uYy03NjczLX1cbi0tXG5tbS92bXNjYW4uYy03Njc4LSAqL1xubW0vdm1zY2FuLmM6NzY3OTp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKVxubW0vdm1zY2FuLmMtNzY4MC17XG5tbS92bXNjYW4uYy03NjgxLVx0cGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjk4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUGFnZSBSZWNsYWltKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYWdlIHJlY2xhaW0gYnVzaW5lc3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgd2FrZXVwX2tzd2FwZGAg4oCTIGl0JiMzOTtzIGEga3RocmVhZCwgc28gdGhhdCYjMzk7cyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWVzIEkga25vdywgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBkaXJlY3QgcmVjbGFpbSwgcmlnaHQ/IExldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGdldCB1cyBpbnRvIHRoZSByZWNsYWltIHByb2Nlc3M/CgpIbW0sIEkgc2VlIGBzaHJpbmtfbm9kZWAgaXMgdGhlIGNvcmUgd29ya2hvcnNlLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCBsb29rcyBsaWtlIGBzaHJpbmtfbHJ1dmVjYCBpcyBjYWxsZWQgYnkgYHNocmlua19ub2RlYCwgd2hpY2ggaXMgdGhlbiBjYWxsaW5nIGBldmljdF9mb2xpb3NgLiBJIHNob3VsZCBsb29rIGludG8gdGhpcyB3aG9sZSBjYWxsIGNoYWluIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHByb2Nlc3MuIEFuZCBJIHNlZSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgIGFzIHdlbGwuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBleGFtaW5lIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBtb3JlIGNsb3NlbHkuIEkgc2hvdWxkIGZpcnN0IGNoZWNrIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuIElmIG5vdCwgdGhlbiBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdG8gY2FsbCB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byBgbW0vdm1zY2FuLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHRyeV90b19mcmVlX3BhZ2VzYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIHBhZ2UgcmVjbGFpbSBtZWNoYW5pc20ga2lja3MgaW4uIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsIHRyaWVzIHRvIHBoeXNpY2FsbHkgZnJlZSB1cCBtZW1vcnksIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIExSVSBsaXN0cywgem9uZXMsIGFuZCByZWNsYWltIHRhcmdldHMuIFdoYXQgYXJlIHRoZSBrZXkgaGV1cmlzdGljcyBhbmQgdGhyZXNob2xkcyBpdCB1c2VzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gdGhhdCBqdW1wIG91dD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBOVU1BIG5vZGVzIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSB0eXBlcy4gQW55IHJlY2VudCBjaGFuZ2VzIHRvIG1lbW9yeSBwcmVzc3VyZSBjYWxjdWxhdGlvbnMgd291bGQgYmUgd29ydGggcmV2aWV3aW5nIGhlcmUgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY0ODU9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NTE1LSAqL1xubW0vdm1zY2FuLmM6NjUxNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxubW0vdm1zY2FuLmMtNjUxNy1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz02NjU4PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY3MzctXG5tbS92bXNjYW4uYzo2NzM4OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNjczOS1cdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS92bXNjYW4uYy02NzcyLVxubW0vdm1zY2FuLmM6Njc3MzpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02Nzc0LVxuLS1cbm1tL3Ztc2Nhbi5jPTY4MjQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODU1LVxubW0vdm1zY2FuLmM6Njg1NjpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02ODU3LVxuLS1cbm1tL3Ztc2Nhbi5jPTc2MjI9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzY0MS1cbm1tL3Ztc2Nhbi5jOjc2NDI6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzY0My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSWRlbnRpZnlpbmcgS2V5IEZ1bmN0aW9uIFN5bWJvbHMgYW5kIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBqdW1wIG91dCBpbW1lZGlhdGVseSBhcyBnb29kIHBvaW50cyBvZiBmb2N1czogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgd2FrZXVwX2tzd2FwZGAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBvciBjb250cm9sIHBvaW50cyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoYXQmIzM5O3MgY2hhbmdpbmcgKmFyb3VuZCogdGhlbSwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCB0aGUgY29udGV4dC4gVGhpcyBwYXRjaCB0b3VjaGVzIGEgc2xldyBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzOiBgbW0vdm1zY2FuLmNgLCBgbW0vc3dhcC5jYCwgYG1tL3dvcmtpbmdzZXQuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbW16b25lLmNgLCBhbmQgYG1tL3Ztc3RhdC5jYC4gVGhhdCYjMzk7cyBiYXNpY2FsbHkgdGhlIHdob2xlIHNoZWJhbmcgd2hlbiBpdCBjb21lcyB0byB0aGUgVk0gc3Vic3lzdGVtLiBJdCYjMzk7cyBhIGJyb2FkIHJhbmdlIGFuZCBjb25maXJtcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuCgpTaW5jZSBpdCBtb2RpZmllcyBgbW0vbWVtY29udHJvbC5jYCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGBDT05GSUdfTUVNQ0dgLiBJZiB0aGlzIHBhdGNoJiMzOTtzIGNoYW5nZXMgZGVwZW5kIG9uIG1lbW9yeSBjb250cm9sIGdyb3VwcywgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIGNhbiBjb25maXJtLCBmcm9tIGV4cGVyaWVuY2UsIHRoYXQgYG1tL21lbWNvbnRyb2wuY2AgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhcm91bmQgaG93IGFuZCB3aGVyZSB0aGlzIGNvbmZpZyB3aWxsIGNvbWUgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzM5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL21lbWNvbnRyb2wtdjEuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IHJhZGFyIGFzIG1lbWNnLXJlbGF0ZWQuIEJ1dCwgaXQgYWxzbyBoaXRzIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9zd2FwLmNgLCB3aGljaCBhcmUgY29yZSwgYWx3YXlzLWNvbXBpbGVkIGNvbXBvbmVudHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiDigJMgYXJlIHdlIGludHJvZHVjaW5nIGFueSBuZXcgYCNpZmRlZmAgYmxvY2tzPyBJIGRvdmUgaW50byBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAsIGNoZWNraW5nIHRoZSBgZW51bSBub2RlX3N0YXRfaXRlbWAgZm9yIGFueSBjbHVlcy4gTm9wZSwgbm8gbmV3IGAjaWZkZWZgcyB0aGVyZS4KCk5leHQsIEkganVtcGVkIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrZWQgYHByZXBhcmVfc2Nhbl9jb250cm9sKClgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEFnYWluLCBubyBuZXcgYCNpZmRlZmBzLiBTbywgdGhlIGNvcmUgY2hhbmdlcyBpbiBgbW0vdm1zY2FuLmNgIGRvbiYjMzk7dCBzdHJpY3RseSAqcmVxdWlyZSogYENPTkZJR19NRU1DR2AuIEhvd2V2ZXIsIGJlY2F1c2UgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgIGFyZSBiZWluZyBtb2RpZmllZCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgZW5hYmxpbmcgYm90aCBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgIGlzIHRoZSByaWdodCBtb3ZlIHRvIGVuc3VyZSB3ZSBmdWxseSBjb3ZlciB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBNRU1DR19WMWAgaXMgYWN0dWFsbHkgZGVmaW5lZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR19WMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAzMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBNRU1DR19WMWAgS2NvbmZpZyBvcHRpb24gaXMgZGVmaW5lZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlc2Ugc29ydHMgb2Yga2VybmVsIGZlYXR1cmVzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgb3B0aW9ucy4gYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhcyBpdCBvZnRlbiBoYW5kbGVzIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb25zLiBCdXQsIGdpdmVuIHRoYXQgYE1FTUNHX1YxYCBzY3JlYW1zIG1lbW9yeSBtYW5hZ2VtZW50LCBJJiMzOTttIGxlYW5pbmcgbW9yZSB0b3dhcmRzIGBtbS9LY29uZmlnYCByaWdodCBhd2F5LiBJdCYjMzk7cyB0aGUgbW9yZSBsb2dpY2FsIGhvbWUgZm9yIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBpdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gZmlsZXMsIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjY9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzUtXG5pbml0L0tjb25maWc6MTA3Njpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc3LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkxLVxuaW5pdC9LY29uZmlnOjEwOTI6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5My1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5OC1cbmluaXQvS2NvbmZpZzoxMDk5OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDAtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0OTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgaG93IHRvIGJlc3QgYXBwcm9hY2ggYSBkZWVwZXIgZGl2ZS4gRW5hYmxpbmcgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCBzZWVtcyBsaWtlIGEgc29saWQgZm91bmRhdGlvbiwgSSB1c3VhbGx5IHN0YXJ0IHRoZXJlIHRvIGJlIGFibGUgdG8gZ2V0IGdvb2Qgb2JzZXJ2YWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQga2V5IGVudHJ5IHBvaW50cyBmb3IgbWVtb3J5IHJlY2xhaW0uIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IGFyZWFzIHdoZXJlIHRoZSB3b3JraW5nc2V0IGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB3YWtldXBfa3N3YXBkYC4KCkkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29uc2lkZXIgYHNocmlua19hbGxfbWVtb3J5YCwgYXMgdGhhdCYjMzk7cyB1c2VkIGZvciBoaWJlcm5hdGlvbiwgdGhvdWdoIGl0IG1heSBub3QgYmUgZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIHdvcmtpbmdzZXQgZm9jdXMgcmlnaHQgbm93LiBMZXQgbWUgc2VlLi4uIEkgc2VlIGBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGVgIGlzIG1lbnRpb25lZCBpbiBgbW0vc3dhcC5jYCwgYnV0IGl0IGp1c3QgYXBwZWFycyB0byBiZSBjb250ZXh0IGhlcmUsIG5vdCBzb21ldGhpbmcgdG8gZm9jdXMgb24uCgpJIGFsc28gc2VlIHRoYXQgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIHdlcmUgcmVtb3ZlZC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbmFsaXR5IGhhcyBnb25lLiBBaCwgaGVyZSBpdCBpczogYHdvcmtpbmdzZXRfcmVmYXVsdGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gcmVtb3ZlIHRoZSBvbGQgcmVmYXVsdCBjb3N0IGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyByZWZhdWx0ZWQsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gZXhhbWluZS4KClNvLCAqaXMqIGB3b3JraW5nc2V0X3JlZmF1bHRgIHRoZSBjb3JyZWN0IHN5bWJvbCB0byBmb2N1cyBvbj8gWWVwLCBhYnNvbHV0ZWx5LiBUaGF0IHNlZW1zIGxpa2UgYW4gaWRlYWwgZW50cnkgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIHdvcmtpbmdzZXQgY29kZSBhbmQgc2VlaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBJdCYjMzk7cyBhIGtleSBzcG90IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgd2hlbiBtZW1vcnkgaXMgYWN0aXZlbHkgYmVpbmcgdXNlZCBhbmQgcmUtdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXG5tbS93b3JraW5nc2V0LmM6NTQwOiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNTQ3LSAqL1xubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyOTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHM6CgoqKlJlZmxlY3Rpbmcgb24gYHdvcmtpbmdzZXRfcmVmYXVsdGAqKgoKQWxyaWdodCwgbGV0IG1lIHRoaW5rLiBgd29ya2luZ3NldF9yZWZhdWx0YC4uLiBpcyB0aGF0IGFuIGV4cG9ydGVkIGZ1bmN0aW9uIG9yIHZhcmlhYmxlPyBJIG5lZWQgdG8ga25vdyBpZiBpdCYjMzk7cyBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgaXRzIGRlZmluaW5nIG1vZHVsZSBvciBpZiBpdCYjMzk7cyBhbiBpbnRlcm5hbCBkZXRhaWwuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGF0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgbWFpbnRhaW5hYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGJyZWFraW5nIGNoYW5nZXMgaW4gZnV0dXJlIHJldmlzaW9ucyBvZiB0aGUgc29mdHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYmVoaW5kIGl0cyBleHBvc3VyZS4gSXMgaXQgZm9yIHBlcmZvcm1hbmNlIHByb2ZpbGluZywgZGVidWdnaW5nLCBhIHNwZWNpZmljIG9wdGltaXphdGlvbiBzdHJhdGVneSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIHJlYXNvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIGl0cyBpbXBhY3QgYW5kIGFueSBwb3RlbnRpYWwgYWx0ZXJuYXRpdmVzLiBUaGlzIGltcGFjdHMgaG93IEkgc2hvdWxkIHByb2NlZWQgd2l0aCB3aGF0ZXZlciB0YXNrIGlzIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qd29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGZvciBzd2FwIG1hbmFnZW1lbnQgYXJlIGxvY2F0ZWQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UuKiogQW5kIGdpdmVuIG15IGV4cGVyaWVuY2UsIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIGNoZWNrIHRoZXJlIGZpcnN0OyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlbGF0ZWQgdG8gc3dhcCBzcGFjZSwgcGFnZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBpbiB0aGF0IGNvbnRleHQsIGFuZCB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzIG9mIHN3YXBwaW5nIHBhZ2VzIHRvIGFuZCBmcm9tIGRpc2suIEl0JiMzOTtzIGEgc29saWQsIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmg9MzAwPXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozMDE6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTMwMi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBUaGlzIEFQSSBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBub24tc3RhdGljIEFQSSBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gdmFyaW91cyBwYXJ0cyBvZiB0aGUga2VybmVsLCBub3QganVzdCBhIGxvY2FsaXplZCBtb2R1bGUuIFRoYXQgbmFycm93cyBkb3duIHRoZSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiBjb250ZXh0LCB3ZSBzaG91bGQgbG9vayBjbG9zZWx5IGF0OgoKKiAgIGB0cnlfdG9fZnJlZV9wYWdlc2AKKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYAoqICAgYHdha2V1cF9rc3dhcGRgCiogICBgd29ya2luZ3NldF9yZWZhdWx0YAoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IG15IGluaXRpYWwgaHVuY2guIEl0IHNlZW1zIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgaW5kZWVkIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciAqZGlyZWN0KiByZWNsYWltLCBtYWtpbmcgaXQgYSB2ZXJ5IHN0cm9uZyBjYW5kaWRhdGUuIGB3YWtldXBfa3N3YXBkYCBpcyB0aGUgdHJpZ2dlciBmb3Igd2FraW5nIHVwIHRoZSBrc3dhcGQga2VybmVsIHRocmVhZCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHdvcmtpbmdzZXQgcmVmYXVsdCBtZWNoYW5pc20uCgpXYWl0LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlPyBMb29raW5nIGF0IHRoZSBjb2RlLCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBhbHNvIGEgcG90ZW50aWFsLCBidXQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbmxpbmUgb3IgZXhwb3J0ZWQ/IE9oLCB3YWl0LCBpdCYjMzk7cyBhY3R1YWxseSBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGFzIGEgcG90ZW50aWFsIHBvaW50IGZvciBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00ODY9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDgtLyoqXG5tbS9tZW1jb250cm9sLmM6NTA5OiAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZ1xubW0vbWVtY29udHJvbC5jLTUxMC0gKiBAbHJ1dmVjOiB0aGUgTFJVIHZlY3RvciB0byByZWFkIGZyb21cbi0tXG5tbS9tZW1jb250cm9sLmMtNTI2LSAqL1xubW0vbWVtY29udHJvbC5jOjUyNzp1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS9tZW1jb250cm9sLmMtNTI4LVx0XHRcdFx0XHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ5OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBGbG93KioKClRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlLCBkaXJlY3QgcmVhZDsgaXQmIzM5O3MgYSBkeW5hbWljIHByb2Nlc3MgdGllZCB0byBnZXR0ZXJzLCB3aXRoIHRoZSByZWFsIG1lYXQgYmVpbmcgaW4gYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhbmQgYGV2aWN0X2ZvbGlvc2AuIEJlY2F1c2UgdGhleSBhcmUgc3RhdGljLCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBrZXkuCgpgc2hyaW5rX25vZGVgIGlzIGNhbGxpbmcgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgd2hpY2ggaXMgaXRzZWxmIGJlaW5nIGNhbGxlZCBieSBhIHNlcmllcyBvZiBmdW5jdGlvbnM6IGBrc3dhcGRfc2hyaW5rX25vZGVgLCBgc2hyaW5rX3pvbmVzYCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4KCmBzaHJpbmtfem9uZXNgIHRoZW4gY2FsbHMgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgYW5kIHRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuCgpUaGVyZWZvcmUsIHRoZSBwbGFjZXMgSSB3YW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcyB0aGUgcG9pbnRzIHdoZXJlIHRoaXMgZmxvdyBpcyBraWNrZWQgb2ZmLiBOb3csIGxldCYjMzk7cyBzaGlmdCBmb2N1cyB0byBgZXZpY3RfZm9saW9zYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDgyNT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4NTgtXG5tbS92bXNjYW4uYzo0ODU5OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDg2MC1cdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmM9NTAyMT1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwNDQtXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTA0NTpcdFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmMtNTA0Ni1cdFx0aWYgKCFkZWx0YSlcbi0tXG5tbS92bXNjYW4uYz01NjQ4PXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU2NjgtXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTY2OTpcdFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxubW0vdm1zY2FuLmMtNTY3MC1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzOTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWx2aW5nIGludG8gdGhlIE1HTFJVIEV2aWN0aW9uIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBgZXZpY3RfZm9saW9zYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLCBhbmQgdGhvc2UgYXJlIGNvcmUgY29tcG9uZW50cyBvZiBgbHJ1X2dlbmAsIHRoZSBNdWx0aXBsZS1HZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgbWVjaGFuaXNtLiBCdXQgaGFuZyBvbiwgaXMgYGV2aWN0X2ZvbGlvc2AgYWN0dWFsbHkgKnBhcnQqIG9mIE1HTFJVPyBNeSBtZW1vcnkmIzM5O3MgYSBiaXQgZnV6enkgb24gdGhhdCBzcGVjaWZpYyByZWxhdGlvbnNoaXAuIFRpbWUgdG8gdmVyaWZ5LiBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBgZXZpY3RfZm9saW9zYCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgbW0vdm1zY2FuLmNgIHRvIGNsYXJpZnkgaXRzIGV4YWN0IHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIE1HTFJVIGZyYW1ld29yayBhbmQgY29uZmlybSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIExSVSBnZW5lcmF0aW9uIG1hbmFnZW1lbnQuIEl0JiMzOTtzIGltcG9ydGFudCB0byBoYXZlIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmbG93IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4MjU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODU4LVxubW0vdm1zY2FuLmM6NDg1OTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4NjAtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwMjE9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ0LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUwNDU6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwNDYtXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTY0OD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NjY4LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU2Njk6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU2NzAtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDgyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1HTFJVIENvbnNpZGVyYXRpb24gZm9yIFRlc3RpbmcqKgoKT2theSwgTUdMUlUuIFJpZ2h0LiBOb3csIGEga2V5IHF1ZXN0aW9uIHBvcHMgdXA6IGlzIE1HTFJVIGFjdHVhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdD8gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gQWgsIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGNvbmZpZyBvcHRpb24gZm9yIE1HTFJVLCBzbyB0aGF0JiMzOTtzIHRoZSBvbmUgdG8gY2hlY2suIExldCYjMzk7cyBzZWUgaWYgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGEgcmVxdWlyZW1lbnQgaW4gdGhpcyBzY2VuYXJpby4KClRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AsIGFuZCB0aGF0IGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgTUdMUlUgY29kZWJhc2UuIEludGVyZXN0aW5nLCBpdCAqYWxzbyogdG91Y2hlcyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YC4gVGhvc2UgYXJlIHBhcnQgb2YgdGhlIGFjdGl2ZS9pbmFjdGl2ZSBMUlUsIHNvIHRoZSBsZWdhY3kgTFJVLiBTbywgdGhpcyBwYXRjaCBjbGVhcmx5IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIE1HTFJVLgoKVGhlcmVmb3JlLCB0byB0aG9yb3VnaGx5IGV2YWx1YXRlIHRoaXMgcGF0Y2gsIEkgdGhpbmsgd2UgKnJlYWxseSogbmVlZCB0byBlbmFibGUgYENPTkZJR19MUlVfR0VOYCBkdXJpbmcgdGVzdGluZyB0byBlbnN1cmUgd2UmIzM5O3JlIGV4ZXJjaXNpbmcgdGhlIE1HTFJVIHBhdGggYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlIHRvIGJlIHN1cmUuIExldCYjMzk7cyBzZWUgd2hhdCBgTFJVX0dFTmAgYnJpbmdzIHRvIHRoZSB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTQwNj1lbmRpZiAjIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xNDA4LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDk6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQxMC1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxNy1cbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTktXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDIzLVxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjUtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQzMi1cbm1tL0tjb25maWc6MTQzMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQzNC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3NDMKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogOTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgcGF0Y2guIEZpcnN0LCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGxvb2sgbGlrZSBnb29kIGZsYWdzIHRvIGVuYWJsZSDigJMgdGhleSYjMzk7cmUga2V5IHRvIHRoZSBuZXcgTFJVIGltcGxlbWVudGF0aW9uLiBOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBjb2RlLiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGlzIGhhbmRsaW5nIHRoZSBsZWdhY3kgTFJVLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYm90aCB0aGUgbGVnYWN5IExSVSBhbmQgdGhlIE1HTFJVLiBTcGVjaWZpY2FsbHksIHRoZSBsZWdhY3kgTFJVIHRvdWNoZXMgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCB3aGlsZSBNR0xSVSB1c2VzIGBldmljdF9mb2xpb3NgLiBJIHNob3VsZCBiZSB0ZXN0aW5nIGJvdGguIFdlIGNhbiBqdXN0IHNwZWNpZnkgYExSVV9HRU5gLCBhbmQgdGhlIHN5c3RlbSB3aWxsIGhhbmRsZSBgTFJVX0dFTl9FTkFCTEVEYC4KClRoZSBpbml0aWFsIHBsYW4gaXMgdG8gZW5hYmxlIGBMUlVfR0VOYCBzbyB0aGF0IHRoZSBmZWF0dXJlIGlzIGNvbXBpbGVkIGluLiBgTFJVX0dFTl9FTkFCTEVEYCBtaWdodCBiZSBmaW5lIHRvIGVuYWJsZSB0b28uIEl0IG1pZ2h0IGJlIGJldHRlciB0byBoYXZlIGxlZ2FjeSBMUlUgdGVzdGVkIG1vcmUuIEJ1dCBpdCYjMzk7cyBmaW5lLCBzeXprYWxsZXIgY2FuIHRvZ2dsZSBgTFJVX0dFTl9FTkFCTEVEYCBpZiBpdCBrbm93cyBob3csIG9yIHdlIGNhbiBqdXN0IHByb3ZpZGUgYExSVV9HRU5gIGFuZCBsZXQgdGhlIGRlZmF1bHQgYmUgd2hhdGV2ZXIuIElmIHdlIGRvbiYjMzk7dCBzcGVjaWZ5IGBMUlVfR0VOX0VOQUJMRURgLCBpdCBtaWdodCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0LCB3aGljaCB0ZXN0cyBsZWdhY3kgTFJVLiBJZiB3ZSBzcGVjaWZ5IGl0LCBpdCB0ZXN0cyBNR0xSVS4gU28gaXQmIzM5O3MgYmVzdCB0byBlbmFibGUgYExSVV9HRU5gIGluIHRoZSBjb25maWcuCgpUaGVyZWZvcmUsIHRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTtsbCB1c2UgYXJlOgoqICAgYE1FTUNHYAoqICAgYE1FTUNHX1YxYAoqICAgYExSVV9HRU5gCgpJJiMzOTt2ZSBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgYE1FTUNHX1YxYCBpcyBwcmVzZW50IGluIGBpbml0L0tjb25maWdgLgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBjcml0aWNhbCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgdG8gY292ZXIgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNoYW5nZWQgZnVuY3Rpb25zLCBzbyBJJiMzOTttIGxvb2tpbmcgYXQ6CiogICBgdHJ5X3RvX2ZyZWVfcGFnZXNgCiogICBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AKKiAgIGB3YWtldXBfa3N3YXBkYAoqICAgYHdvcmtpbmdzZXRfcmVmYXVsdGAKCkFyZSB0aGVyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIGZvciBNR0xSVT8gYGxydV9nZW5fc2hyaW5rX25vZGVgIGlzIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGNvdmVycyBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGVyZS4KCkkmIzM5O20gbG9va2luZyBhdCBgcGFnZW91dGAuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCBieSBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBgc2hyaW5rX2ZvbGlvX2xpc3RgIGlzIGNhbGxlZCBieSBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCwgc28gSSB0aGluayB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2Agd2lsbCBjb3ZlciBpdC4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGVzZS4KKiAgIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGNhbGxlZCBieSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLgoqICAgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGNhbGxlZCBieSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCB3aGVuIG1lbWNnIGlzIGRpc2FibGVkLgoqICAgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3Ztc3RhdC5oYC4KClRoZSBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBJIGNhdGVnb3JpemUgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAuCgpJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoZSBmaW5hbCBsaXN0IG9mIEZvY3VzIFN5bWJvbHM6CgoqICAgYHRyeV90b19mcmVlX3BhZ2VzYAoqICAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgCiogICBgd2FrZXVwX2tzd2FwZGAKKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRgCgpGaW5hbCBDb25maWdzOgoKKiAgIGBNRU1DR2AKKiAgIGBNRU1DR19WMWAKKiAgIGBMUlVfR0VOYAoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgTUVNQ0dfVjFgIGlzIGNvcnJlY3QuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYExSVV9HRU5gIGlzIGNvcnJlY3QuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBjb3JyZWN0LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBjb3JyZWN0LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGB3YWtldXBfa3N3YXBkYCBpcyBjb3JyZWN0LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGNvcnJlY3QuIEFsbCBjaGVja3MgYXJlIGdyZWVuLiBOb3cgSSYjMzk7bGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIExSVSByZWNsYWltIGxvZ2ljIGFuZCBjb3N0IGNhbGN1bGF0aW9uIGZvciBib3RoIGxlZ2FjeSBMUlUgYW5kIE1HTFJVLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBjb3VudGVycyBmb3IgTFJVIHN0YXRzIGFuZCBjaGFuZ2VzIGhvdyBzY2FuIGJhbGFuY2UgaXMgZGV0ZXJtaW5lZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3dha2V1cF9rc3dhcGQmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NDk6MjQuNzA4MzI0NTg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUxNzEwOTcxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OToyNC43MDgzMzA1NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjIxNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMyM2JkMzA4ZDRhNzc2ZDU2MDEyYjhjMmM4ZmZmMWUzZmRlMmEyYTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDg6NDk6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDgxNzBiYjgwNjZhMjJmLi43YWU2N2FjMjM1MTA3NiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTk0Nyw2ICs5NDcsOCBAQCB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xcbiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTtcXG4gYm9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpO1xcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbiBcXG5AQCAtMTM5OSw2ICsxNDAxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4re1xcbitcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjg1MzAzYzU4NjdjODRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTMyMyw2ICszMjMsOCBAQCBlbnVtIG5vZGVfc3RhdF9pdGVtIHtcXG4gXFx0UEdTQ0FOX1BST0FDVElWRSxcXG4gXFx0UEdTQ0FOX0FOT04sXFxuIFxcdFBHU0NBTl9GSUxFLFxcbitcXHRQR1JPVEFURV9BTk9OLFxcbitcXHRQR1JPVEFURV9GSUxFLFxcbiBcXHRQR1JFRklMTCxcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gXFx0TlJfSFVHRVRMQixcXG5AQCAtNzU1LDYgKzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbitzdHJ1Y3QgbHJ1X2Nvc3Qge1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0Y291bnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRsYXN0X3JvdGF0ZWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRsYXN0X2lvO1xcbit9O1xcbitcXG4gc3RydWN0IGxydXZlYyB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRsaXN0c1tOUl9MUlVfTElTVFNdO1xcbiBcXHQvKiBwZXIgbHJ1dmVjIGxydV9sb2NrIGZvciBtZW1jZyAqL1xcbkBAIC03NjMsOSArNzcxLDEyIEBAIHN0cnVjdCBscnV2ZWMge1xcbiBcXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxcbiBcXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXFxuIFxcdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cXG4rXFx0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xcbitcXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxcbiBcXHQgKi9cXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGFub25fY29zdDtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZpbGVfY29zdDtcXG4rXFx0c3RydWN0IGxydV9jb3N0XFx0XFx0XFx0Y29zdFtBTk9OX0FORF9GSUxFXTtcXG4rXFx0LyogUHJvdGVjdHMgY29zdFtdLiAqL1xcbitcXHRzcGlubG9ja190XFx0XFx0XFx0Y29zdF9sb2NrO1xcbiBcXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXFxuIFxcdGF0b21pY19sb25nX3RcXHRcXHRcXHRub25yZXNpZGVudF9hZ2U7XFxuIFxcdC8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMzA5LDkgKzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlcztcXG4gXFxuIFxcbiAvKiBsaW51eC9tbS9zd2FwLmMgKi9cXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXFxuLVxcdFxcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XFxuIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7XFxuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcXG4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oXFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oXFxuQEAgLTIwLDcgKzIwLDYgQEAgc3RydWN0IHJlY2xhaW1fc3RhdCB7XFxuIFxcdHVuc2lnbmVkIG5yX2Nvbmdlc3RlZDtcXG4gXFx0dW5zaWduZWQgbnJfd3JpdGViYWNrO1xcbiBcXHR1bnNpZ25lZCBucl9pbW1lZGlhdGU7XFxuLVxcdHVuc2lnbmVkIG5yX3BhZ2VvdXQ7XFxuIFxcdHVuc2lnbmVkIG5yX2FjdGl2YXRlW0FOT05fQU5EX0ZJTEVdO1xcbiBcXHR1bnNpZ25lZCBucl9yZWZfa2VlcDtcXG4gXFx0dW5zaWduZWQgbnJfdW5tYXBfZmFpbDtcXG5AQCAtMTk0LDYgKzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxcbiBcXHRyZXR1cm4geDtcXG4gfVxcbiBcXG4rLypcXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2YgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcXG4rICogc25hcHNob3QgYSBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGNvdW50ZXIgYW5kIHN1YnRyYWN0IHR3byBzYW1wbGVzLlxcbisgKiBSZXR1cm5zIHRoZSByYXcgd3JhcHBpbmcgdmFsdWUgc28gdGhhdCB1bnNpZ25lZCBtb2R1bGFyIHN1YnRyYWN0aW9uIHN0YXlzXFxuKyAqIGNvcnJlY3QgYWNyb3NzIGEgc2lnbmVkLWxvbmcgb3ZlcmZsb3cgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZVxcbisgKiBjbGFtcCBpbiBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKCkgd291bGQgb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2Ugc3B1cmlvdXNcXG4rICogZGVsdGEuIERvIE5PVCB1c2UgZm9yIG5vbi1tb25vdG9uaWMgcGFnZS1jb3VudCByZWFkcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXFxuK3tcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXFx1MDAyNnZtX25vZGVfc3RhdFtpdGVtXSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcXG4ge1xcbiBcXHRWTV9XQVJOX09OX09OQ0Uodm1zdGF0X2l0ZW1faW5fYnl0ZXMoaXRlbSkpO1xcbkBAIC0yNTksMTEgKzI3MSwxNCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XFxuIGV4dGVybiB2b2lkIGZvbGRfdm1fbnVtYV9ldmVudHModm9pZCk7XFxuICNlbHNlXFxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGUobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShpdGVtKVxcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKGl0ZW0pXFxuKyNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhpdGVtKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKVxcbiB7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXFxuaW5kZXggNzY1MDY5MjExNTY3OGMuLjA5MWJjOWZmZWU0NGEwIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xcbkBAIC0xOTg4LDggKzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbiBcXHRcXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcXG4gXFx0XFx0XFx0bXogPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbiBcXG4tXFx0XFx0XFx0YW5vbl9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuYW5vbl9jb3N0O1xcbi1cXHRcXHRcXHRmaWxlX2Nvc3QgKz0gbXotXFx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XFxuK1xcdFxcdFxcdGFub25fY29zdCArPSBtei1cXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcXG4rXFx0XFx0XFx0ZmlsZV9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuY29zdFtXT1JLSU5HU0VUX0ZJTEVdLmNvdW50O1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNlcV9idWZfcHJpbnRmKHMsIFxcXCJhbm9uX2Nvc3QgJWx1XFxcXG5cXFwiLCBhbm9uX2Nvc3QpO1xcbiBcXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiZmlsZV9jb3N0ICVsdVxcXFxuXFxcIiwgZmlsZV9jb3N0KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZmQuLmNlOWM0ZmI5MjQ3MGI2IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zOTMsNiArMzkzLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcXG4gXFx0TlJfU0hNRU1fVEhQUyxcXG4gXFx0TlJfRklMRV9USFBTLFxcbiBcXHROUl9BTk9OX1RIUFMsXFxuK1xcdE5SX1ZNU0NBTl9XUklURSxcXG4gXFx0TlJfVk1BTExPQyxcXG4gXFx0TlJfS0VSTkVMX1NUQUNLX0tCLFxcbiBcXHROUl9QQUdFVEFCTEUsXFxuQEAgLTQxOSw2ICs0MjAsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbiBcXHRQR1NDQU5fUFJPQUNUSVZFLFxcbiBcXHRQR1NDQU5fQU5PTixcXG4gXFx0UEdTQ0FOX0ZJTEUsXFxuK1xcdFBHUk9UQVRFX0FOT04sXFxuK1xcdFBHUk9UQVRFX0ZJTEUsXFxuIFxcdFBHUkVGSUxMLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHROUl9IVUdFVExCLFxcbkBAIC01MDIsNiArNTA1LDQyIEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4gXFx0cmV0dXJuIHg7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMgLSBub24tY2xhbXBpbmcgbHJ1dmVjIHN0YXQgcmVhZCBmb3IgZGVsdGEgc2FtcGxpbmdcXG4rICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXFxuKyAqIEBpZHg6IHRoZSBub2RlX3N0YXRfaXRlbSB0byByZWFkXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXFxuKyAqIGNsYW1wLW5lZ2F0aXZlLXRvLXplcm8gc3RlcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpLiBJbnRlbmRlZCBmb3IgY2FsbGVyc1xcbisgKiB0aGF0IHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d29cXG4rICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xcbisgKiBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZSBjbGFtcCB3b3VsZFxcbisgKiBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91cyBkZWx0YS5cXG4rICpcXG4rICogRG8gTk9UIHVzZSBmb3Igbm9uLW1vbm90b25pYyBwYWdlLWNvdW50IHJlYWRzIHdoZXJlIGEgdHJhbnNpZW50IG5lZ2F0aXZlXFxuKyAqIHJlYWRpbmcgZnJvbSBwZXItQ1BVIGRlbHRhIHNrZXcgbXVzdCBwcmVzZW50IGFzIHplcm8uXFxuKyAqXFxuKyAqIFhYWDogVGhpcyBoZWxwZXIgKGFuZCBpdHMgbm9kZS9nbG9iYWwgcGVlcnMpIGV4aXN0cyBiZWNhdXNlIHNvbWVcXG4rICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyBhcmUgc3RvcmVkIGluXFxuKyAqIGVudW0gbm9kZV9zdGF0X2l0ZW0uXFxuKyAqL1xcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuK1xcdFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xcbitcXG4rXFx0aSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XFxuK1xcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpUkVBRF9PTkNFKHBuLVxcdTAwM2VscnV2ZWNfc3RhdHMtXFx1MDAzZXN0YXRlW2ldKTtcXG4rfVxcbitcXG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmNcXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XFxuLS0tIGEvbW0vbW16b25lLmNcXG4rKysgYi9tbS9tbXpvbmUuY1xcbkBAIC03OCw2ICs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXG4gXFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bHJ1dmVjLVxcdTAwM2Vjb3N0X2xvY2spO1xcbiBcXHR6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpO1xcbiBcXG4gXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXFxuaW5kZXggNTg4ZjUwZDhmMWE4YzkuLjc0YjI4MTc3OGNiYzkyIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuY1xcbisrKyBiL21tL3N3YXAuY1xcbkBAIC0yNzIsNzMgKzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGZvbGlvX2JhdGNoX2FkZF9hbmRfbW92ZShmb2xpbywgbHJ1X21vdmVfdGFpbCk7XFxuIH1cXG4gXFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKVxcbi1cXHRcXHRfX3JlbGVhc2VzKGxydXZlYy1cXHUwMDNlbHJ1X2xvY2spXFxuLVxcdFxcdF9fcmVsZWFzZXMocmN1KVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgY29zdDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFVcXG4tXFx0ICogdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24ndCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlXFxuLVxcdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxcbi1cXHQgKiBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmUgb3ZlcndoZWxtaW5nbHlcXG4tXFx0ICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXFxuLVxcdCAqL1xcbi1cXHRjb3N0ID0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcXG4tXFx0aWYgKCFjb3N0KSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGZvciAoOzspIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xcbi1cXG4tXFx0XFx0LyogUmVjb3JkIGNvc3QgZXZlbnQgKi9cXG4tXFx0XFx0aWYgKGZpbGUpXFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICs9IGNvc3Q7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3QgKz0gY29zdDtcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIERlY2F5IHByZXZpb3VzIGV2ZW50c1xcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBCZWNhdXNlIHdvcmtsb2FkcyBjaGFuZ2Ugb3ZlciB0aW1lIChhbmQgdG8gYXZvaWRcXG4tXFx0XFx0ICogb3ZlcmZsb3cpIHdlIGtlZXAgdGhlc2Ugc3RhdGlzdGljcyBhcyBhIGZsb2F0aW5nXFxuLVxcdFxcdCAqIGF2ZXJhZ2UsIHdoaWNoIGVuZHMgdXAgd2VpZ2hpbmcgcmVjZW50IHJlZmF1bHRzXFxuLVxcdFxcdCAqIG1vcmUgdGhhbiBvbGQgb25lcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4tXFx0XFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XFxuLVxcbi1cXHRcXHRpZiAobHJ1dmVjLVxcdTAwM2VmaWxlX2Nvc3QgKyBscnV2ZWMtXFx1MDAzZWFub25fY29zdCBcXHUwMDNlIGxydXNpemUgLyA0KSB7XFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0IC89IDI7XFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlYW5vbl9jb3N0IC89IDI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdFxcdGxydXZlYyA9IHBhcmVudF9scnV2ZWMobHJ1dmVjKTtcXG4tXFx0XFx0aWYgKCFscnV2ZWMpIHtcXG4tXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHR9XFxuLX1cXG4tXFxuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbi1cXG4tXFx0bHJ1dmVjID0gZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGZvbGlvKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLFxcbi1cXHRcXHRcXHRcXHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuQEAgLTExNjQsOCArMTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XFxuIFxcbiBcXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xcbiBcXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XFxuLVxcdHBhcmVudF9scnV2ZWMtXFx1MDAzZWFub25fY29zdCArPSBjaGlsZF9scnV2ZWMtXFx1MDAzZWFub25fY29zdDtcXG4tXFx0cGFyZW50X2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICs9IGNoaWxkX2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0O1xcbiBcXG4gXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG4gXFx0XFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDFhMTQyYzU4NzAwZDAwLi40ZDhhYjE0ZTNiZTQ0MyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTY2OCw3ICs2NjgsNyBAQCBzdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xcbiBcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX3dyaXRlX2ZvbGlvKGZvbGlvKTtcXG4tXFx0bm9kZV9zdGF0X2FkZF9mb2xpbyhmb2xpbywgTlJfVk1TQ0FOX1dSSVRFKTtcXG4rXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9WTVNDQU5fV1JJVEUsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIFxcdHJldHVybiBQQUdFX1NVQ0NFU1M7XFxuIH1cXG4gXFxuQEAgLTE0MTMsOCArMTQxMyw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4gXFx0XFx0XFx0XFx0XFx0c2MtXFx1MDAzZW5yX3NjYW5uZWQgLT0gKG5yX3BhZ2VzIC0gMSk7XFxuIFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzID0gMTtcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRzdGF0LVxcdTAwM2Vucl9wYWdlb3V0ICs9IG5yX3BhZ2VzO1xcbi1cXG4gXFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBrZWVwO1xcbiBcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuQEAgLTIwMzgsMTAgKzIwMzYsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRpdGVtID0gUEdTVEVBTF9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcXG4gXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xcbitcXHRpZiAobnJfc2Nhbm5lZCBcXHUwMDNlIG5yX3JlY2xhaW1lZClcXG4rXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxcbitcXHRcXHRcXHRcXHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XFxuIFxcbi1cXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgc3RhdC5ucl9wYWdlb3V0LFxcbi1cXHRcXHRcXHRcXHRcXHRucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcXG4gXFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXFx1MDAzZW5vZGVfaWQsXFxuIFxcdFxcdFxcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXFx1MDAyNnN0YXQsIHNjLVxcdTAwM2Vwcmlvcml0eSwgZmlsZSk7XFxuQEAgLTIxNDcsOSArMjE0NSw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdGNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xcbiBcXHRjb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7XFxuIFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xcbitcXHRpZiAobnJfcm90YXRlZClcXG4rXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLCBucl9yb3RhdGVkKTtcXG4gXFxuLVxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbi1cXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTtcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsXFxuIFxcdFxcdFxcdG5yX2RlYWN0aXZhdGUsIG5yX3JvdGF0ZWQsIHNjLVxcdTAwM2Vwcmlvcml0eSwgZmlsZSk7XFxuIH1cXG5AQCAtMjI4Miw4ICsyMjgwLDEwIEBAIGVudW0gc2Nhbl9iYWxhbmNlIHtcXG4gXFxuIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmlsZTtcXG4rXFx0c3RydWN0IGxydV9jb3N0ICphbm9uX2Nvc3QsICpmaWxlX2Nvc3Q7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmaWxlO1xcbiBcXG4gXFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTIyOTksMTEgKzIyOTksNjkgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEZXRlcm1pbmUgdGhlIHNjYW4gYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVcy5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGNvc3QgbW9kZWwgaXMgYmFzZWQgb24gcm90YXRpb25zLCByZWZhdWx0cyBhbmRcXG4rXFx0ICogcmVjbGFpbS1kcml2ZW4gd3JpdGVzIChhbm9uIG9ubHkpIG9uIGVhY2ggc2lkZS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlc2UgZXZlbnQgY291bnRlcnMgYXJlIG1vbm90b25pYywgc28gZWFjaCByZWNsYWltIGN5Y2xlXFxuK1xcdCAqIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCBzY2FuIGlzIGV4dHJhY3RlZCBhbmQgaW5jb3Jwb3JhdGVkXFxuK1xcdCAqIGludG8gYSBkZWNheWluZyBhdmVyYWdlLiBUaGlzIGVuc3VyZXMgY3VycmVuY3ksIGFzIHdvcmtsb2Fkc1xcbitcXHQgKiBjaGFuZ2Ugb3ZlciB0aW1lLCBhbmQgYXZvaWRzIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbnMuXFxuK1xcdCAqXFxuK1xcdCAqIFVzZSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBzbyB1bnNpZ25lZCBzdWJ0cmFjdGlvblxcbitcXHQgKiB5aWVsZHMgdGhlIGNvcnJlY3QgZGVsdGEgYWNyb3NzIGEgc2lnbmVkLWxvbmcgd3JhcGFyb3VuZCBvZlxcbitcXHQgKiB0aGUgdW5kZXJseWluZyBjb3VudGVyIChhIHJlYWwgaGF6YXJkIG9uIDMyLWJpdCB0aGF0IHRoZVxcbitcXHQgKiBjbGFtcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlXFxuK1xcdCAqIHNwdXJpb3VzIGRlbHRhKS5cXG4gXFx0ICovXFxuLVxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG4tXFx0c2MtXFx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWFub25fY29zdDtcXG4tXFx0c2MtXFx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWZpbGVfY29zdDtcXG4tXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdF9sb2NrKTtcXG4rXFxuK1xcdGZvciAoaW50IGYgPSAwOyBmIFxcdTAwM2M9IDE7IGYrKykge1xcbitcXHRcXHRzdHJ1Y3QgbHJ1X2Nvc3QgKmNvc3QgPSBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdFtmXTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyByb3RhdGVkLCBpbywgbnJfcm90YXRlZCwgbnJfaW87XFxuK1xcbitcXHRcXHRyb3RhdGVkID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFBHUk9UQVRFX0FOT04gKyBmKTtcXG4rXFx0XFx0aW8gPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZik7XFxuK1xcdFxcdGlmIChmID09IFdPUktJTkdTRVRfQU5PTilcXG4rXFx0XFx0XFx0aW8gKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgTlJfVk1TQ0FOX1dSSVRFKTtcXG4rXFxuK1xcdFxcdG5yX3JvdGF0ZWQgPSByb3RhdGVkIC0gY29zdC1cXHUwMDNlbGFzdF9yb3RhdGVkO1xcbitcXHRcXHRucl9pbyA9IGlvIC0gY29zdC1cXHUwMDNlbGFzdF9pbztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZ1xcbitcXHRcXHQgKiBDUFUgdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24ndCBhdHRlbXB0IHRvIG1ha2UgYVxcbitcXHRcXHQgKiBwcmVjaXNlIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXRcXG4rXFx0XFx0ICogY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmVcXG4rXFx0XFx0ICogb3ZlcndoZWxtaW5nbHkgZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW5cXG4rXFx0XFx0ICogYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjb3N0LVxcdTAwM2Vjb3VudCArPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggKyBucl9yb3RhdGVkO1xcbitcXG4rXFx0XFx0Y29zdC1cXHUwMDNlbGFzdF9yb3RhdGVkID0gcm90YXRlZDtcXG4rXFx0XFx0Y29zdC1cXHUwMDNlbGFzdF9pbyA9IGlvO1xcbitcXHR9XFxuK1xcbitcXHRhbm9uX2Nvc3QgPSBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdFtXT1JLSU5HU0VUX0FOT05dO1xcbitcXHRmaWxlX2Nvc3QgPSBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdFtXT1JLSU5HU0VUX0ZJTEVdO1xcbitcXG4rXFx0bHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4rXFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgK1xcbitcXHRcXHQgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG4rXFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XFxuK1xcbitcXHR3aGlsZSAoYW5vbl9jb3N0LVxcdTAwM2Vjb3VudCArIGZpbGVfY29zdC1cXHUwMDNlY291bnQgXFx1MDAzZSBscnVzaXplIC8gNCkge1xcbitcXHRcXHRhbm9uX2Nvc3QtXFx1MDAzZWNvdW50IC89IDI7XFxuK1xcdFxcdGZpbGVfY29zdC1cXHUwMDNlY291bnQgLz0gMjtcXG4rXFx0fVxcbitcXG4rXFx0c2MtXFx1MDAzZWFub25fY29zdCA9IGFub25fY29zdC1cXHUwMDNlY291bnQ7XFxuK1xcdHNjLVxcdTAwM2VmaWxlX2Nvc3QgPSBmaWxlX2Nvc3QtXFx1MDAzZWNvdW50O1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfbG9jayk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub25cXG5AQCAtNDgwOSw3ICs0ODY3LDggQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG4gXFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4tXFx0aW50IGlzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xcbitcXHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcXG4rXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9yZWNsYWltZWQgPSAwO1xcbiBcXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG5AQCAtNDgyMSw2ICs0ODgwLDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcbiBcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZsaXN0LCBcXHUwMDI2aXNvbGF0ZWQsIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dHlwZV9zY2FubmVkKTtcXG4rXFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG4gXFxuIFxcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXFxuIFxcdGlmIChzY2FubmVkKVxcbkBAIC00ODMzLDYgKzQ4OTMsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gcmV0cnk6XFxuIFxcdHJlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFxcdTAwMjZsaXN0LCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0LCBmYWxzZSwgbWVtY2cpO1xcbiBcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4rXFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4gXFx0LyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovXFxuIFxcdGlmIChpc29sYXRlZClcXG4gXFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG5AQCAtNDg4NCw2ICs0OTQ1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAobnJfaXNvbGF0ZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuK1xcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcXG4rXFx0XFx0XFx0XFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcXG4rXFxuIFxcdHJldHVybiBzY2FubmVkO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jXFxuaW5kZXggZjUzNDk3MmY1MTdkZTAuLjg3ZDRhNjc4MTM2NzY3IDEwMDY0NFxcbi0tLSBhL21tL3Ztc3RhdC5jXFxuKysrIGIvbW0vdm1zdGF0LmNcXG5AQCAtMTAyNCw2ICsxMDI0LDE3IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlX3N0YXRlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuIFxcbiBcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBpdGVtKTtcXG4gfVxcbitcXG4rLypcXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2Ygbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdFxcbisgKiBzbmFwc2hvdCBhIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgY291bnRlciBhbmQgc3VidHJhY3QgdHdvIHNhbXBsZXMuXFxuKyAqIFNlZSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYygpIGZvciB0aGUgcmF0aW9uYWxlLlxcbisgKi9cXG4rdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuK1xcdFxcdFxcdFxcdFxcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcXG4re1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2cGdkYXQtXFx1MDAzZXZtX3N0YXRbaXRlbV0pO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gLypcXG5AQCAtMTI4OSw2ICsxMzAwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuIFxcdFtJKFBHU0NBTl9QUk9BQ1RJVkUpXVxcdFxcdFxcdD0gXFxcInBnc2Nhbl9wcm9hY3RpdmVcXFwiLFxcbiBcXHRbSShQR1NDQU5fQU5PTildXFx0XFx0XFx0PSBcXFwicGdzY2FuX2Fub25cXFwiLFxcbiBcXHRbSShQR1NDQU5fRklMRSldXFx0XFx0XFx0PSBcXFwicGdzY2FuX2ZpbGVcXFwiLFxcbitcXHRbSShQR1JPVEFURV9BTk9OKV1cXHRcXHRcXHQ9IFxcXCJwZ3JvdGF0ZV9hbm9uXFxcIixcXG4rXFx0W0koUEdST1RBVEVfRklMRSldXFx0XFx0XFx0PSBcXFwicGdyb3RhdGVfZmlsZVxcXCIsXFxuIFxcdFtJKFBHUkVGSUxMKV1cXHRcXHRcXHRcXHQ9IFxcXCJwZ3JlZmlsbFxcXCIsXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIFxcdFtJKE5SX0hVR0VUTEIpXVxcdFxcdFxcdFxcdD0gXFxcIm5yX2h1Z2V0bGJcXFwiLFxcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcXG5pbmRleCBmMzUxNzk4ZTcyM2FjZC4uN2FjMmI4OGM4MGFlNTYgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTU4NCwxMSArNTg0LDYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbiBcXHQvKiBGb2xpbyB3YXMgYWN0aXZlIHByaW9yIHRvIGV2aWN0aW9uICovXFxuIFxcdGlmICh3b3JraW5nc2V0KSB7XFxuIFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogWFhYOiBNb3ZlIHRvIGZvbGlvX2FkZF9scnUoKSB3aGVuIGl0IHN1cHBvcnRzIG5ldyB2c1xcbi1cXHRcXHQgKiBwdXRiYWNrXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRscnVfbm90ZV9jb3N0X3JlZmF1bHQoZm9saW8pO1xcbiBcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmaWxlLCBucik7XFxuIFxcdH1cXG4gb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OToyNS4yNTUxNjEyOTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NDYyNDI1MTAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIixcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwid2FrZXVwX2tzd2FwZFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIExSVSByZWNsYWltIGxvZ2ljIGFuZCBjb3N0IGNhbGN1bGF0aW9uIGZvciBib3RoIGxlZ2FjeSBMUlUgYW5kIE1HTFJVLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBjb3VudGVycyBmb3IgTFJVIHN0YXRzIGFuZCBjaGFuZ2VzIGhvdyBzY2FuIGJhbGFuY2UgaXMgZGV0ZXJtaW5lZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMyM2JkMzA4ZDRhNzc2ZDU2MDEyYjhjMmM4ZmZmMWUzZmRlMmEyYTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwODo0OToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjJmLi43YWU2N2FjMjM1MTA3NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk0Nyw2ICs5NDcsOCBAQCB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuIGJvb2wgbWVtY2dfc3RhdF9pdGVtX3ZhbGlkKGludCBpZHgpO1xuIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTtcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4gXG5AQCAtMTM5OSw2ICsxNDAxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuK3tcbitcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0XHRcdCAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi44NTMwM2M1ODY3Yzg0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC0zMjMsNiArMzIzLDggQEAgZW51bSBub2RlX3N0YXRfaXRlbSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbitcdFBHUk9UQVRFX0FOT04sXG4rXHRQR1JPVEFURV9GSUxFLFxuIFx0UEdSRUZJTEwsXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdE5SX0hVR0VUTEIsXG5AQCAtNzU1LDYgKzc1NywxMiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuIFxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuK3N0cnVjdCBscnVfY29zdCB7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGNvdW50O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRsYXN0X3JvdGF0ZWQ7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGxhc3RfaW87XG4rfTtcbitcbiBzdHJ1Y3QgbHJ1dmVjIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0bGlzdHNbTlJfTFJVX0xJU1RTXTtcbiBcdC8qIHBlciBscnV2ZWMgbHJ1X2xvY2sgZm9yIG1lbWNnICovXG5AQCAtNzYzLDkgKzc3MSwxMiBAQCBzdHJ1Y3QgbHJ1dmVjIHtcbiBcdCAqIFRoZXNlIHRyYWNrIHRoZSBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVSAtIGZpbGUgb3IgYW5vbiAtXG4gXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXG4gXHQgKiBpbmNyZWFzZXMsIHRoZSByZWNsYWltIHNjYW4gYmFsYW5jZSB0aXBzIHRvd2FyZCB0aGUgb3RoZXIuXG4rXHQgKiBVcGRhdGVkIGFuZCBkZWNheWVkIGF0IHByZXBhcmVfc2Nhbl9jb250cm9sKCkgdGltZTsgY29zdF9sb2NrXG4rXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxuIFx0ICovXG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0YW5vbl9jb3N0O1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRcdGZpbGVfY29zdDtcbitcdHN0cnVjdCBscnVfY29zdFx0XHRcdGNvc3RbQU5PTl9BTkRfRklMRV07XG4rXHQvKiBQcm90ZWN0cyBjb3N0W10uICovXG4rXHRzcGlubG9ja190XHRcdFx0Y29zdF9sb2NrO1xuIFx0LyogTm9uLXJlc2lkZW50IGFnZSwgZHJpdmVuIGJ5IExSVSBtb3ZlbWVudCAqL1xuIFx0YXRvbWljX2xvbmdfdFx0XHRcdG5vbnJlc2lkZW50X2FnZTtcbiBcdC8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEzLi5iOGUyZTFhZjJiMTQyNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTMwOSw5ICszMDksNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gXG4gLyogbGludXgvbW0vc3dhcC5jICovXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4tXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuaW5kZXggM2M5YzI2NmNmNzgyYWQuLjViMzFkOGU3YWU0MDU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaFxuQEAgLTIwLDcgKzIwLDYgQEAgc3RydWN0IHJlY2xhaW1fc3RhdCB7XG4gXHR1bnNpZ25lZCBucl9jb25nZXN0ZWQ7XG4gXHR1bnNpZ25lZCBucl93cml0ZWJhY2s7XG4gXHR1bnNpZ25lZCBucl9pbW1lZGlhdGU7XG4tXHR1bnNpZ25lZCBucl9wYWdlb3V0O1xuIFx0dW5zaWduZWQgbnJfYWN0aXZhdGVbQU5PTl9BTkRfRklMRV07XG4gXHR1bnNpZ25lZCBucl9yZWZfa2VlcDtcbiBcdHVuc2lnbmVkIG5yX3VubWFwX2ZhaWw7XG5AQCAtMTk0LDYgKzE5MywxOSBAQCB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfcGFnZXMoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuIFx0cmV0dXJuIHg7XG4gfVxuIFxuKy8qXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2YgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSgpIGludGVuZGVkIGZvciBjYWxsZXJzIHRoYXRcbisgKiBzbmFwc2hvdCBhIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgY291bnRlciBhbmQgc3VidHJhY3QgdHdvIHNhbXBsZXMuXG4rICogUmV0dXJucyB0aGUgcmF3IHdyYXBwaW5nIHZhbHVlIHNvIHRoYXQgdW5zaWduZWQgbW9kdWxhciBzdWJ0cmFjdGlvbiBzdGF5c1xuKyAqIGNvcnJlY3QgYWNyb3NzIGEgc2lnbmVkLWxvbmcgb3ZlcmZsb3cgKGEgcmVhbCBoYXphcmQgb24gMzItYml0KSB0aGF0IHRoZVxuKyAqIGNsYW1wIGluIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoKSB3b3VsZCBvdGhlcndpc2UgdHVybiBpbnRvIGEgaHVnZSBzcHVyaW91c1xuKyAqIGRlbHRhLiBEbyBOT1QgdXNlIGZvciBub24tbW9ub3RvbmljIHBhZ2UtY291bnQgcmVhZHMuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbit7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ2bV9ub2RlX3N0YXRbaXRlbV0pO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pXG4ge1xuIFx0Vk1fV0FSTl9PTl9PTkNFKHZtc3RhdF9pdGVtX2luX2J5dGVzKGl0ZW0pKTtcbkBAIC0yNTksMTEgKzI3MSwxNCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdFx0XHRcdFx0XHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pO1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIFx0XHRcdFx0XHQgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW0pO1xuK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbitcdFx0XHRcdFx0ICAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSk7XG4gZXh0ZXJuIHZvaWQgZm9sZF92bV9udW1hX2V2ZW50cyh2b2lkKTtcbiAjZWxzZVxuICNkZWZpbmUgc3VtX3pvbmVfbm9kZV9wYWdlX3N0YXRlKG5vZGUsIGl0ZW0pIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoaXRlbSlcbiAjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKGl0ZW0pXG4gI2RlZmluZSBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMobm9kZSwgaXRlbSkgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9wYWdlcyhpdGVtKVxuKyNkZWZpbmUgbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhub2RlLCBpdGVtKSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pYyhpdGVtKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xkX3ZtX251bWFfZXZlbnRzKHZvaWQpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmNcbmluZGV4IDc2NTA2OTIxMTU2NzhjLi4wOTFiYzlmZmVlNDRhMCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xuKysrIGIvbW0vbWVtY29udHJvbC12MS5jXG5AQCAtMTk4OCw4ICsxOTg4LDggQEAgdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbiBcdFx0Zm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KSB7XG4gXHRcdFx0bXogPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1twZ2RhdC1cdTAwM2Vub2RlX2lkXTtcbiBcbi1cdFx0XHRhbm9uX2Nvc3QgKz0gbXotXHUwMDNlbHJ1dmVjLmFub25fY29zdDtcbi1cdFx0XHRmaWxlX2Nvc3QgKz0gbXotXHUwMDNlbHJ1dmVjLmZpbGVfY29zdDtcbitcdFx0XHRhbm9uX2Nvc3QgKz0gbXotXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9BTk9OXS5jb3VudDtcbitcdFx0XHRmaWxlX2Nvc3QgKz0gbXotXHUwMDNlbHJ1dmVjLmNvc3RbV09SS0lOR1NFVF9GSUxFXS5jb3VudDtcbiBcdFx0fVxuIFx0XHRzZXFfYnVmX3ByaW50ZihzLCBcImFub25fY29zdCAlbHVcXG5cIiwgYW5vbl9jb3N0KTtcbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCJmaWxlX2Nvc3QgJWx1XFxuXCIsIGZpbGVfY29zdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uY2U5YzRmYjkyNDcwYjYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5Myw2ICszOTMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuIFx0TlJfU0hNRU1fVEhQUyxcbiBcdE5SX0ZJTEVfVEhQUyxcbiBcdE5SX0FOT05fVEhQUyxcbitcdE5SX1ZNU0NBTl9XUklURSxcbiBcdE5SX1ZNQUxMT0MsXG4gXHROUl9LRVJORUxfU1RBQ0tfS0IsXG4gXHROUl9QQUdFVEFCTEUsXG5AQCAtNDE5LDYgKzQyMCw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbitcdFBHUk9UQVRFX0FOT04sXG4rXHRQR1JPVEFURV9GSUxFLFxuIFx0UEdSRUZJTEwsXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdE5SX0hVR0VUTEIsXG5AQCAtNTAyLDYgKzUwNSw0MiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4rLyoqXG4rICogbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljIC0gbm9uLWNsYW1waW5nIGxydXZlYyBzdGF0IHJlYWQgZm9yIGRlbHRhIHNhbXBsaW5nXG4rICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXG4rICogQGlkeDogdGhlIG5vZGVfc3RhdF9pdGVtIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnMgdGhlIHJhdyBzdGF0ZVtpZHhdIHZhbHVlIGNhc3QgdG8gdW5zaWduZWQgbG9uZywgc2tpcHBpbmcgdGhlXG4rICogY2xhbXAtbmVnYXRpdmUtdG8temVybyBzdGVwIGluIGxydXZlY19wYWdlX3N0YXRlKCkuIEludGVuZGVkIGZvciBjYWxsZXJzXG4rICogdGhhdCBzbmFwc2hvdCBhIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgY291bnRlciBhbmQgc3VidHJhY3QgdHdvXG4rICogc2FtcGxlczogdW5zaWduZWQgbW9kdWxhciBhcml0aG1ldGljIHRoZW4geWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zc1xuKyAqIGEgc2lnbmVkLWxvbmcgd3JhcGFyb3VuZCAoYSByZWFsIGhhemFyZCBvbiAzMi1iaXQpIHRoYXQgdGhlIGNsYW1wIHdvdWxkXG4rICogb3RoZXJ3aXNlIHR1cm4gaW50byBhIGh1Z2Ugc3B1cmlvdXMgZGVsdGEuXG4rICpcbisgKiBEbyBOT1QgdXNlIGZvciBub24tbW9ub3RvbmljIHBhZ2UtY291bnQgcmVhZHMgd2hlcmUgYSB0cmFuc2llbnQgbmVnYXRpdmVcbisgKiByZWFkaW5nIGZyb20gcGVyLUNQVSBkZWx0YSBza2V3IG11c3QgcHJlc2VudCBhcyB6ZXJvLlxuKyAqXG4rICogWFhYOiBUaGlzIGhlbHBlciAoYW5kIGl0cyBub2RlL2dsb2JhbCBwZWVycykgZXhpc3RzIGJlY2F1c2Ugc29tZVxuKyAqIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgZXZlbnQgY291bnRlcnMgYXJlIHN0b3JlZCBpblxuKyAqIGVudW0gbm9kZV9zdGF0X2l0ZW0uXG4rICovXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuK1x0XHRcdFx0XHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcbitcdGludCBpO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbitcdFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4rXG4rXHRpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbitcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcIiVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwiLCBfX2Z1bmNfXywgaWR4KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVbaV0pO1xuK31cbitcbiB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XG4tLS0gYS9tbS9tbXpvbmUuY1xuKysrIGIvbW0vbW16b25lLmNcbkBAIC03OCw2ICs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZscnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbiBcdHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KGxydXZlYyk7XG4gXG4gXHRmb3JfZWFjaF9scnUobHJ1KVxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuY1xuaW5kZXggNTg4ZjUwZDhmMWE4YzkuLjc0YjI4MTc3OGNiYzkyIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5jXG4rKysgYi9tbS9zd2FwLmNcbkBAIC0yNzIsNzMgKzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xuIH1cbiBcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcbi1cdFx0X19yZWxlYXNlcyhscnV2ZWMtXHUwMDNlbHJ1X2xvY2spXG4tXHRcdF9fcmVsZWFzZXMocmN1KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgY29zdDtcbi1cbi1cdC8qXG4tXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXG4tXHQgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2Vzbid0IGF0dGVtcHQgdG8gbWFrZSBhIHByZWNpc2Vcbi1cdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxuLVx0ICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5XG4tXHQgKiBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhbiBiYWxhbmNlIGZvciBDUFUgd29yay5cbi1cdCAqL1xuLVx0Y29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCArIG5yX3JvdGF0ZWQ7XG4tXHRpZiAoIWNvc3QpIHtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRmb3IgKDs7KSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcbi1cbi1cdFx0LyogUmVjb3JkIGNvc3QgZXZlbnQgKi9cbi1cdFx0aWYgKGZpbGUpXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArPSBjb3N0O1xuLVx0XHRlbHNlXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCArPSBjb3N0O1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBEZWNheSBwcmV2aW91cyBldmVudHNcbi1cdFx0ICpcbi1cdFx0ICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkXG4tXHRcdCAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZ1xuLVx0XHQgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0c1xuLVx0XHQgKiBtb3JlIHRoYW4gb2xkIG9uZXMuXG4tXHRcdCAqL1xuLVx0XHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICtcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuLVxuLVx0XHRpZiAobHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArIGxydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgXHUwMDNlIGxydXNpemUgLyA0KSB7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAvPSAyO1xuLVx0XHRcdGxydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgLz0gMjtcbi1cdFx0fVxuLVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0bHJ1dmVjID0gcGFyZW50X2xydXZlYyhscnV2ZWMpO1xuLVx0XHRpZiAoIWxydXZlYykge1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdH1cbi19XG4tXG4tdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4tXG4tXHRscnV2ZWMgPSBmb2xpb19scnV2ZWNfbG9ja19pcnEoZm9saW8pO1xuLVx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLFxuLVx0XHRcdFx0Zm9saW9fbnJfcGFnZXMoZm9saW8pLCAwKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgbHJ1X2FjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuQEAgLTExNjQsOCArMTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXG4gXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xuIFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgKz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHBhcmVudF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICs9IGNoaWxkX2xydXZlYy1cdTAwM2VmaWxlX2Nvc3Q7XG4gXG4gXHRmb3JfZWFjaF9scnUobHJ1KVxuIFx0XHRscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDFhMTQyYzU4NzAwZDAwLi40ZDhhYjE0ZTNiZTQ0MyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTY2OCw3ICs2NjgsNyBAQCBzdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuIFxuIFx0dHJhY2VfbW1fdm1zY2FuX3dyaXRlX2ZvbGlvKGZvbGlvKTtcbi1cdG5vZGVfc3RhdF9hZGRfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSk7XG4rXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1ZNU0NBTl9XUklURSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiBcdHJldHVybiBQQUdFX1NVQ0NFU1M7XG4gfVxuIFxuQEAgLTE0MTMsOCArMTQxMyw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0XHRcdFx0c2MtXHUwMDNlbnJfc2Nhbm5lZCAtPSAobnJfcGFnZXMgLSAxKTtcbiBcdFx0XHRcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0c3RhdC1cdTAwM2Vucl9wYWdlb3V0ICs9IG5yX3BhZ2VzO1xuLVxuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbiBcdFx0XHRcdFx0Z290byBrZWVwO1xuIFx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuQEAgLTIwMzgsMTAgKzIwMzYsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xuK1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbitcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxuK1x0XHRcdFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsXG4tXHRcdFx0XHRcdG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbiBcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbkBAIC0yMTQ3LDkgKzIxNDUsOSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0Y291bnRfdm1fZXZlbnRzKFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7XG4gXHRjb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7XG4gXHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgLW5yX3Rha2VuKTtcbitcdGlmIChucl9yb3RhdGVkKVxuK1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIGZpbGUsIG5yX3JvdGF0ZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2FjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsXG4gXHRcdFx0bnJfZGVhY3RpdmF0ZSwgbnJfcm90YXRlZCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuIH1cbkBAIC0yMjgyLDggKzIyODAsMTAgQEAgZW51bSBzY2FuX2JhbGFuY2Uge1xuIFxuIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmlsZTtcbitcdHN0cnVjdCBscnVfY29zdCAqYW5vbl9jb3N0LCAqZmlsZV9jb3N0O1xuIFx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcbitcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcbitcdHVuc2lnbmVkIGxvbmcgZmlsZTtcbiBcbiBcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG4gXHRcdHJldHVybjtcbkBAIC0yMjk5LDExICsyMjk5LDY5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFxuIFx0LypcbiBcdCAqIERldGVybWluZSB0aGUgc2NhbiBiYWxhbmNlIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzLlxuK1x0ICpcbitcdCAqIFRoZSBjb3N0IG1vZGVsIGlzIGJhc2VkIG9uIHJvdGF0aW9ucywgcmVmYXVsdHMgYW5kXG4rXHQgKiByZWNsYWltLWRyaXZlbiB3cml0ZXMgKGFub24gb25seSkgb24gZWFjaCBzaWRlLlxuK1x0ICpcbitcdCAqIFRoZXNlIGV2ZW50IGNvdW50ZXJzIGFyZSBtb25vdG9uaWMsIHNvIGVhY2ggcmVjbGFpbSBjeWNsZVxuK1x0ICogdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHNjYW4gaXMgZXh0cmFjdGVkIGFuZCBpbmNvcnBvcmF0ZWRcbitcdCAqIGludG8gYSBkZWNheWluZyBhdmVyYWdlLiBUaGlzIGVuc3VyZXMgY3VycmVuY3ksIGFzIHdvcmtsb2Fkc1xuK1x0ICogY2hhbmdlIG92ZXIgdGltZSwgYW5kIGF2b2lkcyBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb25zLlxuK1x0ICpcbitcdCAqIFVzZSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBzbyB1bnNpZ25lZCBzdWJ0cmFjdGlvblxuK1x0ICogeWllbGRzIHRoZSBjb3JyZWN0IGRlbHRhIGFjcm9zcyBhIHNpZ25lZC1sb25nIHdyYXBhcm91bmQgb2ZcbitcdCAqIHRoZSB1bmRlcmx5aW5nIGNvdW50ZXIgKGEgcmVhbCBoYXphcmQgb24gMzItYml0IHRoYXQgdGhlXG4rXHQgKiBjbGFtcCBpbiBscnV2ZWNfcGFnZV9zdGF0ZSgpIHdvdWxkIG90aGVyd2lzZSB0dXJuIGludG8gYSBodWdlXG4rXHQgKiBzcHVyaW91cyBkZWx0YSkuXG4gXHQgKi9cbi1cdHNwaW5fbG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHNjLVx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0O1xuLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbitcbitcdGZvciAoaW50IGYgPSAwOyBmIFx1MDAzYz0gMTsgZisrKSB7XG4rXHRcdHN0cnVjdCBscnVfY29zdCAqY29zdCA9IFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdFtmXTtcbitcdFx0dW5zaWduZWQgbG9uZyByb3RhdGVkLCBpbywgbnJfcm90YXRlZCwgbnJfaW87XG4rXG4rXHRcdHJvdGF0ZWQgPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbitcdFx0XHRcdFx0XHQgICAgICBQR1JPVEFURV9BTk9OICsgZik7XG4rXHRcdGlvID0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHRhcmdldF9scnV2ZWMsXG4rXHRcdFx0XHRcdFx0IFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZik7XG4rXHRcdGlmIChmID09IFdPUktJTkdTRVRfQU5PTilcbitcdFx0XHRpbyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWModGFyZ2V0X2xydXZlYyxcbitcdFx0XHRcdFx0XHRcdCAgTlJfVk1TQ0FOX1dSSVRFKTtcbitcbitcdFx0bnJfcm90YXRlZCA9IHJvdGF0ZWQgLSBjb3N0LVx1MDAzZWxhc3Rfcm90YXRlZDtcbitcdFx0bnJfaW8gPSBpbyAtIGNvc3QtXHUwMDNlbGFzdF9pbztcbitcbitcdFx0LypcbitcdFx0ICogUmVmbGVjdCB0aGUgcmVsYXRpdmUgY29zdCBvZiBpbmN1cnJpbmcgSU8gYW5kIHNwZW5kaW5nXG4rXHRcdCAqIENQVSB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2Vzbid0IGF0dGVtcHQgdG8gbWFrZSBhXG4rXHRcdCAqIHByZWNpc2UgY29tcGFyaXNvbiwgaXQganVzdCBzYXlzOiBpZiByZWxvYWRzIGFyZSBhYm91dFxuK1x0XHQgKiBjb21wYXJhYmxlIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZVxuK1x0XHQgKiBvdmVyd2hlbG1pbmdseSBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhblxuK1x0XHQgKiBiYWxhbmNlIGZvciBDUFUgd29yay5cbitcdFx0ICovXG4rXHRcdGNvc3QtXHUwMDNlY291bnQgKz0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcbitcbitcdFx0Y29zdC1cdTAwM2VsYXN0X3JvdGF0ZWQgPSByb3RhdGVkO1xuK1x0XHRjb3N0LVx1MDAzZWxhc3RfaW8gPSBpbztcbitcdH1cbitcbitcdGFub25fY29zdCA9IFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdFtXT1JLSU5HU0VUX0FOT05dO1xuK1x0ZmlsZV9jb3N0ID0gXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0W1dPUktJTkdTRVRfRklMRV07XG4rXG4rXHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgK1xuK1x0XHQgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXG4rXHRcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgK1xuK1x0XHQgIGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcbitcbitcdHdoaWxlIChhbm9uX2Nvc3QtXHUwMDNlY291bnQgKyBmaWxlX2Nvc3QtXHUwMDNlY291bnQgXHUwMDNlIGxydXNpemUgLyA0KSB7XG4rXHRcdGFub25fY29zdC1cdTAwM2Vjb3VudCAvPSAyO1xuK1x0XHRmaWxlX2Nvc3QtXHUwMDNlY291bnQgLz0gMjtcbitcdH1cbitcbitcdHNjLVx1MDAzZWFub25fY29zdCA9IGFub25fY29zdC1cdTAwM2Vjb3VudDtcbitcdHNjLVx1MDAzZWZpbGVfY29zdCA9IGZpbGVfY29zdC1cdTAwM2Vjb3VudDtcbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbiBcbiBcdC8qXG4gXHQgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub25cbkBAIC00ODA5LDcgKzQ4NjcsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG4gXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuLVx0aW50IGlzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xuK1x0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4rXHR1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7XG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuQEAgLTQ4MjEsNiArNDg4MCw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFxuIFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4gXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4rXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ4MzMsNiArNDg5Myw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIHJldHJ5OlxuIFx0cmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0LCBmYWxzZSwgbWVtY2cpO1xuIFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcbitcdHRvdGFsX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XG4gXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbiBcdGlmIChpc29sYXRlZClcbiBcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuQEAgLTQ4ODQsNiArNDk0NSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuK1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXG4rXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuK1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi44N2Q0YTY3ODEzNjc2NyAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4rKysgYi9tbS92bXN0YXQuY1xuQEAgLTEwMjQsNiArMTAyNCwxNyBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIFxuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgaXRlbSk7XG4gfVxuK1xuKy8qXG4rICogTm9uLWNsYW1waW5nIHZhcmlhbnQgb2Ygbm9kZV9wYWdlX3N0YXRlKCkgaW50ZW5kZWQgZm9yIGNhbGxlcnMgdGhhdFxuKyAqIHNuYXBzaG90IGEgbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBjb3VudGVyIGFuZCBzdWJ0cmFjdCB0d28gc2FtcGxlcy5cbisgKiBTZWUgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoKSBmb3IgdGhlIHJhdGlvbmFsZS5cbisgKi9cbit1bnNpZ25lZCBsb25nIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbitcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxuK3tcbitcdHJldHVybiAodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnBnZGF0LVx1MDAzZXZtX3N0YXRbaXRlbV0pO1xuK31cbiAjZW5kaWZcbiBcbiAvKlxuQEAgLTEyODksNiArMTMwMCw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xuIFx0W0koUEdTQ0FOX1BST0FDVElWRSldXHRcdFx0PSBcInBnc2Nhbl9wcm9hY3RpdmVcIixcbiBcdFtJKFBHU0NBTl9BTk9OKV1cdFx0XHQ9IFwicGdzY2FuX2Fub25cIixcbiBcdFtJKFBHU0NBTl9GSUxFKV1cdFx0XHQ9IFwicGdzY2FuX2ZpbGVcIixcbitcdFtJKFBHUk9UQVRFX0FOT04pXVx0XHRcdD0gXCJwZ3JvdGF0ZV9hbm9uXCIsXG4rXHRbSShQR1JPVEFURV9GSUxFKV1cdFx0XHQ9IFwicGdyb3RhdGVfZmlsZVwiLFxuIFx0W0koUEdSRUZJTEwpXVx0XHRcdFx0PSBcInBncmVmaWxsXCIsXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdFtJKE5SX0hVR0VUTEIpXVx0XHRcdFx0PSBcIm5yX2h1Z2V0bGJcIixcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IGYzNTE3OThlNzIzYWNkLi43YWMyYjg4YzgwYWU1NiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTg0LDExICs1ODQsNiBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHQvKiBGb2xpbyB3YXMgYWN0aXZlIHByaW9yIHRvIGV2aWN0aW9uICovXG4gXHRpZiAod29ya2luZ3NldCkge1xuIFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4tXHRcdC8qXG4tXHRcdCAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnNcbi1cdFx0ICogcHV0YmFja1xuLVx0XHQgKi9cbi1cdFx0bHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTtcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZmlsZSwgbnIpO1xuIFx0fVxuIG91dDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjI1LjI1NTE2MjYwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjkxNjgzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY29zdCBpcyBjb21wdXRlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUgZmlsZXMgbGlrZSBgbW0vdm1zY2FuLmNgLCBgbW0vc3dhcC5jYCwgYW5kIHNvIG9uLiBUaGV5J3JlIGRpdGNoaW5nIHRoZSBvbGQgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIG1lY2hhbmlzbXMuIEluc3RlYWQsIHRoZXkncmUgaW50cm9kdWNpbmcgYSBuZXcgYXBwcm9hY2ggdXNpbmcgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhbmQgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AsIHdoaWNoIHNvdW5kIGxpa2UgdGhleSBsZXZlcmFnZSBtb25vdG9uaWMgY291bnRlcnMsIGFsb25nc2lkZSBuZXcgZW51bSBpdGVtcyBhbmQgY2hhbmdlcyB0byB0aGUgYGxydXZlY2Agc3RydWN0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGRlbWFuZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncywgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMsIG9yIGV2ZW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLlxuXG5MZXQncyBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbi4gSSBzZWUgbW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zIHRvIGEgYnVuY2ggb2YgZnVuY3Rpb25zOiBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCwgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgZXZpY3RfZm9saW9zYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgcGFnZW91dGAuIFByZXR0eSBtdWNoIHRoZSBoZWFydCBvZiB2bXNjYW4sIGl0IGxvb2tzIGxpa2UuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgZXZpY3RfZm9saW9zYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgcGFnZW91dGAuXG5cbldhaXTigKYgYWxsIG9mIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zPyBIbW0uIFRoZSBwcm9tcHQgaXMgcmVtaW5kaW5nIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSAqY2FsbGVycyogb2YgdGhlc2UgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIExldCdzIHNlZS4uLiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGlzIGNhbGxlZCBieSBgZ2V0X3NjYW5fY291bnRgIG9yIGBzaHJpbmtfbm9kZWAgb3IgYHNocmlua19scnV2ZWNgLiBJJ2xsIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGNhbGxlcnMgb2YgdGhlc2UuIExvb2tzIGxpa2UgSSB3aWxsIG5lZWQgdG8gc2VhcmNoIGZvciBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGluIGBtbS92bXNjYW4uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTozMy4wMjQzMzQwNDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1MzA4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjI3ND1lbnVtIHNjYW5fYmFsYW5jZSB7XFxuLS1cXG5tbS92bXNjYW4uYy0yMjgwLVxcbm1tL3Ztc2Nhbi5jOjIyODE6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtMjI4Mi17XFxuLS1cXG5tbS92bXNjYW4uYz02MjA4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIzMC1cXG5tbS92bXNjYW4uYzo2MjMxOlxcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjIzMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NDk6MzMuMDg1ODcyMzUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MjI4ODU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEknbSByZXZpc2l0aW5nIHRoaXMgYHNocmlua19ub2RlYCBmdW5jdGlvbi4gQSBxdWljayBjaGVjayB0ZWxscyBtZSBpdCdzIGxpa2VseSBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IEkgY2FuJ3QgcXVpdGUgcmVtZW1iZXIuIEl0IHdvdWxkIG1ha2Ugc2Vuc2UgZ2l2ZW4gaXRzIHB1cnBvc2UuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBoYXMgYmVlbiBkZWNsYXJlZCBjb3JyZWN0bHkuIFRpbWUgdG8gdmVyaWZ5IGl0cyBzY29wZS4gSWYgaXQgKmlzKiBzdGF0aWMsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHZlcnkgaW1wb3J0YW50LCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGdvaW5nIHRvIGNhdXNlIGFueSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lIHdpdGggc2hhcmVkIGRhdGEgb3Igc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NDk6MzYuMDI4MTY0NDQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTMwODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NDI9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xOTgwLS8qXFxubW0vdm1zY2FuLmM6MTk4MTogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMTk4Mi0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxNzc9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTk3LVxcbm1tL3Ztc2Nhbi5jOjUxOTg6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MTk5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5MjY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTMwLVxcbm1tL3Ztc2Nhbi5jOjU5MzE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01OTMyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwNzc9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MTI4LVxcbm1tL3Ztc2Nhbi5jOjYxMjk6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYxMzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNjIwNy1cXG5tbS92bXNjYW4uYzo2MjA4OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYyMDkte1xcbi0tXFxubW0vdm1zY2FuLmMtNjIxNS1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYyMTY6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyMTctXFxuLS1cXG5tbS92bXNjYW4uYy02MjMyLVxcbm1tL3Ztc2Nhbi5jOjYyMzM6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjIzNC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzOTM9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjQ3MS1cXHRcXHRsYXN0X3BnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo2NDcyOlxcdFxcdHNocmlua19ub2RlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02NDczLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3Mzg9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzgzLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2Nzg0OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjc4NS1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS92bXNjYW4uYy02ODEwLVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY4MTE6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjgxMi1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NjkzMj1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy02OTU2LVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo2OTU3OlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNjk1OC1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYz03MDE0PXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNTItICovXFxubW0vdm1zY2FuLmM6NzA1MzpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MDU0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNjktXFx0ICovXFxubW0vdm1zY2FuLmM6NzA3MDpcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTcwNzEtXFxuLS1cXG5tbS92bXNjYW4uYz03MTI2PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MjM1LVxcbm1tL3Ztc2Nhbi5jOjcyMzY6XFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxubW0vdm1zY2FuLmMtNzIzNy1cXHRcXHRzYy5ucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyNDctXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzI0ODpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTcyNDktXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4MDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bXNjYW4uYy03ODMwLVxcdFxcdGRvIHtcXG5tbS92bXNjYW4uYzo3ODMxOlxcdFxcdFxcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNzgzMi1cXHRcXHR9IHdoaWxlIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2MgbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgLS1zYy1cXHUwMDNlcHJpb3JpdHkgXFx1MDAzZT0gMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjM2LjA4ODA5OTgxNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODk4MDI5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGVudHJ5IHBvaW50cyBhcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGV4cGVydCwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgUmVjbGFtYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgbWVtb3J5IHJlY2xhaW0uIEkgc2VlIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBsaXN0ZWQgYXMgdGhlIGVudHJ5IHBvaW50cy4gSW50ZXJlc3RpbmcuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgd2F5cyB3ZSBjYW4gdHJpZ2dlciBtZW1vcnkgcHJlc3N1cmUgcmVzb2x1dGlvbi5cblxuYHRyeV90b19mcmVlX3BhZ2VzYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIGZpcnN0IHN0b3AuIEl0J3MgdGhlIG1vc3QgZGlyZWN0LCB0cnlpbmcgdG8gZXhwbGljaXRseSBmcmVlIHBhZ2VzLiBJJ2xsIG5lZWQgdG8gZGlnIGluIHRoZXJlIGFuZCBzZWUgaG93IGl0IHdvcmtzLCB3aGF0IHRyaWdnZXJzIGl0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBzdHJhdGVneSBpcy4gSSdsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoYXQgcm91dGluZSDigJMgbGV0J3Mgc2VlIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIGZyZWVpbmcgcHJvY2VzcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucy4gSSB3b25kZXIgaG93IGl0IGRlY2lkZXMgd2hhdCB0byByZWNsYWltLCBhbmQgaG93IGFnZ3Jlc3NpdmVseS4gSXQncyB0aGUgZ2F0ZXdheSwgc28gaXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBmb3VuZGF0aW9uIG9mIG1lbW9yeSByZWNsYW1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTozOS43Nzc5MDY3MjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3NjU5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjQ4NT1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjUxNS0gKi9cXG5tbS92bXNjYW4uYzo2NTE2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxubW0vdm1zY2FuLmMtNjUxNy1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NjY1OD1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MzctXFxubW0vdm1zY2FuLmM6NjczODp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02NzM5LVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NzItXFxubW0vdm1zY2FuLmM6Njc3MzpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02Nzc0LVxcbi0tXFxubW0vdm1zY2FuLmM9NjgyND11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg1NS1cXG5tbS92bXNjYW4uYzo2ODU2OlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4NTctXFxuLS1cXG5tbS92bXNjYW4uYz03NjIyPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmMtNzY0MS1cXG5tbS92bXNjYW4uYzo3NjQyOlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc2NDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjM5LjgzOTY3NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTAzNDIxNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gc29tZSBrZXkgYXJlYXMgaGVyZS4gSSdtIHRoaW5raW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYSBzb2xpZCBmdW5jdGlvbiB0byBzdGFydCB3aXRoOyBpdCBzZWVtcyBsaWtlIGEgY29yZSBlbGVtZW50IGluIHRoaXMgY29udGV4dC4gQnV0LCBobW0sIHdoYXQgYWJvdXQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgPyBZZXMsIHRoYXQncyBhbm90aGVyIGltcG9ydGFudCBvbmUsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhhdCdzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBOb3csIHRoaW5raW5nIG1vcmUgYnJvYWRseSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjb25zaWRlciBzb21ldGhpbmcgdGhhdCBpbnRlcmFjdHMgd2l0aCBzd2FwcGluZy4gTGV0J3MgdGhpbmssIGBiYWxhbmNlX3BnZGF0YCBpcyBjYWxsZWQgYnkgYGtzd2FwZGAuIE9rYXksIHNvIGBrc3dhcGRgIGlzIGNyaXRpY2FsLiBJdCBzb3VuZHMgbGlrZSBhIGNlbnRyYWwgcGllY2UsIHNvIGxldCdzIGNoZWNrIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk4MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjQzLjM0MzEwMjY1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2MzA4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N3YXBkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTI0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS92bXNjYW4uYy01LSAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXFxubW0vdm1zY2FuLmM6NjogKiAga3N3YXBkIGFkZGVkOiA3LjEuOTYgIHNjdFxcbm1tL3Ztc2Nhbi5jOjc6ICogIFJlbW92ZWQga3N3YXBkX2N0bCBsaW1pdHMsIGFuZCBzd2FwIG91dCBhcyBtYW55IHBhZ2VzIGFzIG5lZWRlZFxcbm1tL3Ztc2Nhbi5jLTgtICogIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0byBmcmVlcGFnZXMuaGlnaDogMi40Ljk3LCBSaWsgdmFuIFJpZWwuXFxubW0vdm1zY2FuLmM6OTogKiAgWm9uZSBhd2FyZSBrc3dhcGQgc3RhcnRlZCAwMi8wMCwgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKS5cXG5tbS92bXNjYW4uYy0xMC0gKiAgTXVsdGlxdWV1ZSBWTSBzdGFydGVkIDUuOC4wMCwgUmlrIHZhbiBSaWVsLlxcbi0tXFxubW0vdm1zY2FuLmM9NDQ0PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0OS1cXG5tbS92bXNjYW4uYzo0NTA6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNDUxLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NDgwPXN0YXRpYyBib29sIHNraXBfdGhyb3R0bGVfbm9wcm9ncmVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNDg1LVxcdC8qXFxubW0vdm1zY2FuLmM6NDg2OlxcdCAqIElmIGtzd2FwZCBpcyBkaXNhYmxlZCwgcmVzY2hlZHVsZSBpZiBuZWNlc3NhcnkgYnV0IGRvIG5vdFxcbm1tL3Ztc2Nhbi5jLTQ4Ny1cXHQgKiB0aHJvdHRsZSBhcyB0aGUgc3lzdGVtIGlzIGxpa2VseSBuZWFyIE9PTS5cXG5tbS92bXNjYW4uYy00ODgtXFx0ICovXFxubW0vdm1zY2FuLmM6NDg5OlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXFxubW0vdm1zY2FuLmMtNDkwLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTA4PXZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pXFxuLS1cXG5tbS92bXNjYW4uYy01MTQtXFx0LypcXG5tbS92bXNjYW4uYzo1MTU6XFx0ICogRG8gbm90IHRocm90dGxlIHVzZXIgd29ya2Vycywga3RocmVhZHMgb3RoZXIgdGhhbiBrc3dhcGQgb3JcXG5tbS92bXNjYW4uYy01MTYtXFx0ICogd29ya3F1ZXVlcy4gVGhleSBtYXkgYmUgcmVxdWlyZWQgZm9yIHJlY2xhaW0gdG8gbWFrZVxcbi0tXFxubW0vdm1zY2FuLmMtNTE4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjUxOTpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy01MjAtXFx0ICAgIGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKFBGX1VTRVJfV09SS0VSfFBGX0tUSFJFQUQpKSB7XFxuLS1cXG5tbS92bXNjYW4uYz05NjI9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZGVtb3RlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxubW0vdm1zY2FuLmMtOTcxLVxcdCAqIG1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSBmcm9tIHRoZSB0YXJnZXQgbm9kZSBmaXJzdCBhbHNvIHRyeWluZyB0b1xcbm1tL3Ztc2Nhbi5jOjk3MjpcXHQgKiBkZW1vdGUgb3IgcmVjbGFpbSBwYWdlcyBmcm9tIHRoZSB0YXJnZXQgbm9kZSB2aWEga3N3YXBkIGlmIHdlIGFyZVxcbm1tL3Ztc2Nhbi5jLTk3My1cXHQgKiBsb3cgb24gZnJlZSBtZW1vcnkgb24gdGFyZ2V0IG5vZGUuIElmIHdlIGRvbid0IGRvIHRoaXMgYW5kIGlmXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTExMTgtXFx0XFx0ICogVGhlIG51bWJlciBvZiBkaXJ0eSBwYWdlcyBkZXRlcm1pbmVzIGlmIGEgbm9kZSBpcyBtYXJrZWRcXG5tbS92bXNjYW4uYzoxMTE5OlxcdFxcdCAqIHJlY2xhaW1fY29uZ2VzdGVkLiBrc3dhcGQgd2lsbCBzdGFsbCBhbmQgc3RhcnQgd3JpdGluZ1xcbm1tL3Ztc2Nhbi5jLTExMjAtXFx0XFx0ICogZm9saW9zIGlmIHRoZSB0YWlsIG9mIHRoZSBMUlUgaXMgYWxsIGRpcnR5IHVucXVldWVkIGZvbGlvcy5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTExODctXFx0XFx0XFx0LyogQ2FzZSAxIGFib3ZlICovXFxubW0vdm1zY2FuLmM6MTE4ODpcXHRcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTExODktXFx0XFx0XFx0ICAgIGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE1OTA9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vdm1zY2FuLmMtMTYxNS1cXHQgKiBXZSBzaG91bGQgYmUgc2FmZSBoZXJlIHNpbmNlIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCBmaWxlIHBhZ2VzIGFuZFxcbm1tL3Ztc2Nhbi5jOjE2MTY6XFx0ICogd2UgYXJlIG5vdCBrc3dhcGQgYW5kIHRoZXJlZm9yZSBjYW5ub3Qgd3JpdGUgZGlydHkgZmlsZSBwYWdlcy4gQnV0XFxubW0vdm1zY2FuLmMtMTYxNy1cXHQgKiBjYWxsIG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCkgYW55d2F5LCBqdXN0IGluIGNhc2UgdGhlc2UgY29uZGl0aW9uc1xcbi0tXFxubW0vdm1zY2FuLmM9MTgyMz1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4MjgtXFxubW0vdm1zY2FuLmM6MTgyOTpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy0xODMwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM4NDk9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnNldF9tbV93YWxrKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZm9yY2VfYWxsb2MpXFxuLS1cXG5tbS92bXNjYW4uYy0zODUyLVxcbm1tL3Ztc2Nhbi5jOjM4NTM6XFx0aWYgKHBnZGF0IFxcdTAwMjZcXHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcXG5tbS92bXNjYW4uYy0zODU0LVxcdFxcdFZNX1dBUk5fT05fT05DRSh3YWxrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4NTctXFx0fSBlbHNlIGlmICghd2FsayBcXHUwMDI2XFx1MDAyNiBmb3JjZV9hbGxvYykge1xcbm1tL3Ztc2Nhbi5jOjM4NTg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbm1tL3Ztc2Nhbi5jLTM4NTktXFxuLS1cXG5tbS92bXNjYW4uYz0zODY5PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4NzctXFxubW0vdm1zY2FuLmM6Mzg3ODpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtMzg3OS1cXHRcXHRrZnJlZSh3YWxrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxOTE9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxOTYtXFxubW0vdm1zY2FuLmM6NDE5NzpcXHRWTV9XQVJOX09OX09OQ0UoIWN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbm1tL3Ztc2Nhbi5jLTQxOTgtXFxuLS1cXG5tbS92bXNjYW4uYz00OTg5PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTk3LVxcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXFxubW0vdm1zY2FuLmM6NDk5ODpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTQ5OTktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmMtNTAxMS1cXG5tbS92bXNjYW4uYzo1MDEyOlxcdC8qIGtzd2FwZCBzaG91bGQgYWJvcnQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGFyZSBzYWZlICovXFxubW0vdm1zY2FuLmMtNTAxMy1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMjAtXFxubW0vdm1zY2FuLmM6NTIyMTpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy01MjIyLVxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xcbi0tXFxubW0vdm1zY2FuLmMtNTIyOC1cXG5tbS92bXNjYW4uYzo1MjI5OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTUyMzAtXFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuLS1cXG5tbS92bXNjYW4uYy01MjM2LVxcdGlmIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2UgcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jOjUyMzc6XFx0XFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNlcmVjbGFpbV9pZHgpO1xcbm1tL3Ztc2Nhbi5jLTUyMzgtfVxcbi0tXFxubW0vdm1zY2FuLmM9NTkzOD1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTY3LVxcdCAqIERFRl9QUklPUklUWSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBmYWN0IHdlIGFyZSBkaXJlY3RcXG5tbS92bXNjYW4uYzo1OTY4OlxcdCAqIHJlY2xhaW1pbmcgaW1wbGllcyB0aGF0IGtzd2FwZCBpcyBub3Qga2VlcGluZyB1cCBhbmQgaXQgaXMgYmVzdCB0b1xcbm1tL3Ztc2Nhbi5jLTU5NjktXFx0ICogZG8gYSBiYXRjaCBvZiB3b3JrIGF0IG9uY2UuIEZvciBtZW1jZyByZWNsYWltIG9uZSBjaGVjayBpcyBtYWRlIHRvXFxuLS1cXG5tbS92bXNjYW4uYy01OTcyLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjU5NzM6XFx0cHJvcG9ydGlvbmFsX3JlY2xhaW0gPSAoIWNncm91cF9yZWNsYWltKHNjKSBcXHUwMDI2XFx1MDAyNiAhY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTU5NzQtXFx0XFx0XFx0XFx0c2MtXFx1MDAzZXByaW9yaXR5ID09IERFRl9QUklPUklUWSk7XFxuLS1cXG5tbS92bXNjYW4uYy01OTk3LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NTk5ODpcXHRcXHQgKiBGb3Iga3N3YXBkIGFuZCBtZW1jZywgcmVjbGFpbSBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHBhZ2VzXFxubW0vdm1zY2FuLmMtNTk5OS1cXHRcXHQgKiByZXF1ZXN0ZWQuIEVuc3VyZSB0aGF0IHRoZSBhbm9uIGFuZCBmaWxlIExSVXMgYXJlIHNjYW5uZWRcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxMjk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE0My1cXHQgKlxcbm1tL3Ztc2Nhbi5jOjYxNDQ6XFx0ICogRm9yIGtzd2FwZCwgcmVsaWFibGUgZm9yd2FyZCBwcm9ncmVzcyBpcyBtb3JlIGltcG9ydGFudFxcbm1tL3Ztc2Nhbi5jLTYxNDUtXFx0ICogdGhhbiBhIHF1aWNrIHJldHVybiB0byBpZGxlLiBBbHdheXMgZG8gZnVsbCB3YWxrcy5cXG5tbS92bXNjYW4uYy02MTQ2LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjYxNDc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW1lbWNnX2Z1bGxfd2FsaylcXG5tbS92bXNjYW4uYy02MTQ4LVxcdFxcdHBhcnRpYWwgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmM9NjIwOD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNDYtXFxubW0vdm1zY2FuLmM6NjI0NzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSkge1xcbm1tL3Ztc2Nhbi5jLTYyNDgtXFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNTktXFx0XFx0ICpcXG5tbS92bXNjYW4uYzo2MjYwOlxcdFxcdCAqIE9uY2UgYSBub2RlIGlzIGZsYWdnZWQgUEdEQVRfV1JJVEVCQUNLLCBrc3dhcGQgd2lsbFxcbm1tL3Ztc2Nhbi5jLTYyNjEtXFx0XFx0ICogY291bnQgdGhlIG51bWJlciBvZiBwYWdlcyB1bmRlciBwYWdlcyBmbGFnZ2VkIGZvclxcbi0tXFxubW0vdm1zY2FuLmMtNjI2OC1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjYyNjk6XFx0XFx0ICogSWYga3N3YXBkIHNjYW5zIHBhZ2VzIG1hcmtlZCBmb3IgaW1tZWRpYXRlXFxubW0vdm1zY2FuLmMtNjI3MC1cXHRcXHQgKiByZWNsYWltIGFuZCB1bmRlciB3cml0ZWJhY2sgKG5yX2ltbWVkaWF0ZSksIGl0XFxuLS1cXG5tbS92bXNjYW4uYy02Mjg5LVxcbm1tL3Ztc2Nhbi5jOjYyOTA6XFx0XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNjI5MS1cXHRcXHRcXHRzZXRfYml0KExSVVZFQ19OT0RFX0NPTkdFU1RFRCwgXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyOTUtXFx0ICogU3RhbGwgZGlyZWN0IHJlY2xhaW0gZm9yIElPIGNvbXBsZXRpb25zIGlmIHRoZSBscnV2ZWMgaXNcXG5tbS92bXNjYW4uYzo2Mjk2OlxcdCAqIG5vZGUgaXMgY29uZ2VzdGVkLiBBbGxvdyBrc3dhcGQgdG8gY29udGludWUgdW50aWwgaXRcXG5tbS92bXNjYW4uYy02Mjk3LVxcdCAqIHN0YXJ0cyBlbmNvdW50ZXJpbmcgdW5xdWV1ZWQgZGlydHkgcGFnZXMgb3IgY3ljbGluZyB0aHJvdWdoXFxuLS1cXG5tbS92bXNjYW4uYy02Mjk5LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjYzMDA6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2IGN1cnJlbnRfbWF5X3Rocm90dGxlKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy02MzAxLVxcdCAgICAhc2MtXFx1MDAzZWhpYmVybmF0aW9uX21vZGUgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMTItXFx0ICogc2xlZXAuIE9uIHJlY2xhaW0gcHJvZ3Jlc3MsIHJlc2V0IHRoZSBmYWlsdXJlIGNvdW50ZXIuIEFcXG5tbS92bXNjYW4uYzo2MzEzOlxcdCAqIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gcnVuIHdpbGwgcmV2aXZlIGEgZG9ybWFudCBrc3dhcGQuXFxubW0vdm1zY2FuLmMtNjMxNC1cXHQgKi9cXG5tbS92bXNjYW4uYy02MzE1LVxcdGlmIChyZWNsYWltYWJsZSlcXG5tbS92bXNjYW4uYzo2MzE2OlxcdFxcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KTtcXG5tbS92bXNjYW4uYy02MzE3LVxcdGVsc2UgaWYgKHNjLVxcdTAwM2VjYWNoZV90cmltX21vZGUpXFxuLS1cXG5tbS92bXNjYW4uYz02MzU1PXN0YXRpYyB2b2lkIGNvbnNpZGVyX3JlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MzcxLVxcdC8qXFxubW0vdm1zY2FuLmM6NjM3MjpcXHQgKiBEbyBub3QgdGhyb3R0bGUga3N3YXBkIG9yIGNncm91cCByZWNsYWltIG9uIE5PUFJPR1JFU1MgYXMgaXQgd2lsbFxcbm1tL3Ztc2Nhbi5jLTYzNzMtXFx0ICogdGhyb3R0bGUgb24gVk1TQ0FOX1RIUk9UVExFX1dSSVRFQkFDSyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNzYtXFx0ICovXFxubW0vdm1zY2FuLmM6NjM3NzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBjZ3JvdXBfcmVjbGFpbShzYykpXFxubW0vdm1zY2FuLmMtNjM3OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz02NjEzPXN0YXRpYyBib29sIGFsbG93X2RpcmVjdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NjIwLVxcbm1tL3Ztc2Nhbi5jOjY2MjE6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcXG5tbS92bXNjYW4uYy02NjIyLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjYzNy1cXG5tbS92bXNjYW4uYzo2NjM4OlxcdC8qIGtzd2FwZCBtdXN0IGJlIGF3YWtlIGlmIHByb2Nlc3NlcyBhcmUgYmVpbmcgdGhyb3R0bGVkICovXFxubW0vdm1zY2FuLmM6NjYzOTpcXHRpZiAoIXdtYXJrX29rIFxcdTAwMjZcXHUwMDI2IHdhaXRxdWV1ZV9hY3RpdmUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCkpIHtcXG5tbS92bXNjYW4uYzo2NjQwOlxcdFxcdGlmIChSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpIFxcdTAwM2UgWk9ORV9OT1JNQUwpXFxubW0vdm1zY2FuLmM6NjY0MTpcXHRcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBaT05FX05PUk1BTCk7XFxubW0vdm1zY2FuLmMtNjY0Mi1cXG5tbS92bXNjYW4uYzo2NjQzOlxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KTtcXG5tbS92bXNjYW4uYy02NjQ0LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2NTEtICogYW5kIHRoZSBQRk1FTUFMTE9DIHJlc2VydmUgZm9yIHRoZSBwcmVmZXJyZWQgbm9kZSBpcyBnZXR0aW5nIGRhbmdlcm91c2x5XFxubW0vdm1zY2FuLmM6NjY1MjogKiBkZXBsZXRlZC4ga3N3YXBkIHdpbGwgY29udGludWUgdG8gbWFrZSBwcm9ncmVzcyBhbmQgd2FrZSB0aGUgcHJvY2Vzc2VzXFxubW0vdm1zY2FuLmMtNjY1My0gKiB3aGVuIHRoZSBsb3cgd2F0ZXJtYXJrIGlzIHJlYWNoZWQuXFxuLS1cXG5tbS92bXNjYW4uYz02NjU4PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjY4OC1cXHQgKiBUaHJvdHRsaW5nIGlzIGJhc2VkIG9uIHRoZSBmaXJzdCB1c2FibGUgbm9kZSBhbmQgdGhyb3R0bGVkIHByb2Nlc3Nlc1xcbm1tL3Ztc2Nhbi5jOjY2ODk6XFx0ICogd2FpdCBvbiBhIHF1ZXVlIHVudGlsIGtzd2FwZCBtYWtlcyBwcm9ncmVzcyBhbmQgd2FrZXMgdGhlbS4gVGhlcmVcXG5tbS92bXNjYW4uYy02NjkwLVxcdCAqIGlzIGFuIGFmZmluaXR5IHRoZW4gYmV0d2VlbiBwcm9jZXNzZXMgd2FraW5nIHVwIGFuZCB3aGVyZSByZWNsYWltXFxuLS1cXG5tbS92bXNjYW4uYy02NzE4LVxcdCAqIHRyYW5zYWN0aW9uIGluIHRoZSBjYXNlIG9mIGEgZmlsZXN5c3RlbSBsaWtlIGV4dFszfDRdLiBJbiB0aGlzIGNhc2UsXFxubW0vdm1zY2FuLmM6NjcxOTpcXHQgKiBpdCBpcyBub3Qgc2FmZSB0byBibG9jayBvbiBwZm1lbWFsbG9jX3dhaXQgYXMga3N3YXBkIGNvdWxkIGJlXFxubW0vdm1zY2FuLmMtNjcyMC1cXHQgKiBibG9ja2VkIHdhaXRpbmcgb24gdGhlIHNhbWUgbG9jay4gSW5zdGVhZCwgdGhyb3R0bGUgZm9yIHVwIHRvIGFcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MjYtXFx0ZWxzZVxcbm1tL3Ztc2Nhbi5jOjY3Mjc6XFx0XFx0LyogVGhyb3R0bGUgdW50aWwga3N3YXBkIHdha2VzIHRoZSBwcm9jZXNzICovXFxubW0vdm1zY2FuLmMtNjcyOC1cXHRcXHR3YWl0X2V2ZW50X2tpbGxhYmxlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQtXFx1MDAzZXBmbWVtYWxsb2Nfd2FpdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NjU9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NzQtXFxubW0vdm1zY2FuLmM6Njg3NTpzdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjg3Ni17XFxuLS1cXG5tbS92bXNjYW4uYz02OTMyPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NTQtXFx0XFx0ICpcXG5tbS92bXNjYW4uYzo2OTU1OlxcdFxcdCAqIEhvd2V2ZXIsIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoIHRoaXMgb25cXG5tbS92bXNjYW4uYy02OTU2LVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo2OTU3OlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNjk1OC1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYy02OTg5LVxcdCAqIG5lZWQgYmFsYW5jaW5nIGJ5IGRlZmluaXRpb24uIFRoaXMgY2FuIGhhcHBlbiBpZiBhIHpvbmUtcmVzdHJpY3RlZFxcbm1tL3Ztc2Nhbi5jOjY5OTA6XFx0ICogYWxsb2NhdGlvbiB0cmllcyB0byB3YWtlIGEgcmVtb3RlIGtzd2FwZC5cXG5tbS92bXNjYW4uYy02OTkxLVxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmM9Njk5OT1zdGF0aWMgdm9pZCBjbGVhcl9wZ2RhdF9jb25nZXN0ZWQocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwMDgtLypcXG5tbS92bXNjYW4uYzo3MDA5OiAqIFByZXBhcmUga3N3YXBkIGZvciBzbGVlcGluZy4gVGhpcyB2ZXJpZmllcyB0aGF0IHRoZXJlIGFyZSBubyBwcm9jZXNzZXNcXG5tbS92bXNjYW4uYy03MDEwLSAqIHdhaXRpbmcgaW4gdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oKSBhbmQgdGhhdCB3YXRlcm1hcmtzIGhhdmUgYmVlbiBtZXQuXFxubW0vdm1zY2FuLmMtNzAxMS0gKlxcbm1tL3Ztc2Nhbi5jOjcwMTI6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBpcyByZWFkeSB0byBzbGVlcFxcbm1tL3Ztc2Nhbi5jLTcwMTMtICovXFxubW0vdm1zY2FuLmM6NzAxNDpzdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzAxNS1cXHRcXHRcXHRcXHRpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzAxOS1cXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXFxubW0vdm1zY2FuLmM6NzAyMDpcXHQgKiByYWNlIGJldHdlZW4gd2hlbiBrc3dhcGQgY2hlY2tzIHRoZSB3YXRlcm1hcmtzIGFuZCBhIHByb2Nlc3MgZ2V0c1xcbm1tL3Ztc2Nhbi5jLTcwMjEtXFx0ICogdGhyb3R0bGVkLiBUaGVyZSBpcyBhbHNvIGEgcG90ZW50aWFsIHJhY2UgaWYgcHJvY2Vzc2VzIGdldFxcbm1tL3Ztc2Nhbi5jOjcwMjI6XFx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcXG5tbS92bXNjYW4uYzo3MDIzOlxcdCAqIHpvbmVzLCB3aGljaCBjYXVzZXMga3N3YXBkIHRvIGV4aXQgYmFsYW5jZV9wZ2RhdCgpIGJlZm9yZSByZWFjaGluZ1xcbm1tL3Ztc2Nhbi5jOjcwMjQ6XFx0ICogdGhlIHdha2UgdXAgY2hlY2tzLiBJZiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIG5vIHByb2Nlc3Mgc2hvdWxkXFxubW0vdm1zY2FuLmMtNzAyNS1cXHQgKiBiZSBzbGVlcGluZyBvbiBwZm1lbWFsbG9jX3dhaXQsIHNvIHdha2UgdGhlbSBub3cgaWYgbmVjZXNzYXJ5LiBJZlxcbm1tL3Ztc2Nhbi5jOjcwMjY6XFx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XFxubW0vdm1zY2FuLmMtNzAyNy1cXHQgKiB0aHJvdHRsZWQgYWdhaW4uIFRoZSBkaWZmZXJlbmNlIGZyb20gd2FrZSB1cHMgaW4gYmFsYW5jZV9wZ2RhdCgpIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MDMzLVxcdC8qIEhvcGVsZXNzIG5vZGUsIGxlYXZlIGl0IHRvIGRpcmVjdCByZWNsYWltICovXFxubW0vdm1zY2FuLmM6NzAzNDpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTcwMzUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYy03MDQ1LS8qXFxubW0vdm1zY2FuLmM6NzA0NjogKiBrc3dhcGQgc2hyaW5rcyBhIG5vZGUgb2YgcGFnZXMgdGhhdCBhcmUgYXQgb3IgYmVsb3cgdGhlIGhpZ2hlc3QgdXNhYmxlXFxubW0vdm1zY2FuLmMtNzA0Ny0gKiB6b25lIHRoYXQgaXMgY3VycmVudGx5IHVuYmFsYW5jZWQuXFxubW0vdm1zY2FuLmMtNzA0OC0gKlxcbm1tL3Ztc2Nhbi5jOjcwNDk6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBzY2FubmVkIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHBhZ2VzIHRvXFxubW0vdm1zY2FuLmMtNzA1MC0gKiByZWNsYWltIG9yIGlmIHRoZSBsYWNrIG9mIHByb2dyZXNzIHdhcyBkdWUgdG8gcGFnZXMgdW5kZXIgd3JpdGViYWNrLlxcbi0tXFxubW0vdm1zY2FuLmMtNzA1Mi0gKi9cXG5tbS92bXNjYW4uYzo3MDUzOnN0YXRpYyBib29sIGtzd2FwZF9zaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTcwNTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NzEwOD1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzExMy0vKlxcbm1tL3Ztc2Nhbi5jOjcxMTQ6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcXG5tbS92bXNjYW4uYy03MTE1LSAqIHRoYXQgYXJlIGVsaWdpYmxlIGZvciB1c2UgYnkgdGhlIGNhbGxlciB1bnRpbCBhdCBsZWFzdCBvbmUgem9uZSBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzExNy0gKlxcbm1tL3Ztc2Nhbi5jOjcxMTg6ICogUmV0dXJucyB0aGUgb3JkZXIga3N3YXBkIGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQuXFxubW0vdm1zY2FuLmMtNzExOS0gKlxcbm1tL3Ztc2Nhbi5jOjcxMjA6ICoga3N3YXBkIHNjYW5zIHRoZSB6b25lcyBpbiB0aGUgaGlnaG1lbS1cXHUwMDNlbm9ybWFsLVxcdTAwM2VkbWEgZGlyZWN0aW9uLiAgSXQgc2tpcHNcXG5tbS92bXNjYW4uYy03MTIxLSAqIHpvbmVzIHdoaWNoIGhhdmUgZnJlZV9wYWdlcyBcXHUwMDNlIGhpZ2hfd21hcmtfcGFnZXMoem9uZSksIGJ1dCBvbmNlIGEgem9uZSBpc1xcbi0tXFxubW0vdm1zY2FuLmM9NzEyNj1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzE1Mi1cXHQgKiBwbGFjZSBzbyB0aGF0IHBhcmFsbGVsIGFsbG9jYXRpb25zIHRoYXQgYXJlIG5lYXIgdGhlIHdhdGVybWFyayB3aWxsXFxubW0vdm1zY2FuLmM6NzE1MzpcXHQgKiBzdGFsbCBvciBkaXJlY3QgcmVjbGFpbSB1bnRpbCBrc3dhcGQgaXMgZmluaXNoZWQuXFxubW0vdm1zY2FuLmMtNzE1NC1cXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxODEtXFx0XFx0ICogZ28gYWhlYWQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvblxcbm1tL3Ztc2Nhbi5jOjcxODI6XFx0XFx0ICogcmVxdWVzdCBhcmUgYmFsYW5jZWQgdG8gYXZvaWQgZXhjZXNzaXZlIHJlY2xhaW0gZnJvbSBrc3dhcGQuXFxubW0vdm1zY2FuLmMtNzE4My1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxOTktXFx0XFx0ICogb24gdGhlIGdyb3VuZHMgdGhhdCB0aGUgbm9ybWFsIHJlY2xhaW0gc2hvdWxkIGJlIGVub3VnaCB0b1xcbm1tL3Ztc2Nhbi5jOjcyMDA6XFx0XFx0ICogcmUtZXZhbHVhdGUgaWYgYm9vc3RpbmcgaXMgcmVxdWlyZWQgd2hlbiBrc3dhcGQgbmV4dCB3YWtlcy5cXG5tbS92bXNjYW4uYy03MjAxLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzIzMy1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3MjM0OlxcdFxcdGtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03MjM1LVxcbi0tXFxubW0vdm1zY2FuLmMtNzI0Ny1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3MjQ4OlxcdFxcdGlmIChrc3dhcGRfc2hyaW5rX25vZGUocGdkYXQsIFxcdTAwMjZzYykpXFxubW0vdm1zY2FuLmMtNzI0OS1cXHRcXHRcXHRyYWlzZV9wcmlvcml0eSA9IGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmMtNzI1OS1cXG5tbS92bXNjYW4uYzo3MjYwOlxcdFxcdC8qIENoZWNrIGlmIGtzd2FwZCBzaG91bGQgYmUgc3VzcGVuZGluZyAqL1xcbm1tL3Ztc2Nhbi5jLTcyNjEtXFx0XFx0X19mc19yZWNsYWltX3JlbGVhc2UoX1RISVNfSVBfKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyOTgtXFx0ICogd2F0ZXJtYXJrX2hpZ2ggYXQgdGhpcyBwb2ludC4gV2UgbmVlZCB0byBhdm9pZCBpbmNyZWFzaW5nIHRoZVxcbm1tL3Ztc2Nhbi5jOjcyOTk6XFx0ICogZmFpbHVyZSBjb3VudCB0byBwcmV2ZW50IHRoZSBrc3dhcGQgdGhyZWFkIGZyb20gc3RvcHBpbmcuXFxubW0vdm1zY2FuLmMtNzMwMC1cXHQgKi9cXG5tbS92bXNjYW4uYy03MzAxLVxcdGlmICghc2MubnJfcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFib29zdGVkKSB7XFxubW0vdm1zY2FuLmM6NzMwMjpcXHRcXHRpbnQgZmFpbF9jbnQgPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF9mYWlsdXJlcyk7XFxubW0vdm1zY2FuLmM6NzMwMzpcXHRcXHQvKiBrc3dhcGQgY29udGV4dCwgbG93IG92ZXJoZWFkIHRvIHRyYWNlIGV2ZXJ5IGZhaWx1cmUgKi9cXG5tbS92bXNjYW4uYzo3MzA0OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfcmVjbGFpbV9mYWlsKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBmYWlsX2NudCk7XFxubW0vdm1zY2FuLmMtNzMwNS1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy03MzQwLVxcdC8qXFxubW0vdm1zY2FuLmM6NzM0MTpcXHQgKiBSZXR1cm4gdGhlIG9yZGVyIGtzd2FwZCBzdG9wcGVkIHJlY2xhaW1pbmcgYXQgYXNcXG5tbS92bXNjYW4uYzo3MzQyOlxcdCAqIHByZXBhcmVfa3N3YXBkX3NsZWVwKCkgdGFrZXMgaXQgaW50byBhY2NvdW50LiBJZiBhbm90aGVyIGNhbGxlclxcbm1tL3Ztc2Nhbi5jOjczNDM6XFx0ICogZW50ZXJlZCB0aGUgYWxsb2NhdG9yIHNsb3cgcGF0aCB3aGlsZSBrc3dhcGQgd2FzIGF3YWtlLCBvcmRlciB3aWxsXFxubW0vdm1zY2FuLmMtNzM0NC1cXHQgKiByZW1haW4gYXQgdGhlIGhpZ2hlciBsZXZlbC5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNDktLypcXG5tbS92bXNjYW4uYzo3MzUwOiAqIFRoZSBwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCBpcyB1c2VkIHRvIHBhc3MgdGhlIGhpZ2hlc3Qgem9uZSBpbmRleCB0b1xcbm1tL3Ztc2Nhbi5jOjczNTE6ICogYmUgcmVjbGFpbWVkIGJ5IGtzd2FwZCBmcm9tIHRoZSB3YWtlci4gSWYgdGhlIHZhbHVlIGlzIE1BWF9OUl9aT05FUyB3aGljaCBpc1xcbm1tL3Ztc2Nhbi5jOjczNTI6ICogbm90IGEgdmFsaWQgaW5kZXggdGhlbiBlaXRoZXIga3N3YXBkIHJ1bnMgZm9yIGZpcnN0IHRpbWUgb3Iga3N3YXBkIGNvdWxkbid0XFxubW0vdm1zY2FuLmMtNzM1My0gKiBzbGVlcCBhZnRlciBwcmV2aW91cyByZWNsYWltIGF0dGVtcHQgKG5vZGUgaXMgc3RpbGwgdW5iYWxhbmNlZCkuIEluIHRoYXRcXG5tbS92bXNjYW4uYzo3MzU0OiAqIGNhc2UgcmV0dXJuIHRoZSB6b25lIGluZGV4IG9mIHRoZSBwcmV2aW91cyBrc3dhcGQgcmVjbGFpbSBjeWNsZS5cXG5tbS92bXNjYW4uYy03MzU1LSAqL1xcbm1tL3Ztc2Nhbi5jOjczNTY6c3RhdGljIGVudW0gem9uZV90eXBlIGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MzU3LVxcdFxcdFxcdFxcdFxcdCAgIGVudW0gem9uZV90eXBlIHByZXZfaGlnaGVzdF96b25laWR4KVxcbm1tL3Ztc2Nhbi5jLTczNTgte1xcbm1tL3Ztc2Nhbi5jOjczNTk6XFx0ZW51bSB6b25lX3R5cGUgY3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTczNjAtXFxuLS1cXG5tbS92bXNjYW4uYy03MzYzLVxcbm1tL3Ztc2Nhbi5jOjczNjQ6c3RhdGljIHZvaWQga3N3YXBkX3RyeV90b19zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgYWxsb2Nfb3JkZXIsIGludCByZWNsYWltX29yZGVyLFxcbm1tL3Ztc2Nhbi5jLTczNjUtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNzItXFxubW0vdm1zY2FuLmM6NzM3MzpcXHRwcmVwYXJlX3RvX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxubW0vdm1zY2FuLmMtNzM3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTczODEtXFx0ICovXFxubW0vdm1zY2FuLmM6NzM4MjpcXHRpZiAocHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcXG5tbS92bXNjYW4uYy03MzgzLVxcdFxcdC8qXFxuLS1cXG5tbS92bXNjYW4uYy03Mzg1LVxcdFxcdCAqIGlzb2xhdGUgcGFnZXMgZnJvbSBhbmQgc2tpcHMgdGhlbSBpbiB0aGUgZnV0dXJlIHNjYW5uaW5nLlxcbm1tL3Ztc2Nhbi5jOjczODY6XFx0XFx0ICogV2hlbiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIGl0IGlzIHJlYXNvbmFibGUgdG8gYXNzdW1lXFxubW0vdm1zY2FuLmMtNzM4Ny1cXHRcXHQgKiB0aGF0IHBhZ2VzIGFuZCBjb21wYWN0aW9uIG1heSBzdWNjZWVkIHNvIHJlc2V0IHRoZSBjYWNoZS5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTczOTktXFx0XFx0LypcXG5tbS92bXNjYW4uYzo3NDAwOlxcdFxcdCAqIElmIHdva2VuIHByZW1hdHVyZWx5IHRoZW4gcmVzZXQga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCBhbmRcXG5tbS92bXNjYW4uYy03NDAxLVxcdFxcdCAqIG9yZGVyLiBUaGUgdmFsdWVzIHdpbGwgZWl0aGVyIGJlIGZyb20gYSB3YWtldXAgcmVxdWVzdCBvclxcbi0tXFxubW0vdm1zY2FuLmMtNzQwNC1cXHRcXHRpZiAocmVtYWluaW5nKSB7XFxubW0vdm1zY2FuLmM6NzQwNTpcXHRcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LFxcbm1tL3Ztc2Nhbi5jOjc0MDY6XFx0XFx0XFx0XFx0XFx0a3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcXG5tbS92bXNjYW4uYy03NDA3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCkpO1xcbm1tL3Ztc2Nhbi5jLTc0MDgtXFxubW0vdm1zY2FuLmM6NzQwOTpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpIFxcdTAwM2MgcmVjbGFpbV9vcmRlcilcXG5tbS92bXNjYW4uYzo3NDEwOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgcmVjbGFpbV9vcmRlcik7XFxubW0vdm1zY2FuLmMtNzQxMS1cXHRcXHR9XFxubW0vdm1zY2FuLmMtNzQxMi1cXG5tbS92bXNjYW4uYzo3NDEzOlxcdFxcdGZpbmlzaF93YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0KTtcXG5tbS92bXNjYW4uYzo3NDE0OlxcdFxcdHByZXBhcmVfdG9fd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG5tbS92bXNjYW4uYy03NDE1LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MjEtXFx0aWYgKCFyZW1haW5pbmcgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo3NDIyOlxcdCAgICBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xcbm1tL3Ztc2Nhbi5jOjc0MjM6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9zbGVlcChwZ2RhdC1cXHUwMDNlbm9kZV9pZCk7XFxubW0vdm1zY2FuLmMtNzQyNC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MjktXFx0XFx0ICogd2F0ZXJtYXJrcyBiZWluZyBicmVhY2hlZCB3aGlsZSB1bmRlciBwcmVzc3VyZSwgd2UgcmVkdWNlIHRoZVxcbm1tL3Ztc2Nhbi5jOjc0MzA6XFx0XFx0ICogcGVyLWNwdSB2bXN0YXQgdGhyZXNob2xkIHdoaWxlIGtzd2FwZCBpcyBhd2FrZSBhbmQgcmVzdG9yZVxcbm1tL3Ztc2Nhbi5jLTc0MzEtXFx0XFx0ICogdGhlbSBiZWZvcmUgZ29pbmcgYmFjayB0byBzbGVlcC5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0NDQtXFx0fVxcbm1tL3Ztc2Nhbi5jOjc0NDU6XFx0ZmluaXNoX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL3Ztc2Nhbi5jLTc0NDYtfVxcbi0tXFxubW0vdm1zY2FuLmMtNzQ2MC0gKi9cXG5tbS92bXNjYW4uYzo3NDYxOnN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxubW0vdm1zY2FuLmMtNzQ2Mi17XFxuLS1cXG5tbS92bXNjYW4uYy03NDcwLVxcdCAqIGFuZCB0aGF0IGlmIHdlIG5lZWQgbW9yZSBtZW1vcnkgd2Ugc2hvdWxkIGdldCBhY2Nlc3MgdG8gaXRcXG5tbS92bXNjYW4uYzo3NDcxOlxcdCAqIHJlZ2FyZGxlc3MgKHNlZSBcXFwiX19hbGxvY19wYWdlcygpXFxcIikuIFxcXCJrc3dhcGRcXFwiIHNob3VsZFxcbm1tL3Ztc2Nhbi5jLTc0NzItXFx0ICogbmV2ZXIgZ2V0IGNhdWdodCBpbiB0aGUgbm9ybWFsIHBhZ2UgZnJlZWluZyBsb2dpYy5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0ODItXFxubW0vdm1zY2FuLmM6NzQ4MzpcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIDApO1xcbm1tL3Ztc2Nhbi5jOjc0ODQ6XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcXG5tbS92bXNjYW4uYy03NDg1LVxcdGF0b21pY19zZXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vucl93cml0ZWJhY2tfdGhyb3R0bGVkLCAwKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0ODgtXFxubW0vdm1zY2FuLmM6NzQ4OTpcXHRcXHRhbGxvY19vcmRlciA9IHJlY2xhaW1fb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcik7XFxubW0vdm1zY2FuLmM6NzQ5MDpcXHRcXHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc0OTEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYy03NDkyLVxcbm1tL3Ztc2Nhbi5jOjc0OTM6a3N3YXBkX3RyeV9zbGVlcDpcXG5tbS92bXNjYW4uYzo3NDk0OlxcdFxcdGtzd2FwZF90cnlfdG9fc2xlZXAocGdkYXQsIGFsbG9jX29yZGVyLCByZWNsYWltX29yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc0OTUtXFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0OTctXFx0XFx0LyogUmVhZCB0aGUgbmV3IG9yZGVyIGFuZCBoaWdoZXN0X3pvbmVpZHggKi9cXG5tbS92bXNjYW4uYzo3NDk4OlxcdFxcdGFsbG9jX29yZGVyID0gUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jOjc0OTk6XFx0XFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcXG5tbS92bXNjYW4uYy03NTAwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmM6NzUwMTpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIDApO1xcbm1tL3Ztc2Nhbi5jOjc1MDI6XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcXG5tbS92bXNjYW4uYy03NTAzLVxcbi0tXFxubW0vdm1zY2FuLmMtNzUxNS1cXHRcXHQgKiBSZWNsYWltIGJlZ2lucyBhdCB0aGUgcmVxdWVzdGVkIG9yZGVyIGJ1dCBpZiBhIGhpZ2gtb3JkZXJcXG5tbS92bXNjYW4uYzo3NTE2OlxcdFxcdCAqIHJlY2xhaW0gZmFpbHMgdGhlbiBrc3dhcGQgZmFsbHMgYmFjayB0byByZWNsYWltaW5nIGZvclxcbm1tL3Ztc2Nhbi5jOjc1MTc6XFx0XFx0ICogb3JkZXItMC4gSWYgdGhhdCBoYXBwZW5zLCBrc3dhcGQgd2lsbCBjb25zaWRlciBzbGVlcGluZ1xcbm1tL3Ztc2Nhbi5jLTc1MTgtXFx0XFx0ICogZm9yIHRoZSBvcmRlciBpdCBmaW5pc2hlZCByZWNsYWltaW5nIGF0IChyZWNsYWltX29yZGVyKVxcbi0tXFxubW0vdm1zY2FuLmMtNzUyMS1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3NTIyOlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfd2FrZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LFxcbm1tL3Ztc2Nhbi5jLTc1MjMtXFx0XFx0XFx0XFx0XFx0XFx0YWxsb2Nfb3JkZXIpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzUyNi1cXHRcXHRpZiAocmVjbGFpbV9vcmRlciBcXHUwMDNjIGFsbG9jX29yZGVyKVxcbm1tL3Ztc2Nhbi5jOjc1Mjc6XFx0XFx0XFx0Z290byBrc3dhcGRfdHJ5X3NsZWVwO1xcbm1tL3Ztc2Nhbi5jLTc1MjgtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNzUzNi0gKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXFxubW0vdm1zY2FuLmM6NzUzNzogKiBrc3dhcGQgc2hvdWxkIHJlY2xhaW0gKGRpcmVjdCByZWNsYWltIGlzIGRlZmVycmVkKSwgd2FrZSBpdCB1cCBmb3IgdGhlIHpvbmUnc1xcbm1tL3Ztc2Nhbi5jOjc1Mzg6ICogcGdkYXQuICBJdCB3aWxsIHdha2UgdXAga2NvbXBhY3RkIGFmdGVyIHJlY2xhaW1pbmcgbWVtb3J5LiAgSWYga3N3YXBkIHJlY2xhaW1cXG5tbS92bXNjYW4uYy03NTM5LSAqIGhhcyBmYWlsZWQgb3IgaXMgbm90IG5lZWRlZCwgc3RpbGwgd2FrZSB1cCBrY29tcGFjdGQgaWYgb25seSBjb21wYWN0aW9uIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03NTQxLSAqL1xcbm1tL3Ztc2Nhbi5jOjc1NDI6dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy03NTQzLVxcdFxcdCAgIGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NTQtXFx0cGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbm1tL3Ztc2Nhbi5jOjc1NTU6XFx0Y3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc1NTYtXFxubW0vdm1zY2FuLmMtNzU1Ny1cXHRpZiAoY3Vycl9pZHggPT0gTUFYX05SX1pPTkVTIHx8IGN1cnJfaWR4IFxcdTAwM2MgaGlnaGVzdF96b25laWR4KVxcbm1tL3Ztc2Nhbi5jOjc1NTg6XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgaGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYy03NTU5LVxcbm1tL3Ztc2Nhbi5jOjc1NjA6XFx0aWYgKFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKSBcXHUwMDNjIG9yZGVyKVxcbm1tL3Ztc2Nhbi5jOjc1NjE6XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCBvcmRlcik7XFxubW0vdm1zY2FuLmMtNzU2Mi1cXG5tbS92bXNjYW4uYzo3NTYzOlxcdGlmICghd2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KSlcXG5tbS92bXNjYW4uYy03NTY0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NjYtXFx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gaWYgcG9zc2libGUgKi9cXG5tbS92bXNjYW4uYzo3NTY3OlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkgfHxcXG5tbS92bXNjYW4uYy03NTY4LVxcdCAgICAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYy03NTgxLVxcbm1tL3Ztc2Nhbi5jOjc1ODI6XFx0dHJhY2VfbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU4My1cXHRcXHRcXHRcXHQgICAgICBnZnBfZmxhZ3MpO1xcbm1tL3Ztc2Nhbi5jOjc1ODQ6XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpO1xcbm1tL3Ztc2Nhbi5jLTc1ODUtfVxcbm1tL3Ztc2Nhbi5jLTc1ODYtXFxubW0vdm1zY2FuLmM6NzU4Nzp2b2lkIGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIGtzd2FwZF9jbGVhcl9ob3BlbGVzc19yZWFzb24gcmVhc29uKVxcbm1tL3Ztc2Nhbi5jLTc1ODgte1xcbm1tL3Ztc2Nhbi5jLTc1ODktXFx0LyogT25seSB0cmFjZSBhY3R1YWwgcmVzZXRzLCBub3QgcmVkdW5kYW50IHplcm8tdG8temVybyAqL1xcbm1tL3Ztc2Nhbi5jOjc1OTA6XFx0aWYgKGF0b21pY194Y2hnKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX2ZhaWx1cmVzLCAwKSlcXG5tbS92bXNjYW4uYzo3NTkxOlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHJlYXNvbik7XFxubW0vdm1zY2FuLmMtNzU5Mi19XFxuLS1cXG5tbS92bXNjYW4uYy03NTk0LS8qXFxubW0vdm1zY2FuLmM6NzU5NTogKiBSZXNldCBrc3dhcGRfZmFpbHVyZXMgb25seSB3aGVuIHRoZSBub2RlIGlzIGJhbGFuY2VkLiBXaXRob3V0IHRoaXNcXG5tbS92bXNjYW4uYy03NTk2LSAqIGNoZWNrLCBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIChlLmcuLCBmcm9tIGNncm91cCBtZW1vcnkuaGlnaFxcbm1tL3Ztc2Nhbi5jOjc1OTc6ICogdGhyb3R0bGluZykgY2FuIGtlZXAgcmVzZXR0aW5nIGtzd2FwZF9mYWlsdXJlcyBldmVuIHdoZW4gdGhlIG5vZGVcXG5tbS92bXNjYW4uYzo3NTk4OiAqIGNhbm5vdCBiZSBiYWxhbmNlZCwgY2F1c2luZyBrc3dhcGQgdG8gcnVuIGVuZGxlc3NseS5cXG5tbS92bXNjYW4uYy03NTk5LSAqL1xcbm1tL3Ztc2Nhbi5jOjc2MDA6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzYwMS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzYwMy1cXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxcbm1tL3Ztc2Nhbi5jOjc2MDQ6XFx0XFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cXG5tbS92bXNjYW4uYy03NjA1LVxcdFxcdFxcdEtTV0FQRF9DTEVBUl9IT1BFTEVTU19LU1dBUEQgOiBLU1dBUERfQ0xFQVJfSE9QRUxFU1NfRElSRUNUKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MDctXFxubW0vdm1zY2FuLmM6NzYwODpib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxubW0vdm1zY2FuLmMtNzYwOS17XFxubW0vdm1zY2FuLmM6NzYxMDpcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfZmFpbHVyZXMpIFxcdTAwM2U9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxubW0vdm1zY2FuLmMtNzYxMS19XFxuLS1cXG5tbS92bXNjYW4uYz03NjIyPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmMtNzY1Mi0vKlxcbm1tL3Ztc2Nhbi5jOjc2NTM6ICogVGhpcyBrc3dhcGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxcbm1tL3Ztc2Nhbi5jLTc2NTQtICovXFxubW0vdm1zY2FuLmM6NzY1NTp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpXFxubW0vdm1zY2FuLmMtNzY1Ni17XFxuLS1cXG5tbS92bXNjYW4uYy03NjU4LVxcbm1tL3Ztc2Nhbi5jOjc2NTk6XFx0cGdkYXRfa3N3YXBkX2xvY2socGdkYXQpO1xcbm1tL3Ztc2Nhbi5jOjc2NjA6XFx0aWYgKCFwZ2RhdC1cXHUwMDNla3N3YXBkKSB7XFxubW0vdm1zY2FuLmM6NzY2MTpcXHRcXHRwZ2RhdC1cXHUwMDNla3N3YXBkID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShrc3dhcGQsIHBnZGF0LCBuaWQsIFxcXCJrc3dhcGQlZFxcXCIsIG5pZCk7XFxubW0vdm1zY2FuLmM6NzY2MjpcXHRcXHRpZiAoSVNfRVJSKHBnZGF0LVxcdTAwM2Vrc3dhcGQpKSB7XFxubW0vdm1zY2FuLmMtNzY2My1cXHRcXHRcXHQvKiBmYWlsdXJlIGF0IGJvb3QgaXMgZmF0YWwgKi9cXG5tbS92bXNjYW4uYzo3NjY0OlxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHN0YXJ0IGtzd2FwZCBvbiBub2RlICVkLCByZXQ9JXBlXFxcXG5cXFwiLFxcbm1tL3Ztc2Nhbi5jOjc2NjU6XFx0XFx0XFx0XFx0ICAgbmlkLCBwZ2RhdC1cXHUwMDNla3N3YXBkKTtcXG5tbS92bXNjYW4uYy03NjY2LVxcdFxcdFxcdEJVR19PTihzeXN0ZW1fc3RhdGUgXFx1MDAzYyBTWVNURU1fUlVOTklORyk7XFxubW0vdm1zY2FuLmM6NzY2NzpcXHRcXHRcXHRwZ2RhdC1cXHUwMDNla3N3YXBkID0gTlVMTDtcXG5tbS92bXNjYW4uYy03NjY4LVxcdFxcdH0gZWxzZSB7XFxubW0vdm1zY2FuLmM6NzY2OTpcXHRcXHRcXHR3YWtlX3VwX3Byb2Nlc3MocGdkYXQtXFx1MDAzZWtzd2FwZCk7XFxubW0vdm1zY2FuLmMtNzY3MC1cXHRcXHR9XFxubW0vdm1zY2FuLmMtNzY3MS1cXHR9XFxubW0vdm1zY2FuLmM6NzY3MjpcXHRwZ2RhdF9rc3dhcGRfdW5sb2NrKHBnZGF0KTtcXG5tbS92bXNjYW4uYy03NjczLX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NzgtICovXFxubW0vdm1zY2FuLmM6NzY3OTp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTc2ODAte1xcbm1tL3Ztc2Nhbi5jLTc2ODEtXFx0cGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo0My40MDI3NDI5MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNDEyMjc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFBhZ2UgUmVjbGFpbSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhZ2UgcmVjbGFpbSBidXNpbmVzcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGB3YWtldXBfa3N3YXBkYCDigJMgaXQncyBhIGt0aHJlYWQsIHNvIHRoYXQncyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWVzIEkga25vdywgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBkaXJlY3QgcmVjbGFpbSwgcmlnaHQ/IExldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHksIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgZ2V0IHVzIGludG8gdGhlIHJlY2xhaW0gcHJvY2Vzcz9cblxuSG1tLCBJIHNlZSBgc2hyaW5rX25vZGVgIGlzIHRoZSBjb3JlIHdvcmtob3JzZS4gVGhhdCBtYWtlcyBzZW5zZS4gSXQgbG9va3MgbGlrZSBgc2hyaW5rX2xydXZlY2AgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbm9kZWAsIHdoaWNoIGlzIHRoZW4gY2FsbGluZyBgZXZpY3RfZm9saW9zYC4gSSBzaG91bGQgbG9vayBpbnRvIHRoaXMgd2hvbGUgY2FsbCBjaGFpbiB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwcm9jZXNzLiBBbmQgSSBzZWUgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBjYWxsZWQgYnkgYHNocmlua19ub2RlYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgZmlyc3QgY2hlY2sgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gSWYgbm90LCB0aGVuIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0byBjYWxsIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjk4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjQ5OjQ4LjIwNjg2ODM4N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMzUzOTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRyeV90b19mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo0OC4yNjcwMTE4NTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4ODAxMjc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHRyeV90b19mcmVlX3BhZ2VzYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXZlIGludG8gYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGB0cnlfdG9fZnJlZV9wYWdlc2AgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBwYWdlIHJlY2xhaW0gbWVjaGFuaXNtIGtpY2tzIGluLiBJdCdzIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsIHRyaWVzIHRvIHBoeXNpY2FsbHkgZnJlZSB1cCBtZW1vcnksIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIExSVSBsaXN0cywgem9uZXMsIGFuZCByZWNsYWltIHRhcmdldHMuIFdoYXQgYXJlIHRoZSBrZXkgaGV1cmlzdGljcyBhbmQgdGhyZXNob2xkcyBpdCB1c2VzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gdGhhdCBqdW1wIG91dD8gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIE5VTUEgbm9kZXMgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHR5cGVzLiBBbnkgcmVjZW50IGNoYW5nZXMgdG8gbWVtb3J5IHByZXNzdXJlIGNhbGN1bGF0aW9ucyB3b3VsZCBiZSB3b3J0aCByZXZpZXdpbmcgaGVyZSBhcyB3ZWxsLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gdGVsbCB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo1Mi41NTUwMjgxMDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODQ5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY0ODU9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1MTUtICovXFxubW0vdm1zY2FuLmM6NjUxNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbm1tL3Ztc2Nhbi5jLTY1MTctXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2NTg9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NzM3LVxcbm1tL3Ztc2Nhbi5jOjY3Mzg6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNjczOS1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS92bXNjYW4uYy02NzcyLVxcbm1tL3Ztc2Nhbi5jOjY3NzM6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjc3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MjQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NTUtXFxubW0vdm1zY2FuLmM6Njg1NjpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODU3LVxcbi0tXFxubW0vdm1zY2FuLmM9NzYyMj11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NDEtXFxubW0vdm1zY2FuLmM6NzY0MjpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03NjQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo1Mi42MjI4ODIzNzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NjU4NTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBLZXkgRnVuY3Rpb24gU3ltYm9scyBhbmQgUmVsZXZhbnQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBqdW1wIG91dCBpbW1lZGlhdGVseSBhcyBnb29kIHBvaW50cyBvZiBmb2N1czogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgd2FrZXVwX2tzd2FwZGAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBvciBjb250cm9sIHBvaW50cyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoYXQncyBjaGFuZ2luZyAqYXJvdW5kKiB0aGVtLCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zLlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCB0aGUgY29udGV4dC4gVGhpcyBwYXRjaCB0b3VjaGVzIGEgc2xldyBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzOiBgbW0vdm1zY2FuLmNgLCBgbW0vc3dhcC5jYCwgYG1tL3dvcmtpbmdzZXQuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbW16b25lLmNgLCBhbmQgYG1tL3Ztc3RhdC5jYC4gVGhhdCdzIGJhc2ljYWxseSB0aGUgd2hvbGUgc2hlYmFuZyB3aGVuIGl0IGNvbWVzIHRvIHRoZSBWTSBzdWJzeXN0ZW0uIEl0J3MgYSBicm9hZCByYW5nZSBhbmQgY29uZmlybXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLlxuXG5TaW5jZSBpdCBtb2RpZmllcyBgbW0vbWVtY29udHJvbC5jYCwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGBDT05GSUdfTUVNQ0dgLiBJZiB0aGlzIHBhdGNoJ3MgY2hhbmdlcyBkZXBlbmQgb24gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCB0aGF0J3MgY3J1Y2lhbC4gSSBjYW4gY29uZmlybSwgZnJvbSBleHBlcmllbmNlLCB0aGF0IGBtbS9tZW1jb250cm9sLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGhvdyBhbmQgd2hlcmUgdGhpcyBjb25maWcgd2lsbCBjb21lIGludG8gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NDk6NTcuNjk5NDcyMzMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDQ5MzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo0OTo1Ny43NjM5NzE3NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA2MjEyNjI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vbWVtY29udHJvbC12MS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgcmFkYXIgYXMgbWVtY2ctcmVsYXRlZC4gQnV0LCBpdCBhbHNvIGhpdHMgYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3N3YXAuY2AsIHdoaWNoIGFyZSBjb3JlLCBhbHdheXMtY29tcGlsZWQgY29tcG9uZW50cy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyBhcmUgd2UgaW50cm9kdWNpbmcgYW55IG5ldyBgI2lmZGVmYCBibG9ja3M/IEkgZG92ZSBpbnRvIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgY2hlY2tpbmcgdGhlIGBlbnVtIG5vZGVfc3RhdF9pdGVtYCBmb3IgYW55IGNsdWVzLiBOb3BlLCBubyBuZXcgYCNpZmRlZmBzIHRoZXJlLlxuXG5OZXh0LCBJIGp1bXBlZCBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHNwZWNpZmljYWxseSBjaGVja2VkIGBwcmVwYXJlX3NjYW5fY29udHJvbCgpYCwganVzdCB0byBiZSBjZXJ0YWluLiBBZ2Fpbiwgbm8gbmV3IGAjaWZkZWZgcy4gU28sIHRoZSBjb3JlIGNoYW5nZXMgaW4gYG1tL3Ztc2Nhbi5jYCBkb24ndCBzdHJpY3RseSAqcmVxdWlyZSogYENPTkZJR19NRU1DR2AuIEhvd2V2ZXIsIGJlY2F1c2UgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgIGFyZSBiZWluZyBtb2RpZmllZCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBlbmFibGluZyBib3RoIGBNRU1DR2AgYW5kIGBNRU1DR19WMWAgaXMgdGhlIHJpZ2h0IG1vdmUgdG8gZW5zdXJlIHdlIGZ1bGx5IGNvdmVyIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBgTUVNQ0dfVjFgIGlzIGFjdHVhbGx5IGRlZmluZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MDYuODI2MTAxMDg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDk3ODcyOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjA2Ljg4NzA5MjEzM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk1NDM0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBNRU1DR19WMWAgS2NvbmZpZyBvcHRpb24gaXMgZGVmaW5lZC4gVGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IHN0ZXAgd2hlbiBJJ20gZGVhbGluZyB3aXRoIHRoZXNlIHNvcnRzIG9mIGtlcm5lbCBmZWF0dXJlcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgbW9zdCBsaWtlbHkgcGxhY2VzIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIG9wdGlvbnMuIGBpbml0L0tjb25maWdgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgaXQgb2Z0ZW4gaGFuZGxlcyBjb3JlIGluaXRpYWxpemF0aW9uIGFuZCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9ucy4gQnV0LCBnaXZlbiB0aGF0IGBNRU1DR19WMWAgc2NyZWFtcyBtZW1vcnkgbWFuYWdlbWVudCwgSSdtIGxlYW5pbmcgbW9yZSB0b3dhcmRzIGBtbS9LY29uZmlnYCByaWdodCBhd2F5LiBJdCdzIHRoZSBtb3JlIGxvZ2ljYWwgaG9tZSBmb3Igb3B0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3VwcywgYW5kIGl0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSdsbCBzdGFydCB3aXRoIHRob3NlIHR3byBmaWxlcywgYW5kIGdvIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDMzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MTAuNDgyNTI5MTkzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgyMzYzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjY9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3NS1cXG5pbml0L0tjb25maWc6MTA3Njpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3Ny1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTEtXFxuaW5pdC9LY29uZmlnOjEwOTI6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTMtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTgtXFxuaW5pdC9LY29uZmlnOjEwOTk6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDAtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MTIuNDY0ODk5MjE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDI3NTQ3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB0byBiZXN0IGFwcHJvYWNoIGEgZGVlcGVyIGRpdmUuIEVuYWJsaW5nIGBNRU1DR2AgYW5kIGBNRU1DR19WMWAgc2VlbXMgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24sIEkgdXN1YWxseSBzdGFydCB0aGVyZSB0byBiZSBhYmxlIHRvIGdldCBnb29kIG9ic2VydmFiaWxpdHkuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCBrZXkgZW50cnkgcG9pbnRzIGZvciBtZW1vcnkgcmVjbGFpbS4gSSdtIHRyeWluZyB0byBpZGVudGlmeSBhcmVhcyB3aGVyZSB0aGUgd29ya2luZ3NldCBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB3YWtldXBfa3N3YXBkYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjb25zaWRlciBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhcyB0aGF0J3MgdXNlZCBmb3IgaGliZXJuYXRpb24sIHRob3VnaCBpdCBtYXkgbm90IGJlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBzcGVjaWZpYyB3b3JraW5nc2V0IGZvY3VzIHJpZ2h0IG5vdy4gTGV0IG1lIHNlZS4uLiBJIHNlZSBgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlYCBpcyBtZW50aW9uZWQgaW4gYG1tL3N3YXAuY2AsIGJ1dCBpdCBqdXN0IGFwcGVhcnMgdG8gYmUgY29udGV4dCBoZXJlLCBub3Qgc29tZXRoaW5nIHRvIGZvY3VzIG9uLlxuXG5JIGFsc28gc2VlIHRoYXQgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIHdlcmUgcmVtb3ZlZC4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbmFsaXR5IGhhcyBnb25lLiBBaCwgaGVyZSBpdCBpczogYHdvcmtpbmdzZXRfcmVmYXVsdGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gcmVtb3ZlIHRoZSBvbGQgcmVmYXVsdCBjb3N0IGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyByZWZhdWx0ZWQsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gZXhhbWluZS5cblxuU28sICppcyogYHdvcmtpbmdzZXRfcmVmYXVsdGAgdGhlIGNvcnJlY3Qgc3ltYm9sIHRvIGZvY3VzIG9uPyBZZXAsIGFic29sdXRlbHkuIFRoYXQgc2VlbXMgbGlrZSBhbiBpZGVhbCBlbnRyeSBwb2ludCBmb3IgdHJhY2luZyB0aGUgd29ya2luZ3NldCBjb2RlIGFuZCBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0J3MgYSBrZXkgc3BvdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nIHdoZW4gbWVtb3J5IGlzIGFjdGl2ZWx5IGJlaW5nIHVzZWQgYW5kIHJlLXVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDkzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjE3LjgwNzY1Njc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY4ODEwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXFxubW0vd29ya2luZ3NldC5jOjU0MDogKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cXG5tbS93b3JraW5nc2V0LmMtNTQxLSAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU0Ny0gKi9cXG5tbS93b3JraW5nc2V0LmM6NTQ4OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MTguMTE0NTQ0MjQ0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTk4NzY3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHM6XG5cbioqUmVmbGVjdGluZyBvbiBgd29ya2luZ3NldF9yZWZhdWx0YCoqXG5cbkFscmlnaHQsIGxldCBtZSB0aGluay4gYHdvcmtpbmdzZXRfcmVmYXVsdGAuLi4gaXMgdGhhdCBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciB2YXJpYWJsZT8gSSBuZWVkIHRvIGtub3cgaWYgaXQncyBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgaXRzIGRlZmluaW5nIG1vZHVsZSBvciBpZiBpdCdzIGFuIGludGVybmFsIGRldGFpbC4gSWYgaXQncyBleHBvcnRlZCwgdGhhdCBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIG1haW50YWluYWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBicmVha2luZyBjaGFuZ2VzIGluIGZ1dHVyZSByZXZpc2lvbnMgb2YgdGhlIHNvZnR3YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCBpdHMgZXhwb3N1cmUuIElzIGl0IGZvciBwZXJmb3JtYW5jZSBwcm9maWxpbmcsIGRlYnVnZ2luZywgYSBzcGVjaWZpYyBvcHRpbWl6YXRpb24gc3RyYXRlZ3ksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSByZWFzb24gaXMga2V5IHRvIGFzc2Vzc2luZyBpdHMgaW1wYWN0IGFuZCBhbnkgcG90ZW50aWFsIGFsdGVybmF0aXZlcy4gVGhpcyBpbXBhY3RzIGhvdyBJIHNob3VsZCBwcm9jZWVkIHdpdGggd2hhdGV2ZXIgdGFzayBpcyBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjIxLjIzNDQyNDA5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MzA1Mjg2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vd29ya2luZ3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MDoyMS40MTM3Mzk5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY2NTE2ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBmb3Igc3dhcCBtYW5hZ2VtZW50IGFyZSBsb2NhdGVkIGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlLioqIEFuZCBnaXZlbiBteSBleHBlcmllbmNlLCBgaW5jbHVkZS9saW51eC9zd2FwLmhgIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBJJ2xsIGNoZWNrIHRoZXJlIGZpcnN0OyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIHN3YXAgc3BhY2UsIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gaW4gdGhhdCBjb250ZXh0LCBhbmQgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmljcyBvZiBzd2FwcGluZyBwYWdlcyB0byBhbmQgZnJvbSBkaXNrLiBJdCdzIGEgc29saWQsIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjI0LjU4MDI2MDA3OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NzcxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oPTMwMD12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjMwMTp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTMwMi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MjQuNjQ0ODQyODA3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTg4NjQ2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBUaGlzIEFQSSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG5vbi1zdGF0aWMgQVBJIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBmcm9tIHZhcmlvdXMgcGFydHMgb2YgdGhlIGtlcm5lbCwgbm90IGp1c3QgYSBsb2NhbGl6ZWQgbW9kdWxlLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgd2UgbmVlZCB0byBjb25zaWRlci4gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiBjb250ZXh0LCB3ZSBzaG91bGQgbG9vayBjbG9zZWx5IGF0OlxuXG4qICAgYHRyeV90b19mcmVlX3BhZ2VzYFxuKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYFxuKiAgIGB3YWtldXBfa3N3YXBkYFxuKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRgXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IG15IGluaXRpYWwgaHVuY2guIEl0IHNlZW1zIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgaW5kZWVkIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciAqZGlyZWN0KiByZWNsYWltLCBtYWtpbmcgaXQgYSB2ZXJ5IHN0cm9uZyBjYW5kaWRhdGUuIGB3YWtldXBfa3N3YXBkYCBpcyB0aGUgdHJpZ2dlciBmb3Igd2FraW5nIHVwIHRoZSBrc3dhcGQga2VybmVsIHRocmVhZCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHdvcmtpbmdzZXQgcmVmYXVsdCBtZWNoYW5pc20uXG5cbldhaXQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGFwcGxpY2FibGU/IExvb2tpbmcgYXQgdGhlIGNvZGUsIGBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGFsc28gYSBwb3RlbnRpYWwsIGJ1dCBpdCBsb29rcyBsaWtlIGl0J3MgaW5saW5lIG9yIGV4cG9ydGVkPyBPaCwgd2FpdCwgaXQncyBhY3R1YWxseSBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGFzIGEgcG90ZW50aWFsIHBvaW50IGZvciBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MjkuNTAzNzEwNTkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTgzMzQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00ODY9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwOC0vKipcXG5tbS9tZW1jb250cm9sLmM6NTA5OiAqIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyAtIG5vbi1jbGFtcGluZyBscnV2ZWMgc3RhdCByZWFkIGZvciBkZWx0YSBzYW1wbGluZ1xcbm1tL21lbWNvbnRyb2wuYy01MTAtICogQGxydXZlYzogdGhlIExSVSB2ZWN0b3IgdG8gcmVhZCBmcm9tXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1Mjc6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL21lbWNvbnRyb2wuYy01MjgtXFx0XFx0XFx0XFx0XFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MjkuNTY5NTUzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzAzNTQ4MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBGbG93KipcblxuVGhpcyBpc24ndCBhIHNpbXBsZSwgZGlyZWN0IHJlYWQ7IGl0J3MgYSBkeW5hbWljIHByb2Nlc3MgdGllZCB0byBnZXR0ZXJzLCB3aXRoIHRoZSByZWFsIG1lYXQgYmVpbmcgaW4gYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhbmQgYGV2aWN0X2ZvbGlvc2AuIEJlY2F1c2UgdGhleSBhcmUgc3RhdGljLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQncyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUga2V5LlxuXG5gc2hyaW5rX25vZGVgIGlzIGNhbGxpbmcgYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgd2hpY2ggaXMgaXRzZWxmIGJlaW5nIGNhbGxlZCBieSBhIHNlcmllcyBvZiBmdW5jdGlvbnM6IGBrc3dhcGRfc2hyaW5rX25vZGVgLCBgc2hyaW5rX3pvbmVzYCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC5cblxuYHNocmlua196b25lc2AgdGhlbiBjYWxscyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhbmQgdGhpcyBpcyB0cmlnZ2VyZWQgYnkgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC5cblxuVGhlcmVmb3JlLCB0aGUgcGxhY2VzIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGFyZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgYXMgdGhlIHBvaW50cyB3aGVyZSB0aGlzIGZsb3cgaXMga2lja2VkIG9mZi4gTm93LCBsZXQncyBzaGlmdCBmb2N1cyB0byBgZXZpY3RfZm9saW9zYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6MzUuMjczMTA0MDY5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3MTI5NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4MjU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4NTgtXFxubW0vdm1zY2FuLmM6NDg1OTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODYwLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMjE9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDQtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTA0NTpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTA0Ni1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTY0OD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2NjgtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU2Njk6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU2NzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjM1LjQ5NTgyNjAwNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEzODc5NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlbHZpbmcgaW50byB0aGUgTUdMUlUgRXZpY3Rpb24gTWVjaGFuaXNtKipcblxuT2theSwgc28gYGV2aWN0X2ZvbGlvc2AuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBieSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCwgYW5kIHRob3NlIGFyZSBjb3JlIGNvbXBvbmVudHMgb2YgYGxydV9nZW5gLCB0aGUgTXVsdGlwbGUtR2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIG1lY2hhbmlzbS4gQnV0IGhhbmcgb24sIGlzIGBldmljdF9mb2xpb3NgIGFjdHVhbGx5ICpwYXJ0KiBvZiBNR0xSVT8gTXkgbWVtb3J5J3MgYSBiaXQgZnV6enkgb24gdGhhdCBzcGVjaWZpYyByZWxhdGlvbnNoaXAuIFRpbWUgdG8gdmVyaWZ5LiBMZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBldmljdF9mb2xpb3NgIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBtbS92bXNjYW4uY2AgdG8gY2xhcmlmeSBpdHMgZXhhY3Qgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgTUdMUlUgZnJhbWV3b3JrIGFuZCBjb25maXJtIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTFJVIGdlbmVyYXRpb24gbWFuYWdlbWVudC4gSXQncyBpbXBvcnRhbnQgdG8gaGF2ZSBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxvdyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM5MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjQxLjgwOTcxMDAyMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMxNjAwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4MjU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4NTgtXFxubW0vdm1zY2FuLmM6NDg1OTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODYwLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMjE9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDQtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTA0NTpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTA0Ni1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTY0OD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2NjgtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU2Njk6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU2NzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjQxLjg3Mjg4MDM5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3MzQ5MjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1HTFJVIENvbnNpZGVyYXRpb24gZm9yIFRlc3RpbmcqKlxuXG5Pa2F5LCBNR0xSVS4gUmlnaHQuIE5vdywgYSBrZXkgcXVlc3Rpb24gcG9wcyB1cDogaXMgTUdMUlUgYWN0dWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBBaCwgYENPTkZJR19MUlVfR0VOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiBmb3IgTUdMUlUsIHNvIHRoYXQncyB0aGUgb25lIHRvIGNoZWNrLiBMZXQncyBzZWUgaWYgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGEgcmVxdWlyZW1lbnQgaW4gdGhpcyBzY2VuYXJpby5cblxuVGhlIHBhdGNoIEknbSBsb29raW5nIGF0IG1vZGlmaWVzIGBldmljdF9mb2xpb3NgLCBhbmQgdGhhdCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIE1HTFJVIGNvZGViYXNlLiBJbnRlcmVzdGluZywgaXQgKmFsc28qIHRvdWNoZXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAuIFRob3NlIGFyZSBwYXJ0IG9mIHRoZSBhY3RpdmUvaW5hY3RpdmUgTFJVLCBzbyB0aGUgbGVnYWN5IExSVS4gU28sIHRoaXMgcGF0Y2ggY2xlYXJseSBoYXMgaW1wbGljYXRpb25zIGZvciBib3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBNR0xSVS5cblxuVGhlcmVmb3JlLCB0byB0aG9yb3VnaGx5IGV2YWx1YXRlIHRoaXMgcGF0Y2gsIEkgdGhpbmsgd2UgKnJlYWxseSogbmVlZCB0byBlbmFibGUgYENPTkZJR19MUlVfR0VOYCBkdXJpbmcgdGVzdGluZyB0byBlbnN1cmUgd2UncmUgZXhlcmNpc2luZyB0aGUgTUdMUlUgcGF0aCBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSB0byBiZSBzdXJlLiBMZXQncyBzZWUgd2hhdCBgTFJVX0dFTmAgYnJpbmdzIHRvIHRoZSB0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NDYuMjUwMjMyNzM1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExNDQxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MDY9ZW5kaWYgIyBVU0VSRkFVTFRGRFxcbi0tXFxubW0vS2NvbmZpZy0xNDA4LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA5OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDEwLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTctXFxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTktXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjMtXFxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDI1LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQzMi1cXG5tbS9LY29uZmlnOjE0MzM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDM0LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NDYuNDAxMzg1NzIyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzk4MDE3NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGNoLiBGaXJzdCwgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBsb29rIGxpa2UgZ29vZCBmbGFncyB0byBlbmFibGUg4oCTIHRoZXkncmUga2V5IHRvIHRoZSBuZXcgTFJVIGltcGxlbWVudGF0aW9uLiBOb3csIGxldCdzIGV4YW1pbmUgdGhlIGNvZGUuIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgaGFuZGxpbmcgdGhlIGxlZ2FjeSBMUlUsIHRoZSBwYXRjaCBtb2RpZmllcyBib3RoIHRoZSBsZWdhY3kgTFJVIGFuZCB0aGUgTUdMUlUuIFNwZWNpZmljYWxseSwgdGhlIGxlZ2FjeSBMUlUgdG91Y2hlcyBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAsIHdoaWxlIE1HTFJVIHVzZXMgYGV2aWN0X2ZvbGlvc2AuIEkgc2hvdWxkIGJlIHRlc3RpbmcgYm90aC4gV2UgY2FuIGp1c3Qgc3BlY2lmeSBgTFJVX0dFTmAsIGFuZCB0aGUgc3lzdGVtIHdpbGwgaGFuZGxlIGBMUlVfR0VOX0VOQUJMRURgLlxuXG5UaGUgaW5pdGlhbCBwbGFuIGlzIHRvIGVuYWJsZSBgTFJVX0dFTmAgc28gdGhhdCB0aGUgZmVhdHVyZSBpcyBjb21waWxlZCBpbi4gYExSVV9HRU5fRU5BQkxFRGAgbWlnaHQgYmUgZmluZSB0byBlbmFibGUgdG9vLiBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gaGF2ZSBsZWdhY3kgTFJVIHRlc3RlZCBtb3JlLiBCdXQgaXQncyBmaW5lLCBzeXprYWxsZXIgY2FuIHRvZ2dsZSBgTFJVX0dFTl9FTkFCTEVEYCBpZiBpdCBrbm93cyBob3csIG9yIHdlIGNhbiBqdXN0IHByb3ZpZGUgYExSVV9HRU5gIGFuZCBsZXQgdGhlIGRlZmF1bHQgYmUgd2hhdGV2ZXIuIElmIHdlIGRvbid0IHNwZWNpZnkgYExSVV9HRU5fRU5BQkxFRGAsIGl0IG1pZ2h0IGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIHRlc3RzIGxlZ2FjeSBMUlUuIElmIHdlIHNwZWNpZnkgaXQsIGl0IHRlc3RzIE1HTFJVLiBTbyBpdCdzIGJlc3QgdG8gZW5hYmxlIGBMUlVfR0VOYCBpbiB0aGUgY29uZmlnLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25maWd1cmF0aW9ucyBJJ2xsIHVzZSBhcmU6XG4qICAgYE1FTUNHYFxuKiAgIGBNRU1DR19WMWBcbiogICBgTFJVX0dFTmBcblxuSSd2ZSBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgYE1FTUNHX1YxYCBpcyBwcmVzZW50IGluIGBpbml0L0tjb25maWdgLlxuXG5Ob3csIGxldCdzIHJldmlldyB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZy4gSSd2ZSBnb3QgdG8gY292ZXIgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNoYW5nZWQgZnVuY3Rpb25zLCBzbyBJJ20gbG9va2luZyBhdDpcbiogICBgdHJ5X3RvX2ZyZWVfcGFnZXNgXG4qICAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgXG4qICAgYHdha2V1cF9rc3dhcGRgXG4qICAgYHdvcmtpbmdzZXRfcmVmYXVsdGBcblxuQXJlIHRoZXJlIGFueSBvdGhlciBlbnRyeSBwb2ludHMgZm9yIE1HTFJVPyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbm9kZWAuIGB0cnlfdG9fZnJlZV9wYWdlc2AgY292ZXJzIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZXJlLlxuXG5JJ20gbG9va2luZyBhdCBgcGFnZW91dGAuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGBzaHJpbmtfZm9saW9fbGlzdGAuIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLCBzbyBJIHRoaW5rIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCB3aWxsIGNvdmVyIGl0LlxuXG5JIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlc2UuXG4qICAgYGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgY2FsbGVkIGJ5IGBwcmVwYXJlX3NjYW5fY29udHJvbGAuXG4qICAgYG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWNgIGlzIGNhbGxlZCBieSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljYCB3aGVuIG1lbWNnIGlzIGRpc2FibGVkLlxuKiAgIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlX21vbm90b25pY2AgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC92bXN0YXQuaGAuXG5cblRoZSBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBJIGNhdGVnb3JpemUgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAuXG5cbkkndmUgZGV0ZXJtaW5lZCB0aGUgZmluYWwgbGlzdCBvZiBGb2N1cyBTeW1ib2xzOlxuXG4qICAgYHRyeV90b19mcmVlX3BhZ2VzYFxuKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYFxuKiAgIGB3YWtldXBfa3N3YXBkYFxuKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRgXG5cbkZpbmFsIENvbmZpZ3M6XG5cbiogICBgTUVNQ0dgXG4qICAgYE1FTUNHX1YxYFxuKiAgIGBMUlVfR0VOYFxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYE1FTUNHX1YxYCBpcyBjb3JyZWN0LiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYExSVV9HRU5gIGlzIGNvcnJlY3QuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNvcnJlY3QuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY29ycmVjdC4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGB3YWtldXBfa3N3YXBkYCBpcyBjb3JyZWN0LiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgY29ycmVjdC4gQWxsIGNoZWNrcyBhcmUgZ3JlZW4uIE5vdyBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NDMsIk91dHB1dFRva2VucyI6MTUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjU5Ljc5OTQwNjEyMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDAyNTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIixcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwid2FrZXVwX2tzd2FwZFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIExSVSByZWNsYWltIGxvZ2ljIGFuZCBjb3N0IGNhbGN1bGF0aW9uIGZvciBib3RoIGxlZ2FjeSBMUlUgYW5kIE1HTFJVLiBJdCBpbnRyb2R1Y2VzIG1vbm90b25pYyBjb3VudGVycyBmb3IgTFJVIHN0YXRzIGFuZCBjaGFuZ2VzIGhvdyBzY2FuIGJhbGFuY2UgaXMgZGV0ZXJtaW5lZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBMUlUgcmVjbGFpbSBsb2dpYyBhbmQgY29zdCBjYWxjdWxhdGlvbiBmb3IgYm90aCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gSXQgaW50cm9kdWNlcyBtb25vdG9uaWMgY291bnRlcnMgZm9yIExSVSBzdGF0cyBhbmQgY2hhbmdlcyBob3cgc2NhbiBiYWxhbmNlIGlzIGRldGVybWluZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[1] Phase: Succeeded StartedAt: 2026-07-28 08:51:10 +0000 UTC FinishedAt: 2026-07-28 08:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 08:51:10 +0000 UTC FinishedAt: 2026-07-28 08:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2] Phase: Succeeded StartedAt: 2026-07-28 08:51:10 +0000 UTC FinishedAt: 2026-07-28 13:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 08:51:11 +0000 UTC FinishedAt: 2026-07-28 13:11:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 08:51:11 +0000 UTC FinishedAt: 2026-07-28 08:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 08:51:11 +0000 UTC FinishedAt: 2026-07-28 08:51:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8w7st/series-workflow8w7st-convert-artifact-3715635143/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 08:52:12 +0000 UTC FinishedAt: 2026-07-28 09:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 08:52:12 +0000 UTC FinishedAt: 2026-07-28 09:21:58 +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:*e7b15e96-0804-4e37-b439-58ce0c6931ed,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-workflow8w7st/series-workflow8w7st-convert-artifact-3715635143/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": "49e645a6-ea8f-4aa6-a9c3-35914e639cb5", "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-workflow8w7st/series-workflow8w7st-build-action-2904760413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 08:52:12 +0000 UTC FinishedAt: 2026-07-28 09:21:48 +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:*e7b15e96-0804-4e37-b439-58ce0c6931ed,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-workflow8w7st/series-workflow8w7st-convert-artifact-3715635143/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": "49e645a6-ea8f-4aa6-a9c3-35914e639cb5", "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-workflow8w7st/series-workflow8w7st-build-action-2904760413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 09:21:58 +0000 UTC FinishedAt: 2026-07-28 09:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 09:21:58 +0000 UTC FinishedAt: 2026-07-28 09:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 09:21:58 +0000 UTC FinishedAt: 2026-07-28 09:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 09:21:58 +0000 UTC FinishedAt: 2026-07-28 09:22:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8w7st/series-workflow8w7st-convert-artifact-2761454838/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 09:22:19 +0000 UTC FinishedAt: 2026-07-28 09:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 09:22:19 +0000 UTC FinishedAt: 2026-07-28 09:24:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49e645a6-ea8f-4aa6-a9c3-35914e639cb5,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-workflow8w7st/series-workflow8w7st-build-action-2904760413/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-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 09:24:30 +0000 UTC FinishedAt: 2026-07-28 09:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 09:24:30 +0000 UTC FinishedAt: 2026-07-28 09:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 09:24:30 +0000 UTC FinishedAt: 2026-07-28 10:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 09:24:30 +0000 UTC FinishedAt: 2026-07-28 10:02:40 +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:*e7b15e96-0804-4e37-b439-58ce0c6931ed,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-workflow8w7st/series-workflow8w7st-convert-artifact-2761454838/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": "c480c62c-73e9-4ed2-b50d-536b9f5bdd1b", "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-workflow8w7st/series-workflow8w7st-build-action-4247362554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 09:24:30 +0000 UTC FinishedAt: 2026-07-28 10:02:30 +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:*e7b15e96-0804-4e37-b439-58ce0c6931ed,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-workflow8w7st/series-workflow8w7st-convert-artifact-2761454838/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": "c480c62c-73e9-4ed2-b50d-536b9f5bdd1b", "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-workflow8w7st/series-workflow8w7st-build-action-4247362554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 10:02:40 +0000 UTC FinishedAt: 2026-07-28 10:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 10:02:40 +0000 UTC FinishedAt: 2026-07-28 10:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 10:02:40 +0000 UTC FinishedAt: 2026-07-28 10:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 10:02:40 +0000 UTC FinishedAt: 2026-07-28 10:04:38 +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:*c480c62c-73e9-4ed2-b50d-536b9f5bdd1b,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-workflow8w7st/series-workflow8w7st-build-action-4247362554/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-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 10:04:48 +0000 UTC FinishedAt: 2026-07-28 13:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 10:04:48 +0000 UTC FinishedAt: 2026-07-28 13:11:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*49e645a6-ea8f-4aa6-a9c3-35914e639cb5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c480c62c-73e9-4ed2-b50d-536b9f5bdd1b,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-workflow8w7st/series-workflow8w7st-build-action-2904760413/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-workflow8w7st/series-workflow8w7st-build-action-4247362554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 10:04:48 +0000 UTC FinishedAt: 2026-07-28 10:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 10:04:48 +0000 UTC FinishedAt: 2026-07-28 10:04:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8w7st/series-workflow8w7st-convert-artifact-2862755355/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 10:04:48 +0000 UTC FinishedAt: 2026-07-28 10:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 10:04:48 +0000 UTC FinishedAt: 2026-07-28 10:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 10:04:48 +0000 UTC FinishedAt: 2026-07-28 10:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 10:04:58 +0000 UTC FinishedAt: 2026-07-28 13:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8w7st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_pages","try_to_free_mem_cgroup_pages","wakeup_kswapd","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"a0e68350-67b9-49cf-a254-2bb599f72b94","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 10:04:58 +0000 UTC FinishedAt: 2026-07-28 13:11:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49e645a6-ea8f-4aa6-a9c3-35914e639cb5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c480c62c-73e9-4ed2-b50d-536b9f5bdd1b,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-workflow8w7st/series-workflow8w7st-build-action-2904760413/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-workflow8w7st/series-workflow8w7st-build-action-4247362554/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-workflow8w7st/series-workflow8w7st-convert-artifact-2862755355/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,}