Name: series-workflow5zzgl Phase: Succeeded StartedAt: 2026-09-03 16:21:39 +0000 UTC FinishedAt: 2026-09-03 20:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[0] Phase: Succeeded StartedAt: 2026-09-03 16:21:39 +0000 UTC FinishedAt: 2026-09-03 16:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 16:21:39 +0000 UTC FinishedAt: 2026-09-03 16:24:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "24996432-c4e9-4bc6-bd77-92b87c3e1d29" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_symlink", "configfs_get_root_item" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtjb25maWdmc19nZXRfcm9vdF9pdGVtJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBjb25maWdmc19zeW1saW5rKCkgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWdfaXRlbSBmb3IgZGVmYXVsdCBncm91cHMgYW5kIGNoZWNraW5nIGZvciBkaXJlY3RvcnkgZGVsZXRpb24gKGZyYWdfZGVhZCwgSVNfREVBRERJUiwgZF91bmhhc2hlZCkgYWZ0ZXIgdGVtcG9yYXJpbHkgdW5sb2NraW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayBkdXJpbmcgdGFyZ2V0IHJlc29sdXRpb24uXG5cblRoaXMgaXMgYSBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcHJldmVudGlvbiBmaXguIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMsIHJlZmVyZW5jZSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgbm8gY29weV90b191c2VyIHBhdGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgcm9vdCBvYmplY3Qgb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGRlYWQgZGlyZWN0b3JpZXMvZnJhZ21lbnRzIGFjcm9zcyB0ZW1wb3JhcnkgbG9jayBkcm9wcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgVkZTL3BzZXVkby1maWxlc3lzdGVtIGxvZ2ljIGhhbmRsaW5nIHN5bWxpbmsgb3BlcmF0aW9ucyBpbiBjb25maWdmcywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5L3JhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2MGVhNzRiYjlkOTcxOTg1MzczMGMyZDliMjUyMTk5MjdkNDUzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE2OjIzOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uYTAwZjI3Yzg5MTAwYSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgJiM0MzsxMzEsMTkgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFJU19ST09UKHJvb3RfZGVudHJ5KSkge1xuJiM0MztcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XHRcdGlmICghc2QgfHwgIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSk7XG4mIzQzO31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuQEAgLTEzOSw2ICYjNDM7MTUyLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMO1xuIFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XG4gXG4gXHRzZCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2ZzZGF0YTtcbkBAIC0xNTcsNiAmIzQzOzE3MSwxOCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXG4mIzQzO1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7XG4mIzQzO1x0XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4mIzQzO1x0XHRpZiAoIXJvb3RfaXRlbSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PRU5UO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTg3LDYgJiM0MzsyMTMsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuJiM0MztcdGlmIChzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fFxuJiM0MztcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gXHRlbHNlXG5AQCAtMjAzLDEwICYjNDM7MjM1LDEwIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHRhcmdldF9pdGVtKTtcbiBcdH1cbiBcbi1cdGNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7XG4tXG4gb3V0X3B1dDpcbiYjNDM7XHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuIFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbiYjNDM7XHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtjb25maWdmc19nZXRfcm9vdF9pdGVtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSByb290IG9iamVjdCBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgZGVhZCBkaXJlY3Rvcmllcy9mcmFnbWVudHMgYWNyb3NzIHRlbXBvcmFyeSBsb2NrIGRyb3BzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBWRlMvcHNldWRvLWZpbGVzeXN0ZW0gbG9naWMgaGFuZGxpbmcgc3ltbGluayBvcGVyYXRpb25zIGluIGNvbmZpZ2ZzLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDYwZWE3NGJiOWQ5NzE5ODUzNzMwYzJkOWIyNTIxOTkyN2Q0NTNhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTY6MjM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKaW5kZXggMzFlYjI4YjI3MzA5MS4uYTAwZjI3Yzg5MTAwYSAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwpAQCAtMTMxLDYgJiM0MzsxMzEsMTkgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7CiYjNDM7CXN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkOwomIzQzOwomIzQzOwl3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7CiYjNDM7CQlzZCA9IHJvb3RfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJCWlmICghc2QgfHwgIShzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LSZndDtkX3BhcmVudDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTsKJiM0Mzt9CiAKIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCkBAIC0xMzksNiAmIzQzOzE1Miw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7CiAKIAlzZCA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQtJmd0O2RfZnNkYXRhOwpAQCAtMTU3LDYgJiM0MzsxNzEsMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCSAgICAhdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW4KJiM0MzsJICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlpZiAoc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHsKJiM0MzsJCXJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LSZndDtkX3BhcmVudCk7CiYjNDM7CQlpZiAoIXJvb3RfaXRlbSkgewomIzQzOwkJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQkJZ290byBvdXRfcHV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2YKIAkgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZApAQCAtMTg3LDYgJiM0MzsyMTMsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwlpZiAoc2QtJmd0O3NfZnJhZy0mZ3Q7ZnJhZ19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fAomIzQzOwkgICAgZF91bmhhc2hlZChkZW50cnktJmd0O2RfcGFyZW50KSkgewomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKJiM0MzsJfQomIzQzOwogCWlmIChkZW50cnktJmd0O2RfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKQogCQlyZXQgPSAtRUVYSVNUOwogCWVsc2UKQEAgLTIwMywxMCAmIzQzOzIzNSwxMCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkgICAgIHRhcmdldF9pdGVtKTsKIAl9CiAKLQljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwotCiBvdXRfcHV0OgomIzQzOwljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwogCWNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7CiYjNDM7CWNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pOwogCXJldHVybiByZXQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiB3b3J0aCBjb25zaWRlcmluZyBmb3Igc3l6a2FsbGVyLiBUaGUgZGlmZiBpcyB0b3VjaGluZyBgZnMvY29uZmlnZnMvc3ltbGluay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY29uZmlnZnNfc3ltbGlua2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlcyBJIHNlZSBhcmUgdGhlIGludHJvZHVjdGlvbiBvZiBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAsIHBpbm5pbmcgdGhlIHJvb3Qgb2JqZWN0LCBzb21lIG5ldyBlcnJvciBjaGVja3MgcmVsYXRlZCB0byB0aGUgZGlyZWN0b3J5JiMzOTtzIHN0YXRlIChgZnJhZ19kZWFkYCwgYElTX0RFQURESVJgLCBgZF91bmhhc2hlZGApLCBhbmQgYSByZWFycmFuZ2VtZW50L2ltcHJvdmVtZW50IG9mIGNsZWFudXAgd2l0aCB0aGUgYGNvbmZpZ19pdGVtX3B1dGAgY2FsbHMuCgpOb3csIGlzIHRoaXMgY29kZSByZWFjaGFibGU/IEFic29sdXRlbHkuIGBjb25maWdmc2AgaXMgYSB3ZWxsLWtub3duIHZpcnR1YWwgZmlsZXN5c3RlbS4gVGhhdCBtZWFucyBpdOKAmXMgZXhwb3NlZCB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2UgYHN5bWxpbmtgLCBgc3ltbGlua2F0YCwgYG1vdW50YCwgYW5kIGBta2RpcmAuIFN5emthbGxlciBhbHJlYWR5IGhpdHMgdGhpcyBmaWxlc3lzdGVtIHByZXR0eSBoYXJkLCBzbyB0aGF04oCZcyBhIGdvb2Qgc2lnbi4gVGhlIG5ldyBjYWxscyB0byBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNoZWNrcyBhbmQgY2xlYW51cCwgKmNvdWxkKiBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgb3IgcG90ZW50aWFsIGlzc3VlcyB0aGF0IHN5emthbGxlciBjb3VsZCB1bmNvdmVyLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG9iamVjdCBsaWZldGltZSBhbmQgZXJyb3IgaGFuZGxpbmcuIFNvLCBpdCYjMzk7cyB2ZXJ5IHByb21pc2luZy4KClRvIGNvbmZpcm0gdGhpcyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGNvbmZpZ2ZzYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBmcy9jb25maWdmcy9LY29uZmlnYCBvciBgZnMvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIHNldHRpbmdzIGFyZSwgdXNpbmcgZWl0aGVyIGBncmVwcGVyYCBvciBqdXN0IHF1aWNrbHkgcmVhZGluZyB0aGUgcmVsZXZhbnQgZmlsZXMuIEdvdHRhIG1ha2Ugc3VyZSBpdOKAmXMgZXZlbiBjb25maWd1cmVkIGluIGFueSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTU3PW9iai0kKENPTkZJR19TWVNGUylcdFx0JiM0Mzs9IHN5c2ZzL1xuZnMvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVx0JiM0Mzs9IGNvbmZpZ2ZzL1xuZnMvTWFrZWZpbGUtNTktb2JqLXlcdFx0XHRcdCYjNDM7PSBkZXZwdHMvXG4tLVxuZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvY29uZmlnZnMvS2NvbmZpZzoyOmNvbmZpZyBDT05GSUdGU19GU1xuZnMvY29uZmlnZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9jb25maWdmcy9NYWtlZmlsZS01LVxuZnMvY29uZmlnZnMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQ09ORklHRlNfRlMpXHQmIzQzOz0gY29uZmlnZnMub1xuZnMvY29uZmlnZnMvTWFrZWZpbGUtNy1cbi0tXG5mcy9kbG0vS2NvbmZpZz0yPW1lbnVjb25maWcgRExNXG4tLVxuZnMvZGxtL0tjb25maWctNC1cdGRlcGVuZHMgb24gSU5FVFxuZnMvZGxtL0tjb25maWc6NTpcdGRlcGVuZHMgb24gU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG5mcy9kbG0vS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2dmczIvS2NvbmZpZz0yNz1jb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTVxuLS1cbmZzL2dmczIvS2NvbmZpZy0yOS1cdGRlcGVuZHMgb24gKEdGUzJfRlMhPW4pIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IElORVQgXHUwMDI2XHUwMDI2IFxcXG5mcy9nZnMyL0tjb25maWc6MzA6XHRcdENPTkZJR0ZTX0ZTIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgKERMTT15IHx8IERMTT1HRlMyX0ZTKVxuZnMvZ2ZzMi9LY29uZmlnLTMxLVx0aGVscFxuLS1cbmZzL29jZnMyL0tjb25maWc9Mj1jb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ0ZTIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBmcy9jb25maWdmcy9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIENvbmZpZ0ZTLiBHaXZlbiBpdHMgcm9sZSBhcyBhIGZpbGVzeXN0ZW0gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiwgSSBleHBlY3QgdG8gc2VlIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgc2V0IG9mIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGtleSB0aGluZ3M6CgoqICAgKipNYWluIENvbmZpZ3VyYXRpb24gU3ltYm9sOioqIEZpcnN0LCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgbWFpbiBzeW1ib2wgdGhhdCBlbmFibGVzIENvbmZpZ0ZTIGl0c2VsZi4gVGhpcyB3aWxsIGxpa2VseSBiZSBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0NPTkZJR0ZTYCBvciBzaW1pbGFyLiBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGdyb2sgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIChsaWtlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdXBwb3J0KS4KKiAgICoqTW9kdWxlLW5lc3M6KiogRG9lcyBpdCBoYXZlIGEgbW9kdWxhciBvcHRpb24/IFRoYXQmIzM5O3MgYSBjcnVjaWFsIGRlY2lzaW9uLiBJZiBzbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBidWlsZGluZyBpdCBhcyBhIG1vZHVsZSB2ZXJzdXMgYnVpbHQtaW4uIFRoaXMgaW1wYWN0cyBib290IHByb2Nlc3MgYW5kIHBvdGVudGlhbCB0cm91Ymxlc2hvb3RpbmcuIFRoZSB0cmFkZS1vZmZzIGFyZSBpbXBvcnRhbnQgYW5kIHByb2JhYmx5IGRlc2NyaWJlZCBpbiB0aGUgaGVscCB0ZXh0LgoqICAgKipTdWItb3B0aW9uczoqKiBOZXh0LCBJJiMzOTtsbCBsb29rIGZvciBhbnkgc3ViLW9wdGlvbnMgd2l0aGluIENvbmZpZ0ZTLiBUaGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzIG9yIGZlYXR1cmVzIG9mIENvbmZpZ0ZTLiBGb3IgZXhhbXBsZSwgYXJlIHRoZXJlIHNldHRpbmdzIHJlbGF0ZWQgdG8gc2VjdXJpdHkgYXR0cmlidXRlcywgZmlsZSBwZXJtaXNzaW9ucywgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvYmplY3QgdHlwZXM/IFVuZGVyc3RhbmRpbmcgdGhlc2Ugb3B0aW9ucyBhbGxvd3MgZm9yIHRhaWxvcmluZyB0aGUgZmVhdHVyZSBzZXQuCiogICAqKkRlcGVuZGVuY2llcyBhbmQgUmVsYXRpb25zaGlwczoqKiBJJiMzOTtsbCBtZXRpY3Vsb3VzbHkgY2hlY2sgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcy4gQ29uZmlnRlMgbGlrZWx5IHJlbGllcyBvbiBjb3JlIFZGUyBlbGVtZW50cywgcG90ZW50aWFsbHkgb24gc2VjdXJpdHkgZnJhbWV3b3JrcyBsaWtlIFNFTGludXggb3IgQXBwQXJtb3IsIG9yIG90aGVyIHN0b3JhZ2UtcmVsYXRlZCBjb21wb25lbnRzLiBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIGNydWNpYWwgZm9yIHByb3BlciBmdW5jdGlvbmFsaXR5IGFuZCB3aWxsIHNob3cgd2hpY2ggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgYWxzbyBpbXBhY3RlZCBieSBhbnkgY2hhbmdlcyB0byBDb25maWdGUyBzZXR0aW5ncy4KKiAgICoqSGVscCBUZXh0IEFuYWx5c2lzOioqIFRoZSBoZWxwIHRleHQgaXMsIGFzIGFsd2F5cywgY3J1Y2lhbC4gSSBuZWVkIHRvIHF1aWNrbHkgZXh0cmFjdCB0aGUgY29yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGVhY2ggb3B0aW9uICpkb2VzKiwgd2h5IHlvdSYjMzk7ZCBlbmFibGUgaXQsIGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBlYWNoIHNldHRpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBlcmZvcm1hbmNlLCBsaW1pdGF0aW9ucywgb3IgYmVzdCBwcmFjdGljZXMuCiogICAqKkRlZmF1bHRzIGFuZCBUcmlnZ2VyczoqKiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIGltcG9ydGFudC4gQXJlIHRoZXkgc2Vuc2libGUgZGVmYXVsdHMgdGhhdCB3b3JrIHdlbGwgJiMzNDtvdXQgb2YgdGhlIGJveCYjMzQ7LCBvciBhcmUgdGhleSBkZXBlbmRlbnQgb24gb3RoZXIgc2V0dGluZ3M/IEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBob3cgdGhvc2UgZGVmYXVsdHMgYWZmZWN0IHRoZSBzeXN0ZW0uCiogICAqKlBvdGVudGlhbCBjb25mbGljdHM6KiogSSYjMzk7bGwgYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gb3B0aW9ucy4gQXJlIHRoZXJlIGFueSBtdXR1YWxseSBleGNsdXNpdmUgc2V0dGluZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY3JlYXRlIHByb2JsZW1zIGlmIGVuYWJsZWQvZGlzYWJsZWQgYXQgdGhlIHNhbWUgdGltZT8KKiAgICoqQW55IEFyY2hpdGVjdHVyZS9QbGF0Zm9ybSBDb25zaWRlcmF0aW9uczoqKiBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zIG9yIGNvbmRpdGlvbmFsIGJsb2Nrcz8gQ29uZmlnRlMsIGxpa2UgYWxsIGtlcm5lbCBjb21wb25lbnRzLCBuZWVkcyB0byBiZSBhcyBnZW5lcmljIGFzIHBvc3NpYmxlLCBidXQgc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcyBvZnRlbiBoYXZlIHNwZWNpZmljIG5lZWRzLiBJJiMzOTtsbCBtYWtlIG5vdGUgb2YgYW55dGhpbmcgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudC4KCkJ5IHRoZSBlbmQgb2YgdGhpcywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiBDb25maWdGUyYjMzk7cyBjb25maWd1cmF0aW9uIHNwYWNlLCBpdHMgcm9sZSBpbiB0aGUga2VybmVsLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBtYWtpbmcgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gVGhpcyBrbm93bGVkZ2Ugd2lsbCBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIG9wdGltaXppbmcsIG9yIHBvdGVudGlhbGx5IGV4dGVuZGluZyBDb25maWdGUyBpbiB0aGUgZnV0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBDT05GSUdGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgY29uZmlnZnMgaXMgYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZVxuICAgNjpcdFx0ICBvZiBzeXNmcyYjMzk7cyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWRcbiAgIDc6XHRcdCAgdmlldyBvZiBrZXJuZWwgb2JqZWN0cywgY29uZmlnZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIG1hbmFnZXJcbiAgIDg6XHRcdCAgb2Yga2VybmVsIG9iamVjdHMsIG9yIGNvbmZpZ19pdGVtcy5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXG4gIDExOlx0XHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTcxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTeW1saW5rIFNoZW5hbmlnYW5zIGluIGNvbmZpZ2ZzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHN5bWxpbmtzIGluIGBjb25maWdmc2AsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIHplcm8gaW4gb24gdGhlIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayBvdXQgdGhlIGZ1bGwgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmtgIGZ1bmN0aW9uLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBrZXkgZm9yIGNyZWF0aW5nIHRob3NlIHZpcnR1YWwgc3ltbGlua3Mgd2l0aGluIHRoZSBjb25maWdmcyBoaWVyYXJjaHksIHNvIGJ5IHVuZGVyc3RhbmRpbmcgaXRzIHN1cnJvdW5kaW5nIGNvZGUsIEkgY2FuIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgaG93IGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBpdCYjMzk7cyBwYXNzZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB3aWxsIGJlIGNydWNpYWwgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHRcdFx0cmV0dXJuIHJldDtcbiAxMjY6XHRcdGlmIChwYXRoLmRlbnRyeS1cdTAwM2VkX3NiICE9IHNiKVxuIDEyNzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDEyODpcdFx0KnRhcmdldCA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShwYXRoLmRlbnRyeSk7XG4gMTI5Olx0XHRpZiAoISp0YXJnZXQpXG4gMTMwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDEzMTpcdFx0cmV0dXJuIDA7XG4gMTMyOlx0fVxuIDEzMzpcdFxuIDEzNDpcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIDEzNTpcdHtcbiAxMzY6XHRcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuIDEzNzpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gMTM4Olx0XG4gMTM5Olx0XHR3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7XG4gMTQwOlx0XHRcdHNkID0gcm9vdF9kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4gMTQxOlx0XHRcdGlmICghc2QgfHwgIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXG4gMTQyOlx0XHRcdFx0YnJlYWs7XG4gMTQzOlx0XHRcdHJvb3RfZGVudHJ5ID0gcm9vdF9kZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4gMTQ0Olx0XHR9XG4gMTQ1Olx0XHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTtcbiAxNDY6XHR9XG4gMTQ3Olx0XG4gMTQ4Olx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIDE0OTpcdFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcbiAxNTA6XHR7XG4gMTUxOlx0XHRpbnQgcmV0O1xuIDE1MjpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gMTUzOlx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIDE1NDpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XG4gMTU1Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XG4gMTU2Olx0XHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiAxNTc6XHRcbiAxNTg6XHRcdHNkID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuIDE1OTpcdFx0LypcbiAxNjA6XHRcdCAqIEZha2UgaW52aXNpYmlsaXR5IGlmIGRpciBiZWxvbmdzIHRvIGEgZ3JvdXAvZGVmYXVsdCBncm91cHMgaGllcmFyY2h5XG4gMTYxOlx0XHQgKiBiZWluZyBhdHRhY2hlZFxuIDE2MjpcdFx0ICovXG4gMTYzOlx0XHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeShzZCkpXG4gMTY0Olx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDE2NTpcdFxuIDE2NjpcdFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiAxNjc6XHRcdHR5cGUgPSBwYXJlbnRfaXRlbS1cdTAwM2VjaV90eXBlO1xuIDE2ODpcdFxuIDE2OTpcdFx0cmV0ID0gLUVQRVJNO1xuIDE3MDpcdFx0aWYgKCF0eXBlIHx8ICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzIHx8XG4gMTcxOlx0XHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiAxNzI6XHRcdFx0Z290byBvdXRfcHV0O1xuIDE3MzpcdFxuIDE3NDpcdFx0LypcbiAxNzU6XHRcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuIDE3NjpcdFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4gMTc3Olx0XHQgKi9cbiAxNzg6XHRcdGlmIChzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xuIDE3OTpcdFx0XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTgwOlx0XHRcdGlmICghcm9vdF9pdGVtKSB7XG4gMTgxOlx0XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAxODI6XHRcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMTgzOlx0XHRcdH1cbiAxODQ6XHRcdH1cbiAxODU6XHRcbiAxODY6XHRcdC8qXG4gMTg3Olx0XHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiAxODg6XHRcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG4gMTg5Olx0XHQgKiBhdCBzeXNjYWxsIHRpbWUgKGFzIGxpbmsoMikgd291bGQmIzM5O3ZlIGRvbmUpLCBiZSBhIGRpcmVjdG9yeVxuIDE5MDpcdFx0ICogKHdoaWNoIGxpbmsoMikgd291bGQmIzM5O3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxuIDE5MTpcdFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cbiAxOTI6XHRcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxuIDE5MzpcdFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XG4gMTk0Olx0XHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxuIDE5NTpcdFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxuIDE5NjpcdFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXG4gMTk3Olx0XHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXG4gMTk4Olx0XHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxuIDE5OTpcdFx0ICpcbiAyMDA6XHRcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCYjMzk7dmVcbiAyMDE6XHRcdCAqIHNhaWQgXCYjMzQ7bm9cJiMzNDsgYmFjayBpbiAyMDA1LiAgVG9vIGxhdGUgbm93LCBzbyB3ZSBnZXQgdG9cbiAyMDI6XHRcdCAqIHBsYXkgdmVyeSB1Z2x5IGdhbWVzIHdpdGggbG9ja2luZy5cbiAyMDM6XHRcdCAqXG4gMjA0Olx0XHQgKiBUcnkgKkFOWVRISU5HKiBvZiB0aGF0IHNvcnQgaW4gbmV3IGNvZGUsIGFuZCB5b3Ugd2lsbFxuIDIwNTpcdFx0ICogcmVhbGx5IHJlZ3JldCBpdC4gIEp1c3QgYXNrIHlvdXJzZWxmIC0gd2hhdCBjb3VsZCBhIEJPRkhcbiAyMDY6XHRcdCAqIGRvIHRvIG1lIGFuZCBkbyBJIHdhbnQgdG8gZmluZCBpdCBvdXQgZmlyc3QtaGFuZD9cbiAyMDc6XHRcdCAqXG4gMjA4Olx0XHQgKiAgQVYsIGEgdGhvcm91Z2hseSBhbm5veWVkIGJhc3RhcmQuXG4gMjA5Olx0XHQgKi9cbiAyMTA6XHRcdGlub2RlX3VubG9jayhkaXIpO1xuIDIxMTpcdFx0cmV0ID0gZ2V0X3RhcmdldChzeW1uYW1lLCBcdTAwMjZ0YXJnZXRfaXRlbSwgZGVudHJ5LVx1MDAzZWRfc2IpO1xuIDIxMjpcdFx0aW5vZGVfbG9jayhkaXIpO1xuIDIxMzpcdFx0aWYgKHJldClcbiAyMTQ6XHRcdFx0Z290byBvdXRfcHV0O1xuIDIxNTpcdFxuIDIxNjpcdFx0aWYgKHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XG4gMjE3Olx0XHQgICAgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpKSB7XG4gMjE4Olx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gMjE5Olx0XHRcdGdvdG8gb3V0X3B1dDtcbiAyMjA6XHRcdH1cbiAyMjE6XHRcbiAyMjI6XHRcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gMjIzOlx0XHRcdHJldCA9IC1FRVhJU1Q7XG4gMjI0Olx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYSB2YWxpZCBhc3Nlc3NtZW50PyBBYnNvbHV0ZWx5LiBDb25maWdmcywgYmVpbmcgYSB1c2VyLWFjY2Vzc2libGUgdmlydHVhbCBmaWxlc3lzdGVtLCBtZWFucyB0aGF0IGBjb25maWdmc19zeW1saW5rYCAtIGEgc3BlY2lmaWMgVkZTIGVudHJ5cG9pbnQgZm9yIGNyZWF0aW5nIHN5bWxpbmtzIHdpdGhpbiBjb25maWdmcyAtIGlzIGRlZmluaXRlbHkgaW4gcGxheS4gVGhlIHBhdGNoIHRhcmdldHMgcmVmZXJlbmNlIGNvdW50aW5nLCBwaW5uaW5nLCBhbmQgdmFsaWRpdHkgY2hlY2tzIGFmdGVyIHJlLWxvY2tpbmcgdGhlIGRpcmVjdG9yeSAoYGRpcmApIGluIGZ1bmN0aW9ucyBsaWtlIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgLCB3aGljaCBzY3JlYW1zIHJhY2UgY29uZGl0aW9uIHRlcnJpdG9yeS4gRnV6emluZyB3aXRoIGNvbmN1cnJlbnQgc3ltbGluayBhbmQgcm1kaXIgb3BlcmF0aW9ucyBzZWVtcyBsaWtlIGEgZGlyZWN0IHJvdXRlIHRvIGV4cG9zZSB0aG9zZSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2NrLCBvciByYWNlIGNvbmRpdGlvbnMuIFNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB0aGUgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZSBgY29uZmlnZnNfc3ltbGlua2AsIG5hdHVyYWxseS4gYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW1gIGlzIG1hcmtlZCBhcyBzdGF0aWMsIGJ1dCB3ZSBoYXZlIHRvIHNlZSBpZiBpdCBtaWdodCBiZSBpbmxpbmVkLiBFdmVuIGlmIHNvLCB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIHRhcmdldC4gR2l2ZW4gdGhlIGNvbnRleHQsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYm90aCBgY29uZmlnZnNfc3ltbGlua2AgYW5kIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYC4gV2Ugc2hvdWxkIGRvdWJsZS1jaGVjayBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBqdXN0IHRvIGJlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxldmFudCBzeW1saW5rLXJlbGF0ZWQgc3ltYm9scyBvciBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgd2VsbC4gQSBxdWljayBzY2FuIHdpbGwgY29uZmlybSBpZiBgY29uZmlnZnNfc3ltbGlua2AgaXMgdGhlIHByaW1hcnkgZW50cnkgb3IgaWYgd2UgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIG9mIGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jLTE5LS8qIFByb3RlY3RzIGF0dGFjaG1lbnRzIG9mIG5ldyBzeW1saW5rcyAqL1xuZnMvY29uZmlnZnMvc3ltbGluay5jOjIwOkRFRklORV9NVVRFWChjb25maWdmc19zeW1saW5rX211dGV4KTtcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMjpzdGF0aWMgaW50IGl0ZW1fZGVwdGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSlcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMy17XG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI5LVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjMwOnN0YXRpYyBpbnQgaXRlbV9wYXRoX2xlbmd0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtKVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTMxLXtcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNDAtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6NDE6c3RhdGljIHZvaWQgZmlsbF9pdGVtX3BhdGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSwgY2hhciAqIGJ1ZmZlciwgaW50IGxlbmd0aClcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy00Mi17XG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTU1LVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjU2OnN0YXRpYyBpbnQgY29uZmlnZnNfZ2V0X3RhcmdldF9wYXRoKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy01Ny1cdFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXQsIGNoYXIgKnBhdGgpXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc2LVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjc3OnN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy03OC1cdFx0ICAgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTE2LVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjExNzpzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTExOC1cdFx0ICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTMzLVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjEzNDpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMzUte1xuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xNDctXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MTQ4OmludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xNDktXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yNDQtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjQ1OmludCBjb25maWdmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yNDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njc4CgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25maWdGUyBTeW1saW5rIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaGluZ2VzIG9uIHRoZSBgY29uZmlnZnNfc3ltbGlua2AgYW5kIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIHNwYWNlIHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY29uZmlnZnNgIGZpbGVzeXN0ZW0uCgpGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgQ09ORklHRlNfRlNgIGlzIGVuYWJsZWQuIEEgcXVpY2sgY2hlY2sgb2YgYGZzL2NvbmZpZ2ZzL01ha2VmaWxlYCBjb25maXJtcyB0aGlzIGFuZCB0aGF0IGl0IGluY2x1ZGVzIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4gR29vZCwgbm8gc3VycHJpc2VzIHRoZXJlLiBNeSBzY2FuIGRpZG4mIzM5O3QgdHVybiB1cCBhbnkgKm90aGVyKiBoaWRkZW4gY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzIGZvciBgZnMvY29uZmlnZnMvc3ltbGluay5jYCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGluZm9ybWF0aW9uIGFnYWluc3QgbXkgZXN0YWJsaXNoZWQgY3JpdGVyaWE6IEkmIzM5O3ZlIGdvdCBgV29ydGhGdXp6aW5nYCBzZXQgdG8gYHRydWVgLCBgRW5hYmxlQ29uZmlnc2AgYXMgYFsmIzM0O0NPTkZJR0ZTX0ZTJiMzNDtdYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBwcm9wZXJseSBkZWZpbmVkIGFzIGBbJiMzNDtjb25maWdmc19zeW1saW5rJiMzNDssICYjMzQ7Y29uZmlnZnNfZ2V0X3Jvb3RfaXRlbSYjMzQ7XWAuCgpUaGUgcmVhc29uaW5nIEkmIzM5O20gdXNpbmcgaXMgc29saWQg4oCTIHRoaXMgaXMgYSByZWFjaGFibGUgcHNldWRvLWZpbGVzeXN0ZW0sIHdoaWNoIG1ha2VzIGl0IGFuIGlkZWFsIHRhcmdldCBmb3IgZnV6emluZy4gSSBzdXNwZWN0IHRoZXJlIGFyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHN5bWxpbmsvcm1kaXIgb3BlcmF0aW9ucywgYW5kIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBwaW5uaW5nIG9mIHJvb3QgaXRlbXMgYW5kIGxvb2sgZm9yIGNoZWNrcyByZWxhdGVkIHRvIGRlYWQgZnJhZyBvciBkaXJlY3RvcnkgY29ycnVwdGlvbi4gVGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgcGxhbi4KClRpbWUgdG8gbG9nIHRoaXMuIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgYXNzZXNzbWVudCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtjb25maWdmc19nZXRfcm9vdF9pdGVtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSByb290IG9iamVjdCBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgZGVhZCBkaXJlY3Rvcmllcy9mcmFnbWVudHMgYWNyb3NzIHRlbXBvcmFyeSBsb2NrIGRyb3BzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBWRlMvcHNldWRvLWZpbGVzeXN0ZW0gbG9naWMgaGFuZGxpbmcgc3ltbGluayBvcGVyYXRpb25zIGluIGNvbmZpZ2ZzLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmZpZ2ZzX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfZ2V0X3Jvb3RfaXRlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgcm9vdCBvYmplY3Qgb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGRlYWQgZGlyZWN0b3JpZXMvZnJhZ21lbnRzIGFjcm9zcyB0ZW1wb3JhcnkgbG9jayBkcm9wcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgVkZTL3BzZXVkby1maWxlc3lzdGVtIGxvZ2ljIGhhbmRsaW5nIHN5bWxpbmsgb3BlcmF0aW9ucyBpbiBjb25maWdmcywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5L3JhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gY29uZmlnZnNfc3ltbGluaygpIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnX2l0ZW0gZm9yIGRlZmF1bHQgZ3JvdXBzIGFuZCBjaGVja2luZyBmb3IgZGlyZWN0b3J5IGRlbGV0aW9uIChmcmFnX2RlYWQsIElTX0RFQURESVIsIGRfdW5oYXNoZWQpIGFmdGVyIHRlbXBvcmFyaWx5IHVubG9ja2luZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgZHVyaW5nIHRhcmdldCByZXNvbHV0aW9uLlxuXG5UaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHByZXZlbnRpb24gZml4LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG5vIGNvcHlfdG9fdXNlciBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2MGVhNzRiYjlkOTcxOTg1MzczMGMyZDliMjUyMTk5MjdkNDUzYWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE2OjIzOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCmluZGV4IDMxZWIyOGIyNzMwOTEuLmEwMGYyN2M4OTEwMGEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKQEAgLTEzMSw2ICYjNDM7MTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5OwomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsKJiM0MzsJd2hpbGUgKCFJU19ST09UKHJvb3RfZGVudHJ5KSkgewomIzQzOwkJc2QgPSByb290X2RlbnRyeS0mZ3Q7ZF9mc2RhdGE7CiYjNDM7CQlpZiAoIXNkIHx8ICEoc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFQpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJcm9vdF9kZW50cnkgPSByb290X2RlbnRyeS0mZ3Q7ZF9wYXJlbnQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSk7CiYjNDM7fQogCiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKQpAQCAtMTM5LDYgJiM0MzsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiAJc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDsKJiM0MzsJc3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlOwogCiAJc2QgPSBkZW50cnktJmd0O2RfcGFyZW50LSZndDtkX2ZzZGF0YTsKQEAgLTE1Nyw2ICYjNDM7MTcxLDE4IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkgICAgIXR5cGUtJmd0O2N0X2l0ZW1fb3BzLSZndDthbGxvd19saW5rKQogCQlnb3RvIG91dF9wdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuCiYjNDM7CSAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNkLSZndDtzX3R5cGUgJmFtcDsgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7CiYjNDM7CQlyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwomIzQzOwkJaWYgKCFyb290X2l0ZW0pIHsKJiM0MzsJCQlyZXQgPSAtRU5PRU5UOwomIzQzOwkJCWdvdG8gb3V0X3B1dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qCiAJICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mCiAJICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWQKQEAgLTE4Nyw2ICYjNDM7MjEzLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXQ7CiAKJiM0MzsJaWYgKHNkLSZndDtzX2ZyYWctJmd0O2ZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHwKJiM0MzsJICAgIGRfdW5oYXNoZWQoZGVudHJ5LSZndDtkX3BhcmVudCkpIHsKJiM0MzsJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQlnb3RvIG91dF9wdXQ7CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSkKIAkJcmV0ID0gLUVFWElTVDsKIAllbHNlCkBAIC0yMDMsMTAgJiM0MzsyMzUsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCQkJICAgICB0YXJnZXRfaXRlbSk7CiAJfQogCi0JY29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTsKLQogb3V0X3B1dDoKJiM0MzsJY29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTsKIAljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwomIzQzOwljb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgcGF0Y2g6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBLTVNBTiB2cy4gS0FTQU4qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtEbyB3ZSBuZWVkIHRoZSBoZWF2eSBoYW1tZXIgb2YgS01TQU4gaGVyZSwgb3IgY2FuIEtBU0FOIGhhbmRsZSBpdD8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgZGlmZiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGF0IGBmcy9jb25maWdmcy9zeW1saW5rLmNgIGZpbGUgYW5kIHRoZSBzcGVjaWZpYyBsaW5lcyB0aGF0IHdlcmUgbW9kaWZpZWQuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGp1c3QgcmVhZGluZyBpdCBvdmVyLCBsZXR0aW5nIG15IGV5ZSBzY2FuIGZvciBhbnl0aGluZyB0aGF0IGp1bXBzIG91dC4gSSBtaWdodCBldmVuIHVzZSBhIHV0aWxpdHksIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLCB0byBxdWlja2x5IGZpbmQgc3BlY2lmaWMga2V5d29yZHMgb3Igc2VjdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgZXhhY3RseSB3aGF0IGNoYW5nZWQgYW5kIHdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyMDpcdFx0c3RydWN0IHBhdGggcGF0aCBfX2ZyZWUocGF0aF9wdXQpID0ge307XG4gMTIxOlx0XHRpbnQgcmV0O1xuIDEyMjpcdFxuIDEyMzpcdFx0cmV0ID0ga2Vybl9wYXRoKHN5bW5hbWUsIExPT0tVUF9GT0xMT1d8TE9PS1VQX0RJUkVDVE9SWSwgXHUwMDI2cGF0aCk7XG4gMTI0Olx0XHRpZiAocmV0KVxuIDEyNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNjpcdFx0aWYgKHBhdGguZGVudHJ5LVx1MDAzZWRfc2IgIT0gc2IpXG4gMTI3Olx0XHRcdHJldHVybiAtRVBFUk07XG4gMTI4Olx0XHQqdGFyZ2V0ID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHBhdGguZGVudHJ5KTtcbiAxMjk6XHRcdGlmICghKnRhcmdldClcbiAxMzA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTMxOlx0XHRyZXR1cm4gMDtcbiAxMzI6XHR9XG4gMTMzOlx0XG4gMTM0Olx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XG4gMTM3Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxMzg6XHRcbiAxMzk6XHRcdHdoaWxlICghSVNfUk9PVChyb290X2RlbnRyeSkpIHtcbiAxNDA6XHRcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiAxNDE6XHRcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiAxNDI6XHRcdFx0XHRicmVhaztcbiAxNDM6XHRcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbiAxNDQ6XHRcdH1cbiAxNDU6XHRcdHJldHVybiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHRpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gMTQ5Olx0XHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIDE1MDpcdHtcbiAxNTE6XHRcdGludCByZXQ7XG4gMTUyOlx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxNTM6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gMTU0Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiAxNTU6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiAxNTY6XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIDE1NzpcdFxuIDE1ODpcdFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4gMTU5Olx0XHQvKlxuIDE2MDpcdFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcbiAxNjE6XHRcdCAqIGJlaW5nIGF0dGFjaGVkXG4gMTYyOlx0XHQgKi9cbiAxNjM6XHRcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcbiAxNjQ6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTY1Olx0XG4gMTY2Olx0XHRwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDE2NzpcdFx0dHlwZSA9IHBhcmVudF9pdGVtLVx1MDAzZWNpX3R5cGU7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZXQgPSAtRVBFUk07XG4gMTcwOlx0XHRpZiAoIXR5cGUgfHwgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMgfHxcbiAxNzE6XHRcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIDE3MjpcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMTczOlx0XG4gMTc0Olx0XHQvKlxuIDE3NTpcdFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXG4gMTc2Olx0XHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbiAxNzc6XHRcdCAqL1xuIDE3ODpcdFx0aWYgKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7XG4gMTc5Olx0XHRcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiAxODA6XHRcdFx0aWYgKCFyb290X2l0ZW0pIHtcbiAxODE6XHRcdFx0XHRyZXQgPSAtRU5PRU5UO1xuIDE4MjpcdFx0XHRcdGdvdG8gb3V0X3B1dDtcbiAxODM6XHRcdFx0fVxuIDE4NDpcdFx0fVxuIDE4NTpcdFxuIDE4NjpcdFx0LypcbiAxODc6XHRcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIDE4ODpcdFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbiAxODk6XHRcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCYjMzk7dmUgZG9uZSksIGJlIGEgZGlyZWN0b3J5XG4gMTkwOlx0XHQgKiAod2hpY2ggbGluaygyKSB3b3VsZCYjMzk7dmUgcmVmdXNlZCB0byBkbykgKkFORCogYmUgYSBkZWVwXG4gMTkxOlx0XHQgKiBmdWNraW5nIG1hZ2ljLCBtYWtpbmcgdGhlIHRhcmdldCBidXN5IGZyb20gcm1kaXIgUE9WLlxuIDE5MjpcdFx0ICogc3ltbGluaygyKSBpcyBub3RoaW5nIG9mIHRoYXQgc29ydCwgYW5kIHRoZSBsb2NraW5nIGl0XG4gMTkzOlx0XHQgKiBnZXRzIG1hdGNoZXMgdGhlIG5vcm1hbCBzeW1saW5rKDIpIHNlbWFudGljcy4gIFdpdGhvdXRcbiAxOTQ6XHRcdCAqIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHRhcmdldCAod2hpY2ggbWlnaHQgdmVyeSB3ZWxsXG4gMTk1Olx0XHQgKiBub3QgZXZlbiBleGlzdCB5ZXQpIGRvbmUgcHJpb3IgdG8gbG9ja2luZyB0aGUgcGFyZW50XG4gMTk2Olx0XHQgKiBkaXJlY3RvcnkuICBUaGlzIHBlcnZlcnNpb24sIE9UT0gsIG5lZWRzIHRvIHJlc29sdmVcbiAxOTc6XHRcdCAqIHRoZSB0YXJnZXQsIHdoaWNoIHdvdWxkIGxlYWQgdG8gb2J2aW91cyBkZWFkbG9ja3MgaWZcbiAxOTg6XHRcdCAqIGF0dGVtcHRlZCB3aXRoIGFueSBkaXJlY3RvcmllcyBsb2NrZWQuXG4gMTk5Olx0XHQgKlxuIDIwMDpcdFx0ICogVW5mb3J0dW5hdGVseSwgdGhhdCBnYXJiYWdlIGlzIHVzZXJsYW5kIEFCSSBhbmQgd2Ugc2hvdWxkJiMzOTt2ZVxuIDIwMTpcdFx0ICogc2FpZCBcJiMzNDtub1wmIzM0OyBiYWNrIGluIDIwMDUuICBUb28gbGF0ZSBub3csIHNvIHdlIGdldCB0b1xuIDIwMjpcdFx0ICogcGxheSB2ZXJ5IHVnbHkgZ2FtZXMgd2l0aCBsb2NraW5nLlxuIDIwMzpcdFx0ICpcbiAyMDQ6XHRcdCAqIFRyeSAqQU5ZVEhJTkcqIG9mIHRoYXQgc29ydCBpbiBuZXcgY29kZSwgYW5kIHlvdSB3aWxsXG4gMjA1Olx0XHQgKiByZWFsbHkgcmVncmV0IGl0LiAgSnVzdCBhc2sgeW91cnNlbGYgLSB3aGF0IGNvdWxkIGEgQk9GSFxuIDIwNjpcdFx0ICogZG8gdG8gbWUgYW5kIGRvIEkgd2FudCB0byBmaW5kIGl0IG91dCBmaXJzdC1oYW5kP1xuIDIwNzpcdFx0ICpcbiAyMDg6XHRcdCAqICBBViwgYSB0aG9yb3VnaGx5IGFubm95ZWQgYmFzdGFyZC5cbiAyMDk6XHRcdCAqL1xuIDIxMDpcdFx0aW5vZGVfdW5sb2NrKGRpcik7XG4gMjExOlx0XHRyZXQgPSBnZXRfdGFyZ2V0KHN5bW5hbWUsIFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXHUwMDNlZF9zYik7XG4gMjEyOlx0XHRpbm9kZV9sb2NrKGRpcik7XG4gMjEzOlx0XHRpZiAocmV0KVxuIDIxNDpcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMjE1Olx0XG4gMjE2Olx0XHRpZiAoc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbiAyMTc6XHRcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbiAyMTg6XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAyMTk6XHRcdFx0Z290byBvdXRfcHV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gY29uZmlnZnNfc3ltbGluayoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgbG9va2VkIGF0IHRoZSBzdXJmYWNlIG9mIHRoaXMgYGNvbmZpZ2ZzX3N5bWxpbmtgIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIGdldCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLiBJJiMzOTttIG5vdCBqdXN0IGludGVyZXN0ZWQgaW4gdGhlIGJhc2ljIG1lY2hhbmljczsgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCYjMzk7cyBiZWluZyB1c2VkLCBpbiB3aGF0IGNvbnRleHRzLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGNvbmZpZ2ZzIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZWRnZSBjYXNlcywgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIG9mIGEgc3ltYm9saWMgbGluayB3aXRoaW4gdGhpcyBmaWxlIHN5c3RlbS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0XHR9XG4gMjIxOlx0XG4gMjIyOlx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxuIDIyMzpcdFx0XHRyZXQgPSAtRUVYSVNUO1xuIDIyNDpcdFx0ZWxzZVxuIDIyNTpcdFx0XHRyZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcixcbiAyMjY6XHRcdFx0XHRcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gMjI3Olx0XHRpZiAoIXJldClcbiAyMjg6XHRcdFx0cmV0ID0gdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XG4gMjI5Olx0XHRpZiAoIXJldCkge1xuIDIzMDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuIDIzMTpcdFx0XHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XG4gMjMyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcbiAyMzM6XHRcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmspXG4gMjM0Olx0XHRcdFx0dHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmsocGFyZW50X2l0ZW0sXG4gMjM1Olx0XHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gMjM2Olx0XHR9XG4gMjM3Olx0XG4gMjM4Olx0b3V0X3B1dDpcbiAyMzk6XHRcdGNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7XG4gMjQwOlx0XHRjb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pO1xuIDI0MTpcdFx0Y29uZmlnX2l0ZW1fcHV0KHJvb3RfaXRlbSk7XG4gMjQyOlx0XHRyZXR1cm4gcmV0O1xuIDI0MzpcdH1cbiAyNDQ6XHRcbiAyNDU6XHRpbnQgY29uZmlnZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gMjQ2Olx0e1xuIDI0NzpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QgPSBkZW50cnktXHUwMDNlZF9mc2RhdGEsICp0YXJnZXRfc2Q7XG4gMjQ4Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIDI0OTpcdFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XG4gMjUwOlx0XHRpbnQgcmV0O1xuIDI1MTpcdFxuIDI1MjpcdFx0cmV0ID0gLUVQRVJNOyAgLyogV2hhdCBsYWNrLW9mLXN5bWxpbmsgcmV0dXJucyAqL1xuIDI1MzpcdFx0aWYgKCEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19JVEVNX0xJTkspKVxuIDI1NDpcdFx0XHRnb3RvIG91dDtcbiAyNTU6XHRcbiAyNTY6XHRcdHRhcmdldF9zZCA9IHNkLVx1MDAzZXNfZWxlbWVudDtcbiAyNTc6XHRcbiAyNTg6XHRcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMjU5Olx0XHR0eXBlID0gcGFyZW50X2l0ZW0tXHUwMDNlY2lfdHlwZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzNQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiA2OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IENvbmZpZ0ZTIFN5bWxpbmsgUmFjZSBDb25kaXRpb24gRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmsoKWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGhhbmRsaW5nIHN5bWJvbGljIGxpbmtzIGluIGNvbmZpZ2ZzLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYSAmIzM0O3Jvb3QgaXRlbSwmIzM0OyB3aGljaCBzZWVtcyB0byBiZSBhbiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwLCBhbmQgdGhlIGlub2RlIGxvY2sgb24gdGhlIHBhcmVudCBkaXJlY3RvcnkuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiwgYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oKWAsIHRvIGNvcnJlY3RseSBwaW4gdGhlIHJvb3QgaXRlbSwgZW5zdXJpbmcgaXQgZG9lc24mIzM5O3QgZGlzYXBwZWFyIG91dCBmcm9tIHVuZGVyIHVzLiBXaXRoaW4gYGNvbmZpZ2ZzX3N5bWxpbmsoKWAsIGByb290X2l0ZW1gIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5VTExgLiBUaGUgY29kZSB0aGVuIHJldHJpZXZlcyB0aGUgYHJvb3RfaXRlbWAgaWYgYSBjZXJ0YWluIGZsYWcgaXMgc2V0IGFuZCwgY3J1Y2lhbGx5LCByZWxlYXNlcyBhbmQgcmUtYWNxdWlyZXMgdGhlIGlub2RlIGxvY2suICBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgY2hlY2tzIGFmdGVyIHJlLWFjcXVpcmluZyB0aGUgbG9jazogYHNkLSZndDtzX2ZyYWctJmd0O2ZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHwgZF91bmhhc2hlZChkZW50cnktJmd0O2RfcGFyZW50KWAuIFRoaXMgaXMgdGhlcmUgdG8gY29uZmlybSB0aGUgcGFyZW50IGRpcmVjdG9yeSBoYXNuJiMzOTt0IHZhbmlzaGVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQuICBGaW5hbGx5LCB0aGUgY2xlYW4tdXAgc2VjdGlvbiBuZWF0bHkgY29uc29saWRhdGVzIHRoZSBgY29uZmlnX2l0ZW1fcHV0KClgIGNhbGxzIGZvciBgdGFyZ2V0X2l0ZW1gLCBgcGFyZW50X2l0ZW1gLCBhbmQgbm93LCBgcm9vdF9pdGVtYC4KClNvLCB0aGUgaW50ZW50IGlzIGNsZWFyOiBwcm90ZWN0IGFnYWluc3QgYSBzY2VuYXJpbyB3aGVyZSB0aGUgYHBhcmVudF9pdGVtYCAodGhlIGRlZmF1bHQgZ3JvdXApIGdldHMgZnJlZWQgKmR1cmluZyogdGhlIHRhcmdldCByZXNvbHV0aW9uLCBsZWFkaW5nIHRvIGEgVUFGIG9yIHJhY2UuIEl0JiMzOTtzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgYHJvb3RfaXRlbWAgc3RheXMgdmFsaWQuCgpOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBJIG5lZWQgdG8gbG9vayBmb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIFdlIGhhdmUgdG8gY29uc2lkZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBpbmZvIGxlYWtzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLiBJIHNlZSB0aGF0IGByb290X2l0ZW1gIGFuZCBgdGFyZ2V0X2l0ZW1gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYC4gIFRoZXJlJiMzOTtzIG5vIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGhlcmUsIGFuZCB0aGUgZGF0YSBidWZmZXIgbGVuZ3RocyBhcmUgdW5hbHRlcmVkLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgb3IgcGFzc2VkIGFyb3VuZC4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd2lsbCBsaWtlbHkgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCBVQUYsIG9yIHJhY2UgY29uZGl0aW9ucy4KCkdpdmVuIGFsbCBvZiB0aGF0LCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyByaXNrcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcy4gIFdlIGFyZSBoYW5kbGluZyB0aGUgcmFjZSBjb3JyZWN0bHksIGJ1dCB0aGF0IGlzIGhhbmRsZWQgYnkgb3RoZXIga2VybmVsIGZlYXR1cmVzLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGlzIGEgbGlmZXRpbWUgYW5kIHJhY2UgY29uZGl0aW9uIGZpeCwgYW5kIGRvZXNuJiMzOTt0IG1lc3Mgd2l0aCBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIEkgYW0gY29uZmlkZW50IGluIGNvbmNsdWRpbmcgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQgaXMgcHVyZWx5IGEgS0FTQU4sIExPQ0tERVAsIGFuZCBLQ1NBTiByZWxldmFudCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gY29uZmlnZnNfc3ltbGluaygpIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnX2l0ZW0gZm9yIGRlZmF1bHQgZ3JvdXBzIGFuZCBjaGVja2luZyBmb3IgZGlyZWN0b3J5IGRlbGV0aW9uIChmcmFnX2RlYWQsIElTX0RFQURESVIsIGRfdW5oYXNoZWQpIGFmdGVyIHRlbXBvcmFyaWx5IHVubG9ja2luZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgZHVyaW5nIHRhcmdldCByZXNvbHV0aW9uLlxuXG5UaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHByZXZlbnRpb24gZml4LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG5vIGNvcHlfdG9fdXNlciBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gY29uZmlnZnNfc3ltbGluaygpIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnX2l0ZW0gZm9yIGRlZmF1bHQgZ3JvdXBzIGFuZCBjaGVja2luZyBmb3IgZGlyZWN0b3J5IGRlbGV0aW9uIChmcmFnX2RlYWQsIElTX0RFQURESVIsIGRfdW5oYXNoZWQpIGFmdGVyIHRlbXBvcmFyaWx5IHVubG9ja2luZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgZHVyaW5nIHRhcmdldCByZXNvbHV0aW9uLlxuXG5UaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHByZXZlbnRpb24gZml4LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG5vIGNvcHlfdG9fdXNlciBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6MTUuNTEzMzM4MTM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA2OTk1NTQ0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCIsXG4gICAgXCJjb25maWdmc19nZXRfcm9vdF9pdGVtXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGluIGNvbmZpZ2ZzX3N5bWxpbmsoKSBieSBwaW5uaW5nIHRoZSByb290IGNvbmZpZ19pdGVtIGZvciBkZWZhdWx0IGdyb3VwcyBhbmQgY2hlY2tpbmcgZm9yIGRpcmVjdG9yeSBkZWxldGlvbiAoZnJhZ19kZWFkLCBJU19ERUFERElSLCBkX3VuaGFzaGVkKSBhZnRlciB0ZW1wb3JhcmlseSB1bmxvY2tpbmcgdGhlIGRpcmVjdG9yeSBpbm9kZSBsb2NrIGR1cmluZyB0YXJnZXQgcmVzb2x1dGlvbi5cXG5cXG5UaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHByZXZlbnRpb24gZml4LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG5vIGNvcHlfdG9fdXNlciBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgcm9vdCBvYmplY3Qgb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGRlYWQgZGlyZWN0b3JpZXMvZnJhZ21lbnRzIGFjcm9zcyB0ZW1wb3JhcnkgbG9jayBkcm9wcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgVkZTL3BzZXVkby1maWxlc3lzdGVtIGxvZ2ljIGhhbmRsaW5nIHN5bWxpbmsgb3BlcmF0aW9ucyBpbiBjb25maWdmcywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5L3JhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6MTUuNTEzMzQzMTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDk1NzAxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNjBlYTc0YmI5ZDk3MTk4NTM3MzBjMmQ5YjI1MjE5OTI3ZDQ1M2FlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTY6MjM6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXFxuaW5kZXggMzFlYjI4YjI3MzA5MS4uYTAwZjI3Yzg5MTAwYSAxMDA2NDRcXG4tLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmNcXG4rKysgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcXG5AQCAtMTMxLDYgKzEzMSwxOSBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuK3tcXG4rXFx0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XFxuK1xcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbitcXG4rXFx0d2hpbGUgKCFJU19ST09UKHJvb3RfZGVudHJ5KSkge1xcbitcXHRcXHRzZCA9IHJvb3RfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4rXFx0XFx0aWYgKCFzZCB8fCAhKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSk7XFxuK31cXG4gXFxuIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuQEAgLTEzOSw2ICsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcXG4rXFx0c3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMO1xcbiBcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gXFxuIFxcdHNkID0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudC1cXHUwMDNlZF9mc2RhdGE7XFxuQEAgLTE1Nyw2ICsxNzEsMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cXG4rXFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXFxuK1xcdCAqL1xcbitcXHRpZiAoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xcbitcXHRcXHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbitcXHRcXHRpZiAoIXJvb3RfaXRlbSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXFxuIFxcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXFxuQEAgLTE4Nyw2ICsyMTMsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbitcXHRpZiAoc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fFxcbitcXHQgICAgZF91bmhhc2hlZChkZW50cnktXFx1MDAzZWRfcGFyZW50KSkge1xcbitcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxcbiBcXHRcXHRyZXQgPSAtRUVYSVNUO1xcbiBcXHRlbHNlXFxuQEAgLTIwMywxMCArMjM1LDEwIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0YXJnZXRfaXRlbSk7XFxuIFxcdH1cXG4gXFxuLVxcdGNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7XFxuLVxcbiBvdXRfcHV0OlxcbitcXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xcbiBcXHRjb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pO1xcbitcXHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6MTUuOTIzNjAzMjM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NDY4NTYxNDE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmZpZ2ZzX3N5bWxpbmtcIixcbiAgICBcImNvbmZpZ2ZzX2dldF9yb290X2l0ZW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgcm9vdCBvYmplY3Qgb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGRlYWQgZGlyZWN0b3JpZXMvZnJhZ21lbnRzIGFjcm9zcyB0ZW1wb3JhcnkgbG9jayBkcm9wcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgVkZTL3BzZXVkby1maWxlc3lzdGVtIGxvZ2ljIGhhbmRsaW5nIHN5bWxpbmsgb3BlcmF0aW9ucyBpbiBjb25maWdmcywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5L3JhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjBlYTc0YmI5ZDk3MTk4NTM3MzBjMmQ5YjI1MjE5OTI3ZDQ1M2FlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNjoyMzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uYTAwZjI3Yzg5MTAwYSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgKzEzMSwxOSBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4rXG4rXHR3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7XG4rXHRcdHNkID0gcm9vdF9kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRcdGlmICghc2QgfHwgIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHJvb3RfZGVudHJ5ID0gcm9vdF9kZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4rXHR9XG4rXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTtcbit9XG4gXG4gaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcbkBAIC0xMzksNiArMTUyLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XG4rXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XG4gXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiBcbiBcdHNkID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuQEAgLTE1Nyw2ICsxNzEsMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0ICAgICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmspXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcbitcdC8qXG4rXHQgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbitcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxuK1x0ICovXG4rXHRpZiAoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcbitcdFx0cm9vdF9pdGVtID0gY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuK1x0XHRpZiAoIXJvb3RfaXRlbSkge1xuK1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdFx0Z290byBvdXRfcHV0O1xuK1x0XHR9XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXG4gXHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxuQEAgLTE4Nyw2ICsyMTMsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0aWYgKHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XG4rXHQgICAgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpKSB7XG4rXHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcdH1cbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gXHRlbHNlXG5AQCAtMjAzLDEwICsyMzUsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdCAgICAgdGFyZ2V0X2l0ZW0pO1xuIFx0fVxuIFxuLVx0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbi1cbiBvdXRfcHV0OlxuK1x0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbiBcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XG4rXHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6MTUuOTIzNjA0ODM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEwNzk0NTEzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXRjaCBpcyBldmVuIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBzeXprYWxsZXIuIFRoZSBkaWZmIGlzIHRvdWNoaW5nIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb25maWdmc19zeW1saW5rYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2VzIEkgc2VlIGFyZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCwgcGlubmluZyB0aGUgcm9vdCBvYmplY3QsIHNvbWUgbmV3IGVycm9yIGNoZWNrcyByZWxhdGVkIHRvIHRoZSBkaXJlY3RvcnkncyBzdGF0ZSAoYGZyYWdfZGVhZGAsIGBJU19ERUFERElSYCwgYGRfdW5oYXNoZWRgKSwgYW5kIGEgcmVhcnJhbmdlbWVudC9pbXByb3ZlbWVudCBvZiBjbGVhbnVwIHdpdGggdGhlIGBjb25maWdfaXRlbV9wdXRgIGNhbGxzLlxuXG5Ob3csIGlzIHRoaXMgY29kZSByZWFjaGFibGU/IEFic29sdXRlbHkuIGBjb25maWdmc2AgaXMgYSB3ZWxsLWtub3duIHZpcnR1YWwgZmlsZXN5c3RlbS4gVGhhdCBtZWFucyBpdOKAmXMgZXhwb3NlZCB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2UgYHN5bWxpbmtgLCBgc3ltbGlua2F0YCwgYG1vdW50YCwgYW5kIGBta2RpcmAuIFN5emthbGxlciBhbHJlYWR5IGhpdHMgdGhpcyBmaWxlc3lzdGVtIHByZXR0eSBoYXJkLCBzbyB0aGF04oCZcyBhIGdvb2Qgc2lnbi4gVGhlIG5ldyBjYWxscyB0byBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNoZWNrcyBhbmQgY2xlYW51cCwgKmNvdWxkKiBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgb3IgcG90ZW50aWFsIGlzc3VlcyB0aGF0IHN5emthbGxlciBjb3VsZCB1bmNvdmVyLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG9iamVjdCBsaWZldGltZSBhbmQgZXJyb3IgaGFuZGxpbmcuIFNvLCBpdCdzIHZlcnkgcHJvbWlzaW5nLlxuXG5UbyBjb25maXJtIHRoaXMgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGNvbmZpZ2ZzYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBmcy9jb25maWdmcy9LY29uZmlnYCBvciBgZnMvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIHNldHRpbmdzIGFyZSwgdXNpbmcgZWl0aGVyIGBncmVwcGVyYCBvciBqdXN0IHF1aWNrbHkgcmVhZGluZyB0aGUgcmVsZXZhbnQgZmlsZXMuIEdvdHRhIG1ha2Ugc3VyZSBpdOKAmXMgZXZlbiBjb25maWd1cmVkIGluIGFueSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6NTcuMDAzMDU5MzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzM4NzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT01Nz1vYmotJChDT05GSUdfU1lTRlMpXFx0XFx0Kz0gc3lzZnMvXFxuZnMvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVxcdCs9IGNvbmZpZ2ZzL1xcbmZzL01ha2VmaWxlLTU5LW9iai15XFx0XFx0XFx0XFx0Kz0gZGV2cHRzL1xcbi0tXFxuZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNS1cXG5mcy9jb25maWdmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DT05GSUdGU19GUylcXHQrPSBjb25maWdmcy5vXFxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNy1cXG4tLVxcbmZzL2RsbS9LY29uZmlnPTI9bWVudWNvbmZpZyBETE1cXG4tLVxcbmZzL2RsbS9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBJTkVUXFxuZnMvZGxtL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvZGxtL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9nZnMyL0tjb25maWc9Mjc9Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cXG4tLVxcbmZzL2dmczIvS2NvbmZpZy0yOS1cXHRkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuZnMvZ2ZzMi9LY29uZmlnOjMwOlxcdFxcdENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IChETE09eSB8fCBETE09R0ZTMl9GUylcXG5mcy9nZnMyL0tjb25maWctMzEtXFx0aGVscFxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9vY2ZzMi9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy01LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyMzo1Ny4wNzU4MDM5MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjE2Mjk0NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlnRlMgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBmcy9jb25maWdmcy9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIENvbmZpZ0ZTLiBHaXZlbiBpdHMgcm9sZSBhcyBhIGZpbGVzeXN0ZW0gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiwgSSBleHBlY3QgdG8gc2VlIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgc2V0IG9mIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3Iga2V5IHRoaW5nczpcblxuKiAgICoqTWFpbiBDb25maWd1cmF0aW9uIFN5bWJvbDoqKiBGaXJzdCwgSSdsbCBpZGVudGlmeSB0aGUgbWFpbiBzeW1ib2wgdGhhdCBlbmFibGVzIENvbmZpZ0ZTIGl0c2VsZi4gVGhpcyB3aWxsIGxpa2VseSBiZSBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0NPTkZJR0ZTYCBvciBzaW1pbGFyLiBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgZ3JvayBpdHMgZGVmYXVsdCB2YWx1ZSwgaGVscCB0ZXh0LCBhbmQgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgKGxpa2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQpLlxuKiAgICoqTW9kdWxlLW5lc3M6KiogRG9lcyBpdCBoYXZlIGEgbW9kdWxhciBvcHRpb24/IFRoYXQncyBhIGNydWNpYWwgZGVjaXNpb24uIElmIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGJ1aWxkaW5nIGl0IGFzIGEgbW9kdWxlIHZlcnN1cyBidWlsdC1pbi4gVGhpcyBpbXBhY3RzIGJvb3QgcHJvY2VzcyBhbmQgcG90ZW50aWFsIHRyb3VibGVzaG9vdGluZy4gVGhlIHRyYWRlLW9mZnMgYXJlIGltcG9ydGFudCBhbmQgcHJvYmFibHkgZGVzY3JpYmVkIGluIHRoZSBoZWxwIHRleHQuXG4qICAgKipTdWItb3B0aW9uczoqKiBOZXh0LCBJJ2xsIGxvb2sgZm9yIGFueSBzdWItb3B0aW9ucyB3aXRoaW4gQ29uZmlnRlMuIFRoZXNlIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMgb3IgZmVhdHVyZXMgb2YgQ29uZmlnRlMuIEZvciBleGFtcGxlLCBhcmUgdGhlcmUgc2V0dGluZ3MgcmVsYXRlZCB0byBzZWN1cml0eSBhdHRyaWJ1dGVzLCBmaWxlIHBlcm1pc3Npb25zLCBvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9iamVjdCB0eXBlcz8gVW5kZXJzdGFuZGluZyB0aGVzZSBvcHRpb25zIGFsbG93cyBmb3IgdGFpbG9yaW5nIHRoZSBmZWF0dXJlIHNldC5cbiogICAqKkRlcGVuZGVuY2llcyBhbmQgUmVsYXRpb25zaGlwczoqKiBJJ2xsIG1ldGljdWxvdXNseSBjaGVjayBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLiBDb25maWdGUyBsaWtlbHkgcmVsaWVzIG9uIGNvcmUgVkZTIGVsZW1lbnRzLCBwb3RlbnRpYWxseSBvbiBzZWN1cml0eSBmcmFtZXdvcmtzIGxpa2UgU0VMaW51eCBvciBBcHBBcm1vciwgb3Igb3RoZXIgc3RvcmFnZS1yZWxhdGVkIGNvbXBvbmVudHMuIFRoZXNlIGRlcGVuZGVuY2llcyBhcmUgY3J1Y2lhbCBmb3IgcHJvcGVyIGZ1bmN0aW9uYWxpdHkgYW5kIHdpbGwgc2hvdyB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIGltcGFjdGVkIGJ5IGFueSBjaGFuZ2VzIHRvIENvbmZpZ0ZTIHNldHRpbmdzLlxuKiAgICoqSGVscCBUZXh0IEFuYWx5c2lzOioqIFRoZSBoZWxwIHRleHQgaXMsIGFzIGFsd2F5cywgY3J1Y2lhbC4gSSBuZWVkIHRvIHF1aWNrbHkgZXh0cmFjdCB0aGUgY29yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGVhY2ggb3B0aW9uICpkb2VzKiwgd2h5IHlvdSdkIGVuYWJsZSBpdCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVhY2ggc2V0dGluZy4gSSdtIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwZXJmb3JtYW5jZSwgbGltaXRhdGlvbnMsIG9yIGJlc3QgcHJhY3RpY2VzLlxuKiAgICoqRGVmYXVsdHMgYW5kIFRyaWdnZXJzOioqIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgaW1wb3J0YW50LiBBcmUgdGhleSBzZW5zaWJsZSBkZWZhdWx0cyB0aGF0IHdvcmsgd2VsbCBcIm91dCBvZiB0aGUgYm94XCIsIG9yIGFyZSB0aGV5IGRlcGVuZGVudCBvbiBvdGhlciBzZXR0aW5ncz8gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgaG93IHRob3NlIGRlZmF1bHRzIGFmZmVjdCB0aGUgc3lzdGVtLlxuKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0czoqKiBJJ2xsIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbmZsaWN0cyBiZXR3ZWVuIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgbXV0dWFsbHkgZXhjbHVzaXZlIHNldHRpbmdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGNyZWF0ZSBwcm9ibGVtcyBpZiBlbmFibGVkL2Rpc2FibGVkIGF0IHRoZSBzYW1lIHRpbWU/XG4qICAgKipBbnkgQXJjaGl0ZWN0dXJlL1BsYXRmb3JtIENvbnNpZGVyYXRpb25zOioqIEFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMgb3IgY29uZGl0aW9uYWwgYmxvY2tzPyBDb25maWdGUywgbGlrZSBhbGwga2VybmVsIGNvbXBvbmVudHMsIG5lZWRzIHRvIGJlIGFzIGdlbmVyaWMgYXMgcG9zc2libGUsIGJ1dCBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzIG9mdGVuIGhhdmUgc3BlY2lmaWMgbmVlZHMuIEknbGwgbWFrZSBub3RlIG9mIGFueXRoaW5nIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuXG5cbkJ5IHRoZSBlbmQgb2YgdGhpcywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiBDb25maWdGUydzIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGl0cyByb2xlIGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIG1ha2luZyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBjaG9pY2VzLiBUaGlzIGtub3dsZWRnZSB3aWxsIGJlIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgb3B0aW1pemluZywgb3IgcG90ZW50aWFsbHkgZXh0ZW5kaW5nIENvbmZpZ0ZTIGluIHRoZSBmdXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDowMS4yOTIxMDAzMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQ09ORklHRlNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgY29uZmlnZnMgaXMgYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZVxcbiAgIDY6XFx0XFx0ICBvZiBzeXNmcydzIGZ1bmN0aW9uYWxpdHkuIFdoZXJlIHN5c2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZFxcbiAgIDc6XFx0XFx0ICB2aWV3IG9mIGtlcm5lbCBvYmplY3RzLCBjb25maWdmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWQgbWFuYWdlclxcbiAgIDg6XFx0XFx0ICBvZiBrZXJuZWwgb2JqZWN0cywgb3IgY29uZmlnX2l0ZW1zLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIEJvdGggc3lzZnMgYW5kIGNvbmZpZ2ZzIGNhbiBhbmQgc2hvdWxkIGV4aXN0IHRvZ2V0aGVyIG9uIHRoZVxcbiAgMTE6XFx0XFx0ICBzYW1lIHN5c3RlbS4gT25lIGlzIG5vdCBhIHJlcGxhY2VtZW50IGZvciB0aGUgb3RoZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjAxLjI5MjE1MjQyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzkwNDM2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU3ltbGluayBTaGVuYW5pZ2FucyBpbiBjb25maWdmcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlc2Ugc3ltbGlua3MgaW4gYGNvbmZpZ2ZzYCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyB6ZXJvIGluIG9uIHRoZSBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgY2hlY2sgb3V0IHRoZSBmdWxsIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGBjb25maWdmc19zeW1saW5rYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMga2V5IGZvciBjcmVhdGluZyB0aG9zZSB2aXJ0dWFsIHN5bWxpbmtzIHdpdGhpbiB0aGUgY29uZmlnZnMgaGllcmFyY2h5LCBzbyBieSB1bmRlcnN0YW5kaW5nIGl0cyBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIGhvdyBpdCdzIGNhbGxlZCwgd2hhdCBpdCdzIHBhc3NlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHdpbGwgYmUgY3J1Y2lhbCB0byB3aGF0IEknbSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDowMy4xNzExOTkzODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMjY6XFx0XFx0aWYgKHBhdGguZGVudHJ5LVxcdTAwM2VkX3NiICE9IHNiKVxcbiAxMjc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gMTI4OlxcdFxcdCp0YXJnZXQgPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocGF0aC5kZW50cnkpO1xcbiAxMjk6XFx0XFx0aWYgKCEqdGFyZ2V0KVxcbiAxMzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDEzMTpcXHRcXHRyZXR1cm4gMDtcXG4gMTMyOlxcdH1cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcXG4gMTM3OlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHR3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7XFxuIDE0MDpcXHRcXHRcXHRzZCA9IHJvb3RfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTQxOlxcdFxcdFxcdGlmICghc2QgfHwgIShzZC1cXHUwMDNlc190eXBlIFxcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcXG4gMTQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDM6XFx0XFx0XFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuIDE0NDpcXHRcXHR9XFxuIDE0NTpcXHRcXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAxNDk6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIDE1MDpcXHR7XFxuIDE1MTpcXHRcXHRpbnQgcmV0O1xcbiAxNTI6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDE1MzpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiAxNTQ6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XFxuIDE1NjpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTU5OlxcdFxcdC8qXFxuIDE2MDpcXHRcXHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxcbiAxNjE6XFx0XFx0ICogYmVpbmcgYXR0YWNoZWRcXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxcbiAxNjQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAxNjc6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZXQgPSAtRVBFUk07XFxuIDE3MDpcXHRcXHRpZiAoIXR5cGUgfHwgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzIHx8XFxuIDE3MTpcXHRcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiAxNzI6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQvKlxcbiAxNzU6XFx0XFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuIDE3NjpcXHRcXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cXG4gMTc3OlxcdFxcdCAqL1xcbiAxNzg6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcXG4gMTc5OlxcdFxcdFxcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE4MDpcXHRcXHRcXHRpZiAoIXJvb3RfaXRlbSkge1xcbiAxODE6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMTgyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMTgzOlxcdFxcdFxcdH1cXG4gMTg0OlxcdFxcdH1cXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0LypcXG4gMTg3OlxcdFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiAxODg6XFx0XFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcXG4gMTg5OlxcdFxcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCd2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcXG4gMTkwOlxcdFxcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJ3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxcbiAxOTE6XFx0XFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cXG4gMTkyOlxcdFxcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxcbiAxOTM6XFx0XFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XFxuIDE5NDpcXHRcXHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxcbiAxOTU6XFx0XFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxcbiAxOTY6XFx0XFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXFxuIDE5NzpcXHRcXHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXFxuIDE5ODpcXHRcXHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxcbiAxOTk6XFx0XFx0ICpcXG4gMjAwOlxcdFxcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCd2ZVxcbiAyMDE6XFx0XFx0ICogc2FpZCBcXFwibm9cXFwiIGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXFxuIDIwMjpcXHRcXHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXFxuIDIwMzpcXHRcXHQgKlxcbiAyMDQ6XFx0XFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcXG4gMjA1OlxcdFxcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXFxuIDIwNjpcXHRcXHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XFxuIDIwNzpcXHRcXHQgKlxcbiAyMDg6XFx0XFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxcbiAyMDk6XFx0XFx0ICovXFxuIDIxMDpcXHRcXHRpbm9kZV91bmxvY2soZGlyKTtcXG4gMjExOlxcdFxcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXFx1MDAzZWRfc2IpO1xcbiAyMTI6XFx0XFx0aW5vZGVfbG9jayhkaXIpO1xcbiAyMTM6XFx0XFx0aWYgKHJldClcXG4gMjE0OlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX2ZyYWctXFx1MDAzZWZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcXG4gMjE3OlxcdFxcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpKSB7XFxuIDIxODpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiAyMTk6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAyMjA6XFx0XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRcXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSlcXG4gMjIzOlxcdFxcdFxcdHJldCA9IC1FRVhJU1Q7XFxuIDIyNDpcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjAzLjE3MTI4MTMxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NzU4NTI0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgaXMgXCJXb3J0aEZ1enppbmdcIiBhIHZhbGlkIGFzc2Vzc21lbnQ/IEFic29sdXRlbHkuIENvbmZpZ2ZzLCBiZWluZyBhIHVzZXItYWNjZXNzaWJsZSB2aXJ0dWFsIGZpbGVzeXN0ZW0sIG1lYW5zIHRoYXQgYGNvbmZpZ2ZzX3N5bWxpbmtgIC0gYSBzcGVjaWZpYyBWRlMgZW50cnlwb2ludCBmb3IgY3JlYXRpbmcgc3ltbGlua3Mgd2l0aGluIGNvbmZpZ2ZzIC0gaXMgZGVmaW5pdGVseSBpbiBwbGF5LiBUaGUgcGF0Y2ggdGFyZ2V0cyByZWZlcmVuY2UgY291bnRpbmcsIHBpbm5pbmcsIGFuZCB2YWxpZGl0eSBjaGVja3MgYWZ0ZXIgcmUtbG9ja2luZyB0aGUgZGlyZWN0b3J5IChgZGlyYCkgaW4gZnVuY3Rpb25zIGxpa2UgYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW1gIGFuZCBgY29uZmlnZnNfc3ltbGlua2AsIHdoaWNoIHNjcmVhbXMgcmFjZSBjb25kaXRpb24gdGVycml0b3J5LiBGdXp6aW5nIHdpdGggY29uY3VycmVudCBzeW1saW5rIGFuZCBybWRpciBvcGVyYXRpb25zIHNlZW1zIGxpa2UgYSBkaXJlY3Qgcm91dGUgdG8gZXhwb3NlIHRob3NlIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZGVhZGxvY2ssIG9yIHJhY2UgY29uZGl0aW9ucy4gU29saWQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgdGhlIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmUgYGNvbmZpZ2ZzX3N5bWxpbmtgLCBuYXR1cmFsbHkuIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCBpcyBtYXJrZWQgYXMgc3RhdGljLCBidXQgd2UgaGF2ZSB0byBzZWUgaWYgaXQgbWlnaHQgYmUgaW5saW5lZC4gRXZlbiBpZiBzbywgdGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byB0YXJnZXQuIEdpdmVuIHRoZSBjb250ZXh0LCB3ZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGJvdGggYGNvbmZpZ2ZzX3N5bWxpbmtgIGFuZCBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAuIFdlIHNob3VsZCBkb3VibGUtY2hlY2sgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AganVzdCB0byBiZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxldmFudCBzeW1saW5rLXJlbGF0ZWQgc3ltYm9scyBvciBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgd2VsbC4gQSBxdWljayBzY2FuIHdpbGwgY29uZmlybSBpZiBgY29uZmlnZnNfc3ltbGlua2AgaXMgdGhlIHByaW1hcnkgZW50cnkgb3IgaWYgd2UgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIG9mIGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjQ6MDcuMTQ3MTM2NzQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI2NjIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jLTE5LS8qIFByb3RlY3RzIGF0dGFjaG1lbnRzIG9mIG5ldyBzeW1saW5rcyAqL1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMDpERUZJTkVfTVVURVgoY29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMjpzdGF0aWMgaW50IGl0ZW1fZGVwdGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSlcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjMte1xcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI5LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzozMDpzdGF0aWMgaW50IGl0ZW1fcGF0aF9sZW5ndGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSlcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMzEte1xcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTQwLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo0MTpzdGF0aWMgdm9pZCBmaWxsX2l0ZW1fcGF0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtLCBjaGFyICogYnVmZmVyLCBpbnQgbGVuZ3RoKVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy00Mi17XFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNTUtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjU2OnN0YXRpYyBpbnQgY29uZmlnZnNfZ2V0X3RhcmdldF9wYXRoKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNTctXFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXQsIGNoYXIgKnBhdGgpXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNzYtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjc3OnN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSxcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNzgtXFx0XFx0ICAgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMTYtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjExNzpzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMTgtXFx0XFx0ICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMzMtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjEzNDpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTM1LXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xNDctXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjE0ODppbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE0OS1cXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yNDQtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjI0NTppbnQgY29uZmlnZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjA3LjE5MzQwOTg0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzM2Mzg1NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ0ZTIFN5bWxpbmsgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaGluZ2VzIG9uIHRoZSBgY29uZmlnZnNfc3ltbGlua2AgYW5kIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIHNwYWNlIHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY29uZmlnZnNgIGZpbGVzeXN0ZW0uXG5cbkZpcnN0LCBJIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdGU19GU2AgaXMgZW5hYmxlZC4gQSBxdWljayBjaGVjayBvZiBgZnMvY29uZmlnZnMvTWFrZWZpbGVgIGNvbmZpcm1zIHRoaXMgYW5kIHRoYXQgaXQgaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLiBHb29kLCBubyBzdXJwcmlzZXMgdGhlcmUuIE15IHNjYW4gZGlkbid0IHR1cm4gdXAgYW55ICpvdGhlciogaGlkZGVuIGNvbmZpZ3VyYXRpb24gcHJlcmVxdWlzaXRlcyBmb3IgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2Agd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24gYWdhaW5zdCBteSBlc3RhYmxpc2hlZCBjcml0ZXJpYTogSSd2ZSBnb3QgYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgYEVuYWJsZUNvbmZpZ3NgIGFzIGBbXCJDT05GSUdGU19GU1wiXWAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgcHJvcGVybHkgZGVmaW5lZCBhcyBgW1wiY29uZmlnZnNfc3ltbGlua1wiLCBcImNvbmZpZ2ZzX2dldF9yb290X2l0ZW1cIl1gLlxuXG5UaGUgcmVhc29uaW5nIEknbSB1c2luZyBpcyBzb2xpZCDigJMgdGhpcyBpcyBhIHJlYWNoYWJsZSBwc2V1ZG8tZmlsZXN5c3RlbSwgd2hpY2ggbWFrZXMgaXQgYW4gaWRlYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIHN1c3BlY3QgdGhlcmUgYXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gc3ltbGluay9ybWRpciBvcGVyYXRpb25zLCBhbmQgSSBzaG91bGQgZm9jdXMgb24gdGhlIHBpbm5pbmcgb2Ygcm9vdCBpdGVtcyBhbmQgbG9vayBmb3IgY2hlY2tzIHJlbGF0ZWQgdG8gZGVhZCBmcmFnIG9yIGRpcmVjdG9yeSBjb3JydXB0aW9uLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBwbGFuLlxuXG5UaW1lIHRvIGxvZyB0aGlzLiBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgYXNzZXNzbWVudCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY3OCwiT3V0cHV0VG9rZW5zIjoxMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjQ6MTAuNTI5Nzk3OTY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0MTU4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiLFxuICAgIFwiY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSByb290IG9iamVjdCBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgZGVhZCBkaXJlY3Rvcmllcy9mcmFnbWVudHMgYWNyb3NzIHRlbXBvcmFyeSBsb2NrIGRyb3BzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBWRlMvcHNldWRvLWZpbGVzeXN0ZW0gbG9naWMgaGFuZGxpbmcgc3ltbGluayBvcGVyYXRpb25zIGluIGNvbmZpZ2ZzLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiLFxuICAgIFwiY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSByb290IG9iamVjdCBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgZGVhZCBkaXJlY3Rvcmllcy9mcmFnbWVudHMgYWNyb3NzIHRlbXBvcmFyeSBsb2NrIGRyb3BzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBWRlMvcHNldWRvLWZpbGVzeXN0ZW0gbG9naWMgaGFuZGxpbmcgc3ltbGluayBvcGVyYXRpb25zIGluIGNvbmZpZ2ZzLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDoxMC42MDkyMjE2MTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAzNjU5NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjQ6MTAuNjA5NzExOTc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU2MDMxNjMyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gY29uZmlnZnNfc3ltbGluaygpIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnX2l0ZW0gZm9yIGRlZmF1bHQgZ3JvdXBzIGFuZCBjaGVja2luZyBmb3IgZGlyZWN0b3J5IGRlbGV0aW9uIChmcmFnX2RlYWQsIElTX0RFQURESVIsIGRfdW5oYXNoZWQpIGFmdGVyIHRlbXBvcmFyaWx5IHVubG9ja2luZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgZHVyaW5nIHRhcmdldCByZXNvbHV0aW9uLlxcblxcblRoaXMgaXMgYSBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcHJldmVudGlvbiBmaXguIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMsIHJlZmVyZW5jZSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgbm8gY29weV90b191c2VyIHBhdGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA2MGVhNzRiYjlkOTcxOTg1MzczMGMyZDliMjUyMTk5MjdkNDUzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE2OjIzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5pbmRleCAzMWViMjhiMjczMDkxLi5hMDBmMjdjODkxMDBhIDEwMDY0NFxuLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jXG4rKysgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcbkBAIC0xMzEsNiArMTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbitcbitcdHdoaWxlICghSVNfUk9PVChyb290X2RlbnRyeSkpIHtcbitcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbitcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbitcdFx0XHRicmVhaztcbitcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbitcdH1cbitcdHJldHVybiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpO1xuK31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuQEAgLTEzOSw2ICsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiBcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIFxuIFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG5AQCAtMTU3LDYgKzE3MSwxOCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0LypcbitcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuK1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4rXHQgKi9cbitcdGlmIChzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xuK1x0XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4rXHRcdGlmICghcm9vdF9pdGVtKSB7XG4rXHRcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0XHRnb3RvIG91dF9wdXQ7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTg3LDYgKzIxMywxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4rXHRpZiAoc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbitcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXRfcHV0O1xuK1x0fVxuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSlcbiBcdFx0cmV0ID0gLUVFWElTVDtcbiBcdGVsc2VcbkBAIC0yMDMsMTAgKzIzNSwxMCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gXHR9XG4gXG4tXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuLVxuIG91dF9wdXQ6XG4rXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuIFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbitcdGNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDoxMC42MDk3MTQwMzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1ODY0MDMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IHBhdGNoOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBLTVNBTiB2cy4gS0FTQU4qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkRvIHdlIG5lZWQgdGhlIGhlYXZ5IGhhbW1lciBvZiBLTVNBTiBoZXJlLCBvciBjYW4gS0FTQU4gaGFuZGxlIGl0P1wiIExldCdzIGJyZWFrIGl0IGRvd24uXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRoZSBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoYXQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgZmlsZSBhbmQgdGhlIHNwZWNpZmljIGxpbmVzIHRoYXQgd2VyZSBtb2RpZmllZC4gSSdsbCBwcm9iYWJseSBzdGFydCBieSBqdXN0IHJlYWRpbmcgaXQgb3ZlciwgbGV0dGluZyBteSBleWUgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCBqdW1wcyBvdXQuIEkgbWlnaHQgZXZlbiB1c2UgYSB1dGlsaXR5LCBsaWtlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgdG8gcXVpY2tseSBmaW5kIHNwZWNpZmljIGtleXdvcmRzIG9yIHNlY3Rpb25zLiBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCBjaGFuZ2VkIGFuZCB3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjQ6MTUuOTY4MzU4NDk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHRzdHJ1Y3QgcGF0aCBwYXRoIF9fZnJlZShwYXRoX3B1dCkgPSB7fTtcXG4gMTIxOlxcdFxcdGludCByZXQ7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdHJldCA9IGtlcm5fcGF0aChzeW1uYW1lLCBMT09LVVBfRk9MTE9XfExPT0tVUF9ESVJFQ1RPUlksIFxcdTAwMjZwYXRoKTtcXG4gMTI0OlxcdFxcdGlmIChyZXQpXFxuIDEyNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMjY6XFx0XFx0aWYgKHBhdGguZGVudHJ5LVxcdTAwM2VkX3NiICE9IHNiKVxcbiAxMjc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gMTI4OlxcdFxcdCp0YXJnZXQgPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocGF0aC5kZW50cnkpO1xcbiAxMjk6XFx0XFx0aWYgKCEqdGFyZ2V0KVxcbiAxMzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDEzMTpcXHRcXHRyZXR1cm4gMDtcXG4gMTMyOlxcdH1cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcXG4gMTM3OlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHR3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7XFxuIDE0MDpcXHRcXHRcXHRzZCA9IHJvb3RfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTQxOlxcdFxcdFxcdGlmICghc2QgfHwgIShzZC1cXHUwMDNlc190eXBlIFxcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcXG4gMTQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDM6XFx0XFx0XFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuIDE0NDpcXHRcXHR9XFxuIDE0NTpcXHRcXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAxNDk6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIDE1MDpcXHR7XFxuIDE1MTpcXHRcXHRpbnQgcmV0O1xcbiAxNTI6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDE1MzpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiAxNTQ6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XFxuIDE1NjpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTU5OlxcdFxcdC8qXFxuIDE2MDpcXHRcXHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxcbiAxNjE6XFx0XFx0ICogYmVpbmcgYXR0YWNoZWRcXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxcbiAxNjQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAxNjc6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZXQgPSAtRVBFUk07XFxuIDE3MDpcXHRcXHRpZiAoIXR5cGUgfHwgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzIHx8XFxuIDE3MTpcXHRcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiAxNzI6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQvKlxcbiAxNzU6XFx0XFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuIDE3NjpcXHRcXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cXG4gMTc3OlxcdFxcdCAqL1xcbiAxNzg6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcXG4gMTc5OlxcdFxcdFxcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE4MDpcXHRcXHRcXHRpZiAoIXJvb3RfaXRlbSkge1xcbiAxODE6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMTgyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMTgzOlxcdFxcdFxcdH1cXG4gMTg0OlxcdFxcdH1cXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0LypcXG4gMTg3OlxcdFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiAxODg6XFx0XFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcXG4gMTg5OlxcdFxcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCd2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcXG4gMTkwOlxcdFxcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJ3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxcbiAxOTE6XFx0XFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cXG4gMTkyOlxcdFxcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxcbiAxOTM6XFx0XFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XFxuIDE5NDpcXHRcXHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxcbiAxOTU6XFx0XFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxcbiAxOTY6XFx0XFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXFxuIDE5NzpcXHRcXHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXFxuIDE5ODpcXHRcXHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxcbiAxOTk6XFx0XFx0ICpcXG4gMjAwOlxcdFxcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCd2ZVxcbiAyMDE6XFx0XFx0ICogc2FpZCBcXFwibm9cXFwiIGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXFxuIDIwMjpcXHRcXHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXFxuIDIwMzpcXHRcXHQgKlxcbiAyMDQ6XFx0XFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcXG4gMjA1OlxcdFxcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXFxuIDIwNjpcXHRcXHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XFxuIDIwNzpcXHRcXHQgKlxcbiAyMDg6XFx0XFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxcbiAyMDk6XFx0XFx0ICovXFxuIDIxMDpcXHRcXHRpbm9kZV91bmxvY2soZGlyKTtcXG4gMjExOlxcdFxcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXFx1MDAzZWRfc2IpO1xcbiAyMTI6XFx0XFx0aW5vZGVfbG9jayhkaXIpO1xcbiAyMTM6XFx0XFx0aWYgKHJldClcXG4gMjE0OlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX2ZyYWctXFx1MDAzZWZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcXG4gMjE3OlxcdFxcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpKSB7XFxuIDIxODpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiAyMTk6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDoxNS45Njg1MTM1NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxMjM1MTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gY29uZmlnZnNfc3ltbGluayoqXG5cbk9rYXksIHNvIHdlJ3ZlIGxvb2tlZCBhdCB0aGUgc3VyZmFjZSBvZiB0aGlzIGBjb25maWdmc19zeW1saW5rYCBmdW5jdGlvbiwgYnV0IEkgbmVlZCB0byBnZXQgYSBtb3JlIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4gSSdtIG5vdCBqdXN0IGludGVyZXN0ZWQgaW4gdGhlIGJhc2ljIG1lY2hhbmljczsgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCdzIGJlaW5nIHVzZWQsIGluIHdoYXQgY29udGV4dHMsIGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgY29uZmlnZnMgYXJjaGl0ZWN0dXJlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGVkZ2UgY2FzZXMsIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBhbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBvZiBhIHN5bWJvbGljIGxpbmsgd2l0aGluIHRoaXMgZmlsZSBzeXN0ZW0uIExldCdzIGRlbHZlIGludG8gdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjE3Ljg4MDg2ODk2MloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXHR9XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdGlmIChkZW50cnktXFx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxcbiAyMjM6XFx0XFx0XFx0cmV0ID0gLUVFWElTVDtcXG4gMjI0OlxcdFxcdGVsc2VcXG4gMjI1OlxcdFxcdFxcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcixcXG4gMjI2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuIDIyNzpcXHRcXHRpZiAoIXJldClcXG4gMjI4OlxcdFxcdFxcdHJldCA9IHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XFxuIDIyOTpcXHRcXHRpZiAoIXJldCkge1xcbiAyMzA6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuIDIzMTpcXHRcXHRcXHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XFxuIDIzMjpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbiAyMzM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlZHJvcF9saW5rKVxcbiAyMzQ6XFx0XFx0XFx0XFx0dHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWRyb3BfbGluayhwYXJlbnRfaXRlbSxcXG4gMjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdGFyZ2V0X2l0ZW0pO1xcbiAyMzY6XFx0XFx0fVxcbiAyMzc6XFx0XFxuIDIzODpcXHRvdXRfcHV0OlxcbiAyMzk6XFx0XFx0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcXG4gMjQwOlxcdFxcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XFxuIDI0MTpcXHRcXHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcXG4gMjQyOlxcdFxcdHJldHVybiByZXQ7XFxuIDI0MzpcXHR9XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdGludCBjb25maWdmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkID0gZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSwgKnRhcmdldF9zZDtcXG4gMjQ4OlxcdFxcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XFxuIDI0OTpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMjUwOlxcdFxcdGludCByZXQ7XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdHJldCA9IC1FUEVSTTsgIC8qIFdoYXQgbGFjay1vZi1zeW1saW5rIHJldHVybnMgKi9cXG4gMjUzOlxcdFxcdGlmICghKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19JVEVNX0xJTkspKVxcbiAyNTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdHRhcmdldF9zZCA9IHNkLVxcdTAwM2VzX2VsZW1lbnQ7XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAyNTk6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDoxNy44ODA5Nzc3NjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODMzMTg2Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQ29uZmlnRlMgU3ltbGluayBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmsoKWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGhhbmRsaW5nIHN5bWJvbGljIGxpbmtzIGluIGNvbmZpZ2ZzLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYSBcInJvb3QgaXRlbSxcIiB3aGljaCBzZWVtcyB0byBiZSBhbiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwLCBhbmQgdGhlIGlub2RlIGxvY2sgb24gdGhlIHBhcmVudCBkaXJlY3RvcnkuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uLCBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbSgpYCwgdG8gY29ycmVjdGx5IHBpbiB0aGUgcm9vdCBpdGVtLCBlbnN1cmluZyBpdCBkb2Vzbid0IGRpc2FwcGVhciBvdXQgZnJvbSB1bmRlciB1cy4gV2l0aGluIGBjb25maWdmc19zeW1saW5rKClgLCBgcm9vdF9pdGVtYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYC4gVGhlIGNvZGUgdGhlbiByZXRyaWV2ZXMgdGhlIGByb290X2l0ZW1gIGlmIGEgY2VydGFpbiBmbGFnIGlzIHNldCBhbmQsIGNydWNpYWxseSwgcmVsZWFzZXMgYW5kIHJlLWFjcXVpcmVzIHRoZSBpbm9kZSBsb2NrLiAgVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNoZWNrcyBhZnRlciByZS1hY3F1aXJpbmcgdGhlIGxvY2s6IGBzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fCBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudClgLiBUaGlzIGlzIHRoZXJlIHRvIGNvbmZpcm0gdGhlIHBhcmVudCBkaXJlY3RvcnkgaGFzbid0IHZhbmlzaGVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQuICBGaW5hbGx5LCB0aGUgY2xlYW4tdXAgc2VjdGlvbiBuZWF0bHkgY29uc29saWRhdGVzIHRoZSBgY29uZmlnX2l0ZW1fcHV0KClgIGNhbGxzIGZvciBgdGFyZ2V0X2l0ZW1gLCBgcGFyZW50X2l0ZW1gLCBhbmQgbm93LCBgcm9vdF9pdGVtYC5cblxuU28sIHRoZSBpbnRlbnQgaXMgY2xlYXI6IHByb3RlY3QgYWdhaW5zdCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBgcGFyZW50X2l0ZW1gICh0aGUgZGVmYXVsdCBncm91cCkgZ2V0cyBmcmVlZCAqZHVyaW5nKiB0aGUgdGFyZ2V0IHJlc29sdXRpb24sIGxlYWRpbmcgdG8gYSBVQUYgb3IgcmFjZS4gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIGByb290X2l0ZW1gIHN0YXlzIHZhbGlkLlxuXG5Ob3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBJIG5lZWQgdG8gbG9vayBmb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIFdlIGhhdmUgdG8gY29uc2lkZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBpbmZvIGxlYWtzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLiBJIHNlZSB0aGF0IGByb290X2l0ZW1gIGFuZCBgdGFyZ2V0X2l0ZW1gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYC4gIFRoZXJlJ3Mgbm8gY29weWluZyB0byB1c2Vyc3BhY2UgaGVyZSwgYW5kIHRoZSBkYXRhIGJ1ZmZlciBsZW5ndGhzIGFyZSB1bmFsdGVyZWQuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCBvciBwYXNzZWQgYXJvdW5kLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3aWxsIGxpa2VseSBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24sIFVBRiwgb3IgcmFjZSBjb25kaXRpb25zLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyByaXNrcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcy4gIFdlIGFyZSBoYW5kbGluZyB0aGUgcmFjZSBjb3JyZWN0bHksIGJ1dCB0aGF0IGlzIGhhbmRsZWQgYnkgb3RoZXIga2VybmVsIGZlYXR1cmVzLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoaXMgcGF0Y2ggaXMgYSBsaWZldGltZSBhbmQgcmFjZSBjb25kaXRpb24gZml4LCBhbmQgZG9lc24ndCBtZXNzIHdpdGggbWVtb3J5IGluaXRpYWxpemF0aW9uLCBJIGFtIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0IGlzIHB1cmVseSBhIEtBU0FOLCBMT0NLREVQLCBhbmQgS0NTQU4gcmVsZXZhbnQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM1LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjI2LjIxMjg0ODk4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBjb25maWdmc19zeW1saW5rKCkgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWdfaXRlbSBmb3IgZGVmYXVsdCBncm91cHMgYW5kIGNoZWNraW5nIGZvciBkaXJlY3RvcnkgZGVsZXRpb24gKGZyYWdfZGVhZCwgSVNfREVBRERJUiwgZF91bmhhc2hlZCkgYWZ0ZXIgdGVtcG9yYXJpbHkgdW5sb2NraW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayBkdXJpbmcgdGFyZ2V0IHJlc29sdXRpb24uXFxuXFxuVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBwcmV2ZW50aW9uIGZpeC4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgcmVmZXJlbmNlIGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBubyBjb3B5X3RvX3VzZXIgcGF0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBjb25maWdmc19zeW1saW5rKCkgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWdfaXRlbSBmb3IgZGVmYXVsdCBncm91cHMgYW5kIGNoZWNraW5nIGZvciBkaXJlY3RvcnkgZGVsZXRpb24gKGZyYWdfZGVhZCwgSVNfREVBRERJUiwgZF91bmhhc2hlZCkgYWZ0ZXIgdGVtcG9yYXJpbHkgdW5sb2NraW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayBkdXJpbmcgdGFyZ2V0IHJlc29sdXRpb24uXFxuXFxuVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBwcmV2ZW50aW9uIGZpeC4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgcmVmZXJlbmNlIGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBubyBjb3B5X3RvX3VzZXIgcGF0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 16:21:39 +0000 UTC FinishedAt: 2026-09-03 16:24:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "24996432-c4e9-4bc6-bd77-92b87c3e1d29" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_symlink", "configfs_get_root_item" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtjb25maWdmc19nZXRfcm9vdF9pdGVtJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBjb25maWdmc19zeW1saW5rKCkgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWdfaXRlbSBmb3IgZGVmYXVsdCBncm91cHMgYW5kIGNoZWNraW5nIGZvciBkaXJlY3RvcnkgZGVsZXRpb24gKGZyYWdfZGVhZCwgSVNfREVBRERJUiwgZF91bmhhc2hlZCkgYWZ0ZXIgdGVtcG9yYXJpbHkgdW5sb2NraW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayBkdXJpbmcgdGFyZ2V0IHJlc29sdXRpb24uXG5cblRoaXMgaXMgYSBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcHJldmVudGlvbiBmaXguIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMsIHJlZmVyZW5jZSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgbm8gY29weV90b191c2VyIHBhdGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgcm9vdCBvYmplY3Qgb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGRlYWQgZGlyZWN0b3JpZXMvZnJhZ21lbnRzIGFjcm9zcyB0ZW1wb3JhcnkgbG9jayBkcm9wcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgVkZTL3BzZXVkby1maWxlc3lzdGVtIGxvZ2ljIGhhbmRsaW5nIHN5bWxpbmsgb3BlcmF0aW9ucyBpbiBjb25maWdmcywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5L3JhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2MGVhNzRiYjlkOTcxOTg1MzczMGMyZDliMjUyMTk5MjdkNDUzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE2OjIzOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uYTAwZjI3Yzg5MTAwYSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgJiM0MzsxMzEsMTkgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFJU19ST09UKHJvb3RfZGVudHJ5KSkge1xuJiM0MztcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XHRcdGlmICghc2QgfHwgIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSk7XG4mIzQzO31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuQEAgLTEzOSw2ICYjNDM7MTUyLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMO1xuIFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XG4gXG4gXHRzZCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2ZzZGF0YTtcbkBAIC0xNTcsNiAmIzQzOzE3MSwxOCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXG4mIzQzO1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7XG4mIzQzO1x0XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4mIzQzO1x0XHRpZiAoIXJvb3RfaXRlbSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PRU5UO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTg3LDYgJiM0MzsyMTMsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuJiM0MztcdGlmIChzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fFxuJiM0MztcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gXHRlbHNlXG5AQCAtMjAzLDEwICYjNDM7MjM1LDEwIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHRhcmdldF9pdGVtKTtcbiBcdH1cbiBcbi1cdGNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7XG4tXG4gb3V0X3B1dDpcbiYjNDM7XHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuIFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbiYjNDM7XHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtjb25maWdmc19nZXRfcm9vdF9pdGVtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSByb290IG9iamVjdCBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgZGVhZCBkaXJlY3Rvcmllcy9mcmFnbWVudHMgYWNyb3NzIHRlbXBvcmFyeSBsb2NrIGRyb3BzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBWRlMvcHNldWRvLWZpbGVzeXN0ZW0gbG9naWMgaGFuZGxpbmcgc3ltbGluayBvcGVyYXRpb25zIGluIGNvbmZpZ2ZzLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDYwZWE3NGJiOWQ5NzE5ODUzNzMwYzJkOWIyNTIxOTkyN2Q0NTNhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTY6MjM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKaW5kZXggMzFlYjI4YjI3MzA5MS4uYTAwZjI3Yzg5MTAwYSAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwpAQCAtMTMxLDYgJiM0MzsxMzEsMTkgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7CiYjNDM7CXN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkOwomIzQzOwomIzQzOwl3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7CiYjNDM7CQlzZCA9IHJvb3RfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJCWlmICghc2QgfHwgIShzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyb290X2RlbnRyeSA9IHJvb3RfZGVudHJ5LSZndDtkX3BhcmVudDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTsKJiM0Mzt9CiAKIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCkBAIC0xMzksNiAmIzQzOzE1Miw3IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7CiAKIAlzZCA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQtJmd0O2RfZnNkYXRhOwpAQCAtMTU3LDYgJiM0MzsxNzEsMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCSAgICAhdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW4KJiM0MzsJICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlpZiAoc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHsKJiM0MzsJCXJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LSZndDtkX3BhcmVudCk7CiYjNDM7CQlpZiAoIXJvb3RfaXRlbSkgewomIzQzOwkJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQkJZ290byBvdXRfcHV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2YKIAkgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZApAQCAtMTg3LDYgJiM0MzsyMTMsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwlpZiAoc2QtJmd0O3NfZnJhZy0mZ3Q7ZnJhZ19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fAomIzQzOwkgICAgZF91bmhhc2hlZChkZW50cnktJmd0O2RfcGFyZW50KSkgewomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKJiM0MzsJfQomIzQzOwogCWlmIChkZW50cnktJmd0O2RfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKQogCQlyZXQgPSAtRUVYSVNUOwogCWVsc2UKQEAgLTIwMywxMCAmIzQzOzIzNSwxMCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkgICAgIHRhcmdldF9pdGVtKTsKIAl9CiAKLQljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwotCiBvdXRfcHV0OgomIzQzOwljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwogCWNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7CiYjNDM7CWNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pOwogCXJldHVybiByZXQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiB3b3J0aCBjb25zaWRlcmluZyBmb3Igc3l6a2FsbGVyLiBUaGUgZGlmZiBpcyB0b3VjaGluZyBgZnMvY29uZmlnZnMvc3ltbGluay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY29uZmlnZnNfc3ltbGlua2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlcyBJIHNlZSBhcmUgdGhlIGludHJvZHVjdGlvbiBvZiBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAsIHBpbm5pbmcgdGhlIHJvb3Qgb2JqZWN0LCBzb21lIG5ldyBlcnJvciBjaGVja3MgcmVsYXRlZCB0byB0aGUgZGlyZWN0b3J5JiMzOTtzIHN0YXRlIChgZnJhZ19kZWFkYCwgYElTX0RFQURESVJgLCBgZF91bmhhc2hlZGApLCBhbmQgYSByZWFycmFuZ2VtZW50L2ltcHJvdmVtZW50IG9mIGNsZWFudXAgd2l0aCB0aGUgYGNvbmZpZ19pdGVtX3B1dGAgY2FsbHMuCgpOb3csIGlzIHRoaXMgY29kZSByZWFjaGFibGU/IEFic29sdXRlbHkuIGBjb25maWdmc2AgaXMgYSB3ZWxsLWtub3duIHZpcnR1YWwgZmlsZXN5c3RlbS4gVGhhdCBtZWFucyBpdOKAmXMgZXhwb3NlZCB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2UgYHN5bWxpbmtgLCBgc3ltbGlua2F0YCwgYG1vdW50YCwgYW5kIGBta2RpcmAuIFN5emthbGxlciBhbHJlYWR5IGhpdHMgdGhpcyBmaWxlc3lzdGVtIHByZXR0eSBoYXJkLCBzbyB0aGF04oCZcyBhIGdvb2Qgc2lnbi4gVGhlIG5ldyBjYWxscyB0byBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNoZWNrcyBhbmQgY2xlYW51cCwgKmNvdWxkKiBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgb3IgcG90ZW50aWFsIGlzc3VlcyB0aGF0IHN5emthbGxlciBjb3VsZCB1bmNvdmVyLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG9iamVjdCBsaWZldGltZSBhbmQgZXJyb3IgaGFuZGxpbmcuIFNvLCBpdCYjMzk7cyB2ZXJ5IHByb21pc2luZy4KClRvIGNvbmZpcm0gdGhpcyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGNvbmZpZ2ZzYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBmcy9jb25maWdmcy9LY29uZmlnYCBvciBgZnMvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIHNldHRpbmdzIGFyZSwgdXNpbmcgZWl0aGVyIGBncmVwcGVyYCBvciBqdXN0IHF1aWNrbHkgcmVhZGluZyB0aGUgcmVsZXZhbnQgZmlsZXMuIEdvdHRhIG1ha2Ugc3VyZSBpdOKAmXMgZXZlbiBjb25maWd1cmVkIGluIGFueSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTU3PW9iai0kKENPTkZJR19TWVNGUylcdFx0JiM0Mzs9IHN5c2ZzL1xuZnMvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVx0JiM0Mzs9IGNvbmZpZ2ZzL1xuZnMvTWFrZWZpbGUtNTktb2JqLXlcdFx0XHRcdCYjNDM7PSBkZXZwdHMvXG4tLVxuZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvY29uZmlnZnMvS2NvbmZpZzoyOmNvbmZpZyBDT05GSUdGU19GU1xuZnMvY29uZmlnZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9jb25maWdmcy9NYWtlZmlsZS01LVxuZnMvY29uZmlnZnMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQ09ORklHRlNfRlMpXHQmIzQzOz0gY29uZmlnZnMub1xuZnMvY29uZmlnZnMvTWFrZWZpbGUtNy1cbi0tXG5mcy9kbG0vS2NvbmZpZz0yPW1lbnVjb25maWcgRExNXG4tLVxuZnMvZGxtL0tjb25maWctNC1cdGRlcGVuZHMgb24gSU5FVFxuZnMvZGxtL0tjb25maWc6NTpcdGRlcGVuZHMgb24gU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG5mcy9kbG0vS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2dmczIvS2NvbmZpZz0yNz1jb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTVxuLS1cbmZzL2dmczIvS2NvbmZpZy0yOS1cdGRlcGVuZHMgb24gKEdGUzJfRlMhPW4pIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IElORVQgXHUwMDI2XHUwMDI2IFxcXG5mcy9nZnMyL0tjb25maWc6MzA6XHRcdENPTkZJR0ZTX0ZTIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgKERMTT15IHx8IERMTT1HRlMyX0ZTKVxuZnMvZ2ZzMi9LY29uZmlnLTMxLVx0aGVscFxuLS1cbmZzL29jZnMyL0tjb25maWc9Mj1jb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ0ZTIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBmcy9jb25maWdmcy9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIENvbmZpZ0ZTLiBHaXZlbiBpdHMgcm9sZSBhcyBhIGZpbGVzeXN0ZW0gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiwgSSBleHBlY3QgdG8gc2VlIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgc2V0IG9mIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGtleSB0aGluZ3M6CgoqICAgKipNYWluIENvbmZpZ3VyYXRpb24gU3ltYm9sOioqIEZpcnN0LCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgbWFpbiBzeW1ib2wgdGhhdCBlbmFibGVzIENvbmZpZ0ZTIGl0c2VsZi4gVGhpcyB3aWxsIGxpa2VseSBiZSBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0NPTkZJR0ZTYCBvciBzaW1pbGFyLiBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGdyb2sgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIChsaWtlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdXBwb3J0KS4KKiAgICoqTW9kdWxlLW5lc3M6KiogRG9lcyBpdCBoYXZlIGEgbW9kdWxhciBvcHRpb24/IFRoYXQmIzM5O3MgYSBjcnVjaWFsIGRlY2lzaW9uLiBJZiBzbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBidWlsZGluZyBpdCBhcyBhIG1vZHVsZSB2ZXJzdXMgYnVpbHQtaW4uIFRoaXMgaW1wYWN0cyBib290IHByb2Nlc3MgYW5kIHBvdGVudGlhbCB0cm91Ymxlc2hvb3RpbmcuIFRoZSB0cmFkZS1vZmZzIGFyZSBpbXBvcnRhbnQgYW5kIHByb2JhYmx5IGRlc2NyaWJlZCBpbiB0aGUgaGVscCB0ZXh0LgoqICAgKipTdWItb3B0aW9uczoqKiBOZXh0LCBJJiMzOTtsbCBsb29rIGZvciBhbnkgc3ViLW9wdGlvbnMgd2l0aGluIENvbmZpZ0ZTLiBUaGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzIG9yIGZlYXR1cmVzIG9mIENvbmZpZ0ZTLiBGb3IgZXhhbXBsZSwgYXJlIHRoZXJlIHNldHRpbmdzIHJlbGF0ZWQgdG8gc2VjdXJpdHkgYXR0cmlidXRlcywgZmlsZSBwZXJtaXNzaW9ucywgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvYmplY3QgdHlwZXM/IFVuZGVyc3RhbmRpbmcgdGhlc2Ugb3B0aW9ucyBhbGxvd3MgZm9yIHRhaWxvcmluZyB0aGUgZmVhdHVyZSBzZXQuCiogICAqKkRlcGVuZGVuY2llcyBhbmQgUmVsYXRpb25zaGlwczoqKiBJJiMzOTtsbCBtZXRpY3Vsb3VzbHkgY2hlY2sgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcy4gQ29uZmlnRlMgbGlrZWx5IHJlbGllcyBvbiBjb3JlIFZGUyBlbGVtZW50cywgcG90ZW50aWFsbHkgb24gc2VjdXJpdHkgZnJhbWV3b3JrcyBsaWtlIFNFTGludXggb3IgQXBwQXJtb3IsIG9yIG90aGVyIHN0b3JhZ2UtcmVsYXRlZCBjb21wb25lbnRzLiBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIGNydWNpYWwgZm9yIHByb3BlciBmdW5jdGlvbmFsaXR5IGFuZCB3aWxsIHNob3cgd2hpY2ggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgYWxzbyBpbXBhY3RlZCBieSBhbnkgY2hhbmdlcyB0byBDb25maWdGUyBzZXR0aW5ncy4KKiAgICoqSGVscCBUZXh0IEFuYWx5c2lzOioqIFRoZSBoZWxwIHRleHQgaXMsIGFzIGFsd2F5cywgY3J1Y2lhbC4gSSBuZWVkIHRvIHF1aWNrbHkgZXh0cmFjdCB0aGUgY29yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGVhY2ggb3B0aW9uICpkb2VzKiwgd2h5IHlvdSYjMzk7ZCBlbmFibGUgaXQsIGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBlYWNoIHNldHRpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBlcmZvcm1hbmNlLCBsaW1pdGF0aW9ucywgb3IgYmVzdCBwcmFjdGljZXMuCiogICAqKkRlZmF1bHRzIGFuZCBUcmlnZ2VyczoqKiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIGltcG9ydGFudC4gQXJlIHRoZXkgc2Vuc2libGUgZGVmYXVsdHMgdGhhdCB3b3JrIHdlbGwgJiMzNDtvdXQgb2YgdGhlIGJveCYjMzQ7LCBvciBhcmUgdGhleSBkZXBlbmRlbnQgb24gb3RoZXIgc2V0dGluZ3M/IEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBob3cgdGhvc2UgZGVmYXVsdHMgYWZmZWN0IHRoZSBzeXN0ZW0uCiogICAqKlBvdGVudGlhbCBjb25mbGljdHM6KiogSSYjMzk7bGwgYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gb3B0aW9ucy4gQXJlIHRoZXJlIGFueSBtdXR1YWxseSBleGNsdXNpdmUgc2V0dGluZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY3JlYXRlIHByb2JsZW1zIGlmIGVuYWJsZWQvZGlzYWJsZWQgYXQgdGhlIHNhbWUgdGltZT8KKiAgICoqQW55IEFyY2hpdGVjdHVyZS9QbGF0Zm9ybSBDb25zaWRlcmF0aW9uczoqKiBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zIG9yIGNvbmRpdGlvbmFsIGJsb2Nrcz8gQ29uZmlnRlMsIGxpa2UgYWxsIGtlcm5lbCBjb21wb25lbnRzLCBuZWVkcyB0byBiZSBhcyBnZW5lcmljIGFzIHBvc3NpYmxlLCBidXQgc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcyBvZnRlbiBoYXZlIHNwZWNpZmljIG5lZWRzLiBJJiMzOTtsbCBtYWtlIG5vdGUgb2YgYW55dGhpbmcgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudC4KCkJ5IHRoZSBlbmQgb2YgdGhpcywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiBDb25maWdGUyYjMzk7cyBjb25maWd1cmF0aW9uIHNwYWNlLCBpdHMgcm9sZSBpbiB0aGUga2VybmVsLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBtYWtpbmcgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gVGhpcyBrbm93bGVkZ2Ugd2lsbCBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIG9wdGltaXppbmcsIG9yIHBvdGVudGlhbGx5IGV4dGVuZGluZyBDb25maWdGUyBpbiB0aGUgZnV0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBDT05GSUdGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgY29uZmlnZnMgaXMgYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZVxuICAgNjpcdFx0ICBvZiBzeXNmcyYjMzk7cyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWRcbiAgIDc6XHRcdCAgdmlldyBvZiBrZXJuZWwgb2JqZWN0cywgY29uZmlnZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIG1hbmFnZXJcbiAgIDg6XHRcdCAgb2Yga2VybmVsIG9iamVjdHMsIG9yIGNvbmZpZ19pdGVtcy5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXG4gIDExOlx0XHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTcxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTeW1saW5rIFNoZW5hbmlnYW5zIGluIGNvbmZpZ2ZzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHN5bWxpbmtzIGluIGBjb25maWdmc2AsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIHplcm8gaW4gb24gdGhlIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayBvdXQgdGhlIGZ1bGwgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmtgIGZ1bmN0aW9uLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBrZXkgZm9yIGNyZWF0aW5nIHRob3NlIHZpcnR1YWwgc3ltbGlua3Mgd2l0aGluIHRoZSBjb25maWdmcyBoaWVyYXJjaHksIHNvIGJ5IHVuZGVyc3RhbmRpbmcgaXRzIHN1cnJvdW5kaW5nIGNvZGUsIEkgY2FuIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgaG93IGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBpdCYjMzk7cyBwYXNzZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB3aWxsIGJlIGNydWNpYWwgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHRcdFx0cmV0dXJuIHJldDtcbiAxMjY6XHRcdGlmIChwYXRoLmRlbnRyeS1cdTAwM2VkX3NiICE9IHNiKVxuIDEyNzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDEyODpcdFx0KnRhcmdldCA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShwYXRoLmRlbnRyeSk7XG4gMTI5Olx0XHRpZiAoISp0YXJnZXQpXG4gMTMwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDEzMTpcdFx0cmV0dXJuIDA7XG4gMTMyOlx0fVxuIDEzMzpcdFxuIDEzNDpcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIDEzNTpcdHtcbiAxMzY6XHRcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuIDEzNzpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gMTM4Olx0XG4gMTM5Olx0XHR3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7XG4gMTQwOlx0XHRcdHNkID0gcm9vdF9kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4gMTQxOlx0XHRcdGlmICghc2QgfHwgIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXG4gMTQyOlx0XHRcdFx0YnJlYWs7XG4gMTQzOlx0XHRcdHJvb3RfZGVudHJ5ID0gcm9vdF9kZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4gMTQ0Olx0XHR9XG4gMTQ1Olx0XHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTtcbiAxNDY6XHR9XG4gMTQ3Olx0XG4gMTQ4Olx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIDE0OTpcdFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcbiAxNTA6XHR7XG4gMTUxOlx0XHRpbnQgcmV0O1xuIDE1MjpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gMTUzOlx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIDE1NDpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XG4gMTU1Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XG4gMTU2Olx0XHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiAxNTc6XHRcbiAxNTg6XHRcdHNkID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuIDE1OTpcdFx0LypcbiAxNjA6XHRcdCAqIEZha2UgaW52aXNpYmlsaXR5IGlmIGRpciBiZWxvbmdzIHRvIGEgZ3JvdXAvZGVmYXVsdCBncm91cHMgaGllcmFyY2h5XG4gMTYxOlx0XHQgKiBiZWluZyBhdHRhY2hlZFxuIDE2MjpcdFx0ICovXG4gMTYzOlx0XHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeShzZCkpXG4gMTY0Olx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDE2NTpcdFxuIDE2NjpcdFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiAxNjc6XHRcdHR5cGUgPSBwYXJlbnRfaXRlbS1cdTAwM2VjaV90eXBlO1xuIDE2ODpcdFxuIDE2OTpcdFx0cmV0ID0gLUVQRVJNO1xuIDE3MDpcdFx0aWYgKCF0eXBlIHx8ICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzIHx8XG4gMTcxOlx0XHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiAxNzI6XHRcdFx0Z290byBvdXRfcHV0O1xuIDE3MzpcdFxuIDE3NDpcdFx0LypcbiAxNzU6XHRcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuIDE3NjpcdFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4gMTc3Olx0XHQgKi9cbiAxNzg6XHRcdGlmIChzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xuIDE3OTpcdFx0XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTgwOlx0XHRcdGlmICghcm9vdF9pdGVtKSB7XG4gMTgxOlx0XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAxODI6XHRcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMTgzOlx0XHRcdH1cbiAxODQ6XHRcdH1cbiAxODU6XHRcbiAxODY6XHRcdC8qXG4gMTg3Olx0XHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiAxODg6XHRcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG4gMTg5Olx0XHQgKiBhdCBzeXNjYWxsIHRpbWUgKGFzIGxpbmsoMikgd291bGQmIzM5O3ZlIGRvbmUpLCBiZSBhIGRpcmVjdG9yeVxuIDE5MDpcdFx0ICogKHdoaWNoIGxpbmsoMikgd291bGQmIzM5O3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxuIDE5MTpcdFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cbiAxOTI6XHRcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxuIDE5MzpcdFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XG4gMTk0Olx0XHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxuIDE5NTpcdFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxuIDE5NjpcdFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXG4gMTk3Olx0XHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXG4gMTk4Olx0XHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxuIDE5OTpcdFx0ICpcbiAyMDA6XHRcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCYjMzk7dmVcbiAyMDE6XHRcdCAqIHNhaWQgXCYjMzQ7bm9cJiMzNDsgYmFjayBpbiAyMDA1LiAgVG9vIGxhdGUgbm93LCBzbyB3ZSBnZXQgdG9cbiAyMDI6XHRcdCAqIHBsYXkgdmVyeSB1Z2x5IGdhbWVzIHdpdGggbG9ja2luZy5cbiAyMDM6XHRcdCAqXG4gMjA0Olx0XHQgKiBUcnkgKkFOWVRISU5HKiBvZiB0aGF0IHNvcnQgaW4gbmV3IGNvZGUsIGFuZCB5b3Ugd2lsbFxuIDIwNTpcdFx0ICogcmVhbGx5IHJlZ3JldCBpdC4gIEp1c3QgYXNrIHlvdXJzZWxmIC0gd2hhdCBjb3VsZCBhIEJPRkhcbiAyMDY6XHRcdCAqIGRvIHRvIG1lIGFuZCBkbyBJIHdhbnQgdG8gZmluZCBpdCBvdXQgZmlyc3QtaGFuZD9cbiAyMDc6XHRcdCAqXG4gMjA4Olx0XHQgKiAgQVYsIGEgdGhvcm91Z2hseSBhbm5veWVkIGJhc3RhcmQuXG4gMjA5Olx0XHQgKi9cbiAyMTA6XHRcdGlub2RlX3VubG9jayhkaXIpO1xuIDIxMTpcdFx0cmV0ID0gZ2V0X3RhcmdldChzeW1uYW1lLCBcdTAwMjZ0YXJnZXRfaXRlbSwgZGVudHJ5LVx1MDAzZWRfc2IpO1xuIDIxMjpcdFx0aW5vZGVfbG9jayhkaXIpO1xuIDIxMzpcdFx0aWYgKHJldClcbiAyMTQ6XHRcdFx0Z290byBvdXRfcHV0O1xuIDIxNTpcdFxuIDIxNjpcdFx0aWYgKHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XG4gMjE3Olx0XHQgICAgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpKSB7XG4gMjE4Olx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gMjE5Olx0XHRcdGdvdG8gb3V0X3B1dDtcbiAyMjA6XHRcdH1cbiAyMjE6XHRcbiAyMjI6XHRcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gMjIzOlx0XHRcdHJldCA9IC1FRVhJU1Q7XG4gMjI0Olx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYSB2YWxpZCBhc3Nlc3NtZW50PyBBYnNvbHV0ZWx5LiBDb25maWdmcywgYmVpbmcgYSB1c2VyLWFjY2Vzc2libGUgdmlydHVhbCBmaWxlc3lzdGVtLCBtZWFucyB0aGF0IGBjb25maWdmc19zeW1saW5rYCAtIGEgc3BlY2lmaWMgVkZTIGVudHJ5cG9pbnQgZm9yIGNyZWF0aW5nIHN5bWxpbmtzIHdpdGhpbiBjb25maWdmcyAtIGlzIGRlZmluaXRlbHkgaW4gcGxheS4gVGhlIHBhdGNoIHRhcmdldHMgcmVmZXJlbmNlIGNvdW50aW5nLCBwaW5uaW5nLCBhbmQgdmFsaWRpdHkgY2hlY2tzIGFmdGVyIHJlLWxvY2tpbmcgdGhlIGRpcmVjdG9yeSAoYGRpcmApIGluIGZ1bmN0aW9ucyBsaWtlIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCBhbmQgYGNvbmZpZ2ZzX3N5bWxpbmtgLCB3aGljaCBzY3JlYW1zIHJhY2UgY29uZGl0aW9uIHRlcnJpdG9yeS4gRnV6emluZyB3aXRoIGNvbmN1cnJlbnQgc3ltbGluayBhbmQgcm1kaXIgb3BlcmF0aW9ucyBzZWVtcyBsaWtlIGEgZGlyZWN0IHJvdXRlIHRvIGV4cG9zZSB0aG9zZSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2NrLCBvciByYWNlIGNvbmRpdGlvbnMuIFNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB0aGUgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZSBgY29uZmlnZnNfc3ltbGlua2AsIG5hdHVyYWxseS4gYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW1gIGlzIG1hcmtlZCBhcyBzdGF0aWMsIGJ1dCB3ZSBoYXZlIHRvIHNlZSBpZiBpdCBtaWdodCBiZSBpbmxpbmVkLiBFdmVuIGlmIHNvLCB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIHRhcmdldC4gR2l2ZW4gdGhlIGNvbnRleHQsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYm90aCBgY29uZmlnZnNfc3ltbGlua2AgYW5kIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYC4gV2Ugc2hvdWxkIGRvdWJsZS1jaGVjayBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBqdXN0IHRvIGJlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxldmFudCBzeW1saW5rLXJlbGF0ZWQgc3ltYm9scyBvciBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgd2VsbC4gQSBxdWljayBzY2FuIHdpbGwgY29uZmlybSBpZiBgY29uZmlnZnNfc3ltbGlua2AgaXMgdGhlIHByaW1hcnkgZW50cnkgb3IgaWYgd2UgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIG9mIGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jLTE5LS8qIFByb3RlY3RzIGF0dGFjaG1lbnRzIG9mIG5ldyBzeW1saW5rcyAqL1xuZnMvY29uZmlnZnMvc3ltbGluay5jOjIwOkRFRklORV9NVVRFWChjb25maWdmc19zeW1saW5rX211dGV4KTtcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMjpzdGF0aWMgaW50IGl0ZW1fZGVwdGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSlcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMy17XG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI5LVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjMwOnN0YXRpYyBpbnQgaXRlbV9wYXRoX2xlbmd0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtKVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTMxLXtcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNDAtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6NDE6c3RhdGljIHZvaWQgZmlsbF9pdGVtX3BhdGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSwgY2hhciAqIGJ1ZmZlciwgaW50IGxlbmd0aClcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy00Mi17XG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTU1LVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjU2OnN0YXRpYyBpbnQgY29uZmlnZnNfZ2V0X3RhcmdldF9wYXRoKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy01Ny1cdFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXQsIGNoYXIgKnBhdGgpXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc2LVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjc3OnN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy03OC1cdFx0ICAgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTE2LVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjExNzpzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTExOC1cdFx0ICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTMzLVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjEzNDpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMzUte1xuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xNDctXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MTQ4OmludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xNDktXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yNDQtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjQ1OmludCBjb25maWdmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yNDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njc4CgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25maWdGUyBTeW1saW5rIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaGluZ2VzIG9uIHRoZSBgY29uZmlnZnNfc3ltbGlua2AgYW5kIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIHNwYWNlIHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY29uZmlnZnNgIGZpbGVzeXN0ZW0uCgpGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgQ09ORklHRlNfRlNgIGlzIGVuYWJsZWQuIEEgcXVpY2sgY2hlY2sgb2YgYGZzL2NvbmZpZ2ZzL01ha2VmaWxlYCBjb25maXJtcyB0aGlzIGFuZCB0aGF0IGl0IGluY2x1ZGVzIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4gR29vZCwgbm8gc3VycHJpc2VzIHRoZXJlLiBNeSBzY2FuIGRpZG4mIzM5O3QgdHVybiB1cCBhbnkgKm90aGVyKiBoaWRkZW4gY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzIGZvciBgZnMvY29uZmlnZnMvc3ltbGluay5jYCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGluZm9ybWF0aW9uIGFnYWluc3QgbXkgZXN0YWJsaXNoZWQgY3JpdGVyaWE6IEkmIzM5O3ZlIGdvdCBgV29ydGhGdXp6aW5nYCBzZXQgdG8gYHRydWVgLCBgRW5hYmxlQ29uZmlnc2AgYXMgYFsmIzM0O0NPTkZJR0ZTX0ZTJiMzNDtdYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBwcm9wZXJseSBkZWZpbmVkIGFzIGBbJiMzNDtjb25maWdmc19zeW1saW5rJiMzNDssICYjMzQ7Y29uZmlnZnNfZ2V0X3Jvb3RfaXRlbSYjMzQ7XWAuCgpUaGUgcmVhc29uaW5nIEkmIzM5O20gdXNpbmcgaXMgc29saWQg4oCTIHRoaXMgaXMgYSByZWFjaGFibGUgcHNldWRvLWZpbGVzeXN0ZW0sIHdoaWNoIG1ha2VzIGl0IGFuIGlkZWFsIHRhcmdldCBmb3IgZnV6emluZy4gSSBzdXNwZWN0IHRoZXJlIGFyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHN5bWxpbmsvcm1kaXIgb3BlcmF0aW9ucywgYW5kIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBwaW5uaW5nIG9mIHJvb3QgaXRlbXMgYW5kIGxvb2sgZm9yIGNoZWNrcyByZWxhdGVkIHRvIGRlYWQgZnJhZyBvciBkaXJlY3RvcnkgY29ycnVwdGlvbi4gVGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgcGxhbi4KClRpbWUgdG8gbG9nIHRoaXMuIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgYXNzZXNzbWVudCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDtjb25maWdmc19nZXRfcm9vdF9pdGVtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSByb290IG9iamVjdCBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgZGVhZCBkaXJlY3Rvcmllcy9mcmFnbWVudHMgYWNyb3NzIHRlbXBvcmFyeSBsb2NrIGRyb3BzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBWRlMvcHNldWRvLWZpbGVzeXN0ZW0gbG9naWMgaGFuZGxpbmcgc3ltbGluayBvcGVyYXRpb25zIGluIGNvbmZpZ2ZzLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmZpZ2ZzX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfZ2V0X3Jvb3RfaXRlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgcm9vdCBvYmplY3Qgb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGRlYWQgZGlyZWN0b3JpZXMvZnJhZ21lbnRzIGFjcm9zcyB0ZW1wb3JhcnkgbG9jayBkcm9wcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgVkZTL3BzZXVkby1maWxlc3lzdGVtIGxvZ2ljIGhhbmRsaW5nIHN5bWxpbmsgb3BlcmF0aW9ucyBpbiBjb25maWdmcywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5L3JhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gY29uZmlnZnNfc3ltbGluaygpIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnX2l0ZW0gZm9yIGRlZmF1bHQgZ3JvdXBzIGFuZCBjaGVja2luZyBmb3IgZGlyZWN0b3J5IGRlbGV0aW9uIChmcmFnX2RlYWQsIElTX0RFQURESVIsIGRfdW5oYXNoZWQpIGFmdGVyIHRlbXBvcmFyaWx5IHVubG9ja2luZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgZHVyaW5nIHRhcmdldCByZXNvbHV0aW9uLlxuXG5UaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHByZXZlbnRpb24gZml4LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG5vIGNvcHlfdG9fdXNlciBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2MGVhNzRiYjlkOTcxOTg1MzczMGMyZDliMjUyMTk5MjdkNDUzYWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE2OjIzOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCmluZGV4IDMxZWIyOGIyNzMwOTEuLmEwMGYyN2M4OTEwMGEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKQEAgLTEzMSw2ICYjNDM7MTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5OwomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsKJiM0MzsJd2hpbGUgKCFJU19ST09UKHJvb3RfZGVudHJ5KSkgewomIzQzOwkJc2QgPSByb290X2RlbnRyeS0mZ3Q7ZF9mc2RhdGE7CiYjNDM7CQlpZiAoIXNkIHx8ICEoc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFQpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJcm9vdF9kZW50cnkgPSByb290X2RlbnRyeS0mZ3Q7ZF9wYXJlbnQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSk7CiYjNDM7fQogCiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKQpAQCAtMTM5LDYgJiM0MzsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiAJc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDsKJiM0MzsJc3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlOwogCiAJc2QgPSBkZW50cnktJmd0O2RfcGFyZW50LSZndDtkX2ZzZGF0YTsKQEAgLTE1Nyw2ICYjNDM7MTcxLDE4IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkgICAgIXR5cGUtJmd0O2N0X2l0ZW1fb3BzLSZndDthbGxvd19saW5rKQogCQlnb3RvIG91dF9wdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuCiYjNDM7CSAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNkLSZndDtzX3R5cGUgJmFtcDsgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7CiYjNDM7CQlyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwomIzQzOwkJaWYgKCFyb290X2l0ZW0pIHsKJiM0MzsJCQlyZXQgPSAtRU5PRU5UOwomIzQzOwkJCWdvdG8gb3V0X3B1dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qCiAJICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mCiAJICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWQKQEAgLTE4Nyw2ICYjNDM7MjEzLDEyIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXQ7CiAKJiM0MzsJaWYgKHNkLSZndDtzX2ZyYWctJmd0O2ZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHwKJiM0MzsJICAgIGRfdW5oYXNoZWQoZGVudHJ5LSZndDtkX3BhcmVudCkpIHsKJiM0MzsJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQlnb3RvIG91dF9wdXQ7CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSkKIAkJcmV0ID0gLUVFWElTVDsKIAllbHNlCkBAIC0yMDMsMTAgJiM0MzsyMzUsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCQkJICAgICB0YXJnZXRfaXRlbSk7CiAJfQogCi0JY29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTsKLQogb3V0X3B1dDoKJiM0MzsJY29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTsKIAljb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pOwomIzQzOwljb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgcGF0Y2g6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBLTVNBTiB2cy4gS0FTQU4qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtEbyB3ZSBuZWVkIHRoZSBoZWF2eSBoYW1tZXIgb2YgS01TQU4gaGVyZSwgb3IgY2FuIEtBU0FOIGhhbmRsZSBpdD8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgZGlmZiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGF0IGBmcy9jb25maWdmcy9zeW1saW5rLmNgIGZpbGUgYW5kIHRoZSBzcGVjaWZpYyBsaW5lcyB0aGF0IHdlcmUgbW9kaWZpZWQuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGp1c3QgcmVhZGluZyBpdCBvdmVyLCBsZXR0aW5nIG15IGV5ZSBzY2FuIGZvciBhbnl0aGluZyB0aGF0IGp1bXBzIG91dC4gSSBtaWdodCBldmVuIHVzZSBhIHV0aWxpdHksIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLCB0byBxdWlja2x5IGZpbmQgc3BlY2lmaWMga2V5d29yZHMgb3Igc2VjdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgZXhhY3RseSB3aGF0IGNoYW5nZWQgYW5kIHdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyMDpcdFx0c3RydWN0IHBhdGggcGF0aCBfX2ZyZWUocGF0aF9wdXQpID0ge307XG4gMTIxOlx0XHRpbnQgcmV0O1xuIDEyMjpcdFxuIDEyMzpcdFx0cmV0ID0ga2Vybl9wYXRoKHN5bW5hbWUsIExPT0tVUF9GT0xMT1d8TE9PS1VQX0RJUkVDVE9SWSwgXHUwMDI2cGF0aCk7XG4gMTI0Olx0XHRpZiAocmV0KVxuIDEyNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNjpcdFx0aWYgKHBhdGguZGVudHJ5LVx1MDAzZWRfc2IgIT0gc2IpXG4gMTI3Olx0XHRcdHJldHVybiAtRVBFUk07XG4gMTI4Olx0XHQqdGFyZ2V0ID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHBhdGguZGVudHJ5KTtcbiAxMjk6XHRcdGlmICghKnRhcmdldClcbiAxMzA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTMxOlx0XHRyZXR1cm4gMDtcbiAxMzI6XHR9XG4gMTMzOlx0XG4gMTM0Olx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XG4gMTM3Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxMzg6XHRcbiAxMzk6XHRcdHdoaWxlICghSVNfUk9PVChyb290X2RlbnRyeSkpIHtcbiAxNDA6XHRcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiAxNDE6XHRcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiAxNDI6XHRcdFx0XHRicmVhaztcbiAxNDM6XHRcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbiAxNDQ6XHRcdH1cbiAxNDU6XHRcdHJldHVybiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHRpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gMTQ5Olx0XHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIDE1MDpcdHtcbiAxNTE6XHRcdGludCByZXQ7XG4gMTUyOlx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxNTM6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gMTU0Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiAxNTU6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiAxNTY6XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIDE1NzpcdFxuIDE1ODpcdFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4gMTU5Olx0XHQvKlxuIDE2MDpcdFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcbiAxNjE6XHRcdCAqIGJlaW5nIGF0dGFjaGVkXG4gMTYyOlx0XHQgKi9cbiAxNjM6XHRcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcbiAxNjQ6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTY1Olx0XG4gMTY2Olx0XHRwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDE2NzpcdFx0dHlwZSA9IHBhcmVudF9pdGVtLVx1MDAzZWNpX3R5cGU7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZXQgPSAtRVBFUk07XG4gMTcwOlx0XHRpZiAoIXR5cGUgfHwgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMgfHxcbiAxNzE6XHRcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIDE3MjpcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMTczOlx0XG4gMTc0Olx0XHQvKlxuIDE3NTpcdFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXG4gMTc2Olx0XHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbiAxNzc6XHRcdCAqL1xuIDE3ODpcdFx0aWYgKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7XG4gMTc5Olx0XHRcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiAxODA6XHRcdFx0aWYgKCFyb290X2l0ZW0pIHtcbiAxODE6XHRcdFx0XHRyZXQgPSAtRU5PRU5UO1xuIDE4MjpcdFx0XHRcdGdvdG8gb3V0X3B1dDtcbiAxODM6XHRcdFx0fVxuIDE4NDpcdFx0fVxuIDE4NTpcdFxuIDE4NjpcdFx0LypcbiAxODc6XHRcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIDE4ODpcdFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbiAxODk6XHRcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCYjMzk7dmUgZG9uZSksIGJlIGEgZGlyZWN0b3J5XG4gMTkwOlx0XHQgKiAod2hpY2ggbGluaygyKSB3b3VsZCYjMzk7dmUgcmVmdXNlZCB0byBkbykgKkFORCogYmUgYSBkZWVwXG4gMTkxOlx0XHQgKiBmdWNraW5nIG1hZ2ljLCBtYWtpbmcgdGhlIHRhcmdldCBidXN5IGZyb20gcm1kaXIgUE9WLlxuIDE5MjpcdFx0ICogc3ltbGluaygyKSBpcyBub3RoaW5nIG9mIHRoYXQgc29ydCwgYW5kIHRoZSBsb2NraW5nIGl0XG4gMTkzOlx0XHQgKiBnZXRzIG1hdGNoZXMgdGhlIG5vcm1hbCBzeW1saW5rKDIpIHNlbWFudGljcy4gIFdpdGhvdXRcbiAxOTQ6XHRcdCAqIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHRhcmdldCAod2hpY2ggbWlnaHQgdmVyeSB3ZWxsXG4gMTk1Olx0XHQgKiBub3QgZXZlbiBleGlzdCB5ZXQpIGRvbmUgcHJpb3IgdG8gbG9ja2luZyB0aGUgcGFyZW50XG4gMTk2Olx0XHQgKiBkaXJlY3RvcnkuICBUaGlzIHBlcnZlcnNpb24sIE9UT0gsIG5lZWRzIHRvIHJlc29sdmVcbiAxOTc6XHRcdCAqIHRoZSB0YXJnZXQsIHdoaWNoIHdvdWxkIGxlYWQgdG8gb2J2aW91cyBkZWFkbG9ja3MgaWZcbiAxOTg6XHRcdCAqIGF0dGVtcHRlZCB3aXRoIGFueSBkaXJlY3RvcmllcyBsb2NrZWQuXG4gMTk5Olx0XHQgKlxuIDIwMDpcdFx0ICogVW5mb3J0dW5hdGVseSwgdGhhdCBnYXJiYWdlIGlzIHVzZXJsYW5kIEFCSSBhbmQgd2Ugc2hvdWxkJiMzOTt2ZVxuIDIwMTpcdFx0ICogc2FpZCBcJiMzNDtub1wmIzM0OyBiYWNrIGluIDIwMDUuICBUb28gbGF0ZSBub3csIHNvIHdlIGdldCB0b1xuIDIwMjpcdFx0ICogcGxheSB2ZXJ5IHVnbHkgZ2FtZXMgd2l0aCBsb2NraW5nLlxuIDIwMzpcdFx0ICpcbiAyMDQ6XHRcdCAqIFRyeSAqQU5ZVEhJTkcqIG9mIHRoYXQgc29ydCBpbiBuZXcgY29kZSwgYW5kIHlvdSB3aWxsXG4gMjA1Olx0XHQgKiByZWFsbHkgcmVncmV0IGl0LiAgSnVzdCBhc2sgeW91cnNlbGYgLSB3aGF0IGNvdWxkIGEgQk9GSFxuIDIwNjpcdFx0ICogZG8gdG8gbWUgYW5kIGRvIEkgd2FudCB0byBmaW5kIGl0IG91dCBmaXJzdC1oYW5kP1xuIDIwNzpcdFx0ICpcbiAyMDg6XHRcdCAqICBBViwgYSB0aG9yb3VnaGx5IGFubm95ZWQgYmFzdGFyZC5cbiAyMDk6XHRcdCAqL1xuIDIxMDpcdFx0aW5vZGVfdW5sb2NrKGRpcik7XG4gMjExOlx0XHRyZXQgPSBnZXRfdGFyZ2V0KHN5bW5hbWUsIFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXHUwMDNlZF9zYik7XG4gMjEyOlx0XHRpbm9kZV9sb2NrKGRpcik7XG4gMjEzOlx0XHRpZiAocmV0KVxuIDIxNDpcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMjE1Olx0XG4gMjE2Olx0XHRpZiAoc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbiAyMTc6XHRcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbiAyMTg6XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAyMTk6XHRcdFx0Z290byBvdXRfcHV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gY29uZmlnZnNfc3ltbGluayoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgbG9va2VkIGF0IHRoZSBzdXJmYWNlIG9mIHRoaXMgYGNvbmZpZ2ZzX3N5bWxpbmtgIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIGdldCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLiBJJiMzOTttIG5vdCBqdXN0IGludGVyZXN0ZWQgaW4gdGhlIGJhc2ljIG1lY2hhbmljczsgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCYjMzk7cyBiZWluZyB1c2VkLCBpbiB3aGF0IGNvbnRleHRzLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGNvbmZpZ2ZzIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZWRnZSBjYXNlcywgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIG9mIGEgc3ltYm9saWMgbGluayB3aXRoaW4gdGhpcyBmaWxlIHN5c3RlbS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0XHR9XG4gMjIxOlx0XG4gMjIyOlx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxuIDIyMzpcdFx0XHRyZXQgPSAtRUVYSVNUO1xuIDIyNDpcdFx0ZWxzZVxuIDIyNTpcdFx0XHRyZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcixcbiAyMjY6XHRcdFx0XHRcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gMjI3Olx0XHRpZiAoIXJldClcbiAyMjg6XHRcdFx0cmV0ID0gdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XG4gMjI5Olx0XHRpZiAoIXJldCkge1xuIDIzMDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuIDIzMTpcdFx0XHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XG4gMjMyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcbiAyMzM6XHRcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmspXG4gMjM0Olx0XHRcdFx0dHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2Vkcm9wX2xpbmsocGFyZW50X2l0ZW0sXG4gMjM1Olx0XHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gMjM2Olx0XHR9XG4gMjM3Olx0XG4gMjM4Olx0b3V0X3B1dDpcbiAyMzk6XHRcdGNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7XG4gMjQwOlx0XHRjb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pO1xuIDI0MTpcdFx0Y29uZmlnX2l0ZW1fcHV0KHJvb3RfaXRlbSk7XG4gMjQyOlx0XHRyZXR1cm4gcmV0O1xuIDI0MzpcdH1cbiAyNDQ6XHRcbiAyNDU6XHRpbnQgY29uZmlnZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gMjQ2Olx0e1xuIDI0NzpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QgPSBkZW50cnktXHUwMDNlZF9mc2RhdGEsICp0YXJnZXRfc2Q7XG4gMjQ4Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIDI0OTpcdFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XG4gMjUwOlx0XHRpbnQgcmV0O1xuIDI1MTpcdFxuIDI1MjpcdFx0cmV0ID0gLUVQRVJNOyAgLyogV2hhdCBsYWNrLW9mLXN5bWxpbmsgcmV0dXJucyAqL1xuIDI1MzpcdFx0aWYgKCEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19JVEVNX0xJTkspKVxuIDI1NDpcdFx0XHRnb3RvIG91dDtcbiAyNTU6XHRcbiAyNTY6XHRcdHRhcmdldF9zZCA9IHNkLVx1MDAzZXNfZWxlbWVudDtcbiAyNTc6XHRcbiAyNTg6XHRcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMjU5Olx0XHR0eXBlID0gcGFyZW50X2l0ZW0tXHUwMDNlY2lfdHlwZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzNQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiA2OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IENvbmZpZ0ZTIFN5bWxpbmsgUmFjZSBDb25kaXRpb24gRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmsoKWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGhhbmRsaW5nIHN5bWJvbGljIGxpbmtzIGluIGNvbmZpZ2ZzLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYSAmIzM0O3Jvb3QgaXRlbSwmIzM0OyB3aGljaCBzZWVtcyB0byBiZSBhbiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwLCBhbmQgdGhlIGlub2RlIGxvY2sgb24gdGhlIHBhcmVudCBkaXJlY3RvcnkuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiwgYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oKWAsIHRvIGNvcnJlY3RseSBwaW4gdGhlIHJvb3QgaXRlbSwgZW5zdXJpbmcgaXQgZG9lc24mIzM5O3QgZGlzYXBwZWFyIG91dCBmcm9tIHVuZGVyIHVzLiBXaXRoaW4gYGNvbmZpZ2ZzX3N5bWxpbmsoKWAsIGByb290X2l0ZW1gIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5VTExgLiBUaGUgY29kZSB0aGVuIHJldHJpZXZlcyB0aGUgYHJvb3RfaXRlbWAgaWYgYSBjZXJ0YWluIGZsYWcgaXMgc2V0IGFuZCwgY3J1Y2lhbGx5LCByZWxlYXNlcyBhbmQgcmUtYWNxdWlyZXMgdGhlIGlub2RlIGxvY2suICBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgY2hlY2tzIGFmdGVyIHJlLWFjcXVpcmluZyB0aGUgbG9jazogYHNkLSZndDtzX2ZyYWctJmd0O2ZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHwgZF91bmhhc2hlZChkZW50cnktJmd0O2RfcGFyZW50KWAuIFRoaXMgaXMgdGhlcmUgdG8gY29uZmlybSB0aGUgcGFyZW50IGRpcmVjdG9yeSBoYXNuJiMzOTt0IHZhbmlzaGVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQuICBGaW5hbGx5LCB0aGUgY2xlYW4tdXAgc2VjdGlvbiBuZWF0bHkgY29uc29saWRhdGVzIHRoZSBgY29uZmlnX2l0ZW1fcHV0KClgIGNhbGxzIGZvciBgdGFyZ2V0X2l0ZW1gLCBgcGFyZW50X2l0ZW1gLCBhbmQgbm93LCBgcm9vdF9pdGVtYC4KClNvLCB0aGUgaW50ZW50IGlzIGNsZWFyOiBwcm90ZWN0IGFnYWluc3QgYSBzY2VuYXJpbyB3aGVyZSB0aGUgYHBhcmVudF9pdGVtYCAodGhlIGRlZmF1bHQgZ3JvdXApIGdldHMgZnJlZWQgKmR1cmluZyogdGhlIHRhcmdldCByZXNvbHV0aW9uLCBsZWFkaW5nIHRvIGEgVUFGIG9yIHJhY2UuIEl0JiMzOTtzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgYHJvb3RfaXRlbWAgc3RheXMgdmFsaWQuCgpOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBJIG5lZWQgdG8gbG9vayBmb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIFdlIGhhdmUgdG8gY29uc2lkZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBpbmZvIGxlYWtzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLiBJIHNlZSB0aGF0IGByb290X2l0ZW1gIGFuZCBgdGFyZ2V0X2l0ZW1gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYC4gIFRoZXJlJiMzOTtzIG5vIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGhlcmUsIGFuZCB0aGUgZGF0YSBidWZmZXIgbGVuZ3RocyBhcmUgdW5hbHRlcmVkLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgb3IgcGFzc2VkIGFyb3VuZC4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd2lsbCBsaWtlbHkgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCBVQUYsIG9yIHJhY2UgY29uZGl0aW9ucy4KCkdpdmVuIGFsbCBvZiB0aGF0LCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyByaXNrcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcy4gIFdlIGFyZSBoYW5kbGluZyB0aGUgcmFjZSBjb3JyZWN0bHksIGJ1dCB0aGF0IGlzIGhhbmRsZWQgYnkgb3RoZXIga2VybmVsIGZlYXR1cmVzLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGlzIGEgbGlmZXRpbWUgYW5kIHJhY2UgY29uZGl0aW9uIGZpeCwgYW5kIGRvZXNuJiMzOTt0IG1lc3Mgd2l0aCBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIEkgYW0gY29uZmlkZW50IGluIGNvbmNsdWRpbmcgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQgaXMgcHVyZWx5IGEgS0FTQU4sIExPQ0tERVAsIGFuZCBLQ1NBTiByZWxldmFudCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gY29uZmlnZnNfc3ltbGluaygpIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnX2l0ZW0gZm9yIGRlZmF1bHQgZ3JvdXBzIGFuZCBjaGVja2luZyBmb3IgZGlyZWN0b3J5IGRlbGV0aW9uIChmcmFnX2RlYWQsIElTX0RFQURESVIsIGRfdW5oYXNoZWQpIGFmdGVyIHRlbXBvcmFyaWx5IHVubG9ja2luZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgZHVyaW5nIHRhcmdldCByZXNvbHV0aW9uLlxuXG5UaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHByZXZlbnRpb24gZml4LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG5vIGNvcHlfdG9fdXNlciBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gY29uZmlnZnNfc3ltbGluaygpIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnX2l0ZW0gZm9yIGRlZmF1bHQgZ3JvdXBzIGFuZCBjaGVja2luZyBmb3IgZGlyZWN0b3J5IGRlbGV0aW9uIChmcmFnX2RlYWQsIElTX0RFQURESVIsIGRfdW5oYXNoZWQpIGFmdGVyIHRlbXBvcmFyaWx5IHVubG9ja2luZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgZHVyaW5nIHRhcmdldCByZXNvbHV0aW9uLlxuXG5UaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHByZXZlbnRpb24gZml4LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG5vIGNvcHlfdG9fdXNlciBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6MTUuNTEzMzM4MTM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA2OTk1NTQ0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCIsXG4gICAgXCJjb25maWdmc19nZXRfcm9vdF9pdGVtXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGluIGNvbmZpZ2ZzX3N5bWxpbmsoKSBieSBwaW5uaW5nIHRoZSByb290IGNvbmZpZ19pdGVtIGZvciBkZWZhdWx0IGdyb3VwcyBhbmQgY2hlY2tpbmcgZm9yIGRpcmVjdG9yeSBkZWxldGlvbiAoZnJhZ19kZWFkLCBJU19ERUFERElSLCBkX3VuaGFzaGVkKSBhZnRlciB0ZW1wb3JhcmlseSB1bmxvY2tpbmcgdGhlIGRpcmVjdG9yeSBpbm9kZSBsb2NrIGR1cmluZyB0YXJnZXQgcmVzb2x1dGlvbi5cXG5cXG5UaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIHByZXZlbnRpb24gZml4LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCByZWZlcmVuY2UgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG5vIGNvcHlfdG9fdXNlciBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgcm9vdCBvYmplY3Qgb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGRlYWQgZGlyZWN0b3JpZXMvZnJhZ21lbnRzIGFjcm9zcyB0ZW1wb3JhcnkgbG9jayBkcm9wcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgVkZTL3BzZXVkby1maWxlc3lzdGVtIGxvZ2ljIGhhbmRsaW5nIHN5bWxpbmsgb3BlcmF0aW9ucyBpbiBjb25maWdmcywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5L3JhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6MTUuNTEzMzQzMTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDk1NzAxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNjBlYTc0YmI5ZDk3MTk4NTM3MzBjMmQ5YjI1MjE5OTI3ZDQ1M2FlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTY6MjM6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXFxuaW5kZXggMzFlYjI4YjI3MzA5MS4uYTAwZjI3Yzg5MTAwYSAxMDA2NDRcXG4tLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmNcXG4rKysgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcXG5AQCAtMTMxLDYgKzEzMSwxOSBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuK3tcXG4rXFx0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XFxuK1xcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbitcXG4rXFx0d2hpbGUgKCFJU19ST09UKHJvb3RfZGVudHJ5KSkge1xcbitcXHRcXHRzZCA9IHJvb3RfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4rXFx0XFx0aWYgKCFzZCB8fCAhKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShyb290X2RlbnRyeSk7XFxuK31cXG4gXFxuIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuQEAgLTEzOSw2ICsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcXG4rXFx0c3RydWN0IGNvbmZpZ19pdGVtICpyb290X2l0ZW0gPSBOVUxMO1xcbiBcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gXFxuIFxcdHNkID0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudC1cXHUwMDNlZF9mc2RhdGE7XFxuQEAgLTE1Nyw2ICsxNzEsMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cXG4rXFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXFxuK1xcdCAqL1xcbitcXHRpZiAoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xcbitcXHRcXHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbitcXHRcXHRpZiAoIXJvb3RfaXRlbSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXFxuIFxcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXFxuQEAgLTE4Nyw2ICsyMTMsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbitcXHRpZiAoc2QtXFx1MDAzZXNfZnJhZy1cXHUwMDNlZnJhZ19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fFxcbitcXHQgICAgZF91bmhhc2hlZChkZW50cnktXFx1MDAzZWRfcGFyZW50KSkge1xcbitcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxcbiBcXHRcXHRyZXQgPSAtRUVYSVNUO1xcbiBcXHRlbHNlXFxuQEAgLTIwMywxMCArMjM1LDEwIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0YXJnZXRfaXRlbSk7XFxuIFxcdH1cXG4gXFxuLVxcdGNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7XFxuLVxcbiBvdXRfcHV0OlxcbitcXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xcbiBcXHRjb25maWdfaXRlbV9wdXQocGFyZW50X2l0ZW0pO1xcbitcXHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6MTUuOTIzNjAzMjM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NDY4NTYxNDE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmZpZ2ZzX3N5bWxpbmtcIixcbiAgICBcImNvbmZpZ2ZzX2dldF9yb290X2l0ZW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgcm9vdCBvYmplY3Qgb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGRlYWQgZGlyZWN0b3JpZXMvZnJhZ21lbnRzIGFjcm9zcyB0ZW1wb3JhcnkgbG9jayBkcm9wcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgVkZTL3BzZXVkby1maWxlc3lzdGVtIGxvZ2ljIGhhbmRsaW5nIHN5bWxpbmsgb3BlcmF0aW9ucyBpbiBjb25maWdmcywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5L3JhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjBlYTc0YmI5ZDk3MTk4NTM3MzBjMmQ5YjI1MjE5OTI3ZDQ1M2FlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNjoyMzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uYTAwZjI3Yzg5MTAwYSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDYgKzEzMSwxOSBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKnJvb3RfZGVudHJ5ID0gZGVudHJ5O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4rXG4rXHR3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7XG4rXHRcdHNkID0gcm9vdF9kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRcdGlmICghc2QgfHwgIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHJvb3RfZGVudHJ5ID0gcm9vdF9kZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4rXHR9XG4rXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTtcbit9XG4gXG4gaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcbkBAIC0xMzksNiArMTUyLDcgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XG4rXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XG4gXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiBcbiBcdHNkID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuQEAgLTE1Nyw2ICsxNzEsMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0ICAgICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmspXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcbitcdC8qXG4rXHQgKiBQaW4gdGhlIHJvb3Qgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbitcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxuK1x0ICovXG4rXHRpZiAoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcbitcdFx0cm9vdF9pdGVtID0gY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuK1x0XHRpZiAoIXJvb3RfaXRlbSkge1xuK1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdFx0Z290byBvdXRfcHV0O1xuK1x0XHR9XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXG4gXHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxuQEAgLTE4Nyw2ICsyMTMsMTIgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0aWYgKHNkLVx1MDAzZXNfZnJhZy1cdTAwM2VmcmFnX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XG4rXHQgICAgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpKSB7XG4rXHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcdH1cbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gXHRlbHNlXG5AQCAtMjAzLDEwICsyMzUsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdCAgICAgdGFyZ2V0X2l0ZW0pO1xuIFx0fVxuIFxuLVx0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbi1cbiBvdXRfcHV0OlxuK1x0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbiBcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XG4rXHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6MTUuOTIzNjA0ODM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEwNzk0NTEzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXRjaCBpcyBldmVuIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBzeXprYWxsZXIuIFRoZSBkaWZmIGlzIHRvdWNoaW5nIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb25maWdmc19zeW1saW5rYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2VzIEkgc2VlIGFyZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCwgcGlubmluZyB0aGUgcm9vdCBvYmplY3QsIHNvbWUgbmV3IGVycm9yIGNoZWNrcyByZWxhdGVkIHRvIHRoZSBkaXJlY3RvcnkncyBzdGF0ZSAoYGZyYWdfZGVhZGAsIGBJU19ERUFERElSYCwgYGRfdW5oYXNoZWRgKSwgYW5kIGEgcmVhcnJhbmdlbWVudC9pbXByb3ZlbWVudCBvZiBjbGVhbnVwIHdpdGggdGhlIGBjb25maWdfaXRlbV9wdXRgIGNhbGxzLlxuXG5Ob3csIGlzIHRoaXMgY29kZSByZWFjaGFibGU/IEFic29sdXRlbHkuIGBjb25maWdmc2AgaXMgYSB3ZWxsLWtub3duIHZpcnR1YWwgZmlsZXN5c3RlbS4gVGhhdCBtZWFucyBpdOKAmXMgZXhwb3NlZCB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2UgYHN5bWxpbmtgLCBgc3ltbGlua2F0YCwgYG1vdW50YCwgYW5kIGBta2RpcmAuIFN5emthbGxlciBhbHJlYWR5IGhpdHMgdGhpcyBmaWxlc3lzdGVtIHByZXR0eSBoYXJkLCBzbyB0aGF04oCZcyBhIGdvb2Qgc2lnbi4gVGhlIG5ldyBjYWxscyB0byBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNoZWNrcyBhbmQgY2xlYW51cCwgKmNvdWxkKiBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgb3IgcG90ZW50aWFsIGlzc3VlcyB0aGF0IHN5emthbGxlciBjb3VsZCB1bmNvdmVyLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG9iamVjdCBsaWZldGltZSBhbmQgZXJyb3IgaGFuZGxpbmcuIFNvLCBpdCdzIHZlcnkgcHJvbWlzaW5nLlxuXG5UbyBjb25maXJtIHRoaXMgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGNvbmZpZ2ZzYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBmcy9jb25maWdmcy9LY29uZmlnYCBvciBgZnMvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIHNldHRpbmdzIGFyZSwgdXNpbmcgZWl0aGVyIGBncmVwcGVyYCBvciBqdXN0IHF1aWNrbHkgcmVhZGluZyB0aGUgcmVsZXZhbnQgZmlsZXMuIEdvdHRhIG1ha2Ugc3VyZSBpdOKAmXMgZXZlbiBjb25maWd1cmVkIGluIGFueSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjM6NTcuMDAzMDU5MzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzM4NzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT01Nz1vYmotJChDT05GSUdfU1lTRlMpXFx0XFx0Kz0gc3lzZnMvXFxuZnMvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVxcdCs9IGNvbmZpZ2ZzL1xcbmZzL01ha2VmaWxlLTU5LW9iai15XFx0XFx0XFx0XFx0Kz0gZGV2cHRzL1xcbi0tXFxuZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNS1cXG5mcy9jb25maWdmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DT05GSUdGU19GUylcXHQrPSBjb25maWdmcy5vXFxuZnMvY29uZmlnZnMvTWFrZWZpbGUtNy1cXG4tLVxcbmZzL2RsbS9LY29uZmlnPTI9bWVudWNvbmZpZyBETE1cXG4tLVxcbmZzL2RsbS9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBJTkVUXFxuZnMvZGxtL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvZGxtL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9nZnMyL0tjb25maWc9Mjc9Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cXG4tLVxcbmZzL2dmczIvS2NvbmZpZy0yOS1cXHRkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSBcXHUwMDI2XFx1MDAyNiBORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuZnMvZ2ZzMi9LY29uZmlnOjMwOlxcdFxcdENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IChETE09eSB8fCBETE09R0ZTMl9GUylcXG5mcy9nZnMyL0tjb25maWctMzEtXFx0aGVscFxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5mcy9vY2ZzMi9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy01LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyMzo1Ny4wNzU4MDM5MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjE2Mjk0NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlnRlMgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBmcy9jb25maWdmcy9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIENvbmZpZ0ZTLiBHaXZlbiBpdHMgcm9sZSBhcyBhIGZpbGVzeXN0ZW0gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiwgSSBleHBlY3QgdG8gc2VlIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgc2V0IG9mIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3Iga2V5IHRoaW5nczpcblxuKiAgICoqTWFpbiBDb25maWd1cmF0aW9uIFN5bWJvbDoqKiBGaXJzdCwgSSdsbCBpZGVudGlmeSB0aGUgbWFpbiBzeW1ib2wgdGhhdCBlbmFibGVzIENvbmZpZ0ZTIGl0c2VsZi4gVGhpcyB3aWxsIGxpa2VseSBiZSBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0NPTkZJR0ZTYCBvciBzaW1pbGFyLiBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgZ3JvayBpdHMgZGVmYXVsdCB2YWx1ZSwgaGVscCB0ZXh0LCBhbmQgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgKGxpa2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQpLlxuKiAgICoqTW9kdWxlLW5lc3M6KiogRG9lcyBpdCBoYXZlIGEgbW9kdWxhciBvcHRpb24/IFRoYXQncyBhIGNydWNpYWwgZGVjaXNpb24uIElmIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGJ1aWxkaW5nIGl0IGFzIGEgbW9kdWxlIHZlcnN1cyBidWlsdC1pbi4gVGhpcyBpbXBhY3RzIGJvb3QgcHJvY2VzcyBhbmQgcG90ZW50aWFsIHRyb3VibGVzaG9vdGluZy4gVGhlIHRyYWRlLW9mZnMgYXJlIGltcG9ydGFudCBhbmQgcHJvYmFibHkgZGVzY3JpYmVkIGluIHRoZSBoZWxwIHRleHQuXG4qICAgKipTdWItb3B0aW9uczoqKiBOZXh0LCBJJ2xsIGxvb2sgZm9yIGFueSBzdWItb3B0aW9ucyB3aXRoaW4gQ29uZmlnRlMuIFRoZXNlIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMgb3IgZmVhdHVyZXMgb2YgQ29uZmlnRlMuIEZvciBleGFtcGxlLCBhcmUgdGhlcmUgc2V0dGluZ3MgcmVsYXRlZCB0byBzZWN1cml0eSBhdHRyaWJ1dGVzLCBmaWxlIHBlcm1pc3Npb25zLCBvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9iamVjdCB0eXBlcz8gVW5kZXJzdGFuZGluZyB0aGVzZSBvcHRpb25zIGFsbG93cyBmb3IgdGFpbG9yaW5nIHRoZSBmZWF0dXJlIHNldC5cbiogICAqKkRlcGVuZGVuY2llcyBhbmQgUmVsYXRpb25zaGlwczoqKiBJJ2xsIG1ldGljdWxvdXNseSBjaGVjayBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLiBDb25maWdGUyBsaWtlbHkgcmVsaWVzIG9uIGNvcmUgVkZTIGVsZW1lbnRzLCBwb3RlbnRpYWxseSBvbiBzZWN1cml0eSBmcmFtZXdvcmtzIGxpa2UgU0VMaW51eCBvciBBcHBBcm1vciwgb3Igb3RoZXIgc3RvcmFnZS1yZWxhdGVkIGNvbXBvbmVudHMuIFRoZXNlIGRlcGVuZGVuY2llcyBhcmUgY3J1Y2lhbCBmb3IgcHJvcGVyIGZ1bmN0aW9uYWxpdHkgYW5kIHdpbGwgc2hvdyB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIGltcGFjdGVkIGJ5IGFueSBjaGFuZ2VzIHRvIENvbmZpZ0ZTIHNldHRpbmdzLlxuKiAgICoqSGVscCBUZXh0IEFuYWx5c2lzOioqIFRoZSBoZWxwIHRleHQgaXMsIGFzIGFsd2F5cywgY3J1Y2lhbC4gSSBuZWVkIHRvIHF1aWNrbHkgZXh0cmFjdCB0aGUgY29yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGVhY2ggb3B0aW9uICpkb2VzKiwgd2h5IHlvdSdkIGVuYWJsZSBpdCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVhY2ggc2V0dGluZy4gSSdtIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwZXJmb3JtYW5jZSwgbGltaXRhdGlvbnMsIG9yIGJlc3QgcHJhY3RpY2VzLlxuKiAgICoqRGVmYXVsdHMgYW5kIFRyaWdnZXJzOioqIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgaW1wb3J0YW50LiBBcmUgdGhleSBzZW5zaWJsZSBkZWZhdWx0cyB0aGF0IHdvcmsgd2VsbCBcIm91dCBvZiB0aGUgYm94XCIsIG9yIGFyZSB0aGV5IGRlcGVuZGVudCBvbiBvdGhlciBzZXR0aW5ncz8gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgaG93IHRob3NlIGRlZmF1bHRzIGFmZmVjdCB0aGUgc3lzdGVtLlxuKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0czoqKiBJJ2xsIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbmZsaWN0cyBiZXR3ZWVuIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgbXV0dWFsbHkgZXhjbHVzaXZlIHNldHRpbmdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGNyZWF0ZSBwcm9ibGVtcyBpZiBlbmFibGVkL2Rpc2FibGVkIGF0IHRoZSBzYW1lIHRpbWU/XG4qICAgKipBbnkgQXJjaGl0ZWN0dXJlL1BsYXRmb3JtIENvbnNpZGVyYXRpb25zOioqIEFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMgb3IgY29uZGl0aW9uYWwgYmxvY2tzPyBDb25maWdGUywgbGlrZSBhbGwga2VybmVsIGNvbXBvbmVudHMsIG5lZWRzIHRvIGJlIGFzIGdlbmVyaWMgYXMgcG9zc2libGUsIGJ1dCBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzIG9mdGVuIGhhdmUgc3BlY2lmaWMgbmVlZHMuIEknbGwgbWFrZSBub3RlIG9mIGFueXRoaW5nIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuXG5cbkJ5IHRoZSBlbmQgb2YgdGhpcywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiBDb25maWdGUydzIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGl0cyByb2xlIGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIG1ha2luZyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBjaG9pY2VzLiBUaGlzIGtub3dsZWRnZSB3aWxsIGJlIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgb3B0aW1pemluZywgb3IgcG90ZW50aWFsbHkgZXh0ZW5kaW5nIENvbmZpZ0ZTIGluIHRoZSBmdXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDowMS4yOTIxMDAzMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQ09ORklHRlNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdGhlbHBcXG4gICA1OlxcdFxcdCAgY29uZmlnZnMgaXMgYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZVxcbiAgIDY6XFx0XFx0ICBvZiBzeXNmcydzIGZ1bmN0aW9uYWxpdHkuIFdoZXJlIHN5c2ZzIGlzIGEgZmlsZXN5c3RlbS1iYXNlZFxcbiAgIDc6XFx0XFx0ICB2aWV3IG9mIGtlcm5lbCBvYmplY3RzLCBjb25maWdmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWQgbWFuYWdlclxcbiAgIDg6XFx0XFx0ICBvZiBrZXJuZWwgb2JqZWN0cywgb3IgY29uZmlnX2l0ZW1zLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIEJvdGggc3lzZnMgYW5kIGNvbmZpZ2ZzIGNhbiBhbmQgc2hvdWxkIGV4aXN0IHRvZ2V0aGVyIG9uIHRoZVxcbiAgMTE6XFx0XFx0ICBzYW1lIHN5c3RlbS4gT25lIGlzIG5vdCBhIHJlcGxhY2VtZW50IGZvciB0aGUgb3RoZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjAxLjI5MjE1MjQyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzkwNDM2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU3ltbGluayBTaGVuYW5pZ2FucyBpbiBjb25maWdmcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlc2Ugc3ltbGlua3MgaW4gYGNvbmZpZ2ZzYCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyB6ZXJvIGluIG9uIHRoZSBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgY2hlY2sgb3V0IHRoZSBmdWxsIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGBjb25maWdmc19zeW1saW5rYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMga2V5IGZvciBjcmVhdGluZyB0aG9zZSB2aXJ0dWFsIHN5bWxpbmtzIHdpdGhpbiB0aGUgY29uZmlnZnMgaGllcmFyY2h5LCBzbyBieSB1bmRlcnN0YW5kaW5nIGl0cyBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIGhvdyBpdCdzIGNhbGxlZCwgd2hhdCBpdCdzIHBhc3NlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHdpbGwgYmUgY3J1Y2lhbCB0byB3aGF0IEknbSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDowMy4xNzExOTkzODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMjY6XFx0XFx0aWYgKHBhdGguZGVudHJ5LVxcdTAwM2VkX3NiICE9IHNiKVxcbiAxMjc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gMTI4OlxcdFxcdCp0YXJnZXQgPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocGF0aC5kZW50cnkpO1xcbiAxMjk6XFx0XFx0aWYgKCEqdGFyZ2V0KVxcbiAxMzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDEzMTpcXHRcXHRyZXR1cm4gMDtcXG4gMTMyOlxcdH1cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcXG4gMTM3OlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHR3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7XFxuIDE0MDpcXHRcXHRcXHRzZCA9IHJvb3RfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTQxOlxcdFxcdFxcdGlmICghc2QgfHwgIShzZC1cXHUwMDNlc190eXBlIFxcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcXG4gMTQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDM6XFx0XFx0XFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuIDE0NDpcXHRcXHR9XFxuIDE0NTpcXHRcXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAxNDk6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIDE1MDpcXHR7XFxuIDE1MTpcXHRcXHRpbnQgcmV0O1xcbiAxNTI6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDE1MzpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiAxNTQ6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XFxuIDE1NjpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTU5OlxcdFxcdC8qXFxuIDE2MDpcXHRcXHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxcbiAxNjE6XFx0XFx0ICogYmVpbmcgYXR0YWNoZWRcXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxcbiAxNjQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAxNjc6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZXQgPSAtRVBFUk07XFxuIDE3MDpcXHRcXHRpZiAoIXR5cGUgfHwgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzIHx8XFxuIDE3MTpcXHRcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiAxNzI6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQvKlxcbiAxNzU6XFx0XFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuIDE3NjpcXHRcXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cXG4gMTc3OlxcdFxcdCAqL1xcbiAxNzg6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcXG4gMTc5OlxcdFxcdFxcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE4MDpcXHRcXHRcXHRpZiAoIXJvb3RfaXRlbSkge1xcbiAxODE6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMTgyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMTgzOlxcdFxcdFxcdH1cXG4gMTg0OlxcdFxcdH1cXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0LypcXG4gMTg3OlxcdFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiAxODg6XFx0XFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcXG4gMTg5OlxcdFxcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCd2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcXG4gMTkwOlxcdFxcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJ3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxcbiAxOTE6XFx0XFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cXG4gMTkyOlxcdFxcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxcbiAxOTM6XFx0XFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XFxuIDE5NDpcXHRcXHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxcbiAxOTU6XFx0XFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxcbiAxOTY6XFx0XFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXFxuIDE5NzpcXHRcXHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXFxuIDE5ODpcXHRcXHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxcbiAxOTk6XFx0XFx0ICpcXG4gMjAwOlxcdFxcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCd2ZVxcbiAyMDE6XFx0XFx0ICogc2FpZCBcXFwibm9cXFwiIGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXFxuIDIwMjpcXHRcXHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXFxuIDIwMzpcXHRcXHQgKlxcbiAyMDQ6XFx0XFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcXG4gMjA1OlxcdFxcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXFxuIDIwNjpcXHRcXHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XFxuIDIwNzpcXHRcXHQgKlxcbiAyMDg6XFx0XFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxcbiAyMDk6XFx0XFx0ICovXFxuIDIxMDpcXHRcXHRpbm9kZV91bmxvY2soZGlyKTtcXG4gMjExOlxcdFxcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXFx1MDAzZWRfc2IpO1xcbiAyMTI6XFx0XFx0aW5vZGVfbG9jayhkaXIpO1xcbiAyMTM6XFx0XFx0aWYgKHJldClcXG4gMjE0OlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX2ZyYWctXFx1MDAzZWZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcXG4gMjE3OlxcdFxcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpKSB7XFxuIDIxODpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiAyMTk6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAyMjA6XFx0XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRcXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSlcXG4gMjIzOlxcdFxcdFxcdHJldCA9IC1FRVhJU1Q7XFxuIDIyNDpcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjAzLjE3MTI4MTMxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NzU4NTI0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgaXMgXCJXb3J0aEZ1enppbmdcIiBhIHZhbGlkIGFzc2Vzc21lbnQ/IEFic29sdXRlbHkuIENvbmZpZ2ZzLCBiZWluZyBhIHVzZXItYWNjZXNzaWJsZSB2aXJ0dWFsIGZpbGVzeXN0ZW0sIG1lYW5zIHRoYXQgYGNvbmZpZ2ZzX3N5bWxpbmtgIC0gYSBzcGVjaWZpYyBWRlMgZW50cnlwb2ludCBmb3IgY3JlYXRpbmcgc3ltbGlua3Mgd2l0aGluIGNvbmZpZ2ZzIC0gaXMgZGVmaW5pdGVseSBpbiBwbGF5LiBUaGUgcGF0Y2ggdGFyZ2V0cyByZWZlcmVuY2UgY291bnRpbmcsIHBpbm5pbmcsIGFuZCB2YWxpZGl0eSBjaGVja3MgYWZ0ZXIgcmUtbG9ja2luZyB0aGUgZGlyZWN0b3J5IChgZGlyYCkgaW4gZnVuY3Rpb25zIGxpa2UgYGNvbmZpZ2ZzX2dldF9yb290X2l0ZW1gIGFuZCBgY29uZmlnZnNfc3ltbGlua2AsIHdoaWNoIHNjcmVhbXMgcmFjZSBjb25kaXRpb24gdGVycml0b3J5LiBGdXp6aW5nIHdpdGggY29uY3VycmVudCBzeW1saW5rIGFuZCBybWRpciBvcGVyYXRpb25zIHNlZW1zIGxpa2UgYSBkaXJlY3Qgcm91dGUgdG8gZXhwb3NlIHRob3NlIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZGVhZGxvY2ssIG9yIHJhY2UgY29uZGl0aW9ucy4gU29saWQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgdGhlIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmUgYGNvbmZpZ2ZzX3N5bWxpbmtgLCBuYXR1cmFsbHkuIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCBpcyBtYXJrZWQgYXMgc3RhdGljLCBidXQgd2UgaGF2ZSB0byBzZWUgaWYgaXQgbWlnaHQgYmUgaW5saW5lZC4gRXZlbiBpZiBzbywgdGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byB0YXJnZXQuIEdpdmVuIHRoZSBjb250ZXh0LCB3ZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGJvdGggYGNvbmZpZ2ZzX3N5bWxpbmtgIGFuZCBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbWAuIFdlIHNob3VsZCBkb3VibGUtY2hlY2sgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AganVzdCB0byBiZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxldmFudCBzeW1saW5rLXJlbGF0ZWQgc3ltYm9scyBvciBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgd2VsbC4gQSBxdWljayBzY2FuIHdpbGwgY29uZmlybSBpZiBgY29uZmlnZnNfc3ltbGlua2AgaXMgdGhlIHByaW1hcnkgZW50cnkgb3IgaWYgd2UgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIG9mIGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjQ6MDcuMTQ3MTM2NzQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI2NjIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jLTE5LS8qIFByb3RlY3RzIGF0dGFjaG1lbnRzIG9mIG5ldyBzeW1saW5rcyAqL1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMDpERUZJTkVfTVVURVgoY29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyMjpzdGF0aWMgaW50IGl0ZW1fZGVwdGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSlcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjMte1xcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI5LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzozMDpzdGF0aWMgaW50IGl0ZW1fcGF0aF9sZW5ndGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSlcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMzEte1xcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTQwLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo0MTpzdGF0aWMgdm9pZCBmaWxsX2l0ZW1fcGF0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtLCBjaGFyICogYnVmZmVyLCBpbnQgbGVuZ3RoKVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy00Mi17XFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNTUtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjU2OnN0YXRpYyBpbnQgY29uZmlnZnNfZ2V0X3RhcmdldF9wYXRoKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNTctXFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXQsIGNoYXIgKnBhdGgpXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNzYtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjc3OnN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSxcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNzgtXFx0XFx0ICAgICAgIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMTYtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjExNzpzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMTgtXFx0XFx0ICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMzMtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjEzNDpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfcm9vdF9pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTM1LXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xNDctXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjE0ODppbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE0OS1cXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yNDQtXFxuZnMvY29uZmlnZnMvc3ltbGluay5jOjI0NTppbnQgY29uZmlnZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjA3LjE5MzQwOTg0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzM2Mzg1NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ0ZTIFN5bWxpbmsgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaGluZ2VzIG9uIHRoZSBgY29uZmlnZnNfc3ltbGlua2AgYW5kIGBjb25maWdmc19nZXRfcm9vdF9pdGVtYCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIHNwYWNlIHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY29uZmlnZnNgIGZpbGVzeXN0ZW0uXG5cbkZpcnN0LCBJIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdGU19GU2AgaXMgZW5hYmxlZC4gQSBxdWljayBjaGVjayBvZiBgZnMvY29uZmlnZnMvTWFrZWZpbGVgIGNvbmZpcm1zIHRoaXMgYW5kIHRoYXQgaXQgaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLiBHb29kLCBubyBzdXJwcmlzZXMgdGhlcmUuIE15IHNjYW4gZGlkbid0IHR1cm4gdXAgYW55ICpvdGhlciogaGlkZGVuIGNvbmZpZ3VyYXRpb24gcHJlcmVxdWlzaXRlcyBmb3IgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2Agd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24gYWdhaW5zdCBteSBlc3RhYmxpc2hlZCBjcml0ZXJpYTogSSd2ZSBnb3QgYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgYEVuYWJsZUNvbmZpZ3NgIGFzIGBbXCJDT05GSUdGU19GU1wiXWAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgcHJvcGVybHkgZGVmaW5lZCBhcyBgW1wiY29uZmlnZnNfc3ltbGlua1wiLCBcImNvbmZpZ2ZzX2dldF9yb290X2l0ZW1cIl1gLlxuXG5UaGUgcmVhc29uaW5nIEknbSB1c2luZyBpcyBzb2xpZCDigJMgdGhpcyBpcyBhIHJlYWNoYWJsZSBwc2V1ZG8tZmlsZXN5c3RlbSwgd2hpY2ggbWFrZXMgaXQgYW4gaWRlYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIHN1c3BlY3QgdGhlcmUgYXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gc3ltbGluay9ybWRpciBvcGVyYXRpb25zLCBhbmQgSSBzaG91bGQgZm9jdXMgb24gdGhlIHBpbm5pbmcgb2Ygcm9vdCBpdGVtcyBhbmQgbG9vayBmb3IgY2hlY2tzIHJlbGF0ZWQgdG8gZGVhZCBmcmFnIG9yIGRpcmVjdG9yeSBjb3JydXB0aW9uLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBwbGFuLlxuXG5UaW1lIHRvIGxvZyB0aGlzLiBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgYXNzZXNzbWVudCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY3OCwiT3V0cHV0VG9rZW5zIjoxMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjQ6MTAuNTI5Nzk3OTY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0MTU4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiLFxuICAgIFwiY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSByb290IG9iamVjdCBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgZGVhZCBkaXJlY3Rvcmllcy9mcmFnbWVudHMgYWNyb3NzIHRlbXBvcmFyeSBsb2NrIGRyb3BzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBWRlMvcHNldWRvLWZpbGVzeXN0ZW0gbG9naWMgaGFuZGxpbmcgc3ltbGluayBvcGVyYXRpb25zIGluIGNvbmZpZ2ZzLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiLFxuICAgIFwiY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSByb290IG9iamVjdCBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgZGVhZCBkaXJlY3Rvcmllcy9mcmFnbWVudHMgYWNyb3NzIHRlbXBvcmFyeSBsb2NrIGRyb3BzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBWRlMvcHNldWRvLWZpbGVzeXN0ZW0gbG9naWMgaGFuZGxpbmcgc3ltbGluayBvcGVyYXRpb25zIGluIGNvbmZpZ2ZzLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kvcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDoxMC42MDkyMjE2MTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAzNjU5NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjQ6MTAuNjA5NzExOTc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU2MDMxNjMyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gY29uZmlnZnNfc3ltbGluaygpIGJ5IHBpbm5pbmcgdGhlIHJvb3QgY29uZmlnX2l0ZW0gZm9yIGRlZmF1bHQgZ3JvdXBzIGFuZCBjaGVja2luZyBmb3IgZGlyZWN0b3J5IGRlbGV0aW9uIChmcmFnX2RlYWQsIElTX0RFQURESVIsIGRfdW5oYXNoZWQpIGFmdGVyIHRlbXBvcmFyaWx5IHVubG9ja2luZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgZHVyaW5nIHRhcmdldCByZXNvbHV0aW9uLlxcblxcblRoaXMgaXMgYSBjb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgKFVBRikgcHJldmVudGlvbiBmaXguIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMsIHJlZmVyZW5jZSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgbm8gY29weV90b191c2VyIHBhdGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA2MGVhNzRiYjlkOTcxOTg1MzczMGMyZDliMjUyMTk5MjdkNDUzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE2OjIzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5pbmRleCAzMWViMjhiMjczMDkxLi5hMDBmMjdjODkxMDBhIDEwMDY0NFxuLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jXG4rKysgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcbkBAIC0xMzEsNiArMTMxLDE5IEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqcm9vdF9kZW50cnkgPSBkZW50cnk7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbitcbitcdHdoaWxlICghSVNfUk9PVChyb290X2RlbnRyeSkpIHtcbitcdFx0c2QgPSByb290X2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbitcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbitcdFx0XHRicmVhaztcbitcdFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbitcdH1cbitcdHJldHVybiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocm9vdF9kZW50cnkpO1xuK31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuQEAgLTEzOSw2ICsxNTIsNyBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqcm9vdF9pdGVtID0gTlVMTDtcbiBcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIFxuIFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG5AQCAtMTU3LDYgKzE3MSwxOCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0LypcbitcdCAqIFBpbiB0aGUgcm9vdCBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuK1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4rXHQgKi9cbitcdGlmIChzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xuK1x0XHRyb290X2l0ZW0gPSBjb25maWdmc19nZXRfcm9vdF9pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4rXHRcdGlmICghcm9vdF9pdGVtKSB7XG4rXHRcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0XHRnb3RvIG91dF9wdXQ7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTg3LDYgKzIxMywxMiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4rXHRpZiAoc2QtXHUwMDNlc19mcmFnLVx1MDAzZWZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbitcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXRfcHV0O1xuK1x0fVxuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSlcbiBcdFx0cmV0ID0gLUVFWElTVDtcbiBcdGVsc2VcbkBAIC0yMDMsMTAgKzIzNSwxMCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gXHR9XG4gXG4tXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuLVxuIG91dF9wdXQ6XG4rXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuIFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbitcdGNvbmZpZ19pdGVtX3B1dChyb290X2l0ZW0pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDoxMC42MDk3MTQwMzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1ODY0MDMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IHBhdGNoOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBLTVNBTiB2cy4gS0FTQU4qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkRvIHdlIG5lZWQgdGhlIGhlYXZ5IGhhbW1lciBvZiBLTVNBTiBoZXJlLCBvciBjYW4gS0FTQU4gaGFuZGxlIGl0P1wiIExldCdzIGJyZWFrIGl0IGRvd24uXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRoZSBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoYXQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgZmlsZSBhbmQgdGhlIHNwZWNpZmljIGxpbmVzIHRoYXQgd2VyZSBtb2RpZmllZC4gSSdsbCBwcm9iYWJseSBzdGFydCBieSBqdXN0IHJlYWRpbmcgaXQgb3ZlciwgbGV0dGluZyBteSBleWUgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCBqdW1wcyBvdXQuIEkgbWlnaHQgZXZlbiB1c2UgYSB1dGlsaXR5LCBsaWtlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgdG8gcXVpY2tseSBmaW5kIHNwZWNpZmljIGtleXdvcmRzIG9yIHNlY3Rpb25zLiBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCBjaGFuZ2VkIGFuZCB3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTY6MjQ6MTUuOTY4MzU4NDk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHRzdHJ1Y3QgcGF0aCBwYXRoIF9fZnJlZShwYXRoX3B1dCkgPSB7fTtcXG4gMTIxOlxcdFxcdGludCByZXQ7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdHJldCA9IGtlcm5fcGF0aChzeW1uYW1lLCBMT09LVVBfRk9MTE9XfExPT0tVUF9ESVJFQ1RPUlksIFxcdTAwMjZwYXRoKTtcXG4gMTI0OlxcdFxcdGlmIChyZXQpXFxuIDEyNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMjY6XFx0XFx0aWYgKHBhdGguZGVudHJ5LVxcdTAwM2VkX3NiICE9IHNiKVxcbiAxMjc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gMTI4OlxcdFxcdCp0YXJnZXQgPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocGF0aC5kZW50cnkpO1xcbiAxMjk6XFx0XFx0aWYgKCEqdGFyZ2V0KVxcbiAxMzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDEzMTpcXHRcXHRyZXR1cm4gMDtcXG4gMTMyOlxcdH1cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSA9IGRlbnRyeTtcXG4gMTM3OlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHR3aGlsZSAoIUlTX1JPT1Qocm9vdF9kZW50cnkpKSB7XFxuIDE0MDpcXHRcXHRcXHRzZCA9IHJvb3RfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTQxOlxcdFxcdFxcdGlmICghc2QgfHwgIShzZC1cXHUwMDNlc190eXBlIFxcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcXG4gMTQyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDM6XFx0XFx0XFx0cm9vdF9kZW50cnkgPSByb290X2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQ7XFxuIDE0NDpcXHRcXHR9XFxuIDE0NTpcXHRcXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHJvb3RfZGVudHJ5KTtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAxNDk6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIDE1MDpcXHR7XFxuIDE1MTpcXHRcXHRpbnQgcmV0O1xcbiAxNTI6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDE1MzpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiAxNTQ6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnJvb3RfaXRlbSA9IE5VTEw7XFxuIDE1NjpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMTU3OlxcdFxcbiAxNTg6XFx0XFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTU5OlxcdFxcdC8qXFxuIDE2MDpcXHRcXHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxcbiAxNjE6XFx0XFx0ICogYmVpbmcgYXR0YWNoZWRcXG4gMTYyOlxcdFxcdCAqL1xcbiAxNjM6XFx0XFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxcbiAxNjQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAxNjc6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZXQgPSAtRVBFUk07XFxuIDE3MDpcXHRcXHRpZiAoIXR5cGUgfHwgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzIHx8XFxuIDE3MTpcXHRcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiAxNzI6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQvKlxcbiAxNzU6XFx0XFx0ICogUGluIHRoZSByb290IG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuIDE3NjpcXHRcXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cXG4gMTc3OlxcdFxcdCAqL1xcbiAxNzg6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcXG4gMTc5OlxcdFxcdFxcdHJvb3RfaXRlbSA9IGNvbmZpZ2ZzX2dldF9yb290X2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE4MDpcXHRcXHRcXHRpZiAoIXJvb3RfaXRlbSkge1xcbiAxODE6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMTgyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMTgzOlxcdFxcdFxcdH1cXG4gMTg0OlxcdFxcdH1cXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0LypcXG4gMTg3OlxcdFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiAxODg6XFx0XFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcXG4gMTg5OlxcdFxcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCd2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcXG4gMTkwOlxcdFxcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJ3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxcbiAxOTE6XFx0XFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cXG4gMTkyOlxcdFxcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxcbiAxOTM6XFx0XFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XFxuIDE5NDpcXHRcXHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxcbiAxOTU6XFx0XFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxcbiAxOTY6XFx0XFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXFxuIDE5NzpcXHRcXHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXFxuIDE5ODpcXHRcXHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxcbiAxOTk6XFx0XFx0ICpcXG4gMjAwOlxcdFxcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCd2ZVxcbiAyMDE6XFx0XFx0ICogc2FpZCBcXFwibm9cXFwiIGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXFxuIDIwMjpcXHRcXHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXFxuIDIwMzpcXHRcXHQgKlxcbiAyMDQ6XFx0XFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcXG4gMjA1OlxcdFxcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXFxuIDIwNjpcXHRcXHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XFxuIDIwNzpcXHRcXHQgKlxcbiAyMDg6XFx0XFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxcbiAyMDk6XFx0XFx0ICovXFxuIDIxMDpcXHRcXHRpbm9kZV91bmxvY2soZGlyKTtcXG4gMjExOlxcdFxcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXFx1MDAzZWRfc2IpO1xcbiAyMTI6XFx0XFx0aW5vZGVfbG9jayhkaXIpO1xcbiAyMTM6XFx0XFx0aWYgKHJldClcXG4gMjE0OlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX2ZyYWctXFx1MDAzZWZyYWdfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcXG4gMjE3OlxcdFxcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpKSB7XFxuIDIxODpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiAyMTk6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDoxNS45Njg1MTM1NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxMjM1MTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gY29uZmlnZnNfc3ltbGluayoqXG5cbk9rYXksIHNvIHdlJ3ZlIGxvb2tlZCBhdCB0aGUgc3VyZmFjZSBvZiB0aGlzIGBjb25maWdmc19zeW1saW5rYCBmdW5jdGlvbiwgYnV0IEkgbmVlZCB0byBnZXQgYSBtb3JlIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4gSSdtIG5vdCBqdXN0IGludGVyZXN0ZWQgaW4gdGhlIGJhc2ljIG1lY2hhbmljczsgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCdzIGJlaW5nIHVzZWQsIGluIHdoYXQgY29udGV4dHMsIGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgY29uZmlnZnMgYXJjaGl0ZWN0dXJlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGVkZ2UgY2FzZXMsIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBhbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBvZiBhIHN5bWJvbGljIGxpbmsgd2l0aGluIHRoaXMgZmlsZSBzeXN0ZW0uIExldCdzIGRlbHZlIGludG8gdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjE3Ljg4MDg2ODk2MloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXHR9XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdGlmIChkZW50cnktXFx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxcbiAyMjM6XFx0XFx0XFx0cmV0ID0gLUVFWElTVDtcXG4gMjI0OlxcdFxcdGVsc2VcXG4gMjI1OlxcdFxcdFxcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcixcXG4gMjI2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuIDIyNzpcXHRcXHRpZiAoIXJldClcXG4gMjI4OlxcdFxcdFxcdHJldCA9IHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSk7XFxuIDIyOTpcXHRcXHRpZiAoIXJldCkge1xcbiAyMzA6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuIDIzMTpcXHRcXHRcXHRyZXQgPSBjcmVhdGVfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0sIGRlbnRyeSk7XFxuIDIzMjpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbiAyMzM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiB0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlZHJvcF9saW5rKVxcbiAyMzQ6XFx0XFx0XFx0XFx0dHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWRyb3BfbGluayhwYXJlbnRfaXRlbSxcXG4gMjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdGFyZ2V0X2l0ZW0pO1xcbiAyMzY6XFx0XFx0fVxcbiAyMzc6XFx0XFxuIDIzODpcXHRvdXRfcHV0OlxcbiAyMzk6XFx0XFx0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcXG4gMjQwOlxcdFxcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XFxuIDI0MTpcXHRcXHRjb25maWdfaXRlbV9wdXQocm9vdF9pdGVtKTtcXG4gMjQyOlxcdFxcdHJldHVybiByZXQ7XFxuIDI0MzpcXHR9XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdGludCBjb25maWdmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkID0gZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSwgKnRhcmdldF9zZDtcXG4gMjQ4OlxcdFxcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XFxuIDI0OTpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMjUwOlxcdFxcdGludCByZXQ7XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdHJldCA9IC1FUEVSTTsgIC8qIFdoYXQgbGFjay1vZi1zeW1saW5rIHJldHVybnMgKi9cXG4gMjUzOlxcdFxcdGlmICghKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19JVEVNX0xJTkspKVxcbiAyNTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdHRhcmdldF9zZCA9IHNkLVxcdTAwM2VzX2VsZW1lbnQ7XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAyNTk6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNjoyNDoxNy44ODA5Nzc3NjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODMzMTg2Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQ29uZmlnRlMgU3ltbGluayBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgYGNvbmZpZ2ZzX3N5bWxpbmsoKWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGhhbmRsaW5nIHN5bWJvbGljIGxpbmtzIGluIGNvbmZpZ2ZzLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYSBcInJvb3QgaXRlbSxcIiB3aGljaCBzZWVtcyB0byBiZSBhbiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwLCBhbmQgdGhlIGlub2RlIGxvY2sgb24gdGhlIHBhcmVudCBkaXJlY3RvcnkuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uLCBgY29uZmlnZnNfZ2V0X3Jvb3RfaXRlbSgpYCwgdG8gY29ycmVjdGx5IHBpbiB0aGUgcm9vdCBpdGVtLCBlbnN1cmluZyBpdCBkb2Vzbid0IGRpc2FwcGVhciBvdXQgZnJvbSB1bmRlciB1cy4gV2l0aGluIGBjb25maWdmc19zeW1saW5rKClgLCBgcm9vdF9pdGVtYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYC4gVGhlIGNvZGUgdGhlbiByZXRyaWV2ZXMgdGhlIGByb290X2l0ZW1gIGlmIGEgY2VydGFpbiBmbGFnIGlzIHNldCBhbmQsIGNydWNpYWxseSwgcmVsZWFzZXMgYW5kIHJlLWFjcXVpcmVzIHRoZSBpbm9kZSBsb2NrLiAgVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNoZWNrcyBhZnRlciByZS1hY3F1aXJpbmcgdGhlIGxvY2s6IGBzZC1cdTAwM2VzX2ZyYWctXHUwMDNlZnJhZ19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fCBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudClgLiBUaGlzIGlzIHRoZXJlIHRvIGNvbmZpcm0gdGhlIHBhcmVudCBkaXJlY3RvcnkgaGFzbid0IHZhbmlzaGVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQuICBGaW5hbGx5LCB0aGUgY2xlYW4tdXAgc2VjdGlvbiBuZWF0bHkgY29uc29saWRhdGVzIHRoZSBgY29uZmlnX2l0ZW1fcHV0KClgIGNhbGxzIGZvciBgdGFyZ2V0X2l0ZW1gLCBgcGFyZW50X2l0ZW1gLCBhbmQgbm93LCBgcm9vdF9pdGVtYC5cblxuU28sIHRoZSBpbnRlbnQgaXMgY2xlYXI6IHByb3RlY3QgYWdhaW5zdCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBgcGFyZW50X2l0ZW1gICh0aGUgZGVmYXVsdCBncm91cCkgZ2V0cyBmcmVlZCAqZHVyaW5nKiB0aGUgdGFyZ2V0IHJlc29sdXRpb24sIGxlYWRpbmcgdG8gYSBVQUYgb3IgcmFjZS4gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIGByb290X2l0ZW1gIHN0YXlzIHZhbGlkLlxuXG5Ob3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBJIG5lZWQgdG8gbG9vayBmb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIFdlIGhhdmUgdG8gY29uc2lkZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBpbmZvIGxlYWtzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLiBJIHNlZSB0aGF0IGByb290X2l0ZW1gIGFuZCBgdGFyZ2V0X2l0ZW1gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYC4gIFRoZXJlJ3Mgbm8gY29weWluZyB0byB1c2Vyc3BhY2UgaGVyZSwgYW5kIHRoZSBkYXRhIGJ1ZmZlciBsZW5ndGhzIGFyZSB1bmFsdGVyZWQuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCBvciBwYXNzZWQgYXJvdW5kLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3aWxsIGxpa2VseSBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24sIFVBRiwgb3IgcmFjZSBjb25kaXRpb25zLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyByaXNrcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcy4gIFdlIGFyZSBoYW5kbGluZyB0aGUgcmFjZSBjb3JyZWN0bHksIGJ1dCB0aGF0IGlzIGhhbmRsZWQgYnkgb3RoZXIga2VybmVsIGZlYXR1cmVzLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoaXMgcGF0Y2ggaXMgYSBsaWZldGltZSBhbmQgcmFjZSBjb25kaXRpb24gZml4LCBhbmQgZG9lc24ndCBtZXNzIHdpdGggbWVtb3J5IGluaXRpYWxpemF0aW9uLCBJIGFtIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0IGlzIHB1cmVseSBhIEtBU0FOLCBMT0NLREVQLCBhbmQgS0NTQU4gcmVsZXZhbnQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM1LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE2OjI0OjI2LjIxMjg0ODk4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBjb25maWdmc19zeW1saW5rKCkgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWdfaXRlbSBmb3IgZGVmYXVsdCBncm91cHMgYW5kIGNoZWNraW5nIGZvciBkaXJlY3RvcnkgZGVsZXRpb24gKGZyYWdfZGVhZCwgSVNfREVBRERJUiwgZF91bmhhc2hlZCkgYWZ0ZXIgdGVtcG9yYXJpbHkgdW5sb2NraW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayBkdXJpbmcgdGFyZ2V0IHJlc29sdXRpb24uXFxuXFxuVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBwcmV2ZW50aW9uIGZpeC4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgcmVmZXJlbmNlIGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBubyBjb3B5X3RvX3VzZXIgcGF0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBjb25maWdmc19zeW1saW5rKCkgYnkgcGlubmluZyB0aGUgcm9vdCBjb25maWdfaXRlbSBmb3IgZGVmYXVsdCBncm91cHMgYW5kIGNoZWNraW5nIGZvciBkaXJlY3RvcnkgZGVsZXRpb24gKGZyYWdfZGVhZCwgSVNfREVBRERJUiwgZF91bmhhc2hlZCkgYWZ0ZXIgdGVtcG9yYXJpbHkgdW5sb2NraW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayBkdXJpbmcgdGFyZ2V0IHJlc29sdXRpb24uXFxuXFxuVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBwcmV2ZW50aW9uIGZpeC4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgcmVmZXJlbmNlIGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBubyBjb3B5X3RvX3VzZXIgcGF0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[1] Phase: Succeeded StartedAt: 2026-09-03 16:24:37 +0000 UTC FinishedAt: 2026-09-03 16:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 16:24:37 +0000 UTC FinishedAt: 2026-09-03 16:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2] Phase: Succeeded StartedAt: 2026-09-03 16:24:37 +0000 UTC FinishedAt: 2026-09-03 20:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 16:24:37 +0000 UTC FinishedAt: 2026-09-03 20:08:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 16:24:37 +0000 UTC FinishedAt: 2026-09-03 16:24:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 16:24:37 +0000 UTC FinishedAt: 2026-09-03 16:24:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5zzgl/series-workflow5zzgl-convert-artifact-1240904050/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 16:24:47 +0000 UTC FinishedAt: 2026-09-03 16:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 16:24:47 +0000 UTC FinishedAt: 2026-09-03 16:40:56 +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:*b6b129ab-dbfc-4071-b03f-d8f98c914797,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-workflow5zzgl/series-workflow5zzgl-convert-artifact-1240904050/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": "62a88fe5-eb2f-4005-9f0f-57162bf3615a", "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-workflow5zzgl/series-workflow5zzgl-build-action-3639097584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 16:24:47 +0000 UTC FinishedAt: 2026-09-03 16:40:46 +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:*b6b129ab-dbfc-4071-b03f-d8f98c914797,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-workflow5zzgl/series-workflow5zzgl-convert-artifact-1240904050/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": "62a88fe5-eb2f-4005-9f0f-57162bf3615a", "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-workflow5zzgl/series-workflow5zzgl-build-action-3639097584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 16:40:56 +0000 UTC FinishedAt: 2026-09-03 16:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 16:40:56 +0000 UTC FinishedAt: 2026-09-03 16:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 16:40:56 +0000 UTC FinishedAt: 2026-09-03 16:41:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 16:40:56 +0000 UTC FinishedAt: 2026-09-03 16:41:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5zzgl/series-workflow5zzgl-convert-artifact-3132522125/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 16:41:06 +0000 UTC FinishedAt: 2026-09-03 16:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 16:41:06 +0000 UTC FinishedAt: 2026-09-03 16:42:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62a88fe5-eb2f-4005-9f0f-57162bf3615a,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-workflow5zzgl/series-workflow5zzgl-build-action-3639097584/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-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 16:43:06 +0000 UTC FinishedAt: 2026-09-03 16:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 16:43:06 +0000 UTC FinishedAt: 2026-09-03 16:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 16:43:06 +0000 UTC FinishedAt: 2026-09-03 17:02:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 16:43:06 +0000 UTC FinishedAt: 2026-09-03 17:02:31 +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:*b6b129ab-dbfc-4071-b03f-d8f98c914797,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-workflow5zzgl/series-workflow5zzgl-convert-artifact-3132522125/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": "fbd1677e-4ed5-4ead-afbc-b463f5f89dc4", "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-workflow5zzgl/series-workflow5zzgl-build-action-1290210409/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 16:43:06 +0000 UTC FinishedAt: 2026-09-03 17:02:21 +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:*b6b129ab-dbfc-4071-b03f-d8f98c914797,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-workflow5zzgl/series-workflow5zzgl-convert-artifact-3132522125/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": "fbd1677e-4ed5-4ead-afbc-b463f5f89dc4", "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-workflow5zzgl/series-workflow5zzgl-build-action-1290210409/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 17:02:31 +0000 UTC FinishedAt: 2026-09-03 17:02:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 17:02:31 +0000 UTC FinishedAt: 2026-09-03 17:02:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 17:02:31 +0000 UTC FinishedAt: 2026-09-03 17:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 17:02:31 +0000 UTC FinishedAt: 2026-09-03 17:04:17 +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:*fbd1677e-4ed5-4ead-afbc-b463f5f89dc4,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-workflow5zzgl/series-workflow5zzgl-build-action-1290210409/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-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 17:04:27 +0000 UTC FinishedAt: 2026-09-03 20:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 17:04:27 +0000 UTC FinishedAt: 2026-09-03 20:08:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*62a88fe5-eb2f-4005-9f0f-57162bf3615a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fbd1677e-4ed5-4ead-afbc-b463f5f89dc4,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-workflow5zzgl/series-workflow5zzgl-build-action-3639097584/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-workflow5zzgl/series-workflow5zzgl-build-action-1290210409/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 17:04:27 +0000 UTC FinishedAt: 2026-09-03 17:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 17:04:27 +0000 UTC FinishedAt: 2026-09-03 17:04:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5zzgl/series-workflow5zzgl-convert-artifact-2009609074/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 17:04:27 +0000 UTC FinishedAt: 2026-09-03 17:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 17:04:27 +0000 UTC FinishedAt: 2026-09-03 17:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 17:04:27 +0000 UTC FinishedAt: 2026-09-03 17:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 17:04:37 +0000 UTC FinishedAt: 2026-09-03 20:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zzgl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink","configfs_get_root_item"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"24996432-c4e9-4bc6-bd77-92b87c3e1d29","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 17:04:37 +0000 UTC FinishedAt: 2026-09-03 20:08:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62a88fe5-eb2f-4005-9f0f-57162bf3615a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fbd1677e-4ed5-4ead-afbc-b463f5f89dc4,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-workflow5zzgl/series-workflow5zzgl-build-action-3639097584/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-workflow5zzgl/series-workflow5zzgl-build-action-1290210409/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-workflow5zzgl/series-workflow5zzgl-convert-artifact-2009609074/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,}