Name: series-workflow4thq7 Phase: Succeeded StartedAt: 2026-07-07 02:03:49 +0000 UTC FinishedAt: 2026-07-07 06:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[0] Phase: Succeeded StartedAt: 2026-07-07 02:03:49 +0000 UTC FinishedAt: 2026-07-07 02:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 02:03:49 +0000 UTC FinishedAt: 2026-07-07 02:29:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d009220c76e1af167492a8912b651e60316b2ca4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d009220c76e1af167492a8912b651e60316b2ca4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "4acae500-50b1-4cb5-9fd6-d09164017d89" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "allocinfo_ioctl", "allocinfo_compat_ioctl", "allocinfo_ioctl_get_content_id", "allocinfo_ioctl_get_at", "allocinfo_ioctl_get_next", "matches_filter", "codetag_get_content_id", "codetag_get_count" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2NvbXBhdF9pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2lvY3RsX2dldF9hdCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X25leHQmIzM0OywKICAgICYjMzQ7bWF0Y2hlc19maWx0ZXImIzM0OywKICAgICYjMzQ7Y29kZXRhZ19nZXRfY29udGVudF9pZCYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2dldF9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvY3RsIGludGVyZmFjZSBmb3IgYC9wcm9jL2FsbG9jaW5mb2AgdG8gYWxsb3cgc3RydWN0dXJlZCBiaW5hcnkgZGF0YSBleHRyYWN0aW9uIGFuZCBmaWx0ZXJpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGRhdGEuIFRoaXMgaXMgYSBuZXcgdXNlcnNwYWNlLWZhY2luZyBBUEkgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGludmFsaWQgaW5wdXRzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgY29uY3VycmVuY3kgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDI5MGVkODQ2ZjFkMTVjN2U0MWNjZjQ3OGZlZTY5NjAyMTVhNGVhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDI6Mjg6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuaW5kZXggNTM4OWQyNDExNzZhOGEuLmMzYTI4NDY3OTU1ZjNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5AQCAtNDYsNiAmIzQzOzQ2LDExIEBAIHN5c2N0bDpcbiBSdW50aW1lIGluZm86XG4gICAvcHJvYy9hbGxvY2luZm9cbiBcbiYjNDM7ICBQcm9maWxpbmcgZGF0YSBjYW4gYmUgcmV0cmlldmVkIGVpdGhlciBieSByZWFkaW5nIGAvcHJvYy9hbGxvY2luZm9gIGRpcmVjdGx5IGFzXG4mIzQzOyAgdGV4dCBvciBwcm9ncmFtbWF0aWNhbGx5IHZpYSBgaW9jdGwoKWAgY2FsbHMgZGVmaW5lZCBpbiBgXHUwMDNjdWFwaS9saW51eC9hbGxvY190YWcuaFx1MDAzZWAuXG4mIzQzOyAgVGhlIGlvY3RsIGludGVyZmFjZSBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYXMgd2VsbCBhcyBmaWx0ZXJpbmdcbiYjNDM7ICBieSBtb2R1bGUgbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUgbnVtYmVyLCBhY2N1cmFjeSwgb3IgYWxsb2NhdGlvbiBzaXplIGxpbWl0cy5cbiYjNDM7XG4gRXhhbXBsZSBvdXRwdXQ6OlxuIFxuICAgcm9vdEBtb3JpYS1rdm06fiMgc29ydCAtZyAvcHJvYy9hbGxvY2luZm98dGFpbHxudW1mbXQgLS10bz1pZWNcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5pbmRleCAzZjBlZjFlMjdlYjA3ZC4uMmZjNTMwOTM3NTJkMTMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcbkBAIC0zNDYsNiAmIzQzOzM0Niw4IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzY21haWx0bzpsdXptYXhpbWlsaWFuQGdtYWlsLmNvbVx1MDAzZVxuIDB4QTUgIDIwLTJGICBsaW51eC9zdXJmYWNlX2FnZ3JlZ2F0b3IvZHR4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IFN1cmZhY2UgRFRYIGRyaXZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOmx1em1heGltaWxpYW5AZ21haWwuY29tXHUwMDNlXG4mIzQzOzB4QTYgIDAwLTBGICB1YXBpL2xpbnV4L2FsbG9jX3RhZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOnN1cmVuYkBnb29nbGUuY29tXHUwMDNlXG4gMHhBQSAgMDAtM0YgIGxpbnV4L3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaFxuIDB4QUIgIDAwLTFGICBsaW51eC9uYmQuaFxuIDB4QUMgIDAwLTFGICBsaW51eC9yYXcuaFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDI5YzMwMmU5YzE3YmEzLi44NjdkNGFkNThmYjQyMiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE2OTM3LDcgJiM0MzsxNjkzNyw5IEBAIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG4gRjpcdGluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmhcbiBGOlx0aW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oXG4mIzQzO0Y6XHRpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbiBGOlx0bW0vYWxsb2NfdGFnLmNcbiYjNDM7RjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9cbiBcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEJBTExPT05cbiBNOlx0QW5kcmV3IE1vcnRvbiBcdTAwM2Nha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RldGFnLmggYi9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaFxuaW5kZXggZGRhZTc0ODRjYTQ1NmMuLmEyNWEwODVjMmRmMTk5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb2RldGFnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY29kZXRhZy5oXG5AQCAtNzcsNiAmIzQzOzc3LDggQEAgc3RydWN0IGNvZGV0YWdfaXRlcmF0b3Ige1xuIHZvaWQgY29kZXRhZ19sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XG4gYm9vbCBjb2RldGFnX3RyeWxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbiB2b2lkIGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgY29kZXRhZ19nZXRfY29udGVudF9pZChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpO1xuJiM0Mzt1bnNpZ25lZCBpbnQgY29kZXRhZ19nZXRfY291bnQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XG4gc3RydWN0IGNvZGV0YWcgKmNvZGV0YWdfbmV4dF9jdChzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciAqaXRlcik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI3MGY2OTNiMTgyMjA0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbkBAIC0wLDAgJiM0MzsxLDk5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXG4mIzQzOy8qXG4mIzQzOyAqIGFsbG9jX3RhZyBJT0NUTCBBUEkgZGVmaW5pdGlvblxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuJiM0MzsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhc1xuJiM0MzsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9VQVBJX0FMTE9DX1RBR19IXG4mIzQzOyNkZWZpbmUgX1VBUElfQUxMT0NfVEFHX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXG4mIzQzOyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG9cbiYjNDM7ICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19TVFJfU0laRVx0NjRcbiYjNDM7XG4mIzQzO3N0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCB7XG4mIzQzO1x0X191NjQgaWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB7XG4mIzQzO1x0LyogTG9uZ2VyIG5hbWVzIGFyZSB0cmltbWVkICovXG4mIzQzO1x0Y2hhciBtb2RuYW1lW0FMTE9DSU5GT19TVFJfU0laRV07XG4mIzQzO1x0Y2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdO1xuJiM0MztcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcbiYjNDM7XHRfX3U2NCBsaW5lbm87XG4mIzQzO1x0LyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovXG4mIzQzO1x0X191NjQgaW5hY2N1cmF0ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXG4mIzQzO3N0cnVjdCBhbGxvY2luZm9fY291bnRlciB7XG4mIzQzO1x0X191NjQgYnl0ZXM7XG4mIzQzO1x0X191NjQgY2FsbHM7XG4mIzQzO1x0X191OCBhY2N1cmF0ZTtcbiYjNDM7fSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB0YWc7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19jb3VudGVyIGNvdW50ZXI7XG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsXG4mIzQzO1x0QUxMT0NJTkZPX0ZJTFRFUl9GVU5DVElPTixcbiYjNDM7XHRBTExPQ0lORk9fRklMVEVSX0ZJTEVOQU1FLFxuJiM0MztcdEFMTE9DSU5GT19GSUxURVJfTElORU5PLFxuJiM0MztcdEFMTE9DSU5GT19GSUxURVJfSU5BQ0NVUkFURSxcbiYjNDM7XHRBTExPQ0lORk9fRklMVEVSX01JTl9TSVpFLFxuJiM0MztcdEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsXG4mIzQzO1x0X19BTExPQ0lORk9fRklMVEVSX0xBU1QgPSBBTExPQ0lORk9fRklMVEVSX01BWF9TSVpFXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NT0ROQU1FXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX01PRE5BTUUpXG4mIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OKVxuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9GSUxFTkFNRSlcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0xJTkVOTylcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURVx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfSU5BQ0NVUkFURSlcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkVcdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpXG4mIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX01BWF9TSVpFKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tTIFxcXG4mIzQzO1x0KCgxIFx1MDAzY1x1MDAzYyAoX19BTExPQ0lORk9fRklMVEVSX0xBU1QgJiM0MzsgMSkpIC0gMSlcbiYjNDM7XG4mIzQzO3N0cnVjdCBhbGxvY2luZm9fZmlsdGVyIHtcbiYjNDM7XHRfX3U2NCBtYXNrOyAvKiBiaXRtYXNrIG9mIHRoZSBmaWx0ZXIgZmllbGRzIHVzZWQgKi9cbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyBmaWVsZHM7XG4mIzQzO1x0X191NjQgbWluX3NpemU7XG4mIzQzO1x0X191NjQgbWF4X3NpemU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XG4mIzQzO1x0LyogaW5wdXRzICovXG4mIzQzO1x0X191NjQgcG9zO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbiYjNDM7XHQvKiBvdXRwdXQgKi9cbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIGRhdGE7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSURcdDBcbiYjNDM7I2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfQVRcdFx0MVxuJiM0MzsjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhUXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0lPQ19CQVNFXHRcdDB4QTZcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSURcdF9JT1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19DT05URU5UX0lELFx0XFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKVxuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX0FUXHRcdF9JT1dSKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfR0VUX0FULFx0XFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0KVxuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX05FWFRcdFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhULFx0XFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSlcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfVUFQSV9BTExPQ19UQUdfSCAqL1xuZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jXG5pbmRleCA0MDAxYTdlYTY2NzU0Mi4uYTljZGE0Yzk2MmEzMDMgMTAwNjQ0XG4tLS0gYS9saWIvY29kZXRhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvY29kZXRhZy5jXG5AQCAtMTksNiAmIzQzOzE5LDggQEAgc3RydWN0IGNvZGV0YWdfdHlwZSB7XG4gXHRzdHJ1Y3QgY29kZXRhZ190eXBlX2Rlc2MgZGVzYztcbiBcdC8qIGdlbmVyYXRlcyB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIGZvciBtb2R1bGUgbG9hZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0X21vZF9zZXE7XG4mIzQzO1x0LyogYnVtcGVkIG9uIGV2ZXJ5IG1vZHVsZSBsb2FkIGFuZCB1bmxvYWQgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNvbnRlbnRfaWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgY29kZXRhZ19yYW5nZSB7XG5AQCAtNTAsNiAmIzQzOzUyLDIwIEBAIHZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuIFx0dXBfcmVhZChcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuIH1cbiBcbiYjNDM7dW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGN0dHlwZS1cdTAwM2Vjb250ZW50X2lkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1bnNpZ25lZCBpbnQgY29kZXRhZ19nZXRfY291bnQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY3R0eXBlLVx1MDAzZWNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIGNvZGV0YWdfZ2V0X2N0X2l0ZXIoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuIHtcbiBcdHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIGl0ZXIgPSB7XG5AQCAtMjA0LDYgJiM0MzsyMjAsNyBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXG4gXHRkb3duX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gXHRjbW9kLVx1MDAzZW1vZF9zZXEgPSAmIzQzOyYjNDM7Y3R0eXBlLVx1MDAzZW5leHRfbW9kX3NlcTtcbiYjNDM7XHQmIzQzOyYjNDM7Y3R0eXBlLVx1MDAzZWNvbnRlbnRfaWQ7XG4gXHRtb2RfaWQgPSBpZHJfYWxsb2MoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9pZHIsIGNtb2QsIDAsIDAsIEdGUF9LRVJORUwpO1xuIFx0aWYgKG1vZF9pZCBcdTAwM2U9IDApIHtcbiBcdFx0aWYgKGN0dHlwZS1cdTAwM2VkZXNjLm1vZHVsZV9sb2FkKSB7XG5AQCAtMzY4LDYgJiM0MzszODUsNyBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0Y3R0eXBlLVx1MDAzZWNvdW50IC09IHJhbmdlX3NpemUoY3R0eXBlLCBcdTAwMjZjbW9kLVx1MDAzZXJhbmdlKTtcbiBcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfaWRyLCBtb2RfaWQpO1xuIFx0XHRcdGtmcmVlKGNtb2QpO1xuJiM0MztcdFx0XHQmIzQzOyYjNDM7Y3R0eXBlLVx1MDAzZWNvbnRlbnRfaWQ7XG4gXHRcdH1cbiBcdFx0dXBfd3JpdGUoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiBcdFx0aWYgKGZvdW5kIFx1MDAyNlx1MDAyNiBjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGQ5YmUxY2Y1MTg3ZDk3Li4zMmFjMDY3NGQ4YmY2ZCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9hbGxvY190YWcuY1xuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FsbHN5bXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2V4dC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuQEAgLTE0LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9hbGxvY190YWcuaFx1MDAzZVxuIFxuICNkZWZpbmUgQUxMT0NJTkZPX0ZJTEVfTkFNRVx0XHRcJiMzNDthbGxvY2luZm9cJiMzNDtcbiAjZGVmaW5lIE1PRFVMRV9BTExPQ19UQUdfVk1BUF9TSVpFXHQoMTAwMDAwVUwgKiBzaXplb2Yoc3RydWN0IGFsbG9jX3RhZykpXG5AQCAtNDcsNiAmIzQzOzQ5LDExIEBAIHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyO1xuIFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgcmVwb3J0ZWRfaXRlcjtcbiBcdGJvb2wgcHJpbnRfaGVhZGVyO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbiYjNDM7XHQvKiBpb2N0bCB1c2VzIGEgc2VwYXJhdGUgaXRlcmF0b3Igbm90IHRvIGludGVyZmVyZSB3aXRoIHJlYWRzICovXG4mIzQzO1x0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaW9jdGxfaXRlcjtcbiYjNDM7XHRib29sIHBvc2l0aW9uZWQ7IC8qIHNlcV9vcGVuX3ByaXZhdGUoKSBzZXRzIHRvIDAgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggaW9jdGxfbG9jaztcbiB9O1xuIFxuIHN0YXRpYyB2b2lkICphbGxvY2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbkBAIC0xMzAsNiAmIzQzOzEzNywzNDAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhbGxvY2luZm9fc2VxX29wID0ge1xuIFx0LnNob3dcdD0gYWxsb2NpbmZvX3Nob3csXG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogSW5pdGlhbGl6ZXMgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgYWxsb2NhdGVzIHByaXZhdGUgc3RhdGUgd2hlbiBvcGVuaW5nXG4mIzQzOyAqIHRoZSAvcHJvYy9hbGxvY2luZm8gcHJvY2ZzIGVudHJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhbGxvY2luZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2YWxsb2NpbmZvX3NlcV9vcCxcbiYjNDM7XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUpKTtcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0c3RydWN0IHNlcV9maWxlICptID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0XHRzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDbGVhbnMgdXAgdGhlIHNlcV9maWxlIHN0YXRlIGFuZCBmcmVlcyB1cCB0aGUgcHJpdmF0ZSBzdGF0ZSBhbGxvY2F0ZWQgaW5cbiYjNDM7ICogYWxsb2NpbmZvX29wZW4oKSB3aGVuIGNsb3NpbmcgdGhlIC9wcm9jL2FsbG9jaW5mbyBmaWxlIGRlc2NyaXB0b3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFsbG9jaW5mb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNlcV9maWxlICptID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3VmZml4IG9mIGEgc3RyaW5nIHNvIHRoYXQgaXRzIGxlbmd0aCBmaXRzIHdpdGhpblxuJiM0MzsgKiBBTExPQ0lORk9fU1RSX1NJWkUsIHByZXNlcnZpbmcgdGhlIHRyYWlsaW5nIGNoYXJhY3RlcnMuXG4mIzQzOyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXG4mIzQzOyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG9cbiYjNDM7ICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbGVuID0gc3RybGVuKHN0cik7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgYW4gZXh0cmEgc3BhY2UgZm9yIHRoZSB0cmFpbGluZyBOVUxMLiAqL1xuJiM0MztcdGlmIChsZW4gXHUwMDNlPSBBTExPQ0lORk9fU1RSX1NJWkUpXG4mIzQzO1x0XHRzdHIgJiM0Mzs9IChsZW4gLSBBTExPQ0lORk9fU1RSX1NJWkUpICYjNDM7IDE7XG4mIzQzO1x0cmV0dXJuIHN0cjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29weSBhIHN0cmluZyBhbmQgdHJpbSBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgaXQmIzM5O3MgdG9vIGxvbmcgKi9cbiYjNDM7c3RhdGljIHZvaWQgYWxsb2NpbmZvX2NvcHlfc3RyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYylcbiYjNDM7e1xuJiM0MztcdHN0cnNjcHlfcGFkKGRlc3QsIGFsbG9jaW5mb19zdHIoc3JjKSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29tcGFyZSB0d28gc3RyaW5ncyBhbmQgb25seSBjb25zaWRlciB0aGUgdHJpbW1lZCBzdWZmaXggaWYgczEgaXMgdG9vIGxvbmcgKi9cbiYjNDM7c3RhdGljIGludCBhbGxvY2luZm9fY21wX3N0cihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnRlbXBsYXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0cm5jbXAoYWxsb2NpbmZvX3N0cihzdHIpLCB0ZW1wbGF0ZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRmV0Y2ggdGhlIHBlci1DUFUgY291bnRlcnMgKi9cbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhzdHJ1Y3QgY29kZXRhZyAqY3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWxsb2NfdGFnX3JlYWQoY3RfdG9fYWxsb2NfdGFnKGN0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBvcHVsYXRlcyB0aGUgVUFQSSBhbGxvY2luZm9fdGFnX2RhdGEgc3RydWN0dXJlIHdpdGggYWN0aXZlIHJ1bnRpbWVcbiYjNDM7ICogcHJvZmlsaW5nIGNvdW50ZXJzIGV4dHJhY3RlZCBmcm9tIHRoZSBnaXZlbiBrZXJuZWwgY29kZXRhZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFsbG9jaW5mb190b19wYXJhbXMoc3RydWN0IGNvZGV0YWcgKmN0LFxuJiM0MztcdFx0XHRcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgKmRhdGEsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY3QtXHUwMDNlbW9kbmFtZSlcbiYjNDM7XHRcdGFsbG9jaW5mb19jb3B5X3N0cihkYXRhLVx1MDAzZXRhZy5tb2RuYW1lLCBjdC1cdTAwM2Vtb2RuYW1lKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkYXRhLVx1MDAzZXRhZy5tb2RuYW1lWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRhbGxvY2luZm9fY29weV9zdHIoZGF0YS1cdTAwM2V0YWcuZnVuY3Rpb24sIGN0LVx1MDAzZWZ1bmN0aW9uKTtcbiYjNDM7XHRhbGxvY2luZm9fY29weV9zdHIoZGF0YS1cdTAwM2V0YWcuZmlsZW5hbWUsIGN0LVx1MDAzZWZpbGVuYW1lKTtcbiYjNDM7XHRkYXRhLVx1MDAzZXRhZy5saW5lbm8gPSBjdC1cdTAwM2VsaW5lbm87XG4mIzQzO1x0ZGF0YS1cdTAwM2Vjb3VudGVyLmJ5dGVzID0gY291bnRlcnMtXHUwMDNlYnl0ZXM7XG4mIzQzO1x0ZGF0YS1cdTAwM2Vjb3VudGVyLmNhbGxzID0gY291bnRlcnMtXHUwMDNlY2FsbHM7XG4mIzQzO1x0ZGF0YS1cdTAwM2Vjb3VudGVyLmFjY3VyYXRlID0gIWFsbG9jX3RhZ19pc19pbmFjY3VyYXRlKGN0X3RvX2FsbG9jX3RhZyhjdCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXRyaWV2ZXMgdGhlIHVuaXF1ZSBjb250ZW50IElEIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBhbGxvY2F0aW9uIHRhZyBtb2R1bGVcbiYjNDM7ICogbGF5b3V0LCBhbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGV0ZWN0IGlmIG1vZHVsZXMgd2VyZSBsb2FkZWQgLyB1bmxvYWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBwYXJhbXM7XG4mIzQzO1xuJiM0MztcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbiYjNDM7XHRwYXJhbXMuaWQgPSBjb2RldGFnX2dldF9jb250ZW50X2lkKGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVmVyaWZpZXMgd2hldGhlciBhIGdpdmVuIGNvZGV0YWcgc2F0aXNmaWVzIHRoZSBhY3RpdmUgZmlsdGVyaW5nIGNyaXRlcmlhIGJ5XG4mIzQzOyAqIG1hdGNoaW5nIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGZpbHRlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXG4mIzQzO1x0XHRcdCAgIGJvb2wgKmZldGNoZWRfY291bnRlcnMpXG4mIzQzO3tcbiYjNDM7XHRib29sIGluYWNjdXJhdGU7XG4mIzQzO1xuJiM0MztcdGlmICghZmlsdGVyIHx8ICFmaWx0ZXItXHUwMDNlbWFzaylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NT0ROQU1FKSB7XG4mIzQzO1x0XHQvKiB1c2VyIHdhbnRzIHRvIGZpbHRlciBieSBtb2RuYW1lIGJ1dCBjdC1cdTAwM2Vtb2RuYW1lIGlzIE5VTEwgKi9cbiYjNDM7XHRcdGlmICghY3QtXHUwMDNlbW9kbmFtZSkge1xuJiM0MztcdFx0XHQvKiB2YWxpZGF0ZSBpZiB1c2VyIHdhcyBhdHRlbXB0aW5nIHRvIGZpbHRlciBmb3IgYnVpbHQtaW4gYWxsb2NhdGlvbnMgKi9cbiYjNDM7XHRcdFx0aWYgKGZpbHRlci1cdTAwM2VmaWVsZHMubW9kbmFtZVswXSAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoYWxsb2NpbmZvX2NtcF9zdHIoY3QtXHUwMDNlbW9kbmFtZSwgZmlsdGVyLVx1MDAzZWZpZWxkcy5tb2RuYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgY3QtXHUwMDNlZnVuY3Rpb24gXHUwMDI2XHUwMDI2IGFsbG9jaW5mb19jbXBfc3RyKGN0LVx1MDAzZWZ1bmN0aW9uLCBmaWx0ZXItXHUwMDNlZmllbGRzLmZ1bmN0aW9uKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgY3QtXHUwMDNlZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGFsbG9jaW5mb19jbXBfc3RyKGN0LVx1MDAzZWZpbGVuYW1lLCBmaWx0ZXItXHUwMDNlZmllbGRzLmZpbGVuYW1lKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGN0LVx1MDAzZWxpbmVubyAhPSBmaWx0ZXItXHUwMDNlZmllbGRzLmxpbmVubylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkge1xuJiM0MztcdFx0aW5hY2N1cmF0ZSA9ICEhKGN0LVx1MDAzZWZsYWdzIFx1MDAyNiBDT0RFVEFHX0ZMQUdfSU5BQ0NVUkFURSk7XG4mIzQzO1x0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlZmllbGRzLmluYWNjdXJhdGUpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IChBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUgfCBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpKSB7XG4mIzQzO1x0XHRpZiAoISpmZXRjaGVkX2NvdW50ZXJzKSB7XG4mIzQzO1x0XHRcdCpjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4mIzQzO1x0XHRcdCpmZXRjaGVkX2NvdW50ZXJzID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY291bnRlcnMtXHUwMDNlYnl0ZXMgXHUwMDNjIGZpbHRlci1cdTAwM2VtaW5fc2l6ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjb3VudGVycy1cdTAwM2VieXRlcyBcdTAwM2UgZmlsdGVyLVx1MDAzZW1heF9zaXplKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzXG4mIzQzOyAqIHByb2ZpbGluZyBkYXRhIGFuZCByZXR1cm5zIGl0IHRvIHVzZXJzcGFjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXY7XG4mIzQzO1x0c3RydWN0IGNvZGV0YWcgKmN0O1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHBhcmFtcyA9IHswfTtcbiYjNDM7XHRfX3U2NCBza2lwX2NvdW50O1xuJiM0MztcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcnM7XG4mIzQzO1x0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cGFyYW1zLCBhcmcsIHNpemVvZihwYXJhbXMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoKHBhcmFtcy5maWx0ZXIubWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKHBhcmFtcy5maWx0ZXIubWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGFyYW1zLmZpbHRlci5taW5fc2l6ZSBcdTAwM2UgcGFyYW1zLmZpbHRlci5tYXhfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4mIzQzO1x0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocGFyYW1zLnBvcyBcdTAwM2U9IGNvZGV0YWdfZ2V0X2NvdW50KGFsbG9jX3RhZ19jdHR5cGUpKSB7XG4mIzQzO1x0XHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2lwX2NvdW50ID0gcGFyYW1zLnBvcztcbiYjNDM7XG4mIzQzO1x0aWYgKHBhcmFtcy5maWx0ZXIubWFzaylcbiYjNDM7XHRcdHByaXYtXHUwMDNlZmlsdGVyID0gcGFyYW1zLmZpbHRlcjtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwcml2LVx1MDAzZWZpbHRlci5tYXNrID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogRmluZCB0aGUgY29kZXRhZyAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW9jdGxfaXRlciA9IGNvZGV0YWdfZ2V0X2N0X2l0ZXIoYWxsb2NfdGFnX2N0dHlwZSk7XG4mIzQzO1x0Y3QgPSBjb2RldGFnX25leHRfY3QoXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9pdGVyKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGN0KSB7XG4mIzQzO1x0XHRmZXRjaGVkX2NvdW50ZXJzID0gZmFsc2U7XG4mIzQzO1x0XHRpZiAobWF0Y2hlc19maWx0ZXIoY3QsIFx1MDAyNnByaXYtXHUwMDNlZmlsdGVyLCBcdTAwMjZjb3VudGVycywgXHUwMDI2ZmV0Y2hlZF9jb3VudGVycykpIHtcbiYjNDM7XHRcdFx0aWYgKHNraXBfY291bnQgPT0gMClcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0c2tpcF9jb3VudC0tO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9pdGVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjdCkge1xuJiM0MztcdFx0aWYgKCFmZXRjaGVkX2NvdW50ZXJzKVxuJiM0MztcdFx0XHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4mIzQzO1x0XHRhbGxvY2luZm9fdG9fcGFyYW1zKGN0LCBcdTAwMjZwYXJhbXMuZGF0YSwgXHUwMDI2Y291bnRlcnMpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3NpdGlvbmVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIWN0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQWR2YW5jZXMgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGFsbG9jYXRpb24gdGFnIGluIHRoZSBzZXF1ZW5jZSBhbmRcbiYjNDM7ICogcmV0dXJucyBpdHMgcHJvZmlsaW5nIGRhdGEgdG8gdXNlcnNwYWNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xuJiM0MztcdHN0cnVjdCBjb2RldGFnICpjdDtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHBhcmFtcztcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXJzO1xuJiM0MztcdGJvb2wgZmV0Y2hlZF9jb3VudGVycztcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuJiM0MztcdHByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbiYjNDM7XHRjb2RldGFnX2xvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vwb3NpdGlvbmVkKSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlvY3RsX2l0ZXIgPSBjb2RldGFnX2dldF9jdF9pdGVyKGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3NpdGlvbmVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0ID0gY29kZXRhZ19uZXh0X2N0KFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfaXRlcik7XG4mIzQzO1x0d2hpbGUgKGN0KSB7XG4mIzQzO1x0XHRmZXRjaGVkX2NvdW50ZXJzID0gZmFsc2U7XG4mIzQzO1x0XHRpZiAobWF0Y2hlc19maWx0ZXIoY3QsIFx1MDAyNnByaXYtXHUwMDNlZmlsdGVyLCBcdTAwMjZjb3VudGVycywgXHUwMDI2ZmV0Y2hlZF9jb3VudGVycykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9pdGVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjdCkge1xuJiM0MztcdFx0aWYgKCFmZXRjaGVkX2NvdW50ZXJzKVxuJiM0MztcdFx0XHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4mIzQzO1x0XHRhbGxvY2luZm9fdG9fcGFyYW1zKGN0LCBcdTAwMjZwYXJhbXMsIFx1MDAyNmNvdW50ZXJzKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFjdCkge1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3NpdGlvbmVkID0gZmFsc2U7XG4mIzQzO1x0XHRyZXQgPSAtRU5PRU5UO1xuJiM0MztcdH1cbiYjNDM7XHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAwKSB7XG4mIzQzO1x0XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2cGFyYW1zLCBzaXplb2YocGFyYW1zKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFbnRyeSBwb2ludCBpb2N0bCBmdW5jdGlvbiBmb3IgL3Byb2MvYWxsb2NpbmZvIHJvdXRpbmcgcmVxdWVzdHMgdG8gZmV0Y2ggdGhlXG4mIzQzOyAqIGxheW91dCBjb250ZW50IElELCBzZWVrIHRvIGEgc3BlY2lmaWMgdGFnLCBvciByZWFkIHNlcXVlbnRpYWwgdGFncy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgX19hcmcpXG4mIzQzO3tcbiYjNDM7XHR2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopX19hcmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjbWQpIHtcbiYjNDM7XHRjYXNlIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRDpcbiYjNDM7XHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfQVQ6XG4mIzQzO1x0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUOlxuJiM0MztcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldCA9IC1FTk9JT0NUTENNRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19DT01QQVRcbiYjNDM7c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhbGxvY2luZm9faW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBhbGxvY2luZm9fcHJvY19vcHMgPSB7XG4mIzQzO1x0LnByb2Nfb3Blblx0XHQ9IGFsbG9jaW5mb19vcGVuLFxuJiM0MztcdC5wcm9jX3JlYWRfaXRlclx0XHQ9IHNlcV9yZWFkX2l0ZXIsXG4mIzQzO1x0LnByb2NfbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4mIzQzO1x0LnByb2NfcmVsZWFzZVx0XHQ9IGFsbG9jaW5mb19yZWxlYXNlLFxuJiM0MztcdC5wcm9jX2lvY3RsXHRcdD0gYWxsb2NpbmZvX2lvY3RsLFxuJiM0MzsjaWZkZWYgQ09ORklHX0NPTVBBVFxuJiM0MztcdC5wcm9jX2NvbXBhdF9pb2N0bFx0PSBhbGxvY2luZm9fY29tcGF0X2lvY3RsLFxuJiM0MzsjZW5kaWZcbiYjNDM7fTtcbiYjNDM7XG4gc2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApXG4ge1xuIFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlcjtcbkBAIC05OTMsOCAmIzQzOzEzMzQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGlmICghcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgXHUwMDI2YWxsb2NpbmZvX3NlcV9vcCxcbi1cdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSksIE5VTEwpKSB7XG4mIzQzO1x0aWYgKCFwcm9jX2NyZWF0ZShBTExPQ0lORk9fRklMRV9OQU1FLCAwNDAwLCBOVUxMLCBcdTAwMjZhbGxvY2luZm9fcHJvY19vcHMpKSB7XG4gXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gY3JlYXRlICVzIGZpbGVcXG5cJiMzNDssIEFMTE9DSU5GT19GSUxFX05BTUUpO1xuIFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuaW5kZXggOGQ0ZGIyMjQxY2MyYTIuLjEyOTQxZDY4YTdmOGFlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5AQCAtMSw1ICYjNDM7MSw2IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFRBUkdFVFMgJiM0Mzs9IGFjY3RcbiYjNDM7VEFSR0VUUyAmIzQzOz0gYWxsb2NfdGFnXG4gVEFSR0VUUyAmIzQzOz0gYWxzYVxuIFRBUkdFVFMgJiM0Mzs9IGFtZC1wc3RhdGVcbiBUQVJHRVRTICYjNDM7PSBhcm02NFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNDFkOTJkMDZiMTg0OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSw5IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzO1RFU1RfR0VOX1BST0dTIDo9IGFsbG9jaW5mb19pb2N0bF90ZXN0XG4mIzQzO1xuJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsXG4mIzQzO0NGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKVxuJiM0MztcbiYjNDM7aW5jbHVkZSAuLi9saWIubWtcbiYjNDM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wOTIzNDgwOTcyMDQzOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDU0OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzO1xuJiM0MzsvKiBrc2VsZnRlc3QgZm9yIGFsbG9jaW5mbyBpb2N0bFxuJiM0MzsgKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bFxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBJbmMuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWxsb2NfdGFnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4va3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFYX0xJTkVfTEVOXHRcdDUxMlxuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19QUk9DXHRcdFwmIzM0Oy9wcm9jL2FsbG9jaW5mb1wmIzM0O1xuJiM0MztcbiYjNDM7ZW51bSBpb2N0bF9yZXQge1xuJiM0MztcdElPQ1RMX1NVQ0NFU1MgPSAwLFxuJiM0MztcdElPQ1RMX0ZBSUxVUkUgPSAxLFxuJiM0MztcdElPQ1RMX0lOVkFMSURfREFUQSA9IDIsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFZFQ19NQVhfRU5UUklFUyAzMlxuJiM0MztcbiYjNDM7c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMge1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgdGFnW1ZFQ19NQVhfRU5UUklFU107XG4mIzQzO1x0X191NjQgY291bnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgKnBhcmFtcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpb2N0bChkZXZfZmQsIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRCwgcGFyYW1zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19hbGxvY2luZm9fZ2V0X2F0KGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0ICpwYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaW9jdGwoZGV2X2ZkLCBBTExPQ0lORk9fSU9DX0dFVF9BVCwgcGFyYW1zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19hbGxvY2luZm9fZ2V0X25leHQoaW50IGRldl9mZCwgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqcGFyYW1zKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGlvY3RsKGRldl9mZCwgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVCwgcGFyYW1zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbWF0Y2hfZW50cnkoY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqcHJvY2ZzX2VudHJ5LFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YWdfZGF0YSxcbiYjNDM7XHRcdFx0Ym9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sXG4mIzQzO1x0XHRcdGJvb2wgbWF0Y2hfZnVuY3Rpb24sIGJvb2wgbWF0Y2hfZmlsZW5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAobWF0Y2hfYnl0ZXMgXHUwMDI2XHUwMDI2IHRhZ19kYXRhLVx1MDAzZWNvdW50ZXIuYnl0ZXMgIT0gcHJvY2ZzX2VudHJ5LVx1MDAzZWNvdW50ZXIuYnl0ZXMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3NpemUgcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtYXRjaF9jYWxscyBcdTAwMjZcdTAwMjYgdGFnX2RhdGEtXHUwMDNlY291bnRlci5jYWxscyAhPSBwcm9jZnNfZW50cnktXHUwMDNlY291bnRlci5jYWxscykge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2FsbCBjb3VudCByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1hdGNoX2xpbmVubyBcdTAwMjZcdTAwMjYgdGFnX2RhdGEtXHUwMDNldGFnLmxpbmVubyAhPSBwcm9jZnNfZW50cnktXHUwMDNldGFnLmxpbmVubykge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bGluZW5vIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobWF0Y2hfZnVuY3Rpb24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHN0cm5jbXAodGFnX2RhdGEtXHUwMDNldGFnLmZ1bmN0aW9uLCBwcm9jZnNfZW50cnktXHUwMDNldGFnLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtmdW5jdGlvbiByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1hdGNoX2ZpbGVuYW1lIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzdHJuY21wKHRhZ19kYXRhLVx1MDAzZXRhZy5maWxlbmFtZSwgcHJvY2ZzX2VudHJ5LVx1MDAzZXRhZy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZmlsZW5hbWUgcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1hdGNoX2VudHJpZXMoY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxuJiM0MztcdFx0XHQgIGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzLFxuJiM0MztcdFx0XHQgIGJvb2wgbWF0Y2hfYnl0ZXMsIGJvb2wgbWF0Y2hfY2FsbHMsIGJvb2wgbWF0Y2hfbGluZW5vLFxuJiM0MztcdFx0XHQgIGJvb2wgbWF0Y2hfZnVuY3Rpb24sIGJvb2wgbWF0Y2hfZmlsZW5hbWUpXG4mIzQzO3tcbiYjNDM7XHRfX3U2NCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQgIT0gdGFncy1cdTAwM2Vjb3VudCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RW50cnkgY291bnQgbWlzbWF0Y2guIGlvY3RsIGVudHJpZXM6ICVsbHUsIHByb2MgZW50cmllczogJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHRhZ3MtXHUwMDNlY291bnQsIHByb2Nmc19lbnRyaWVzLVx1MDAzZWNvdW50KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIW1hdGNoX2VudHJ5KFx1MDAyNnByb2Nmc19lbnRyaWVzLVx1MDAzZXRhZ1tpXSwgXHUwMDI2dGFncy1cdTAwM2V0YWdbaV0sXG4mIzQzO1x0XHRcdFx0IG1hdGNoX2J5dGVzLCBtYXRjaF9jYWxscywgbWF0Y2hfbGluZW5vLFxuJiM0MztcdFx0XHRcdCBtYXRjaF9mdW5jdGlvbiwgbWF0Y2hfZmlsZW5hbWUpKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVsbHV0aCBlbnRyeSBkb2VzIG5vdCBtYXRjaC5cXG5cJiMzNDssIGkpO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbGVuID0gc3RybGVuKHN0cik7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlPSBBTExPQ0lORk9fU1RSX1NJWkUpXG4mIzQzO1x0XHRzdHIgJiM0Mzs9IChsZW4gLSBBTExPQ0lORk9fU1RSX1NJWkUpICYjNDM7IDE7XG4mIzQzO1x0cmV0dXJuIHN0cjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWxsb2NpbmZvX2NvcHlfc3RyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYylcbiYjNDM7e1xuJiM0MztcdHN0cm5jcHkoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUgLSAxKTtcbiYjNDM7XHRkZXN0W0FMTE9DSU5GT19TVFJfU0laRSAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyKVxuJiM0Mzt7XG4mIzQzO1x0RklMRSAqZnAgPSBmb3BlbihBTExPQ0lORk9fUFJPQywgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0Y2hhciBsaW5lW01BWF9MSU5FX0xFTl07XG4mIzQzO1x0aW50IG1hdGNoZXM7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSBwcm9jZnNfZW50cnk7XG4mIzQzO1xuJiM0MztcdGlmICghZnApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0ZhaWxlZCB0byBvcGVuIFwmIzM0OyBBTExPQ0lORk9fUFJPQyBcJiMzNDsgZm9yIHJlYWRpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdG1lbXNldChwcm9jZnNfZW50cmllcywgMCwgc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xuJiM0MztcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSBcdTAwMjZcdTAwMjYgcHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQgXHUwMDNjIFZFQ19NQVhfRU5UUklFUykge1xuJiM0MztcdFx0Y2hhciBmaWxlbmFtZVtNQVhfTElORV9MRU5dO1xuJiM0MztcdFx0Y2hhciBmdW5jdGlvbltNQVhfTElORV9MRU5dO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZwcm9jZnNfZW50cnksIDAsIHNpemVvZihwcm9jZnNfZW50cnkpKTtcbiYjNDM7XHRcdG1hdGNoZXMgPSBzc2NhbmYobGluZSwgXCYjMzQ7JWxsdSAlbGx1ICVbXjpdOiVsbHUgZnVuYzolc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LmNvdW50ZXIuYnl0ZXMsXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnByb2Nmc19lbnRyeS5jb3VudGVyLmNhbGxzLFxuJiM0MztcdFx0XHRcdCBmaWxlbmFtZSxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8sXG4mIzQzO1x0XHRcdFx0IGZ1bmN0aW9uKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWF0Y2hlcyAhPSA1KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5maWxlbmFtZSwgZmlsZW5hbWUpO1xuJiM0MztcdFx0YWxsb2NpbmZvX2NvcHlfc3RyKHByb2Nmc19lbnRyeS50YWcuZnVuY3Rpb24sIGZ1bmN0aW9uKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkge1xuJiM0MztcdFx0XHRpZiAoc3RybmNtcChwcm9jZnNfZW50cnkudGFnLmZpbGVuYW1lLFxuJiM0MztcdFx0XHRcdCAgICBmaWx0ZXItXHUwMDNlZmllbGRzLmZpbGVuYW1lLCBBTExPQ0lORk9fU1RSX1NJWkUpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT04pIHtcbiYjNDM7XHRcdFx0aWYgKHN0cm5jbXAocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbixcbiYjNDM7XHRcdFx0XHQgICAgZmlsdGVyLVx1MDAzZWZpZWxkcy5mdW5jdGlvbiwgQUxMT0NJTkZPX1NUUl9TSVpFKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykge1xuJiM0MztcdFx0XHRpZiAocHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8gIT0gZmlsdGVyLVx1MDAzZWZpZWxkcy5saW5lbm8pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkge1xuJiM0MztcdFx0XHRpZiAocHJvY2ZzX2VudHJ5LmNvdW50ZXIuYnl0ZXMgXHUwMDNjIGZpbHRlci1cdTAwM2VtaW5fc2l6ZSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSB7XG4mIzQzO1x0XHRcdGlmIChwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcyBcdTAwM2UgZmlsdGVyLVx1MDAzZW1heF9zaXplKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZwcm9jZnNfZW50cmllcy1cdTAwM2V0YWdbcHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQmIzQzOyYjNDM7XSwgXHUwMDI2cHJvY2ZzX2VudHJ5LFxuJiM0MztcdFx0ICAgICAgIHNpemVvZihwcm9jZnNfZW50cnkpKTtcbiYjNDM7XHR9XG4mIzQzO1x0ZmNsb3NlKGZwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGVudW0gaW9jdGxfcmV0IGdldF9maWx0ZXJlZF9pb2N0bF9lbnRyaWVzKHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzLFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdFx0XHRcdFx0IF9fdTY0IHN0YXJ0X3BvcylcbiYjNDM7e1xuJiM0MztcdGludCBmZCA9IG9wZW4oQUxMT0NJTkZPX1BST0MsIE9fUkRPTkxZKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtGYWlsZWQgdG8gb3BlbiBcJiMzNDsgQUxMT0NJTkZPX1BST0MgXCYjMzQ7IGZvciBJT0NUTFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gSU9DVExfRkFJTFVSRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBzdGFydF9jb250X2lkLCBlbmRfY29udF9pZDtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCBnZXRfYXRfcGFyYW1zO1xuJiM0MztcdGNvbnN0IGludCBtYXhfcmV0cmllcyA9IDEwO1xuJiM0MztcdGludCByZXRyeV9jb3VudCA9IDA7XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBtYXkgcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMgaWYgYSBrZXJuZWwgbW9kdWxlIHdhcyBsb2FkZWRcbiYjNDM7XHQgKiBiZXR3ZWVuIHRoZSB0d28gY2FsbHMuIElmIHRoYXQgaGFwcGVucywgdGhlIGRhdGEgZ2F0aGVyZWQgY2Fubm90IGJlIGNvbnNpZGVyZWQgY29uc2lzdGVudFxuJiM0MztcdCAqIGFuZCBoZW5jZSBuZWVkcyB0byBiZSBmZXRjaGVkIGFnYWluIHRvIGF2b2lkIGZsYWtpbmVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFx1MDAyNnN0YXJ0X2NvbnRfaWQpKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQodGFncywgMCwgc2l6ZW9mKCp0YWdzKSk7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2Z2V0X2F0X3BhcmFtcywgMCwgc2l6ZW9mKGdldF9hdF9wYXJhbXMpKTtcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZnZXRfYXRfcGFyYW1zLmZpbHRlciwgZmlsdGVyLCBzaXplb2YoKmZpbHRlcikpO1xuJiM0MztcdFx0Z2V0X2F0X3BhcmFtcy5wb3MgPSBzdGFydF9wb3M7XG4mIzQzO1x0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2F0KGZkLCBcdTAwMjZnZXRfYXRfcGFyYW1zKSkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDthbGxvY2luZm9fZ2V0X2F0IGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IElPQ1RMX0ZBSUxVUkU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWVtY3B5KFx1MDAyNnRhZ3MtXHUwMDNldGFnW3RhZ3MtXHUwMDNlY291bnQmIzQzOyYjNDM7XSwgXHUwMDI2Z2V0X2F0X3BhcmFtcy5kYXRhLCBzaXplb2YoZ2V0X2F0X3BhcmFtcy5kYXRhKSk7XG4mIzQzO1xuJiM0MztcdFx0d2hpbGUgKHRhZ3MtXHUwMDNlY291bnQgXHUwMDNjIFZFQ19NQVhfRU5UUklFUyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgXHUwMDI2dGFncy1cdTAwM2V0YWdbdGFncy1cdTAwM2Vjb3VudF0pID09IDApXG4mIzQzO1x0XHRcdHRhZ3MtXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChmZCwgXHUwMDI2ZW5kX2NvbnRfaWQpKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhcnRfY29udF9pZC5pZCA9PSBlbmRfY29udF9pZC5pZCkge1xuJiM0MztcdFx0XHRzdGF0dXMgPSBJT0NUTF9TVUNDRVNTO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7YWxsb2NpbmZvX2dldF9jb250ZW50X2lkIG1pc21hdGNoLCByZXRyeWluZy4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IElPQ1RMX0lOVkFMSURfREFUQTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IHdoaWxlIChzdGF0dXMgPT0gSU9DVExfSU5WQUxJRF9EQVRBIFx1MDAyNlx1MDAyNiByZXRyeV9jb3VudCYjNDM7JiM0MzsgXHUwMDNjIG1heF9yZXRyaWVzKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdHJldHVybiBzdGF0dXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnVuX2ZpbHRlcl90ZXN0KGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyA9IG1hbGxvYyhzaXplb2YoKnRhZ3MpKTtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqcHJvY2ZzX2VudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xuJiM0MztcdGludCBpb2N0bF9zdGF0dXM7XG4mIzQzO1x0aW50IHJldCA9IEtTRlRfUEFTUztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0YWdzIHx8ICFwcm9jZnNfZW50cmllcykge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBmaWx0ZXIpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcJiMzNDsgQUxMT0NJTkZPX1BST0MgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IEtTRlRfU0tJUDtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtObyBlbnRyaWVzIGZvdW5kIGluIFwmIzM0OyBBTExPQ0lORk9fUFJPQyBcJiMzNDssIHNraXBwaW5nIHRlc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9TS0lQO1xuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgZmlsdGVyLCAwKTtcbiYjNDM7XHRpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7VHJvdWJsZSByZXRyaWV2aW5nIHZhbGlkIElPQ1RMIGVudHJpZXMsIHNraXBwaW5nLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfRkFJTFVSRSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RXJyb3IgcmV0cmlldmluZyBJT0NUTCBlbnRyaWVzLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIW1hdGNoX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIHRhZ3MsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpXG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1xuJiM0MztleGl0OlxuJiM0MztcdGZyZWUodGFncyk7XG4mIzQzO1x0ZnJlZShwcm9jZnNfZW50cmllcyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2ZpbGVuYW1lX2ZpbHRlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuJiM0MztcdGNvbnN0IGNoYXIgKnRhcmdldF9maWxlbmFtZSA9IFwmIzM0O21tL21lbW9yeS5jXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7XG4mIzQzO1x0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FO1xuJiM0MztcdHN0cm5jcHkoZmlsdGVyLmZpZWxkcy5maWxlbmFtZSwgdGFyZ2V0X2ZpbGVuYW1lLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnVuX2ZpbHRlcl90ZXN0KFx1MDAyNmZpbHRlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGVzdF9mdW5jdGlvbl9maWx0ZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbiYjNDM7XHRjb25zdCBjaGFyICp0YXJnZXRfZnVuY3Rpb24gPSBcJiMzNDtkdXBfbW1cJiMzNDs7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTtcbiYjNDM7XHRmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT047XG4mIzQzO1x0c3RybmNweShmaWx0ZXIuZmllbGRzLmZ1bmN0aW9uLCB0YXJnZXRfZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fZmlsdGVyX3Rlc3QoXHUwMDI2ZmlsdGVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X3NpemVfZmlsdGVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzID0gbWFsbG9jKHNpemVvZigqcHJvY2ZzX2VudHJpZXMpKTtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XG4mIzQzO1x0aW50IHJldCA9IEtTRlRfUEFTUztcbiYjNDM7XHRfX3U2NCB0YXJnZXRfc2l6ZSwgaSwgcG9zO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgKmZvdW5kX3RhZyA9IE5VTEw7XG4mIzQzO1x0Y29uc3QgY2hhciAqdGFyZ2V0X2Z1bmN0aW9uID0gXCYjMzQ7ZG9faW5pdF9tb2R1bGVcJiMzNDs7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHN0YXJ0X2NvbnRfaWQsIGVuZF9jb250X2lkO1xuJiM0MztcdGludCByZXRyeSA9IDA7XG4mIzQzO1x0Y29uc3QgaW50IG1heF9yZXRyaWVzID0gMTA7XG4mIzQzO1xuJiM0MztcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9GQUlMO1xuJiM0MztcdFx0Z290byBmcmVlbWVtO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKEFMTE9DSU5GT19QUk9DLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtGYWlsZWQgdG8gb3BlbiBcJiMzNDsgQUxMT0NJTkZPX1BST0MgXCYjMzQ7OiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRcdGdvdG8gZnJlZW1lbTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGZvdW5kX3RhZyA9IE5VTEw7XG4mIzQzO1x0XHRwb3MgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChmZCwgXHUwMDI2c3RhcnRfY29udF9pZCkpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7YWxsb2NpbmZvX2dldF9jb250ZW50X2lkIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTtcbiYjNDM7XHRcdGZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTjtcbiYjNDM7XHRcdHN0cm5jcHkoZmlsdGVyLmZpZWxkcy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIFx1MDAyNmZpbHRlcikpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RXJyb3IgcmV0cmlldmluZyBlbnRyaWVzIGZyb20gXCYjMzQ7IEFMTE9DSU5GT19QUk9DIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0Z1bmN0aW9uICVzIG5vdCBmb3VuZCBpbiBwcm9jZnNcXG5cJiMzNDssIHRhcmdldF9mdW5jdGlvbik7XG4mIzQzO1x0XHRcdHJldCA9IEtTRlRfU0tJUDtcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHRhcmdldF9zaXplID0gcHJvY2ZzX2VudHJpZXMtXHUwMDNldGFnWzBdLmNvdW50ZXIuYnl0ZXM7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuJiM0MztcdFx0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFIHwgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFO1xuJiM0MztcdFx0ZmlsdGVyLm1pbl9zaXplID0gdGFyZ2V0X3NpemU7XG4mIzQzO1x0XHRmaWx0ZXIubWF4X3NpemUgPSB0YXJnZXRfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoMSkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCBnZXRfYXRfcGFyYW1zO1xuJiM0MztcbiYjNDM7XHRcdFx0bWVtc2V0KFx1MDAyNmdldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7XG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZnZXRfYXRfcGFyYW1zLmZpbHRlciwgXHUwMDI2ZmlsdGVyLCBzaXplb2YoZmlsdGVyKSk7XG4mIzQzO1x0XHRcdGdldF9hdF9wYXJhbXMucG9zID0gcG9zO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKF9fYWxsb2NpbmZvX2dldF9hdChmZCwgXHUwMDI2Z2V0X2F0X3BhcmFtcykpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHR0YWdzLVx1MDAzZWNvdW50ID0gMDtcbiYjNDM7XHRcdFx0bWVtY3B5KFx1MDAyNnRhZ3MtXHUwMDNldGFnW3RhZ3MtXHUwMDNlY291bnQmIzQzOyYjNDM7XSwgXHUwMDI2Z2V0X2F0X3BhcmFtcy5kYXRhLFxuJiM0MztcdFx0XHQgICAgICAgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpO1xuJiM0MztcbiYjNDM7XHRcdFx0d2hpbGUgKHRhZ3MtXHUwMDNlY291bnQgXHUwMDNjIFZFQ19NQVhfRU5UUklFUyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICAgIF9fYWxsb2NpbmZvX2dldF9uZXh0KGZkLCBcdTAwMjZ0YWdzLVx1MDAzZXRhZ1t0YWdzLVx1MDAzZWNvdW50XSkgPT0gMClcbiYjNDM7XHRcdFx0XHR0YWdzLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhZ3MtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdFx0aWYgKHN0cmNtcCh0YWdzLVx1MDAzZXRhZ1tpXS50YWcuZnVuY3Rpb24sIHRhcmdldF9mdW5jdGlvbikgPT0gMCkge1xuJiM0MztcdFx0XHRcdFx0Zm91bmRfdGFnID0gXHUwMDI2dGFncy1cdTAwM2V0YWdbaV07XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChmb3VuZF90YWcgfHwgdGFncy1cdTAwM2Vjb3VudCBcdTAwM2MgVkVDX01BWF9FTlRSSUVTKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0cG9zICYjNDM7PSB0YWdzLVx1MDAzZWNvdW50O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChmZCwgXHUwMDI2ZW5kX2NvbnRfaWQpKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhcnRfY29udF9pZC5pZCA9PSBlbmRfY29udF9pZC5pZClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7TW9kdWxlIGxvYWQgZGV0ZWN0ZWQgZHVyaW5nIHNpemUgdmVyaWZpY2F0aW9uLCByZXRyeWluZy4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0fSB3aGlsZSAocmV0cnkmIzQzOyYjNDM7IFx1MDAzYyBtYXhfcmV0cmllcyk7XG4mIzQzO1xuJiM0MztcdGlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkIFx1MDAyNlx1MDAyNiAhZm91bmRfdGFnKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFbnRyeSB3aXRoIGZ1bmN0aW9uICVzIG5vdCBmb3VuZCBpbiBJT0NUTCByZXN1bHRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgdGFyZ2V0X2Z1bmN0aW9uKTtcbiYjNDM7XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0YXJ0X2NvbnRfaWQuaWQgIT0gZW5kX2NvbnRfaWQuaWQpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0ZhaWxlZCB0byBtYXRjaCBjb250ZW50X2lkcyBmb3IgcHJvY2ZzIGFuZCBJT0NUTCwgc2tpcHBpbmcuLi5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9TS0lQO1xuJiM0MztcdH0gZWxzZSBpZiAoZm91bmRfdGFnIFx1MDAyNlx1MDAyNiBmb3VuZF90YWctXHUwMDNlY291bnRlci5ieXRlcyAhPSB0YXJnZXRfc2l6ZSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7SU9DVEwgZW50cnkgc2l6ZSAlbGx1IGRvZXMgbm90IG1hdGNoIHRhcmdldCBzaXplICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBmb3VuZF90YWctXHUwMDNlY291bnRlci5ieXRlcywgdGFyZ2V0X3NpemUpO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9GQUlMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2V4aXQ6XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztmcmVlbWVtOlxuJiM0MztcdGZyZWUodGFncyk7XG4mIzQzO1x0ZnJlZShwcm9jZnNfZW50cmllcyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2xpbmVub19maWx0ZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzID0gbWFsbG9jKHNpemVvZigqdGFncykpO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuJiM0MztcdGVudW0gaW9jdGxfcmV0IGlvY3RsX3N0YXR1cztcbiYjNDM7XHRpbnQgcmV0ID0gS1NGVF9QQVNTO1xuJiM0MztcdF9fdTY0IHRhcmdldF9saW5lbm8sIGk7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqdGFyZ2V0X3RhZztcbiYjNDM7XHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9GQUlMO1xuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBcdTAwMjZmaWx0ZXIpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcJiMzNDsgQUxMT0NJTkZPX1BST0MgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHByb2Nmc19lbnRyaWVzLVx1MDAzZWNvdW50ID09IDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0NvdWxkIG5vdCByZXRyaWV2ZSBwcm9jZnMgZW50cmllc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgZGVwZW5kIG9uIHRoZSBwcm9jZnMgcmVzdWx0cyB0byBkZXRlcm1pbmUgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgZmlsdGVyIGJlZm9yZVxuJiM0MztcdCAqIG1ha2luZyB0aGUgaW9jdGwgcXVlcnkuIEhlbmNlLCB3ZSBjYW5ub3QgcmV1c2UgcnVuX2ZpbHRlcl90ZXN0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0dGFyZ2V0X3RhZyA9IFx1MDAyNnByb2Nmc19lbnRyaWVzLVx1MDAzZXRhZ1swXTtcbiYjNDM7XHR0YXJnZXRfbGluZW5vID0gdGFyZ2V0X3RhZy1cdTAwM2V0YWcubGluZW5vO1xuJiM0MztcbiYjNDM7XHRmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PO1xuJiM0MztcdGZpbHRlci5maWVsZHMubGluZW5vID0gdGFyZ2V0X2xpbmVubztcbiYjNDM7XG4mIzQzO1x0aW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgXHUwMDI2ZmlsdGVyLCAwKTtcbiYjNDM7XHRpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7VHJvdWJsZSByZXRyaWV2aW5nIHZhbGlkIElPQ1RMIGVudHJpZXMsIHNraXBwaW5nLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfRkFJTFVSRSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RXJyb3IgcmV0cmlldmluZyBJT0NUTCBlbnRyaWVzLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWdzLVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRhZ3MtXHUwMDNldGFnW2ldLnRhZy5saW5lbm8gIT0gdGFyZ2V0X2xpbmVubykge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtJT0NUTCBlbnRyeSAlbGx1IGhhcyBpbmNvcnJlY3QgbGluZW5vICVsbHUuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBpLCB0YWdzLVx1MDAzZXRhZ1tpXS50YWcubGluZW5vKTtcbiYjNDM7XHRcdFx0cmV0ID0gS1NGVF9GQUlMO1xuJiM0MztcdFx0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0cm5jbXAodGFncy1cdTAwM2V0YWdbaV0udGFnLmZ1bmN0aW9uLCB0YXJnZXRfdGFnLVx1MDAzZXRhZy5mdW5jdGlvbixcbiYjNDM7XHRcdFx0ICAgIEFMTE9DSU5GT19TVFJfU0laRSkgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBzdHJuY21wKHRhZ3MtXHUwMDNldGFnW2ldLnRhZy5maWxlbmFtZSwgdGFyZ2V0X3RhZy1cdTAwM2V0YWcuZmlsZW5hbWUsXG4mIzQzO1x0XHRcdCAgICBBTExPQ0lORk9fU1RSX1NJWkUpID09IDApXG4mIzQzO1x0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZm91bmQpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O09yaWdpbmFsIHByb2NmcyBlbnRyeSBub3QgZm91bmQgaW4gSU9DVEwgbGluZW5vIGZpbHRlciByZXN1bHRzLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXhpdDpcbiYjNDM7XHRmcmVlKHRhZ3MpO1xuJiM0MztcdGZyZWUocHJvY2ZzX2VudHJpZXMpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRrc2Z0X3NldF9wbGFuKDQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB0ZXN0X2ZpbGVuYW1lX2ZpbHRlcigpO1xuJiM0MztcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0O1NraXBwaW5nIHRlc3RfZmlsZW5hbWVfZmlsdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsIFwmIzM0O3Rlc3RfZmlsZW5hbWVfZmlsdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdGVzdF9mdW5jdGlvbl9maWx0ZXIoKTtcbiYjNDM7XHRpZiAocmV0ID09IEtTRlRfU0tJUClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtTa2lwcGluZyB0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxcblwmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdChyZXQgPT0gS1NGVF9QQVNTLCBcJiMzNDt0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRlc3Rfc2l6ZV9maWx0ZXIoKTtcbiYjNDM7XHRpZiAocmV0ID09IEtTRlRfU0tJUClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtTa2lwcGluZyB0ZXN0X3NpemVfZmlsdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsIFwmIzM0O3Rlc3Rfc2l6ZV9maWx0ZXJcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB0ZXN0X2xpbmVub19maWx0ZXIoKTtcbiYjNDM7XHRpZiAocmV0ID09IEtTRlRfU0tJUClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtTa2lwcGluZyB0ZXN0X2xpbmVub19maWx0ZXJcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXCYjMzQ7dGVzdF9saW5lbm9fZmlsdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a3NmdF9maW5pc2hlZCgpO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9fY29tcGF0X2lvY3RsJiMzNDssCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X2F0JiMzNDssCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bF9nZXRfbmV4dCYjMzQ7LAogICAgJiMzNDttYXRjaGVzX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2dldF9jb250ZW50X2lkJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfZ2V0X2NvdW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9jdGwgaW50ZXJmYWNlIGZvciBgL3Byb2MvYWxsb2NpbmZvYCB0byBhbGxvdyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYW5kIGZpbHRlcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgZGF0YS4gVGhpcyBpcyBhIG5ldyB1c2Vyc3BhY2UtZmFjaW5nIEFQSSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGhhbmRsZXMgaW52YWxpZCBpbnB1dHMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBjb25jdXJyZW5jeSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyOTBlZDg0NmYxZDE1YzdlNDFjY2Y0NzhmZWU2OTYwMjE1YTRlYTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDAyOjI4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdAppbmRleCA1Mzg5ZDI0MTE3NmE4YS4uYzNhMjg0Njc5NTVmM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0CkBAIC00Niw2ICYjNDM7NDYsMTEgQEAgc3lzY3RsOgogUnVudGltZSBpbmZvOgogICAvcHJvYy9hbGxvY2luZm8KIAomIzQzOyAgUHJvZmlsaW5nIGRhdGEgY2FuIGJlIHJldHJpZXZlZCBlaXRoZXIgYnkgcmVhZGluZyBgL3Byb2MvYWxsb2NpbmZvYCBkaXJlY3RseSBhcwomIzQzOyAgdGV4dCBvciBwcm9ncmFtbWF0aWNhbGx5IHZpYSBgaW9jdGwoKWAgY2FsbHMgZGVmaW5lZCBpbiBgJmx0O3VhcGkvbGludXgvYWxsb2NfdGFnLmgmZ3Q7YC4KJiM0MzsgIFRoZSBpb2N0bCBpbnRlcmZhY2Ugc3VwcG9ydHMgc3RydWN0dXJlZCBiaW5hcnkgZGF0YSBleHRyYWN0aW9uIGFzIHdlbGwgYXMgZmlsdGVyaW5nCiYjNDM7ICBieSBtb2R1bGUgbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUgbnVtYmVyLCBhY2N1cmFjeSwgb3IgYWxsb2NhdGlvbiBzaXplIGxpbWl0cy4KJiM0MzsKIEV4YW1wbGUgb3V0cHV0OjoKIAogICByb290QG1vcmlhLWt2bTp+IyBzb3J0IC1nIC9wcm9jL2FsbG9jaW5mb3x0YWlsfG51bWZtdCAtLXRvPWllYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QgYi9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdAppbmRleCAzZjBlZjFlMjdlYjA3ZC4uMmZjNTMwOTM3NTJkMTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CkBAIC0zNDYsNiAmIzQzOzM0Niw4IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0O21haWx0bzpsdXptYXhpbWlsaWFuQGdtYWlsLmNvbSZndDsKIDB4QTUgIDIwLTJGICBsaW51eC9zdXJmYWNlX2FnZ3JlZ2F0b3IvZHR4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IFN1cmZhY2UgRFRYIGRyaXZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7bWFpbHRvOmx1em1heGltaWxpYW5AZ21haWwuY29tJmd0OwomIzQzOzB4QTYgIDAwLTBGICB1YXBpL2xpbnV4L2FsbG9jX3RhZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7bWFpbHRvOnN1cmVuYkBnb29nbGUuY29tJmd0OwogMHhBQSAgMDAtM0YgIGxpbnV4L3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaAogMHhBQiAgMDAtMUYgIGxpbnV4L25iZC5oCiAweEFDICAwMC0xRiAgbGludXgvcmF3LmgKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMjljMzAyZTljMTdiYTMuLjg2N2Q0YWQ1OGZiNDIyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTY5MzcsNyAmIzQzOzE2OTM3LDkgQEAgUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QKIEY6CWluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgKIEY6CWluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaAomIzQzO0Y6CWluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaAogRjoJbW0vYWxsb2NfdGFnLmMKJiM0MztGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvCiAKIE1FTU9SWSBNQU5BR0VNRU5UIC0gQkFMTE9PTgogTToJQW5kcmV3IE1vcnRvbiAmbHQ7YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZyZndDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29kZXRhZy5oIGIvaW5jbHVkZS9saW51eC9jb2RldGFnLmgKaW5kZXggZGRhZTc0ODRjYTQ1NmMuLmEyNWEwODVjMmRmMTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaApAQCAtNzcsNiAmIzQzOzc3LDggQEAgc3RydWN0IGNvZGV0YWdfaXRlcmF0b3Igewogdm9pZCBjb2RldGFnX2xvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTsKIGJvb2wgY29kZXRhZ190cnlsb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiB2b2lkIGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiYjNDM7dW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiYjNDM7dW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiBzdHJ1Y3QgY29kZXRhZyAqY29kZXRhZ19uZXh0X2N0KHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yICppdGVyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNzBmNjkzYjE4MjIwNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaApAQCAtMCwwICYjNDM7MSw5OSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovCiYjNDM7LyoKJiM0MzsgKiBhbGxvY190YWcgSU9DVEwgQVBJIGRlZmluaXRpb24KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUsIExMQy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQomIzQzOyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiYjNDM7ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfVUFQSV9BTExPQ19UQUdfSAomIzQzOyNkZWZpbmUgX1VBUElfQUxMT0NfVEFHX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlCiYjNDM7ICogd2hlbiBmaWx0ZXJpbmcgYnkgdGhlc2UgY3JpdGVyaWEsIHdlIGNvbXBhcmUgdGhlIGxhc3QgNjQgY2hhcmFjdGVycyB0bwomIzQzOyAqIG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIG5hbWUgY29sbGlzaW9ucwomIzQzOyAqLwomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX1NUUl9TSVpFCTY0CiYjNDM7CiYjNDM7c3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHsKJiM0MzsJX191NjQgaWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB7CiYjNDM7CS8qIExvbmdlciBuYW1lcyBhcmUgdHJpbW1lZCAqLwomIzQzOwljaGFyIG1vZG5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTsKJiM0MzsJY2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdOwomIzQzOwljaGFyIGZpbGVuYW1lW0FMTE9DSU5GT19TVFJfU0laRV07CiYjNDM7CV9fdTY0IGxpbmVubzsKJiM0MzsJLyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovCiYjNDM7CV9fdTY0IGluYWNjdXJhdGU7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBUaGUgYWxpZ25tZW50IGVuc3VyZXMgMzItYml0IGNvbXBhdGlibGUgaW50ZXJmYWNlcyBhcmUgbm90IGJyb2tlbiAqLwomIzQzO3N0cnVjdCBhbGxvY2luZm9fY291bnRlciB7CiYjNDM7CV9fdTY0IGJ5dGVzOwomIzQzOwlfX3U2NCBjYWxsczsKJiM0MzsJX191OCBhY2N1cmF0ZTsKJiM0Mzt9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKJiM0MzsKJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb190YWcgdGFnOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX2NvdW50ZXIgY291bnRlcjsKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfRlVOQ1RJT04sCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfRklMRU5BTUUsCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfTElORU5PLAomIzQzOwlBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUsCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUsCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsCiYjNDM7CV9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUID0gQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRQomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTU9ETkFNRQkJKDEgJmx0OyZsdDsgQUxMT0NJTkZPX0ZJTFRFUl9NT0ROQU1FKQomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OCQkoMSAmbHQ7Jmx0OyBBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OKQomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FCQkoMSAmbHQ7Jmx0OyBBTExPQ0lORk9fRklMVEVSX0ZJTEVOQU1FKQomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTwkJKDEgJmx0OyZsdDsgQUxMT0NJTkZPX0ZJTFRFUl9MSU5FTk8pCiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURQkoMSAmbHQ7Jmx0OyBBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUpCiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUJCSgxICZsdDsmbHQ7IEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpCiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUJCSgxICZsdDsmbHQ7IEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUpCiYjNDM7CiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tTIFwKJiM0MzsJKCgxICZsdDsmbHQ7IChfX0FMTE9DSU5GT19GSUxURVJfTEFTVCAmIzQzOyAxKSkgLSAxKQomIzQzOwomIzQzO3N0cnVjdCBhbGxvY2luZm9fZmlsdGVyIHsKJiM0MzsJX191NjQgbWFzazsgLyogYml0bWFzayBvZiB0aGUgZmlsdGVyIGZpZWxkcyB1c2VkICovCiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnIGZpZWxkczsKJiM0MzsJX191NjQgbWluX3NpemU7CiYjNDM7CV9fdTY0IG1heF9zaXplOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFsbG9jaW5mb19nZXRfYXQgewomIzQzOwkvKiBpbnB1dHMgKi8KJiM0MzsJX191NjQgcG9zOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7CiYjNDM7CS8qIG91dHB1dCAqLwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIGRhdGE7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQJMAomIzQzOyNkZWZpbmUgX0FMTE9DSU5GT19JT0NfR0VUX0FUCQkxCiYjNDM7I2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVAkJMgomIzQzOwomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0lPQ19CQVNFCQkweEE2CiYjNDM7I2RlZmluZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQJX0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQsCVwKJiM0MzsJCQkJCSAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKQomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0lPQ19HRVRfQVQJCV9JT1dSKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfR0VUX0FULAlcCiYjNDM7CQkJCQkgICAgICBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCkKJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX05FWFQJCV9JT1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVCwJXAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhKQomIzQzOwomIzQzOyNlbmRpZiAvKiBfVUFQSV9BTExPQ19UQUdfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2NvZGV0YWcuYyBiL2xpYi9jb2RldGFnLmMKaW5kZXggNDAwMWE3ZWE2Njc1NDIuLmE5Y2RhNGM5NjJhMzAzIDEwMDY0NAotLS0gYS9saWIvY29kZXRhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9jb2RldGFnLmMKQEAgLTE5LDYgJiM0MzsxOSw4IEBAIHN0cnVjdCBjb2RldGFnX3R5cGUgewogCXN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyBkZXNjOwogCS8qIGdlbmVyYXRlcyB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIGZvciBtb2R1bGUgbG9hZCAqLwogCXVuc2lnbmVkIGxvbmcgbmV4dF9tb2Rfc2VxOwomIzQzOwkvKiBidW1wZWQgb24gZXZlcnkgbW9kdWxlIGxvYWQgYW5kIHVubG9hZCAqLwomIzQzOwl1bnNpZ25lZCBsb25nIGNvbnRlbnRfaWQ7CiB9OwogCiBzdHJ1Y3QgY29kZXRhZ19yYW5nZSB7CkBAIC01MCw2ICYjNDM7NTIsMjAgQEAgdm9pZCBjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpCiAJdXBfcmVhZCgmYW1wO2N0dHlwZS0mZ3Q7bW9kX2xvY2spOwogfQogCiYjNDM7dW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtjdHR5cGUtJmd0O21vZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGN0dHlwZS0mZ3Q7Y29udGVudF9pZDsKJiM0Mzt9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtjdHR5cGUtJmd0O21vZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGN0dHlwZS0mZ3Q7Y291bnQ7CiYjNDM7fQomIzQzOwogc3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgY29kZXRhZ19nZXRfY3RfaXRlcihzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpCiB7CiAJc3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlciA9IHsKQEAgLTIwNCw2ICYjNDM7MjIwLDcgQEAgc3RhdGljIGludCBjb2RldGFnX21vZHVsZV9pbml0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSwgc3RydWN0IG1vZHVsZSAqbW9kKQogCiAJZG93bl93cml0ZSgmYW1wO2N0dHlwZS0mZ3Q7bW9kX2xvY2spOwogCWNtb2QtJmd0O21vZF9zZXEgPSAmIzQzOyYjNDM7Y3R0eXBlLSZndDtuZXh0X21vZF9zZXE7CiYjNDM7CSYjNDM7JiM0MztjdHR5cGUtJmd0O2NvbnRlbnRfaWQ7CiAJbW9kX2lkID0gaWRyX2FsbG9jKCZhbXA7Y3R0eXBlLSZndDttb2RfaWRyLCBjbW9kLCAwLCAwLCBHRlBfS0VSTkVMKTsKIAlpZiAobW9kX2lkICZndDs9IDApIHsKIAkJaWYgKGN0dHlwZS0mZ3Q7ZGVzYy5tb2R1bGVfbG9hZCkgewpAQCAtMzY4LDYgJiM0MzszODUsNyBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpCiAJCQljdHR5cGUtJmd0O2NvdW50IC09IHJhbmdlX3NpemUoY3R0eXBlLCAmYW1wO2Ntb2QtJmd0O3JhbmdlKTsKIAkJCWlkcl9yZW1vdmUoJmFtcDtjdHR5cGUtJmd0O21vZF9pZHIsIG1vZF9pZCk7CiAJCQlrZnJlZShjbW9kKTsKJiM0MzsJCQkmIzQzOyYjNDM7Y3R0eXBlLSZndDtjb250ZW50X2lkOwogCQl9CiAJCXVwX3dyaXRlKCZhbXA7Y3R0eXBlLSZndDttb2RfbG9jayk7CiAJCWlmIChmb3VuZCAmYW1wOyZhbXA7IGN0dHlwZS0mZ3Q7ZGVzYy5mcmVlX3NlY3Rpb25fbWVtKQpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuYwppbmRleCBkOWJlMWNmNTE4N2Q5Ny4uMzJhYzA2NzRkOGJmNmQgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC01LDYgJiM0Mzs1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rYWxsc3ltcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfZXh0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGdhbGxvY190YWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9jX2ZzLmgmZ3Q7CkBAIC0xNCw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ19jaG9pY2VzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ttZW1sZWFrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvYWxsb2NfdGFnLmgmZ3Q7CiAKICNkZWZpbmUgQUxMT0NJTkZPX0ZJTEVfTkFNRQkJJiMzNDthbGxvY2luZm8mIzM0OwogI2RlZmluZSBNT0RVTEVfQUxMT0NfVEFHX1ZNQVBfU0laRQkoMTAwMDAwVUwgKiBzaXplb2Yoc3RydWN0IGFsbG9jX3RhZykpCkBAIC00Nyw2ICYjNDM7NDksMTEgQEAgc3RydWN0IGFsbG9jaW5mb19wcml2YXRlIHsKIAlzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyOwogCXN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIHJlcG9ydGVkX2l0ZXI7CiAJYm9vbCBwcmludF9oZWFkZXI7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJLyogaW9jdGwgdXNlcyBhIHNlcGFyYXRlIGl0ZXJhdG9yIG5vdCB0byBpbnRlcmZlcmUgd2l0aCByZWFkcyAqLwomIzQzOwlzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpb2N0bF9pdGVyOwomIzQzOwlib29sIHBvc2l0aW9uZWQ7IC8qIHNlcV9vcGVuX3ByaXZhdGUoKSBzZXRzIHRvIDAgKi8KJiM0MzsJc3RydWN0IG11dGV4IGlvY3RsX2xvY2s7CiB9OwogCiBzdGF0aWMgdm9pZCAqYWxsb2NpbmZvX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCkBAIC0xMzAsNiAmIzQzOzEzNywzNDAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhbGxvY2luZm9fc2VxX29wID0gewogCS5zaG93CT0gYWxsb2NpbmZvX3Nob3csCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBJbml0aWFsaXplcyBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBhbGxvY2F0ZXMgcHJpdmF0ZSBzdGF0ZSB3aGVuIG9wZW5pbmcKJiM0MzsgKiB0aGUgL3Byb2MvYWxsb2NpbmZvIHByb2NmcyBlbnRyeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFsbG9jaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmYW1wO2FsbG9jaW5mb19zZXFfb3AsCiYjNDM7CQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUpKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJCXN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSAqcHJpdiA9IG0tJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7CQltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7aW9jdGxfbG9jayk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDbGVhbnMgdXAgdGhlIHNlcV9maWxlIHN0YXRlIGFuZCBmcmVlcyB1cCB0aGUgcHJpdmF0ZSBzdGF0ZSBhbGxvY2F0ZWQgaW4KJiM0MzsgKiBhbGxvY2luZm9fb3BlbigpIHdoZW4gY2xvc2luZyB0aGUgL3Byb2MvYWxsb2NpbmZvIGZpbGUgZGVzY3JpcHRvci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFsbG9jaW5mb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXYgPSBtLSZndDtwcml2YXRlOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7cHJpdi0mZ3Q7aW9jdGxfbG9jayk7CiYjNDM7CXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3VmZml4IG9mIGEgc3RyaW5nIHNvIHRoYXQgaXRzIGxlbmd0aCBmaXRzIHdpdGhpbgomIzQzOyAqIEFMTE9DSU5GT19TVFJfU0laRSwgcHJlc2VydmluZyB0aGUgdHJhaWxpbmcgY2hhcmFjdGVycy4KJiM0MzsgKiBGdW5jdGlvbiwgZmlsZSBhbmQgbW9kdWxlIG5hbWVzIG9mdGVuIGhhdmUgdGhlIHNhbWUgcHJlZml4ZXMsIHRoZXJlZm9yZQomIzQzOyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG8KJiM0MzsgKiBtaW5pbWl6ZSB0aGUgY2hhbmNlcyBvZiBuYW1lIGNvbGxpc2lvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpCiYjNDM7ewomIzQzOwlzaXplX3QgbGVuID0gc3RybGVuKHN0cik7CiYjNDM7CiYjNDM7CS8qIEtlZXAgYW4gZXh0cmEgc3BhY2UgZm9yIHRoZSB0cmFpbGluZyBOVUxMLiAqLwomIzQzOwlpZiAobGVuICZndDs9IEFMTE9DSU5GT19TVFJfU0laRSkKJiM0MzsJCXN0ciAmIzQzOz0gKGxlbiAtIEFMTE9DSU5GT19TVFJfU0laRSkgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIHN0cjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ29weSBhIHN0cmluZyBhbmQgdHJpbSBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgaXQmIzM5O3MgdG9vIGxvbmcgKi8KJiM0MztzdGF0aWMgdm9pZCBhbGxvY2luZm9fY29weV9zdHIoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQomIzQzO3sKJiM0MzsJc3Ryc2NweV9wYWQoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCBvbmx5IGNvbnNpZGVyIHRoZSB0cmltbWVkIHN1ZmZpeCBpZiBzMSBpcyB0b28gbG9uZyAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2NtcF9zdHIoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICp0ZW1wbGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdHJuY21wKGFsbG9jaW5mb19zdHIoc3RyKSwgdGVtcGxhdGUsIEFMTE9DSU5GT19TVFJfU0laRSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEZldGNoIHRoZSBwZXItQ1BVIGNvdW50ZXJzICovCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhzdHJ1Y3QgY29kZXRhZyAqY3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gYWxsb2NfdGFnX3JlYWQoY3RfdG9fYWxsb2NfdGFnKGN0KSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUG9wdWxhdGVzIHRoZSBVQVBJIGFsbG9jaW5mb190YWdfZGF0YSBzdHJ1Y3R1cmUgd2l0aCBhY3RpdmUgcnVudGltZQomIzQzOyAqIHByb2ZpbGluZyBjb3VudGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgZ2l2ZW4ga2VybmVsIGNvZGV0YWcuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYWxsb2NpbmZvX3RvX3BhcmFtcyhzdHJ1Y3QgY29kZXRhZyAqY3QsCiYjNDM7CQkJCXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgKmRhdGEsCiYjNDM7CQkJCXN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgKmNvdW50ZXJzKQomIzQzO3sKJiM0MzsJaWYgKGN0LSZndDttb2RuYW1lKQomIzQzOwkJYWxsb2NpbmZvX2NvcHlfc3RyKGRhdGEtJmd0O3RhZy5tb2RuYW1lLCBjdC0mZ3Q7bW9kbmFtZSk7CiYjNDM7CWVsc2UKJiM0MzsJCWRhdGEtJmd0O3RhZy5tb2RuYW1lWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwlhbGxvY2luZm9fY29weV9zdHIoZGF0YS0mZ3Q7dGFnLmZ1bmN0aW9uLCBjdC0mZ3Q7ZnVuY3Rpb24pOwomIzQzOwlhbGxvY2luZm9fY29weV9zdHIoZGF0YS0mZ3Q7dGFnLmZpbGVuYW1lLCBjdC0mZ3Q7ZmlsZW5hbWUpOwomIzQzOwlkYXRhLSZndDt0YWcubGluZW5vID0gY3QtJmd0O2xpbmVubzsKJiM0MzsJZGF0YS0mZ3Q7Y291bnRlci5ieXRlcyA9IGNvdW50ZXJzLSZndDtieXRlczsKJiM0MzsJZGF0YS0mZ3Q7Y291bnRlci5jYWxscyA9IGNvdW50ZXJzLSZndDtjYWxsczsKJiM0MzsJZGF0YS0mZ3Q7Y291bnRlci5hY2N1cmF0ZSA9ICFhbGxvY190YWdfaXNfaW5hY2N1cmF0ZShjdF90b19hbGxvY190YWcoY3QpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXRyaWV2ZXMgdGhlIHVuaXF1ZSBjb250ZW50IElEIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBhbGxvY2F0aW9uIHRhZyBtb2R1bGUKJiM0MzsgKiBsYXlvdXQsIGFsbG93aW5nIHVzZXJzcGFjZSB0byBkZXRlY3QgaWYgbW9kdWxlcyB3ZXJlIGxvYWRlZCAvIHVubG9hZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBwYXJhbXM7CiYjNDM7CiYjNDM7CWNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJcGFyYW1zLmlkID0gY29kZXRhZ19nZXRfY29udGVudF9pZChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7CiYjNDM7CWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3BhcmFtcywgc2l6ZW9mKHBhcmFtcykpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZlcmlmaWVzIHdoZXRoZXIgYSBnaXZlbiBjb2RldGFnIHNhdGlzZmllcyB0aGUgYWN0aXZlIGZpbHRlcmluZyBjcml0ZXJpYSBieQomIzQzOyAqIG1hdGNoaW5nIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGZpbHRlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsCiYjNDM7CQkJICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsCiYjNDM7CQkJICAgYm9vbCAqZmV0Y2hlZF9jb3VudGVycykKJiM0Mzt7CiYjNDM7CWJvb2wgaW5hY2N1cmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFmaWx0ZXIgfHwgIWZpbHRlci0mZ3Q7bWFzaykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19NT0ROQU1FKSB7CiYjNDM7CQkvKiB1c2VyIHdhbnRzIHRvIGZpbHRlciBieSBtb2RuYW1lIGJ1dCBjdC0mZ3Q7bW9kbmFtZSBpcyBOVUxMICovCiYjNDM7CQlpZiAoIWN0LSZndDttb2RuYW1lKSB7CiYjNDM7CQkJLyogdmFsaWRhdGUgaWYgdXNlciB3YXMgYXR0ZW1wdGluZyB0byBmaWx0ZXIgZm9yIGJ1aWx0LWluIGFsbG9jYXRpb25zICovCiYjNDM7CQkJaWYgKGZpbHRlci0mZ3Q7ZmllbGRzLm1vZG5hbWVbMF0gIT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9IGVsc2UgaWYgKGFsbG9jaW5mb19jbXBfc3RyKGN0LSZndDttb2RuYW1lLCBmaWx0ZXItJmd0O2ZpZWxkcy5tb2RuYW1lKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBjdC0mZ3Q7ZnVuY3Rpb24gJmFtcDsmYW1wOyBhbGxvY2luZm9fY21wX3N0cihjdC0mZ3Q7ZnVuY3Rpb24sIGZpbHRlci0mZ3Q7ZmllbGRzLmZ1bmN0aW9uKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBjdC0mZ3Q7ZmlsZW5hbWUgJmFtcDsmYW1wOyBhbGxvY2luZm9fY21wX3N0cihjdC0mZ3Q7ZmlsZW5hbWUsIGZpbHRlci0mZ3Q7ZmllbGRzLmZpbGVuYW1lKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykgJmFtcDsmYW1wOwomIzQzOwkgICAgY3QtJmd0O2xpbmVubyAhPSBmaWx0ZXItJmd0O2ZpZWxkcy5saW5lbm8pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEUpIHsKJiM0MzsJCWluYWNjdXJhdGUgPSAhIShjdC0mZ3Q7ZmxhZ3MgJmFtcDsgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpOwomIzQzOwkJaWYgKGluYWNjdXJhdGUgIT0gISEoZmlsdGVyLSZndDtmaWVsZHMuaW5hY2N1cmF0ZSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmaWx0ZXItJmd0O21hc2sgJmFtcDsgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHsKJiM0MzsJCWlmICghKmZldGNoZWRfY291bnRlcnMpIHsKJiM0MzsJCQkqY291bnRlcnMgPSBhbGxvY2luZm9fcHJlZmV0Y2hfY291bnRlcnMoY3QpOwomIzQzOwkJCSpmZXRjaGVkX2NvdW50ZXJzID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWlmICgoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGNvdW50ZXJzLSZndDtieXRlcyAmbHQ7IGZpbHRlci0mZ3Q7bWluX3NpemUpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJaWYgKChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY291bnRlcnMtJmd0O2J5dGVzICZndDsgZmlsdGVyLSZndDttYXhfc2l6ZSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzCiYjNDM7ICogcHJvZmlsaW5nIGRhdGEgYW5kIHJldHVybnMgaXQgdG8gdXNlcnNwYWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXY7CiYjNDM7CXN0cnVjdCBjb2RldGFnICpjdDsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb19nZXRfYXQgcGFyYW1zID0gezB9OwomIzQzOwlfX3U2NCBza2lwX2NvdW50OwomIzQzOwlzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXJzOwomIzQzOwlib29sIGZldGNoZWRfY291bnRlcnM7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3BhcmFtcywgYXJnLCBzaXplb2YocGFyYW1zKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJaWYgKHBhcmFtcy5maWx0ZXIubWFzayAmYW1wOyB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoKHBhcmFtcy5maWx0ZXIubWFzayAmYW1wOyBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUpICZhbXA7JmFtcDsKJiM0MzsJICAgIChwYXJhbXMuZmlsdGVyLm1hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwYXJhbXMuZmlsdGVyLm1pbl9zaXplICZndDsgcGFyYW1zLmZpbHRlci5tYXhfc2l6ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlwcml2ID0gbS0mZ3Q7cHJpdmF0ZTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O2lvY3RsX2xvY2spOwomIzQzOwljb2RldGFnX2xvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7CiYjNDM7CiYjNDM7CWlmIChwYXJhbXMucG9zICZndDs9IGNvZGV0YWdfZ2V0X2NvdW50KGFsbG9jX3RhZ19jdHR5cGUpKSB7CiYjNDM7CQljb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2lvY3RsX2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tpcF9jb3VudCA9IHBhcmFtcy5wb3M7CiYjNDM7CiYjNDM7CWlmIChwYXJhbXMuZmlsdGVyLm1hc2spCiYjNDM7CQlwcml2LSZndDtmaWx0ZXIgPSBwYXJhbXMuZmlsdGVyOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtmaWx0ZXIubWFzayA9IDA7CiYjNDM7CiYjNDM7CS8qIEZpbmQgdGhlIGNvZGV0YWcgKi8KJiM0MzsJcHJpdi0mZ3Q7aW9jdGxfaXRlciA9IGNvZGV0YWdfZ2V0X2N0X2l0ZXIoYWxsb2NfdGFnX2N0dHlwZSk7CiYjNDM7CWN0ID0gY29kZXRhZ19uZXh0X2N0KCZhbXA7cHJpdi0mZ3Q7aW9jdGxfaXRlcik7CiYjNDM7CiYjNDM7CXdoaWxlIChjdCkgewomIzQzOwkJZmV0Y2hlZF9jb3VudGVycyA9IGZhbHNlOwomIzQzOwkJaWYgKG1hdGNoZXNfZmlsdGVyKGN0LCAmYW1wO3ByaXYtJmd0O2ZpbHRlciwgJmFtcDtjb3VudGVycywgJmFtcDtmZXRjaGVkX2NvdW50ZXJzKSkgewomIzQzOwkJCWlmIChza2lwX2NvdW50ID09IDApCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCXNraXBfY291bnQtLTsKJiM0MzsJCX0KJiM0MzsJCWN0ID0gY29kZXRhZ19uZXh0X2N0KCZhbXA7cHJpdi0mZ3Q7aW9jdGxfaXRlcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGN0KSB7CiYjNDM7CQlpZiAoIWZldGNoZWRfY291bnRlcnMpCiYjNDM7CQkJY291bnRlcnMgPSBhbGxvY2luZm9fcHJlZmV0Y2hfY291bnRlcnMoY3QpOwomIzQzOwkJYWxsb2NpbmZvX3RvX3BhcmFtcyhjdCwgJmFtcDtwYXJhbXMuZGF0YSwgJmFtcDtjb3VudGVycyk7CiYjNDM7CQlwcml2LSZndDtwb3NpdGlvbmVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwljb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7aW9jdGxfbG9jayk7CiYjNDM7CiYjNDM7CWlmICghY3QpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7cGFyYW1zLCBzaXplb2YocGFyYW1zKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWR2YW5jZXMgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGFsbG9jYXRpb24gdGFnIGluIHRoZSBzZXF1ZW5jZSBhbmQKJiM0MzsgKiByZXR1cm5zIGl0cyBwcm9maWxpbmcgZGF0YSB0byB1c2Vyc3BhY2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2OwomIzQzOwlzdHJ1Y3QgY29kZXRhZyAqY3Q7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcGFyYW1zOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyczsKJiM0MzsJYm9vbCBmZXRjaGVkX2NvdW50ZXJzOwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKJiM0MzsJcHJpdiA9IG0tJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtpb2N0bF9sb2NrKTsKJiM0MzsJY29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3Bvc2l0aW9uZWQpIHsKJiM0MzsJCXByaXYtJmd0O2lvY3RsX2l0ZXIgPSBjb2RldGFnX2dldF9jdF9pdGVyKGFsbG9jX3RhZ19jdHR5cGUpOwomIzQzOwkJcHJpdi0mZ3Q7cG9zaXRpb25lZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3QgPSBjb2RldGFnX25leHRfY3QoJmFtcDtwcml2LSZndDtpb2N0bF9pdGVyKTsKJiM0MzsJd2hpbGUgKGN0KSB7CiYjNDM7CQlmZXRjaGVkX2NvdW50ZXJzID0gZmFsc2U7CiYjNDM7CQlpZiAobWF0Y2hlc19maWx0ZXIoY3QsICZhbXA7cHJpdi0mZ3Q7ZmlsdGVyLCAmYW1wO2NvdW50ZXJzLCAmYW1wO2ZldGNoZWRfY291bnRlcnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJY3QgPSBjb2RldGFnX25leHRfY3QoJmFtcDtwcml2LSZndDtpb2N0bF9pdGVyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY3QpIHsKJiM0MzsJCWlmICghZmV0Y2hlZF9jb3VudGVycykKJiM0MzsJCQljb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7CiYjNDM7CQlhbGxvY2luZm9fdG9fcGFyYW1zKGN0LCAmYW1wO3BhcmFtcywgJmFtcDtjb3VudGVycyk7CiYjNDM7CX0KJiM0MzsJaWYgKCFjdCkgewomIzQzOwkJcHJpdi0mZ3Q7cG9zaXRpb25lZCA9IGZhbHNlOwomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwljb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7aW9jdGxfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXQgPT0gMCkgewomIzQzOwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7cGFyYW1zLCBzaXplb2YocGFyYW1zKSkpCiYjNDM7CQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFbnRyeSBwb2ludCBpb2N0bCBmdW5jdGlvbiBmb3IgL3Byb2MvYWxsb2NpbmZvIHJvdXRpbmcgcmVxdWVzdHMgdG8gZmV0Y2ggdGhlCiYjNDM7ICogbGF5b3V0IGNvbnRlbnQgSUQsIHNlZWsgdG8gYSBzcGVjaWZpYyB0YWcsIG9yIHJlYWQgc2VxdWVudGlhbCB0YWdzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBfX2FyZykKJiM0Mzt7CiYjNDM7CXZvaWQgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilfX2FyZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChjbWQpIHsKJiM0MzsJY2FzZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQ6CiYjNDM7CQlyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhLCBhcmcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfQVQ6CiYjNDM7CQlyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtJmd0O3ByaXZhdGVfZGF0YSwgYXJnKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFMTE9DSU5GT19JT0NfR0VUX05FWFQ6CiYjNDM7CQlyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhLCBhcmcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXQgPSAtRU5PSU9DVExDTUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0NPTVBBVAomIzQzO3N0YXRpYyBsb25nIGFsbG9jaW5mb19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3sKJiM0MzsJcmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0gewomIzQzOwkucHJvY19vcGVuCQk9IGFsbG9jaW5mb19vcGVuLAomIzQzOwkucHJvY19yZWFkX2l0ZXIJCT0gc2VxX3JlYWRfaXRlciwKJiM0MzsJLnByb2NfbHNlZWsJCT0gc2VxX2xzZWVrLAomIzQzOwkucHJvY19yZWxlYXNlCQk9IGFsbG9jaW5mb19yZWxlYXNlLAomIzQzOwkucHJvY19pb2N0bAkJPSBhbGxvY2luZm9faW9jdGwsCiYjNDM7I2lmZGVmIENPTkZJR19DT01QQVQKJiM0MzsJLnByb2NfY29tcGF0X2lvY3RsCT0gYWxsb2NpbmZvX2NvbXBhdF9pb2N0bCwKJiM0MzsjZW5kaWYKJiM0Mzt9OwomIzQzOwogc2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApCiB7CiAJc3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlcjsKQEAgLTk5Myw4ICYjNDM7MTMzNCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpCiAJCXJldHVybiAwOwogCX0KIAotCWlmICghcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgJmFtcDthbGxvY2luZm9fc2VxX29wLAotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSksIE5VTEwpKSB7CiYjNDM7CWlmICghcHJvY19jcmVhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgJmFtcDthbGxvY2luZm9fcHJvY19vcHMpKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byBjcmVhdGUgJXMgZmlsZVxuJiMzNDssIEFMTE9DSU5GT19GSUxFX05BTUUpOwogCQlzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlCmluZGV4IDhkNGRiMjI0MWNjMmEyLi4xMjk0MWQ2OGE3ZjhhZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKQEAgLTEsNSAmIzQzOzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogVEFSR0VUUyAmIzQzOz0gYWNjdAomIzQzO1RBUkdFVFMgJiM0Mzs9IGFsbG9jX3RhZwogVEFSR0VUUyAmIzQzOz0gYWxzYQogVEFSR0VUUyAmIzQzOz0gYW1kLXBzdGF0ZQogVEFSR0VUUyAmIzQzOz0gYXJtNjQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZjQxZDkyZDA2YjE4NDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsOSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MztURVNUX0dFTl9QUk9HUyA6PSBhbGxvY2luZm9faW9jdGxfdGVzdAomIzQzOwomIzQzO0NGTEFHUyAmIzQzOz0gLVdhbGwKJiM0MztDRkxBR1MgJiM0Mzs9ICQoS0hEUl9JTkNMVURFUykKJiM0MzsKJiM0MztpbmNsdWRlIC4uL2xpYi5tawomIzQzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMDkyMzQ4MDk3MjA0MzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSw1NDggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7CiYjNDM7Lyoga3NlbGZ0ZXN0IGZvciBhbGxvY2luZm8gaW9jdGwKJiM0MzsgKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bAomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUsIEluYy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWxsb2NfdGFnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9rc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBNQVhfTElORV9MRU4JCTUxMgomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX1BST0MJCSYjMzQ7L3Byb2MvYWxsb2NpbmZvJiMzNDsKJiM0MzsKJiM0MztlbnVtIGlvY3RsX3JldCB7CiYjNDM7CUlPQ1RMX1NVQ0NFU1MgPSAwLAomIzQzOwlJT0NUTF9GQUlMVVJFID0gMSwKJiM0MzsJSU9DVExfSU5WQUxJRF9EQVRBID0gMiwKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgVkVDX01BWF9FTlRSSUVTIDMyCiYjNDM7CiYjNDM7c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgewomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHRhZ1tWRUNfTUFYX0VOVFJJRVNdOwomIzQzOwlfX3U2NCBjb3VudDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCAqcGFyYW1zKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlvY3RsKGRldl9mZCwgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lELCBwYXJhbXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfYXQoaW50IGRldl9mZCwgc3RydWN0IGFsbG9jaW5mb19nZXRfYXQgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb2N0bChkZXZfZmQsIEFMTE9DSU5GT19JT0NfR0VUX0FULCBwYXJhbXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfbmV4dChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpwYXJhbXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gaW9jdGwoZGV2X2ZkLCBBTExPQ0lORk9fSU9DX0dFVF9ORVhULCBwYXJhbXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtYXRjaF9lbnRyeShjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpwcm9jZnNfZW50cnksCiYjNDM7CQkJY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqdGFnX2RhdGEsCiYjNDM7CQkJYm9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sCiYjNDM7CQkJYm9vbCBtYXRjaF9mdW5jdGlvbiwgYm9vbCBtYXRjaF9maWxlbmFtZSkKJiM0Mzt7CiYjNDM7CWlmIChtYXRjaF9ieXRlcyAmYW1wOyZhbXA7IHRhZ19kYXRhLSZndDtjb3VudGVyLmJ5dGVzICE9IHByb2Nmc19lbnRyeS0mZ3Q7Y291bnRlci5ieXRlcykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtzaXplIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYXRjaF9jYWxscyAmYW1wOyZhbXA7IHRhZ19kYXRhLSZndDtjb3VudGVyLmNhbGxzICE9IHByb2Nmc19lbnRyeS0mZ3Q7Y291bnRlci5jYWxscykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYWxsIGNvdW50IHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYXRjaF9saW5lbm8gJmFtcDsmYW1wOyB0YWdfZGF0YS0mZ3Q7dGFnLmxpbmVubyAhPSBwcm9jZnNfZW50cnktJmd0O3RhZy5saW5lbm8pIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bGluZW5vIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYXRjaF9mdW5jdGlvbiAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJuY21wKHRhZ19kYXRhLSZndDt0YWcuZnVuY3Rpb24sIHByb2Nmc19lbnRyeS0mZ3Q7dGFnLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Z1bmN0aW9uIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYXRjaF9maWxlbmFtZSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJuY21wKHRhZ19kYXRhLSZndDt0YWcuZmlsZW5hbWUsIHByb2Nmc19lbnRyeS0mZ3Q7dGFnLmZpbGVuYW1lLCBBTExPQ0lORk9fU1RSX1NJWkUpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2ZpbGVuYW1lIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtYXRjaF9lbnRyaWVzKGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcywKJiM0MzsJCQkgIGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzLAomIzQzOwkJCSAgYm9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sCiYjNDM7CQkJICBib29sIG1hdGNoX2Z1bmN0aW9uLCBib29sIG1hdGNoX2ZpbGVuYW1lKQomIzQzO3sKJiM0MzsJX191NjQgaTsKJiM0MzsKJiM0MzsJaWYgKHByb2Nmc19lbnRyaWVzLSZndDtjb3VudCAhPSB0YWdzLSZndDtjb3VudCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtFbnRyeSBjb3VudCBtaXNtYXRjaC4gaW9jdGwgZW50cmllczogJWxsdSwgcHJvYyBlbnRyaWVzOiAlbGx1XG4mIzM0OywKJiM0MzsJCQkgICAgICAgdGFncy0mZ3Q7Y291bnQsIHByb2Nmc19lbnRyaWVzLSZndDtjb3VudCk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHByb2Nmc19lbnRyaWVzLSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbWF0Y2hfZW50cnkoJmFtcDtwcm9jZnNfZW50cmllcy0mZ3Q7dGFnW2ldLCAmYW1wO3RhZ3MtJmd0O3RhZ1tpXSwKJiM0MzsJCQkJIG1hdGNoX2J5dGVzLCBtYXRjaF9jYWxscywgbWF0Y2hfbGluZW5vLAomIzQzOwkJCQkgbWF0Y2hfZnVuY3Rpb24sIG1hdGNoX2ZpbGVuYW1lKSkgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JWxsdXRoIGVudHJ5IGRvZXMgbm90IG1hdGNoLlxuJiMzNDssIGkpOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmFsbG9jaW5mb19zdHIoY29uc3QgY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpOwomIzQzOwomIzQzOwlpZiAobGVuICZndDs9IEFMTE9DSU5GT19TVFJfU0laRSkKJiM0MzsJCXN0ciAmIzQzOz0gKGxlbiAtIEFMTE9DSU5GT19TVFJfU0laRSkgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIHN0cjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWxsb2NpbmZvX2NvcHlfc3RyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKJiM0Mzt7CiYjNDM7CXN0cm5jcHkoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUgLSAxKTsKJiM0MzsJZGVzdFtBTExPQ0lORk9fU1RSX1NJWkUgLSAxXSA9ICYjMzk7XDAmIzM5OzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcikKJiM0Mzt7CiYjNDM7CUZJTEUgKmZwID0gZm9wZW4oQUxMT0NJTkZPX1BST0MsICYjMzQ7ciYjMzQ7KTsKJiM0MzsJY2hhciBsaW5lW01BWF9MSU5FX0xFTl07CiYjNDM7CWludCBtYXRjaGVzOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHByb2Nmc19lbnRyeTsKJiM0MzsKJiM0MzsJaWYgKCFmcCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAmIzM0OyBBTExPQ0lORk9fUFJPQyAmIzM0OyBmb3IgcmVhZGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsJbWVtc2V0KHByb2Nmc19lbnRyaWVzLCAwLCBzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSAmYW1wOyZhbXA7IHByb2Nmc19lbnRyaWVzLSZndDtjb3VudCAmbHQ7IFZFQ19NQVhfRU5UUklFUykgewomIzQzOwkJY2hhciBmaWxlbmFtZVtNQVhfTElORV9MRU5dOwomIzQzOwkJY2hhciBmdW5jdGlvbltNQVhfTElORV9MRU5dOwomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7cHJvY2ZzX2VudHJ5LCAwLCBzaXplb2YocHJvY2ZzX2VudHJ5KSk7CiYjNDM7CQltYXRjaGVzID0gc3NjYW5mKGxpbmUsICYjMzQ7JWxsdSAlbGx1ICVbXjpdOiVsbHUgZnVuYzolcyYjMzQ7LAomIzQzOwkJCQkgJmFtcDtwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcywKJiM0MzsJCQkJICZhbXA7cHJvY2ZzX2VudHJ5LmNvdW50ZXIuY2FsbHMsCiYjNDM7CQkJCSBmaWxlbmFtZSwKJiM0MzsJCQkJICZhbXA7cHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8sCiYjNDM7CQkJCSBmdW5jdGlvbik7CiYjNDM7CiYjNDM7CQlpZiAobWF0Y2hlcyAhPSA1KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJYWxsb2NpbmZvX2NvcHlfc3RyKHByb2Nmc19lbnRyeS50YWcuZmlsZW5hbWUsIGZpbGVuYW1lKTsKJiM0MzsJCWFsbG9jaW5mb19jb3B5X3N0cihwcm9jZnNfZW50cnkudGFnLmZ1bmN0aW9uLCBmdW5jdGlvbik7CiYjNDM7CiYjNDM7CQlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkgewomIzQzOwkJCWlmIChzdHJuY21wKHByb2Nmc19lbnRyeS50YWcuZmlsZW5hbWUsCiYjNDM7CQkJCSAgICBmaWx0ZXItJmd0O2ZpZWxkcy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTikgewomIzQzOwkJCWlmIChzdHJuY21wKHByb2Nmc19lbnRyeS50YWcuZnVuY3Rpb24sCiYjNDM7CQkJCSAgICBmaWx0ZXItJmd0O2ZpZWxkcy5mdW5jdGlvbiwgQUxMT0NJTkZPX1NUUl9TSVpFKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk8pIHsKJiM0MzsJCQlpZiAocHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8gIT0gZmlsdGVyLSZndDtmaWVsZHMubGluZW5vKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSB7CiYjNDM7CQkJaWYgKHByb2Nmc19lbnRyeS5jb3VudGVyLmJ5dGVzICZsdDsgZmlsdGVyLSZndDttaW5fc2l6ZSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkgewomIzQzOwkJCWlmIChwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcyAmZ3Q7IGZpbHRlci0mZ3Q7bWF4X3NpemUpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVtY3B5KCZhbXA7cHJvY2ZzX2VudHJpZXMtJmd0O3RhZ1twcm9jZnNfZW50cmllcy0mZ3Q7Y291bnQmIzQzOyYjNDM7XSwgJmFtcDtwcm9jZnNfZW50cnksCiYjNDM7CQkgICAgICAgc2l6ZW9mKHByb2Nmc19lbnRyeSkpOwomIzQzOwl9CiYjNDM7CWZjbG9zZShmcCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgZW51bSBpb2N0bF9yZXQgZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MsCiYjNDM7CQkJCQkJIGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsCiYjNDM7CQkJCQkJIF9fdTY0IHN0YXJ0X3BvcykKJiM0Mzt7CiYjNDM7CWludCBmZCA9IG9wZW4oQUxMT0NJTkZPX1BST0MsIE9fUkRPTkxZKTsKJiM0MzsKJiM0MzsJaWYgKGZkICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAmIzM0OyBBTExPQ0lORk9fUFJPQyAmIzM0OyBmb3IgSU9DVExcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBJT0NUTF9GQUlMVVJFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBzdGFydF9jb250X2lkLCBlbmRfY29udF9pZDsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb19nZXRfYXQgZ2V0X2F0X3BhcmFtczsKJiM0MzsJY29uc3QgaW50IG1heF9yZXRyaWVzID0gMTA7CiYjNDM7CWludCByZXRyeV9jb3VudCA9IDA7CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkIG1heSByZXR1cm4gZGlmZmVyZW50IHZhbHVlcyBpZiBhIGtlcm5lbCBtb2R1bGUgd2FzIGxvYWRlZAomIzQzOwkgKiBiZXR3ZWVuIHRoZSB0d28gY2FsbHMuIElmIHRoYXQgaGFwcGVucywgdGhlIGRhdGEgZ2F0aGVyZWQgY2Fubm90IGJlIGNvbnNpZGVyZWQgY29uc2lzdGVudAomIzQzOwkgKiBhbmQgaGVuY2UgbmVlZHMgdG8gYmUgZmV0Y2hlZCBhZ2FpbiB0byBhdm9pZCBmbGFraW5lc3MuCiYjNDM7CSAqLwomIzQzOwlkbyB7CiYjNDM7CQlpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsICZhbXA7c3RhcnRfY29udF9pZCkpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCQlzdGF0dXMgPSBJT0NUTF9GQUlMVVJFOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVtc2V0KHRhZ3MsIDAsIHNpemVvZigqdGFncykpOwomIzQzOwkJbWVtc2V0KCZhbXA7Z2V0X2F0X3BhcmFtcywgMCwgc2l6ZW9mKGdldF9hdF9wYXJhbXMpKTsKJiM0MzsJCW1lbWNweSgmYW1wO2dldF9hdF9wYXJhbXMuZmlsdGVyLCBmaWx0ZXIsIHNpemVvZigqZmlsdGVyKSk7CiYjNDM7CQlnZXRfYXRfcGFyYW1zLnBvcyA9IHN0YXJ0X3BvczsKJiM0MzsJCWlmIChfX2FsbG9jaW5mb19nZXRfYXQoZmQsICZhbXA7Z2V0X2F0X3BhcmFtcykpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2FsbG9jaW5mb19nZXRfYXQgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQkJc3RhdHVzID0gSU9DVExfRkFJTFVSRTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCW1lbWNweSgmYW1wO3RhZ3MtJmd0O3RhZ1t0YWdzLSZndDtjb3VudCYjNDM7JiM0MztdLCAmYW1wO2dldF9hdF9wYXJhbXMuZGF0YSwgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpOwomIzQzOwomIzQzOwkJd2hpbGUgKHRhZ3MtJmd0O2NvdW50ICZsdDsgVkVDX01BWF9FTlRSSUVTICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgJmFtcDt0YWdzLSZndDt0YWdbdGFncy0mZ3Q7Y291bnRdKSA9PSAwKQomIzQzOwkJCXRhZ3MtJmd0O2NvdW50JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChmZCwgJmFtcDtlbmRfY29udF9pZCkpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCQlzdGF0dXMgPSBJT0NUTF9GQUlMVVJFOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHN0YXJ0X2NvbnRfaWQuaWQgPT0gZW5kX2NvbnRfaWQuaWQpIHsKJiM0MzsJCQlzdGF0dXMgPSBJT0NUTF9TVUNDRVNTOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBtaXNtYXRjaCwgcmV0cnlpbmcuLi5cbiYjMzQ7KTsKJiM0MzsJCQlzdGF0dXMgPSBJT0NUTF9JTlZBTElEX0RBVEE7CiYjNDM7CQl9CiYjNDM7CX0gd2hpbGUgKHN0YXR1cyA9PSBJT0NUTF9JTlZBTElEX0RBVEEgJmFtcDsmYW1wOyByZXRyeV9jb3VudCYjNDM7JiM0MzsgJmx0OyBtYXhfcmV0cmllcyk7CiYjNDM7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJcmV0dXJuIHN0YXR1czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW5fZmlsdGVyX3Rlc3QoY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzID0gbWFsbG9jKHNpemVvZigqdGFncykpOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqcHJvY2ZzX2VudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpOwomIzQzOwlpbnQgaW9jdGxfc3RhdHVzOwomIzQzOwlpbnQgcmV0ID0gS1NGVF9QQVNTOwomIzQzOwomIzQzOwlpZiAoIXRhZ3MgfHwgIXByb2Nmc19lbnRyaWVzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O01lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBmaWx0ZXIpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0Vycm9yIHJldHJpZXZpbmcgZW50cmllcyBmcm9tICYjMzQ7IEFMTE9DSU5GT19QUk9DICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByb2Nmc19lbnRyaWVzLSZndDtjb3VudCA9PSAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O05vIGVudHJpZXMgZm91bmQgaW4gJiMzNDsgQUxMT0NJTkZPX1BST0MgJiMzNDssIHNraXBwaW5nIHRlc3RcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfU0tJUDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb2N0bF9zdGF0dXMgPSBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyh0YWdzLCBmaWx0ZXIsIDApOwomIzQzOwlpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtUcm91YmxlIHJldHJpZXZpbmcgdmFsaWQgSU9DVEwgZW50cmllcywgc2tpcHBpbmcuXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsJaWYgKGlvY3RsX3N0YXR1cyA9PSBJT0NUTF9GQUlMVVJFKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0Vycm9yIHJldHJpZXZpbmcgSU9DVEwgZW50cmllcy5cbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIW1hdGNoX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIHRhZ3MsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpCiYjNDM7CQlyZXQgPSBLU0ZUX0ZBSUw7CiYjNDM7CiYjNDM7ZXhpdDoKJiM0MzsJZnJlZSh0YWdzKTsKJiM0MzsJZnJlZShwcm9jZnNfZW50cmllcyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9maWxlbmFtZV9maWx0ZXIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJY29uc3QgY2hhciAqdGFyZ2V0X2ZpbGVuYW1lID0gJiMzNDttbS9tZW1vcnkuYyYjMzQ7OwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTsKJiM0MzsJZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FOwomIzQzOwlzdHJuY3B5KGZpbHRlci5maWVsZHMuZmlsZW5hbWUsIHRhcmdldF9maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9maWx0ZXJfdGVzdCgmYW1wO2ZpbHRlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9mdW5jdGlvbl9maWx0ZXIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJY29uc3QgY2hhciAqdGFyZ2V0X2Z1bmN0aW9uID0gJiMzNDtkdXBfbW0mIzM0OzsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CiYjNDM7CWZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTjsKJiM0MzsJc3RybmNweShmaWx0ZXIuZmllbGRzLmZ1bmN0aW9uLCB0YXJnZXRfZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiBydW5fZmlsdGVyX3Rlc3QoJmFtcDtmaWx0ZXIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3Rfc2l6ZV9maWx0ZXIodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJaW50IHJldCA9IEtTRlRfUEFTUzsKJiM0MzsJX191NjQgdGFyZ2V0X3NpemUsIGksIHBvczsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqZm91bmRfdGFnID0gTlVMTDsKJiM0MzsJY29uc3QgY2hhciAqdGFyZ2V0X2Z1bmN0aW9uID0gJiMzNDtkb19pbml0X21vZHVsZSYjMzQ7OwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgc3RhcnRfY29udF9pZCwgZW5kX2NvbnRfaWQ7CiYjNDM7CWludCByZXRyeSA9IDA7CiYjNDM7CWNvbnN0IGludCBtYXhfcmV0cmllcyA9IDEwOwomIzQzOwomIzQzOwlpZiAoIXRhZ3MgfHwgIXByb2Nmc19lbnRyaWVzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O01lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZnJlZW1lbTsKJiM0MzsJfQomIzQzOwomIzQzOwlmZCA9IG9wZW4oQUxMT0NJTkZPX1BST0MsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAmIzM0OyBBTExPQ0lORk9fUFJPQyAmIzM0OzogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJZ290byBmcmVlbWVtOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWZvdW5kX3RhZyA9IE5VTEw7CiYjNDM7CQlwb3MgPSAwOwomIzQzOwomIzQzOwkJaWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCAmYW1wO3N0YXJ0X2NvbnRfaWQpKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDthbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW1lbXNldCgmYW1wO2ZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOwomIzQzOwkJZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OOwomIzQzOwkJc3RybmNweShmaWx0ZXIuZmllbGRzLmZ1bmN0aW9uLCB0YXJnZXRfZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSk7CiYjNDM7CiYjNDM7CQlpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCAmYW1wO2ZpbHRlcikpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O0Vycm9yIHJldHJpZXZpbmcgZW50cmllcyBmcm9tICYjMzQ7IEFMTE9DSU5GT19QUk9DICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CQkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwcm9jZnNfZW50cmllcy0mZ3Q7Y291bnQgPT0gMCkgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RnVuY3Rpb24gJXMgbm90IGZvdW5kIGluIHByb2Nmc1xuJiMzNDssIHRhcmdldF9mdW5jdGlvbik7CiYjNDM7CQkJcmV0ID0gS1NGVF9TS0lQOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXRhcmdldF9zaXplID0gcHJvY2ZzX2VudHJpZXMtJmd0O3RhZ1swXS5jb3VudGVyLmJ5dGVzOwomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CiYjNDM7CQlmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUgfCBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkU7CiYjNDM7CQlmaWx0ZXIubWluX3NpemUgPSB0YXJnZXRfc2l6ZTsKJiM0MzsJCWZpbHRlci5tYXhfc2l6ZSA9IHRhcmdldF9zaXplOwomIzQzOwomIzQzOwkJd2hpbGUgKDEpIHsKJiM0MzsJCQlzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCBnZXRfYXRfcGFyYW1zOwomIzQzOwomIzQzOwkJCW1lbXNldCgmYW1wO2dldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7CiYjNDM7CQkJbWVtY3B5KCZhbXA7Z2V0X2F0X3BhcmFtcy5maWx0ZXIsICZhbXA7ZmlsdGVyLCBzaXplb2YoZmlsdGVyKSk7CiYjNDM7CQkJZ2V0X2F0X3BhcmFtcy5wb3MgPSBwb3M7CiYjNDM7CiYjNDM7CQkJaWYgKF9fYWxsb2NpbmZvX2dldF9hdChmZCwgJmFtcDtnZXRfYXRfcGFyYW1zKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJdGFncy0mZ3Q7Y291bnQgPSAwOwomIzQzOwkJCW1lbWNweSgmYW1wO3RhZ3MtJmd0O3RhZ1t0YWdzLSZndDtjb3VudCYjNDM7JiM0MztdLCAmYW1wO2dldF9hdF9wYXJhbXMuZGF0YSwKJiM0MzsJCQkgICAgICAgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpOwomIzQzOwomIzQzOwkJCXdoaWxlICh0YWdzLSZndDtjb3VudCAmbHQ7IFZFQ19NQVhfRU5UUklFUyAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgIF9fYWxsb2NpbmZvX2dldF9uZXh0KGZkLCAmYW1wO3RhZ3MtJmd0O3RhZ1t0YWdzLSZndDtjb3VudF0pID09IDApCiYjNDM7CQkJCXRhZ3MtJmd0O2NvdW50JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCQlmb3IgKGkgPSAwOyBpICZsdDsgdGFncy0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChzdHJjbXAodGFncy0mZ3Q7dGFnW2ldLnRhZy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uKSA9PSAwKSB7CiYjNDM7CQkJCQlmb3VuZF90YWcgPSAmYW1wO3RhZ3MtJmd0O3RhZ1tpXTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWlmIChmb3VuZF90YWcgfHwgdGFncy0mZ3Q7Y291bnQgJmx0OyBWRUNfTUFYX0VOVFJJRVMpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwomIzQzOwkJCXBvcyAmIzQzOz0gdGFncy0mZ3Q7Y291bnQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsICZhbXA7ZW5kX2NvbnRfaWQpKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDthbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtNb2R1bGUgbG9hZCBkZXRlY3RlZCBkdXJpbmcgc2l6ZSB2ZXJpZmljYXRpb24sIHJldHJ5aW5nLi4uXG4mIzM0Oyk7CiYjNDM7CX0gd2hpbGUgKHJldHJ5JiM0MzsmIzQzOyAmbHQ7IG1heF9yZXRyaWVzKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0X2NvbnRfaWQuaWQgPT0gZW5kX2NvbnRfaWQuaWQgJmFtcDsmYW1wOyAhZm91bmRfdGFnKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0VudHJ5IHdpdGggZnVuY3Rpb24gJXMgbm90IGZvdW5kIGluIElPQ1RMIHJlc3VsdHNcbiYjMzQ7LAomIzQzOwkJCSAgICAgICB0YXJnZXRfZnVuY3Rpb24pOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwl9IGVsc2UgaWYgKHN0YXJ0X2NvbnRfaWQuaWQgIT0gZW5kX2NvbnRfaWQuaWQpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RmFpbGVkIHRvIG1hdGNoIGNvbnRlbnRfaWRzIGZvciBwcm9jZnMgYW5kIElPQ1RMLCBza2lwcGluZy4uLlxuJiMzNDspOwomIzQzOwkJcmV0ID0gS1NGVF9TS0lQOwomIzQzOwl9IGVsc2UgaWYgKGZvdW5kX3RhZyAmYW1wOyZhbXA7IGZvdW5kX3RhZy0mZ3Q7Y291bnRlci5ieXRlcyAhPSB0YXJnZXRfc2l6ZSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtJT0NUTCBlbnRyeSBzaXplICVsbHUgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IHNpemUgJWxsdVxuJiMzNDssCiYjNDM7CQkJICAgICAgIGZvdW5kX3RhZy0mZ3Q7Y291bnRlci5ieXRlcywgdGFyZ2V0X3NpemUpOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXhpdDoKJiM0MzsJY2xvc2UoZmQpOwomIzQzO2ZyZWVtZW06CiYjNDM7CWZyZWUodGFncyk7CiYjNDM7CWZyZWUocHJvY2ZzX2VudHJpZXMpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfbGluZW5vX2ZpbHRlcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJZW51bSBpb2N0bF9yZXQgaW9jdGxfc3RhdHVzOwomIzQzOwlpbnQgcmV0ID0gS1NGVF9QQVNTOwomIzQzOwlfX3U2NCB0YXJnZXRfbGluZW5vLCBpOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YXJnZXRfdGFnOwomIzQzOwlib29sIGZvdW5kID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuJiMzNDspOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJZ290byBleGl0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2ZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOwomIzQzOwomIzQzOwlpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCAmYW1wO2ZpbHRlcikpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RXJyb3IgcmV0cmlldmluZyBlbnRyaWVzIGZyb20gJiMzNDsgQUxMT0NJTkZPX1BST0MgJiMzNDtcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwlpZiAocHJvY2ZzX2VudHJpZXMtJmd0O2NvdW50ID09IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Q291bGQgbm90IHJldHJpZXZlIHByb2NmcyBlbnRyaWVzXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsJLyoKJiM0MzsJICogV2UgZGVwZW5kIG9uIHRoZSBwcm9jZnMgcmVzdWx0cyB0byBkZXRlcm1pbmUgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgZmlsdGVyIGJlZm9yZQomIzQzOwkgKiBtYWtpbmcgdGhlIGlvY3RsIHF1ZXJ5LiBIZW5jZSwgd2UgY2Fubm90IHJldXNlIHJ1bl9maWx0ZXJfdGVzdCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJdGFyZ2V0X3RhZyA9ICZhbXA7cHJvY2ZzX2VudHJpZXMtJmd0O3RhZ1swXTsKJiM0MzsJdGFyZ2V0X2xpbmVubyA9IHRhcmdldF90YWctJmd0O3RhZy5saW5lbm87CiYjNDM7CiYjNDM7CWZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk87CiYjNDM7CWZpbHRlci5maWVsZHMubGluZW5vID0gdGFyZ2V0X2xpbmVubzsKJiM0MzsKJiM0MzsJaW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgJmFtcDtmaWx0ZXIsIDApOwomIzQzOwlpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtUcm91YmxlIHJldHJpZXZpbmcgdmFsaWQgSU9DVEwgZW50cmllcywgc2tpcHBpbmcuXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsJaWYgKGlvY3RsX3N0YXR1cyA9PSBJT0NUTF9GQUlMVVJFKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0Vycm9yIHJldHJpZXZpbmcgSU9DVEwgZW50cmllcy5cbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGFncy0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodGFncy0mZ3Q7dGFnW2ldLnRhZy5saW5lbm8gIT0gdGFyZ2V0X2xpbmVubykgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7SU9DVEwgZW50cnkgJWxsdSBoYXMgaW5jb3JyZWN0IGxpbmVubyAlbGx1LlxuJiMzNDssCiYjNDM7CQkJCSAgICAgICBpLCB0YWdzLSZndDt0YWdbaV0udGFnLmxpbmVubyk7CiYjNDM7CQkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzdHJuY21wKHRhZ3MtJmd0O3RhZ1tpXS50YWcuZnVuY3Rpb24sIHRhcmdldF90YWctJmd0O3RhZy5mdW5jdGlvbiwKJiM0MzsJCQkgICAgQUxMT0NJTkZPX1NUUl9TSVpFKSA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICBzdHJuY21wKHRhZ3MtJmd0O3RhZ1tpXS50YWcuZmlsZW5hbWUsIHRhcmdldF90YWctJmd0O3RhZy5maWxlbmFtZSwKJiM0MzsJCQkgICAgQUxMT0NJTkZPX1NUUl9TSVpFKSA9PSAwKQomIzQzOwkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZvdW5kKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O09yaWdpbmFsIHByb2NmcyBlbnRyeSBub3QgZm91bmQgaW4gSU9DVEwgbGluZW5vIGZpbHRlciByZXN1bHRzLlxuJiMzNDspOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXhpdDoKJiM0MzsJZnJlZSh0YWdzKTsKJiM0MzsJZnJlZShwcm9jZnNfZW50cmllcyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlrc2Z0X3NldF9wbGFuKDQpOwomIzQzOwomIzQzOwlyZXQgPSB0ZXN0X2ZpbGVuYW1lX2ZpbHRlcigpOwomIzQzOwlpZiAocmV0ID09IEtTRlRfU0tJUCkKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1NraXBwaW5nIHRlc3RfZmlsZW5hbWVfZmlsdGVyXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgJiMzNDt0ZXN0X2ZpbGVuYW1lX2ZpbHRlclxuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSB0ZXN0X2Z1bmN0aW9uX2ZpbHRlcigpOwomIzQzOwlpZiAocmV0ID09IEtTRlRfU0tJUCkKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1NraXBwaW5nIHRlc3RfZnVuY3Rpb25fZmlsdGVyXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgJiMzNDt0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSB0ZXN0X3NpemVfZmlsdGVyKCk7CiYjNDM7CWlmIChyZXQgPT0gS1NGVF9TS0lQKQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7U2tpcHBpbmcgdGVzdF9zaXplX2ZpbHRlclxuJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsICYjMzQ7dGVzdF9zaXplX2ZpbHRlclxuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSB0ZXN0X2xpbmVub19maWx0ZXIoKTsKJiM0MzsJaWYgKHJldCA9PSBLU0ZUX1NLSVApCiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtTa2lwcGluZyB0ZXN0X2xpbmVub19maWx0ZXJcbiYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdChyZXQgPT0gS1NGVF9QQVNTLCAmIzM0O3Rlc3RfbGluZW5vX2ZpbHRlclxuJiMzNDspOwomIzQzOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE2NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhbiBgaW9jdGxgIGludGVyZmFjZSB0byBgL3Byb2MvYWxsb2NpbmZvYCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nLiBJbnRlcmVzdGluZy4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBvdXQgYWNyb3NzIHNldmVyYWwgZmlsZXM6IHRoZSBkb2N1bWVudGF0aW9uIChgRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RgLCBgRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RgKSwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSAoZ29vZCwgbmVlZCB0byBrZWVwIHRoYXQgdXAgdG8gZGF0ZSEpLCBoZWFkZXIgZmlsZXMgKGBpbmNsdWRlL2xpbnV4L2NvZGV0YWcuaGAsIGBpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhgKSwgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gKGBsaWIvY29kZXRhZy5jYCwgYG1tL2FsbG9jX3RhZy5jYCksIGFuZCBzb21lIHNlbGYtdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gKS4KCk15IGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gYG1tL2FsbG9jX3RhZy5jYCB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgYGlvY3RsYCBpbXBsZW1lbnRhdGlvbi4gSXQgc2VlbXMgdGhpcyBgaW9jdGxgIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZXhwb3NlZCB0aHJvdWdoIGAvcHJvYy9hbGxvY2luZm9gLCB3aGljaCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4gSSBzZWUgdGhyZWUgYGlvY3RsYCBjb21tYW5kczogYEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRGAsIGBBTExPQ0lORk9fSU9DX0dFVF9BVGAsIGFuZCBgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVGAuIFVzZXJzcGFjZSB3aWxsIGludGVyYWN0IHdpdGggdGhpcyBieSBvcGVuaW5nIGAvcHJvYy9hbGxvY2luZm9gIGFuZCBtYWtpbmcgY2FsbHMgdG8gYGlvY3RsKClgLiBUaGlzIHNvdW5kcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCwgYW5kIHRoYXQgc2NyZWFtcyBmdXp6aW5nIHRvIG1lLiBJdCYjMzk7cyBjcnVjaWFsIHdlIHRob3JvdWdobHkgdGVzdCB0aGlzIGludGVyZmFjZSBmb3IgYW55IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKTm93LCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmZpZ3VyYXRpb24gdGhpcyB3aWxsIGJlIGVuYWJsZWQuIEkmIzM5O2xsIGNoZWNrIGBtbS9hbGxvY190YWcuY2AgYW5kIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLiBJZiBpdCBpc24mIzM5O3QsIHRoZXJlJiMzOTtzIGxpa2VseSBzb21lIG1pc3Rha2UgaW4gdGhlIGJ1aWxkIHJ1bGVzLCBvciBwZXJoYXBzIHRoZSBmZWF0dXJlIGlzIGludGVuZGVkIHRvIGJlIGVuYWJsZWQgaW4gYSBkaWZmZXJlbnQgbWFubmVyLCBvciB1bmRlciBhIGRpZmZlcmVudCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfdGFnLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICYjNDM7PSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgJiM0Mzs9IGFsbG9jX3RhZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5ODkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIENvbmZpZ3VyYXRpb24gYW5kIFRhcmdldCBGdW5jdGlvbnMqKgoKT2theSwgc28gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGhlcmU7IHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBleHBsaWNpdGx5IGVuYWJsZWQuIE5vdywgbGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW1wbGljaXRseSBuZWVkZWQsIG9yIGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGZlYXR1cmUuCgpBaCwgdGhlIGBpb2N0bGAgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZCB0aHJvdWdoIGAvcHJvYy9hbGxvY2luZm9gLiBSaWdodCwgdGhhdCBmaWxlIGlzIGNyZWF0ZWQgZHVyaW5nIGBhbGxvY190YWdfaW5pdCgpYCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYCwgYXMgaW5kaWNhdGVkIGJ5IHRoaXMgY29kZSBzbmlwcGV0OgpgYGBjCglpZiAoIXByb2NfY3JlYXRlKEFMTE9DSU5GT19GSUxFX05BTUUsIDA0MDAsIE5VTEwsICZhbXA7YWxsb2NpbmZvX3Byb2Nfb3BzKSkgewpgYGAKU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBrbmV3IHRoZSBgcHJvY2AgZmlsZXN5c3RlbSB3YXMgaW52b2x2ZWQsIGFuZCwgeWVzLCBgQ09ORklHX1BST0NfRlNgIGlzIHJlcXVpcmVkLiBIb3dldmVyLCBpdCYjMzk7cyBzdWNoIGEgZ2VuZXJhbCBkZXBlbmRlbmN5IHRoYXQgSSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IGl0LiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBpbXBvcnRhbnQsIG1vcmUgc3BlY2lmaWMgb25lLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiB3aGVyZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nPyBMZXQmIzM5O3Mgc2lmdCB0aHJvdWdoIGBtbS9hbGxvY190YWcuY2AgZmlyc3QuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBzZWVpbmcgaGVyZSwgdGhlc2UgbG9vayBsaWtlIHByaW1lIHRhcmdldHM6IGBhbGxvY2luZm9faW9jdGxgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkYCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfYXRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0YCwgYG1hdGNoZXNfZmlsdGVyYCwgYGFsbG9jaW5mb190b19wYXJhbXNgLCBgYWxsb2NpbmZvX3ByZWZldGNoX2NvdW50ZXJzYCwgYGFsbG9jaW5mb19jbXBfc3RyYCwgYGFsbG9jaW5mb19jb3B5X3N0cmAsIGBhbGxvY2luZm9fc3RyYCwgYGFsbG9jaW5mb19vcGVuYCwgYW5kIGBhbGxvY2luZm9fcmVsZWFzZWAuCgpJJiMzOTtsbCBhbHNvIGhhdmUgYSBsb29rIGF0IGBsaWIvY29kZXRhZy5jYC4gT2theSwgaGVyZSBJIHNlZSBgY29kZXRhZ19nZXRfY29udGVudF9pZGAgYW5kIGBjb2RldGFnX2dldF9jb3VudGAgd2hpY2ggbWlnaHQgYmUgaW50ZXJlc3RpbmcgYXMgd2VsbC4KCkkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBuYW1lcyBvZiB0aGUgZnVuY3Rpb25zIGluIGBtbS9hbGxvY190YWcuY2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGVtIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NpbmZvX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmM9MjExPXN0YXRpYyB2b2lkIGFsbG9jaW5mb190b19wYXJhbXMoc3RydWN0IGNvZGV0YWcgKmN0LFxuLS1cbm1tL2FsbG9jX3RhZy5jLTIzMC0gKi9cbm1tL2FsbG9jX3RhZy5jOjIzMTpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0yMzIte1xuLS1cbm1tL2FsbG9jX3RhZy5jPTI0OD1zdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vYWxsb2NfdGFnLmMtMzA0LSAqL1xubW0vYWxsb2NfdGFnLmM6MzA1OnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0zMDYte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTM3OS0gKi9cbm1tL2FsbG9jX3RhZy5jOjM4MDpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0zODEte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTQzMC0gKi9cbm1tL2FsbG9jX3RhZy5jOjQzMTpzdGF0aWMgbG9uZyBhbGxvY2luZm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5tbS9hbGxvY190YWcuYy00MzItXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgX19hcmcpXG4tLVxubW0vYWxsb2NfdGFnLmMtNDM4LVx0Y2FzZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQ6XG5tbS9hbGxvY190YWcuYzo0Mzk6XHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbm1tL2FsbG9jX3RhZy5jLTQ0MC1cdFx0YnJlYWs7XG5tbS9hbGxvY190YWcuYy00NDEtXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX0FUOlxubW0vYWxsb2NfdGFnLmM6NDQyOlx0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDQzLVx0XHRicmVhaztcbm1tL2FsbG9jX3RhZy5jLTQ0NC1cdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVDpcbm1tL2FsbG9jX3RhZy5jOjQ0NTpcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDQ2LVx0XHRicmVhaztcbi0tXG5tbS9hbGxvY190YWcuYz00NTY9c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5tbS9hbGxvY190YWcuYy00NTgte1xubW0vYWxsb2NfdGFnLmM6NDU5Olx0cmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XG5tbS9hbGxvY190YWcuYy00NjAtfVxuLS1cbm1tL2FsbG9jX3RhZy5jPTQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGFsbG9jaW5mb19wcm9jX29wcyA9IHtcbi0tXG5tbS9hbGxvY190YWcuYy00NjctXHQucHJvY19yZWxlYXNlXHRcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXG5tbS9hbGxvY190YWcuYzo0Njg6XHQucHJvY19pb2N0bFx0XHQ9IGFsbG9jaW5mb19pb2N0bCxcbm1tL2FsbG9jX3RhZy5jLTQ2OS0jaWZkZWYgQ09ORklHX0NPTVBBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjAxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRoZW0gdGhyb3VnaCBhcyBJIGFuYWx5emUgdGhlIGNvZGU6CgoqKkFuYWx5emluZyBhbGxvY2luZm8gaW9jdGwgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZXNlIGBhbGxvY2luZm9gIGlvY3RsIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29yZSBwaWVjZXM6IGBhbGxvY2luZm9faW9jdGxgLCBgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9hdGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X25leHRgLCBhbmQgZmluYWxseSBgbWF0Y2hlc19maWx0ZXJgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHRoZSByZWxhdGVkIGZpbHRlcmluZyBsb2dpYywgcHJlc3VtYWJseSBmb3IgbWFuYWdpbmcgYW5kIHJldHJpZXZpbmcgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgaW50ZXJhY3QgYW5kIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zOyB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgaXMgY3JpdGljYWwuIE5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbGliL2NvZGV0YWcuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBkZXBlbmRlbmNpZXMgaGVyZSB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2hhdCB0aGlzIGRhdGEgbWVhbnMsIG9yIHRoYXQgdGhlcmUgYXJlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBoZXJlIHRoYXQgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBvcGVyYXRpb24gb2YgYGFsbG9jaW5mb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29kZXRhZ19nZXRfY29udGVudF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9jb2RldGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL2NvZGV0YWcuYz01MD12b2lkIGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbi0tXG5saWIvY29kZXRhZy5jLTU0LVxubGliL2NvZGV0YWcuYzo1NTp1bnNpZ25lZCBsb25nIGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxubGliL2NvZGV0YWcuYy01Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBjb2RldGFnX2dldF9jb3VudGAgaW4gQ29udGV4dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIEkgc2VlIGBjb2RldGFnX2dldF9jb3VudGAsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGFzaywgJiMzNDtXaGVyZSBkb2VzIHRoaXMgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtPyBXaGF0IGlzIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eT8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBtb2R1bGUgb3IgZnJhbWV3b3JrPyYjMzQ7IEkmIzM5O20gbWVudGFsbHkgdHJhY2luZyBpdHMgY29ubmVjdGlvbnMuIEkmIzM5O20gYWxyZWFkeSBlbnZpc2lvbmluZyBwb3RlbnRpYWwgY2FsbGluZyBjb250ZXh0cywgbGlrZWx5IHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCB0byBzdG9yZSB0aGUgY29kZSB0YWdzIGFuZCB3aGVyZSB0aGlzIGNvdW50IG1pZ2h0IGJlIG5lZWRlZC4KClRoZW4gSSBtb3ZlIHRvIHRoZSBkZXNpZ24gaXRzZWxmLiBXaGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIHRoaXM/IFdoYXQgZWRnZSBjYXNlcyBtaWdodCBub3QgYmUgaGFuZGxlZD8gSXMgaXQgb3B0aW1pemVkIGZvciBjb21tb24gc2NlbmFyaW9zPyBXaGF0IGlzIHRoZSBleHBlY3RlZCBzY2FsZSwgYW5kIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvdW50aW5nIG1lY2hhbmlzbT8gSXMgaXQgTygxKSwgTyhuKSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBpbmRleGluZyBtZXRob2RzLCBhbmQgYW55IGNhY2hpbmcgc3RyYXRlZ2llcyB0byB0cnVseSBncmFzcCB0aGUgdGltZSBjb21wbGV4aXR5LiBJ4oCZbSB0aGlua2luZywgJiMzNDtJcyB0aGVyZSBhIHRyYWRlLW9mZiBoZXJlPyBEb2VzIHRoaXMgZnVuY3Rpb24gcHJpb3JpdGl6ZSBzcGVlZCBvdmVyIG1lbW9yeSwgb3IgdmljZSB2ZXJzYT8mIzM0OwoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgaW1wbGVtZW50YXRpb25zLiBJcyB0aGlzIGEgc2ltcGxlIGNvdW50ZXIgb24gYSBkYXRhYmFzZSByZWNvcmQ/IElzIGl0IGFuIGluLW1lbW9yeSBhZ2dyZWdhdGlvbj8gRG9lcyBpdCBpbnZvbHZlIGl0ZXJhdGluZyBvdmVyIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFyZSB3ZSBsZXZlcmFnaW5nIHNvbWUgc29ydCBvZiBwcmVjb21wdXRlZCBpbmRleD8gSSYjMzk7bSBhbHJlYWR5IHNlZWluZyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgaXQmIzM5O3Mgbm90IHRocmVhZC1zYWZlIGFuZCBjb25zaWRlcmluZyBob3cgdG8gbWFuYWdlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHNoYXJlZCBjb3VudGVycyBvciBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O20gYWxzbyBhc2tpbmcgbXlzZWxmIGlmIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBoYW5kbGUgbnVsbCBvciBlbXB0eSByZXN1bHRzIGdyYWNlZnVsbHkuCgpNb3N0IGltcG9ydGFudGx5LCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBlcnJvcnMsIGJlY2F1c2Ugbm8gcGllY2Ugb2YgY29kZSBpcyBwZXJmZWN0LiBBcmUgdGhlcmUgZ3VhcmRyYWlscyBpbiBwbGFjZSBmb3IgcG90ZW50aWFsIGRhdGFiYXNlIGVycm9ycyBvciBpbnZhbGlkIGlucHV0PyBEbyBlcnJvciBtZXNzYWdlcyBjbGVhcmx5IGNvbW11bmljYXRlIHRoZSBwcm9ibGVtIGFuZCBpdHMgbGlrZWx5IGNhdXNlPyBJ4oCZbSBpbWFnaW5pbmcgdGhlIHdvcnN0LWNhc2Ugc2NlbmFyaW9zIGFuZCB0aGUgZGVidWdnaW5nIHN0ZXBzIEkmIzM5O2QgbmVlZCB0byB0YWtlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGBjb2RldGFnX2dldF9jb3VudGAgcmFpc2VzIGEgaG9zdCBvZiBxdWVzdGlvbnMgdGhhdCBtdXN0IGJlIGFkZHJlc3NlZCB0byBlbnN1cmUgaXRzIGVmZmVjdGl2ZSBhbmQgcmVsaWFibGUgb3BlcmF0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGV0YWdfZ2V0X2NvdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL2NvZGV0YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jPTU1PXVuc2lnbmVkIGxvbmcgY29kZXRhZ19nZXRfY29udGVudF9pZChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpXG4tLVxubGliL2NvZGV0YWcuYy02MS1cbmxpYi9jb2RldGFnLmM6NjI6dW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbmxpYi9jb2RldGFnLmMtNjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYxNQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcgSW50ZXJmYWNlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGJyYW5kIG5ldyBpb2N0bCBpbnRlcmZhY2UgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZywgZXhwb3NlZCB0aHJvdWdoIGAvcHJvYy9hbGxvY2luZm9gLiBUaGF0JiMzOTtzIGEgYmlnIHJlZCBmbGFnIGZvciBmdXp6aW5nLCByaWdodCBvZmYgdGhlIGJhdC4gQW55IG5ldyB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBBUEksIGVzcGVjaWFsbHkgb25lIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUga2VybmVsIG1lbW9yeSBpbmZvcm1hdGlvbiwgbmVlZHMgc2VyaW91cyBzY3J1dGlueS4gVGhlIGFpbSBpcyB0byBleHRyYWN0IGFuZCBmaWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gZGF0YSBhcyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhLiBUaGF0IHNvdW5kcyBpbnRlcmVzdGluZy4KClRoZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgY29uZmlnIGVuYWJsZXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgdGhhdCYjMzk7cyBleHBlY3RlZC4gV2Ugc2hvdWxkIGVuc3VyZSB0aGUgbmV3IGBhbGxvY2luZm9faW9jdGxgIGFuZCBgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bGAgY2FsbHMgYXJlIHJlc2lsaWVudCB0byBhIG11bHRpdHVkZSBvZiBtYWxmb3JtZWQgYW5kIGludmFsaWQgaW5wdXRzLiBXZSBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdmFyaW91cyBmdW5jdGlvbnMgd2l0aGluIHRoZXNlIGlvY3RsczogYGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dGAsIGBtYXRjaGVzX2ZpbHRlcmAsIGBjb2RldGFnX2dldF9jb250ZW50X2lkYCwgYW5kIGBjb2RldGFnX2dldF9jb3VudGAuICBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcywgYW5kIHRoZXkmIzM5O3JlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gZXhwbG9yZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYnVmZmVyIG92ZXJmbG93cywgYW5kIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgaW9jdGxzLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgYSBmdXp6aW5nIHN0cmF0ZWd5IHRoYXQgZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gdGhlc2UgaWRlbnRpZmllZCBmdW5jdGlvbnMsIHZhcnlpbmcgaW5wdXRzLCBzaXplcywgYW5kIHNlcXVlbmNlcy4KCkkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBjb25maWdzOyBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBtYWluIG9uZSwgYXMgZXhwZWN0ZWQuIEkmIzM5O2xsIGFsc28gZG91YmxlIGNoZWNrIGBDT05GSUdfQ09NUEFUYCwgYnV0IHRoYXQmIzM5O3MgYSBnZW5lcmljIG9uZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggb2xkZXIgdXNlcmxhbmQsIGFuZCBmdXp6IHRoYXQgdG9vLiBMZXQmIzM5O3MgY2FsbCB0aGlzIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9fY29tcGF0X2lvY3RsJiMzNDssCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X2F0JiMzNDssCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bF9nZXRfbmV4dCYjMzQ7LAogICAgJiMzNDttYXRjaGVzX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2dldF9jb250ZW50X2lkJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfZ2V0X2NvdW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9jdGwgaW50ZXJmYWNlIGZvciBgL3Byb2MvYWxsb2NpbmZvYCB0byBhbGxvdyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYW5kIGZpbHRlcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgZGF0YS4gVGhpcyBpcyBhIG5ldyB1c2Vyc3BhY2UtZmFjaW5nIEFQSSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGhhbmRsZXMgaW52YWxpZCBpbnB1dHMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBjb25jdXJyZW5jeSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2NvbXBhdF9pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2lvY3RsX2dldF9hdCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X25leHQmIzM0OywKICAgICYjMzQ7bWF0Y2hlc19maWx0ZXImIzM0OywKICAgICYjMzQ7Y29kZXRhZ19nZXRfY29udGVudF9pZCYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2dldF9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvY3RsIGludGVyZmFjZSBmb3IgYC9wcm9jL2FsbG9jaW5mb2AgdG8gYWxsb3cgc3RydWN0dXJlZCBiaW5hcnkgZGF0YSBleHRyYWN0aW9uIGFuZCBmaWx0ZXJpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGRhdGEuIFRoaXMgaXMgYSBuZXcgdXNlcnNwYWNlLWZhY2luZyBBUEkgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGludmFsaWQgaW5wdXRzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgY29uY3VycmVuY3kgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MTMuODMyMzI3Mzc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMzE5MTczNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jaW5mb19pb2N0bFwiLFxuICAgIFwiYWxsb2NpbmZvX2NvbXBhdF9pb2N0bFwiLFxuICAgIFwiYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkXCIsXG4gICAgXCJhbGxvY2luZm9faW9jdGxfZ2V0X2F0XCIsXG4gICAgXCJhbGxvY2luZm9faW9jdGxfZ2V0X25leHRcIixcbiAgICBcIm1hdGNoZXNfZmlsdGVyXCIsXG4gICAgXCJjb2RldGFnX2dldF9jb250ZW50X2lkXCIsXG4gICAgXCJjb2RldGFnX2dldF9jb3VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9jdGwgaW50ZXJmYWNlIGZvciBgL3Byb2MvYWxsb2NpbmZvYCB0byBhbGxvdyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYW5kIGZpbHRlcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgZGF0YS4gVGhpcyBpcyBhIG5ldyB1c2Vyc3BhY2UtZmFjaW5nIEFQSSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGhhbmRsZXMgaW52YWxpZCBpbnB1dHMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBjb25jdXJyZW5jeSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjI4OjEzLjgzMjMzNTQzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2Nzg1ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDI5MGVkODQ2ZjFkMTVjN2U0MWNjZjQ3OGZlZTY5NjAyMTVhNGVhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCA3IDAyOjI4OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG5pbmRleCA1Mzg5ZDI0MTE3NmE4YS4uYzNhMjg0Njc5NTVmM2UgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxcbkBAIC00Niw2ICs0NiwxMSBAQCBzeXNjdGw6XFxuIFJ1bnRpbWUgaW5mbzpcXG4gICAvcHJvYy9hbGxvY2luZm9cXG4gXFxuKyAgUHJvZmlsaW5nIGRhdGEgY2FuIGJlIHJldHJpZXZlZCBlaXRoZXIgYnkgcmVhZGluZyBgL3Byb2MvYWxsb2NpbmZvYCBkaXJlY3RseSBhc1xcbisgIHRleHQgb3IgcHJvZ3JhbW1hdGljYWxseSB2aWEgYGlvY3RsKClgIGNhbGxzIGRlZmluZWQgaW4gYFxcdTAwM2N1YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFx1MDAzZWAuXFxuKyAgVGhlIGlvY3RsIGludGVyZmFjZSBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYXMgd2VsbCBhcyBmaWx0ZXJpbmdcXG4rICBieSBtb2R1bGUgbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUgbnVtYmVyLCBhY2N1cmFjeSwgb3IgYWxsb2NhdGlvbiBzaXplIGxpbWl0cy5cXG4rXFxuIEV4YW1wbGUgb3V0cHV0OjpcXG4gXFxuICAgcm9vdEBtb3JpYS1rdm06fiMgc29ydCAtZyAvcHJvYy9hbGxvY2luZm98dGFpbHxudW1mbXQgLS10bz1pZWNcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QgYi9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdFxcbmluZGV4IDNmMGVmMWUyN2ViMDdkLi4yZmM1MzA5Mzc1MmQxMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XFxuQEAgLTM0Niw2ICszNDYsOCBAQCBDb2RlICBTZXEjICAgIEluY2x1ZGUgRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzY21haWx0bzpsdXptYXhpbWlsaWFuQGdtYWlsLmNvbVxcdTAwM2VcXG4gMHhBNSAgMjAtMkYgIGxpbnV4L3N1cmZhY2VfYWdncmVnYXRvci9kdHguaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgU3VyZmFjZSBEVFggZHJpdmVyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzY21haWx0bzpsdXptYXhpbWlsaWFuQGdtYWlsLmNvbVxcdTAwM2VcXG4rMHhBNiAgMDAtMEYgIHVhcGkvbGludXgvYWxsb2NfdGFnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXHUwMDNjbWFpbHRvOnN1cmVuYkBnb29nbGUuY29tXFx1MDAzZVxcbiAweEFBICAwMC0zRiAgbGludXgvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oXFxuIDB4QUIgIDAwLTFGICBsaW51eC9uYmQuaFxcbiAweEFDICAwMC0xRiAgbGludXgvcmF3LmhcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDI5YzMwMmU5YzE3YmEzLi44NjdkNGFkNThmYjQyMiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE2OTM3LDcgKzE2OTM3LDkgQEAgUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oXFxuIEY6XFx0aW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oXFxuK0Y6XFx0aW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxuIEY6XFx0bW0vYWxsb2NfdGFnLmNcXG4rRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvXFxuIFxcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEJBTExPT05cXG4gTTpcXHRBbmRyZXcgTW9ydG9uIFxcdTAwM2Nha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaCBiL2luY2x1ZGUvbGludXgvY29kZXRhZy5oXFxuaW5kZXggZGRhZTc0ODRjYTQ1NmMuLmEyNWEwODVjMmRmMTk5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY29kZXRhZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jb2RldGFnLmhcXG5AQCAtNzcsNiArNzcsOCBAQCBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciB7XFxuIHZvaWQgY29kZXRhZ19sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XFxuIGJvb2wgY29kZXRhZ190cnlsb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XFxuIHZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcXG4rdW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XFxuK3Vuc2lnbmVkIGludCBjb2RldGFnX2dldF9jb3VudChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpO1xcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XFxuIHN0cnVjdCBjb2RldGFnICpjb2RldGFnX25leHRfY3Qoc3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgKml0ZXIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjcwZjY5M2IxODIyMDRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxuQEAgLTAsMCArMSw5OSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbisvKlxcbisgKiBhbGxvY190YWcgSU9DVEwgQVBJIGRlZmluaXRpb25cXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgTExDLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cXG4rICpcXG4rICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcXG4rICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXNcXG4rICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfVUFQSV9BTExPQ19UQUdfSFxcbisjZGVmaW5lIF9VQVBJX0FMTE9DX1RBR19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXFxuKyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG9cXG4rICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXFxuKyAqL1xcbisjZGVmaW5lIEFMTE9DSU5GT19TVFJfU0laRVxcdDY0XFxuK1xcbitzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQge1xcbitcXHRfX3U2NCBpZDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBhbGxvY2luZm9fdGFnIHtcXG4rXFx0LyogTG9uZ2VyIG5hbWVzIGFyZSB0cmltbWVkICovXFxuK1xcdGNoYXIgbW9kbmFtZVtBTExPQ0lORk9fU1RSX1NJWkVdO1xcbitcXHRjaGFyIGZ1bmN0aW9uW0FMTE9DSU5GT19TVFJfU0laRV07XFxuK1xcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcXG4rXFx0X191NjQgbGluZW5vO1xcbitcXHQvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi9cXG4rXFx0X191NjQgaW5hY2N1cmF0ZTtcXG4rfTtcXG4rXFxuKy8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXFxuK3N0cnVjdCBhbGxvY2luZm9fY291bnRlciB7XFxuK1xcdF9fdTY0IGJ5dGVzO1xcbitcXHRfX3U2NCBjYWxscztcXG4rXFx0X191OCBhY2N1cmF0ZTtcXG4rfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7XFxuK1xcbitzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHtcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWcgdGFnO1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvdW50ZXIgY291bnRlcjtcXG4rfTtcXG4rXFxuK2VudW0ge1xcbitcXHRBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfRlVOQ1RJT04sXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfRklMRU5BTUUsXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfTElORU5PLFxcbitcXHRBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUsXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUsXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsXFxuK1xcdF9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUID0gQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRVxcbit9O1xcbitcXG4rI2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTU9ETkFNRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTU9ETkFNRSlcXG4rI2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT05cXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OKVxcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfRklMRU5BTUUpXFxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOT1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTElORU5PKVxcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19JTkFDQ1VSQVRFXFx0KDEgXFx1MDAzY1xcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9JTkFDQ1VSQVRFKVxcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpXFxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRSlcXG4rXFxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLUyBcXFxcXFxuK1xcdCgoMSBcXHUwMDNjXFx1MDAzYyAoX19BTExPQ0lORk9fRklMVEVSX0xBU1QgKyAxKSkgLSAxKVxcbitcXG4rc3RydWN0IGFsbG9jaW5mb19maWx0ZXIge1xcbitcXHRfX3U2NCBtYXNrOyAvKiBiaXRtYXNrIG9mIHRoZSBmaWx0ZXIgZmllbGRzIHVzZWQgKi9cXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWcgZmllbGRzO1xcbitcXHRfX3U2NCBtaW5fc2l6ZTtcXG4rXFx0X191NjQgbWF4X3NpemU7XFxuK307XFxuK1xcbitzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XFxuK1xcdC8qIGlucHV0cyAqL1xcbitcXHRfX3U2NCBwb3M7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcXG4rXFx0Lyogb3V0cHV0ICovXFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgZGF0YTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgX0FMTE9DSU5GT19JT0NfQ09OVEVOVF9JRFxcdDBcXG4rI2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfQVRcXHRcXHQxXFxuKyNkZWZpbmUgX0FMTE9DSU5GT19JT0NfR0VUX05FWFRcXHRcXHQyXFxuK1xcbisjZGVmaW5lIEFMTE9DSU5GT19JT0NfQkFTRVxcdFxcdDB4QTZcXG4rI2RlZmluZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSURcXHRfSU9SKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfQ09OVEVOVF9JRCxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKVxcbisjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX0FUXFx0XFx0X0lPV1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19HRVRfQVQsXFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdClcXG4rI2RlZmluZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUXFx0XFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhULFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhKVxcbitcXG4rI2VuZGlmIC8qIF9VQVBJX0FMTE9DX1RBR19IICovXFxuZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jXFxuaW5kZXggNDAwMWE3ZWE2Njc1NDIuLmE5Y2RhNGM5NjJhMzAzIDEwMDY0NFxcbi0tLSBhL2xpYi9jb2RldGFnLmNcXG4rKysgYi9saWIvY29kZXRhZy5jXFxuQEAgLTE5LDYgKzE5LDggQEAgc3RydWN0IGNvZGV0YWdfdHlwZSB7XFxuIFxcdHN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyBkZXNjO1xcbiBcXHQvKiBnZW5lcmF0ZXMgdW5pcXVlIHNlcXVlbmNlIG51bWJlciBmb3IgbW9kdWxlIGxvYWQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0X21vZF9zZXE7XFxuK1xcdC8qIGJ1bXBlZCBvbiBldmVyeSBtb2R1bGUgbG9hZCBhbmQgdW5sb2FkICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgY29udGVudF9pZDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBjb2RldGFnX3JhbmdlIHtcXG5AQCAtNTAsNiArNTIsMjAgQEAgdm9pZCBjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpXFxuIFxcdHVwX3JlYWQoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbiB9XFxuIFxcbit1bnNpZ25lZCBsb25nIGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGN0dHlwZS1cXHUwMDNlY29udGVudF9pZDtcXG4rfVxcbitcXG4rdW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBjdHR5cGUtXFx1MDAzZWNvdW50O1xcbit9XFxuK1xcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyID0ge1xcbkBAIC0yMDQsNiArMjIwLDcgQEAgc3RhdGljIGludCBjb2RldGFnX21vZHVsZV9pbml0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSwgc3RydWN0IG1vZHVsZSAqbW9kKVxcbiBcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIFxcdGNtb2QtXFx1MDAzZW1vZF9zZXEgPSArK2N0dHlwZS1cXHUwMDNlbmV4dF9tb2Rfc2VxO1xcbitcXHQrK2N0dHlwZS1cXHUwMDNlY29udGVudF9pZDtcXG4gXFx0bW9kX2lkID0gaWRyX2FsbG9jKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9pZHIsIGNtb2QsIDAsIDAsIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAobW9kX2lkIFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0aWYgKGN0dHlwZS1cXHUwMDNlZGVzYy5tb2R1bGVfbG9hZCkge1xcbkBAIC0zNjgsNiArMzg1LDcgQEAgdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbiBcXHRcXHRcXHRjdHR5cGUtXFx1MDAzZWNvdW50IC09IHJhbmdlX3NpemUoY3R0eXBlLCBcXHUwMDI2Y21vZC1cXHUwMDNlcmFuZ2UpO1xcbiBcXHRcXHRcXHRpZHJfcmVtb3ZlKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9pZHIsIG1vZF9pZCk7XFxuIFxcdFxcdFxcdGtmcmVlKGNtb2QpO1xcbitcXHRcXHRcXHQrK2N0dHlwZS1cXHUwMDNlY29udGVudF9pZDtcXG4gXFx0XFx0fVxcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIFxcdFxcdGlmIChmb3VuZCBcXHUwMDI2XFx1MDAyNiBjdHR5cGUtXFx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbSlcXG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xcbmluZGV4IGQ5YmUxY2Y1MTg3ZDk3Li4zMmFjMDY3NGQ4YmY2ZCAxMDA2NDRcXG4tLS0gYS9tbS9hbGxvY190YWcuY1xcbisrKyBiL21tL2FsbG9jX3RhZy5jXFxuQEAgLTUsNiArNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2thbGxzeW1zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2V4dC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG5AQCAtMTQsNiArMTUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBBTExPQ0lORk9fRklMRV9OQU1FXFx0XFx0XFxcImFsbG9jaW5mb1xcXCJcXG4gI2RlZmluZSBNT0RVTEVfQUxMT0NfVEFHX1ZNQVBfU0laRVxcdCgxMDAwMDBVTCAqIHNpemVvZihzdHJ1Y3QgYWxsb2NfdGFnKSlcXG5AQCAtNDcsNiArNDksMTEgQEAgc3RydWN0IGFsbG9jaW5mb19wcml2YXRlIHtcXG4gXFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlcjtcXG4gXFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgcmVwb3J0ZWRfaXRlcjtcXG4gXFx0Ym9vbCBwcmludF9oZWFkZXI7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcXG4rXFx0LyogaW9jdGwgdXNlcyBhIHNlcGFyYXRlIGl0ZXJhdG9yIG5vdCB0byBpbnRlcmZlcmUgd2l0aCByZWFkcyAqL1xcbitcXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpb2N0bF9pdGVyO1xcbitcXHRib29sIHBvc2l0aW9uZWQ7IC8qIHNlcV9vcGVuX3ByaXZhdGUoKSBzZXRzIHRvIDAgKi9cXG4rXFx0c3RydWN0IG11dGV4IGlvY3RsX2xvY2s7XFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCAqYWxsb2NpbmZvX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXFxuQEAgLTEzMCw2ICsxMzcsMzQwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYWxsb2NpbmZvX3NlcV9vcCA9IHtcXG4gXFx0LnNob3dcXHQ9IGFsbG9jaW5mb19zaG93LFxcbiB9O1xcbiBcXG4rLypcXG4rICogSW5pdGlhbGl6ZXMgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgYWxsb2NhdGVzIHByaXZhdGUgc3RhdGUgd2hlbiBvcGVuaW5nXFxuKyAqIHRoZSAvcHJvYy9hbGxvY2luZm8gcHJvY2ZzIGVudHJ5LlxcbisgKi9cXG4rc3RhdGljIGludCBhbGxvY2luZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2YWxsb2NpbmZvX3NlcV9vcCxcXG4rXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUpKTtcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0c3RydWN0IHNlcV9maWxlICptID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHRcXHRzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXYgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbitcXG4rXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlaW9jdGxfbG9jayk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLypcXG4rICogQ2xlYW5zIHVwIHRoZSBzZXFfZmlsZSBzdGF0ZSBhbmQgZnJlZXMgdXAgdGhlIHByaXZhdGUgc3RhdGUgYWxsb2NhdGVkIGluXFxuKyAqIGFsbG9jaW5mb19vcGVuKCkgd2hlbiBjbG9zaW5nIHRoZSAvcHJvYy9hbGxvY2luZm8gZmlsZSBkZXNjcmlwdG9yLlxcbisgKi9cXG4rc3RhdGljIGludCBhbGxvY2luZm9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSAqcHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2Vpb2N0bF9sb2NrKTtcXG4rXFx0cmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3VmZml4IG9mIGEgc3RyaW5nIHNvIHRoYXQgaXRzIGxlbmd0aCBmaXRzIHdpdGhpblxcbisgKiBBTExPQ0lORk9fU1RSX1NJWkUsIHByZXNlcnZpbmcgdGhlIHRyYWlsaW5nIGNoYXJhY3RlcnMuXFxuKyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXFxuKyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG9cXG4rICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpXFxuK3tcXG4rXFx0c2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpO1xcbitcXG4rXFx0LyogS2VlcCBhbiBleHRyYSBzcGFjZSBmb3IgdGhlIHRyYWlsaW5nIE5VTEwuICovXFxuK1xcdGlmIChsZW4gXFx1MDAzZT0gQUxMT0NJTkZPX1NUUl9TSVpFKVxcbitcXHRcXHRzdHIgKz0gKGxlbiAtIEFMTE9DSU5GT19TVFJfU0laRSkgKyAxO1xcbitcXHRyZXR1cm4gc3RyO1xcbit9XFxuK1xcbisvKiBDb3B5IGEgc3RyaW5nIGFuZCB0cmltIGZyb20gdGhlIGJlZ2lubmluZyBpZiBpdCdzIHRvbyBsb25nICovXFxuK3N0YXRpYyB2b2lkIGFsbG9jaW5mb19jb3B5X3N0cihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpXFxuK3tcXG4rXFx0c3Ryc2NweV9wYWQoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xcbit9XFxuK1xcbisvKiBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCBvbmx5IGNvbnNpZGVyIHRoZSB0cmltbWVkIHN1ZmZpeCBpZiBzMSBpcyB0b28gbG9uZyAqL1xcbitzdGF0aWMgaW50IGFsbG9jaW5mb19jbXBfc3RyKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqdGVtcGxhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIHN0cm5jbXAoYWxsb2NpbmZvX3N0cihzdHIpLCB0ZW1wbGF0ZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcXG4rfVxcbitcXG4rLyogRmV0Y2ggdGhlIHBlci1DUFUgY291bnRlcnMgKi9cXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhzdHJ1Y3QgY29kZXRhZyAqY3QpXFxuK3tcXG4rXFx0cmV0dXJuIGFsbG9jX3RhZ19yZWFkKGN0X3RvX2FsbG9jX3RhZyhjdCkpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQb3B1bGF0ZXMgdGhlIFVBUEkgYWxsb2NpbmZvX3RhZ19kYXRhIHN0cnVjdHVyZSB3aXRoIGFjdGl2ZSBydW50aW1lXFxuKyAqIHByb2ZpbGluZyBjb3VudGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgZ2l2ZW4ga2VybmVsIGNvZGV0YWcuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBhbGxvY2luZm9fdG9fcGFyYW1zKHN0cnVjdCBjb2RldGFnICpjdCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqZGF0YSxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMpXFxuK3tcXG4rXFx0aWYgKGN0LVxcdTAwM2Vtb2RuYW1lKVxcbitcXHRcXHRhbGxvY2luZm9fY29weV9zdHIoZGF0YS1cXHUwMDNldGFnLm1vZG5hbWUsIGN0LVxcdTAwM2Vtb2RuYW1lKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkYXRhLVxcdTAwM2V0YWcubW9kbmFtZVswXSA9ICdcXFxcMCc7XFxuK1xcdGFsbG9jaW5mb19jb3B5X3N0cihkYXRhLVxcdTAwM2V0YWcuZnVuY3Rpb24sIGN0LVxcdTAwM2VmdW5jdGlvbik7XFxuK1xcdGFsbG9jaW5mb19jb3B5X3N0cihkYXRhLVxcdTAwM2V0YWcuZmlsZW5hbWUsIGN0LVxcdTAwM2VmaWxlbmFtZSk7XFxuK1xcdGRhdGEtXFx1MDAzZXRhZy5saW5lbm8gPSBjdC1cXHUwMDNlbGluZW5vO1xcbitcXHRkYXRhLVxcdTAwM2Vjb3VudGVyLmJ5dGVzID0gY291bnRlcnMtXFx1MDAzZWJ5dGVzO1xcbitcXHRkYXRhLVxcdTAwM2Vjb3VudGVyLmNhbGxzID0gY291bnRlcnMtXFx1MDAzZWNhbGxzO1xcbitcXHRkYXRhLVxcdTAwM2Vjb3VudGVyLmFjY3VyYXRlID0gIWFsbG9jX3RhZ19pc19pbmFjY3VyYXRlKGN0X3RvX2FsbG9jX3RhZyhjdCkpO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXRyaWV2ZXMgdGhlIHVuaXF1ZSBjb250ZW50IElEIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBhbGxvY2F0aW9uIHRhZyBtb2R1bGVcXG4rICogbGF5b3V0LCBhbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGV0ZWN0IGlmIG1vZHVsZXMgd2VyZSBsb2FkZWQgLyB1bmxvYWRlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgcGFyYW1zO1xcbitcXG4rXFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRwYXJhbXMuaWQgPSBjb2RldGFnX2dldF9jb250ZW50X2lkKGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcXG4rXFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogVmVyaWZpZXMgd2hldGhlciBhIGdpdmVuIGNvZGV0YWcgc2F0aXNmaWVzIHRoZSBhY3RpdmUgZmlsdGVyaW5nIGNyaXRlcmlhIGJ5XFxuKyAqIG1hdGNoaW5nIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGZpbHRlci5cXG4rICovXFxuK3N0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXFxuK1xcdFxcdFxcdCAgIGJvb2wgKmZldGNoZWRfY291bnRlcnMpXFxuK3tcXG4rXFx0Ym9vbCBpbmFjY3VyYXRlO1xcbitcXG4rXFx0aWYgKCFmaWx0ZXIgfHwgIWZpbHRlci1cXHUwMDNlbWFzaylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUUpIHtcXG4rXFx0XFx0LyogdXNlciB3YW50cyB0byBmaWx0ZXIgYnkgbW9kbmFtZSBidXQgY3QtXFx1MDAzZW1vZG5hbWUgaXMgTlVMTCAqL1xcbitcXHRcXHRpZiAoIWN0LVxcdTAwM2Vtb2RuYW1lKSB7XFxuK1xcdFxcdFxcdC8qIHZhbGlkYXRlIGlmIHVzZXIgd2FzIGF0dGVtcHRpbmcgdG8gZmlsdGVyIGZvciBidWlsdC1pbiBhbGxvY2F0aW9ucyAqL1xcbitcXHRcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VmaWVsZHMubW9kbmFtZVswXSAhPSAnXFxcXDAnKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYWxsb2NpbmZvX2NtcF9zdHIoY3QtXFx1MDAzZW1vZG5hbWUsIGZpbHRlci1cXHUwMDNlZmllbGRzLm1vZG5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgY3QtXFx1MDAzZWZ1bmN0aW9uIFxcdTAwMjZcXHUwMDI2IGFsbG9jaW5mb19jbXBfc3RyKGN0LVxcdTAwM2VmdW5jdGlvbiwgZmlsdGVyLVxcdTAwM2VmaWVsZHMuZnVuY3Rpb24pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoKGZpbHRlci1cXHUwMDNlbWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGN0LVxcdTAwM2VmaWxlbmFtZSBcXHUwMDI2XFx1MDAyNiBhbGxvY2luZm9fY21wX3N0cihjdC1cXHUwMDNlZmlsZW5hbWUsIGZpbHRlci1cXHUwMDNlZmllbGRzLmZpbGVuYW1lKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgY3QtXFx1MDAzZWxpbmVubyAhPSBmaWx0ZXItXFx1MDAzZWZpZWxkcy5saW5lbm8pXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkge1xcbitcXHRcXHRpbmFjY3VyYXRlID0gISEoY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpO1xcbitcXHRcXHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXFx1MDAzZWZpZWxkcy5pbmFjY3VyYXRlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHtcXG4rXFx0XFx0aWYgKCEqZmV0Y2hlZF9jb3VudGVycykge1xcbitcXHRcXHRcXHQqY291bnRlcnMgPSBhbGxvY2luZm9fcHJlZmV0Y2hfY291bnRlcnMoY3QpO1xcbitcXHRcXHRcXHQqZmV0Y2hlZF9jb3VudGVycyA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjb3VudGVycy1cXHUwMDNlYnl0ZXMgXFx1MDAzYyBmaWx0ZXItXFx1MDAzZW1pbl9zaXplKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICgoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgY291bnRlcnMtXFx1MDAzZWJ5dGVzIFxcdTAwM2UgZmlsdGVyLVxcdTAwM2VtYXhfc2l6ZSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLypcXG4rICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzXFxuKyAqIHByb2ZpbGluZyBkYXRhIGFuZCByZXR1cm5zIGl0IHRvIHVzZXJzcGFjZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xcbitcXHRzdHJ1Y3QgY29kZXRhZyAqY3Q7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHBhcmFtcyA9IHswfTtcXG4rXFx0X191NjQgc2tpcF9jb3VudDtcXG4rXFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVycztcXG4rXFx0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZwYXJhbXMsIGFyZywgc2l6ZW9mKHBhcmFtcykpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChwYXJhbXMuZmlsdGVyLm1hc2sgXFx1MDAyNiB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoKHBhcmFtcy5maWx0ZXIubWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChwYXJhbXMuZmlsdGVyLm1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwYXJhbXMuZmlsdGVyLm1pbl9zaXplIFxcdTAwM2UgcGFyYW1zLmZpbHRlci5tYXhfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRwcml2ID0gbS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2xvY2spO1xcbitcXHRjb2RldGFnX2xvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XFxuK1xcbitcXHRpZiAocGFyYW1zLnBvcyBcXHUwMDNlPSBjb2RldGFnX2dldF9jb3VudChhbGxvY190YWdfY3R0eXBlKSkge1xcbitcXHRcXHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vpb2N0bF9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNraXBfY291bnQgPSBwYXJhbXMucG9zO1xcbitcXG4rXFx0aWYgKHBhcmFtcy5maWx0ZXIubWFzaylcXG4rXFx0XFx0cHJpdi1cXHUwMDNlZmlsdGVyID0gcGFyYW1zLmZpbHRlcjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcml2LVxcdTAwM2VmaWx0ZXIubWFzayA9IDA7XFxuK1xcbitcXHQvKiBGaW5kIHRoZSBjb2RldGFnICovXFxuK1xcdHByaXYtXFx1MDAzZWlvY3RsX2l0ZXIgPSBjb2RldGFnX2dldF9jdF9pdGVyKGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcXHUwMDI2cHJpdi1cXHUwMDNlaW9jdGxfaXRlcik7XFxuK1xcbitcXHR3aGlsZSAoY3QpIHtcXG4rXFx0XFx0ZmV0Y2hlZF9jb3VudGVycyA9IGZhbHNlO1xcbitcXHRcXHRpZiAobWF0Y2hlc19maWx0ZXIoY3QsIFxcdTAwMjZwcml2LVxcdTAwM2VmaWx0ZXIsIFxcdTAwMjZjb3VudGVycywgXFx1MDAyNmZldGNoZWRfY291bnRlcnMpKSB7XFxuK1xcdFxcdFxcdGlmIChza2lwX2NvdW50ID09IDApXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRza2lwX2NvdW50LS07XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2l0ZXIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY3QpIHtcXG4rXFx0XFx0aWYgKCFmZXRjaGVkX2NvdW50ZXJzKVxcbitcXHRcXHRcXHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XFxuK1xcdFxcdGFsbG9jaW5mb190b19wYXJhbXMoY3QsIFxcdTAwMjZwYXJhbXMuZGF0YSwgXFx1MDAyNmNvdW50ZXJzKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG9zaXRpb25lZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2xvY2spO1xcbitcXG4rXFx0aWYgKCFjdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBBZHZhbmNlcyB0aGUgaW9jdGwgaXRlcmF0b3IgdG8gdGhlIG5leHQgYWxsb2NhdGlvbiB0YWcgaW4gdGhlIHNlcXVlbmNlIGFuZFxcbisgKiByZXR1cm5zIGl0cyBwcm9maWxpbmcgZGF0YSB0byB1c2Vyc3BhY2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xcbitcXHRzdHJ1Y3QgY29kZXRhZyAqY3Q7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcGFyYW1zO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVycztcXG4rXFx0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtcXG4rXFx0cHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vpb2N0bF9sb2NrKTtcXG4rXFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vwb3NpdGlvbmVkKSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlvY3RsX2l0ZXIgPSBjb2RldGFnX2dldF9jdF9pdGVyKGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3NpdGlvbmVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2l0ZXIpO1xcbitcXHR3aGlsZSAoY3QpIHtcXG4rXFx0XFx0ZmV0Y2hlZF9jb3VudGVycyA9IGZhbHNlO1xcbitcXHRcXHRpZiAobWF0Y2hlc19maWx0ZXIoY3QsIFxcdTAwMjZwcml2LVxcdTAwM2VmaWx0ZXIsIFxcdTAwMjZjb3VudGVycywgXFx1MDAyNmZldGNoZWRfY291bnRlcnMpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2l0ZXIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY3QpIHtcXG4rXFx0XFx0aWYgKCFmZXRjaGVkX2NvdW50ZXJzKVxcbitcXHRcXHRcXHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XFxuK1xcdFxcdGFsbG9jaW5mb190b19wYXJhbXMoY3QsIFxcdTAwMjZwYXJhbXMsIFxcdTAwMjZjb3VudGVycyk7XFxuK1xcdH1cXG4rXFx0aWYgKCFjdCkge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3NpdGlvbmVkID0gZmFsc2U7XFxuK1xcdFxcdHJldCA9IC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlaW9jdGxfbG9jayk7XFxuK1xcbitcXHRpZiAocmV0ID09IDApIHtcXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLypcXG4rICogRW50cnkgcG9pbnQgaW9jdGwgZnVuY3Rpb24gZm9yIC9wcm9jL2FsbG9jaW5mbyByb3V0aW5nIHJlcXVlc3RzIHRvIGZldGNoIHRoZVxcbisgKiBsYXlvdXQgY29udGVudCBJRCwgc2VlayB0byBhIHNwZWNpZmljIHRhZywgb3IgcmVhZCBzZXF1ZW50aWFsIHRhZ3MuXFxuKyAqL1xcbitzdGF0aWMgbG9uZyBhbGxvY2luZm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIF9fYXJnKVxcbit7XFxuK1xcdHZvaWQgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilfX2FyZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEOlxcbitcXHRcXHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9BVDpcXG4rXFx0XFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9hdChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX05FWFQ6XFxuK1xcdFxcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRU5PSU9DVExDTUQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX0NPTVBBVFxcbitzdGF0aWMgbG9uZyBhbGxvY2luZm9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4re1xcbitcXHRyZXR1cm4gYWxsb2NpbmZvX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbitcXHQucHJvY19vcGVuXFx0XFx0PSBhbGxvY2luZm9fb3BlbixcXG4rXFx0LnByb2NfcmVhZF9pdGVyXFx0XFx0PSBzZXFfcmVhZF9pdGVyLFxcbitcXHQucHJvY19sc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbitcXHQucHJvY19yZWxlYXNlXFx0XFx0PSBhbGxvY2luZm9fcmVsZWFzZSxcXG4rXFx0LnByb2NfaW9jdGxcXHRcXHQ9IGFsbG9jaW5mb19pb2N0bCxcXG4rI2lmZGVmIENPTkZJR19DT01QQVRcXG4rXFx0LnByb2NfY29tcGF0X2lvY3RsXFx0PSBhbGxvY2luZm9fY29tcGF0X2lvY3RsLFxcbisjZW5kaWZcXG4rfTtcXG4rXFxuIHNpemVfdCBhbGxvY190YWdfdG9wX3VzZXJzKHN0cnVjdCBjb2RldGFnX2J5dGVzICp0YWdzLCBzaXplX3QgY291bnQsIGJvb2wgY2FuX3NsZWVwKVxcbiB7XFxuIFxcdHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIGl0ZXI7XFxuQEAgLTk5Myw4ICsxMzM0LDcgQEAgc3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgXFx1MDAyNmFsbG9jaW5mb19zZXFfb3AsXFxuLVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSksIE5VTEwpKSB7XFxuK1xcdGlmICghcHJvY19jcmVhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgXFx1MDAyNmFsbG9jaW5mb19wcm9jX29wcykpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gY3JlYXRlICVzIGZpbGVcXFxcblxcXCIsIEFMTE9DSU5GT19GSUxFX05BTUUpO1xcbiBcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG5pbmRleCA4ZDRkYjIyNDFjYzJhMi4uMTI5NDFkNjhhN2Y4YWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxcbkBAIC0xLDUgKzEsNiBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFRBUkdFVFMgKz0gYWNjdFxcbitUQVJHRVRTICs9IGFsbG9jX3RhZ1xcbiBUQVJHRVRTICs9IGFsc2FcXG4gVEFSR0VUUyArPSBhbWQtcHN0YXRlXFxuIFRBUkdFVFMgKz0gYXJtNjRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjQxZDkyZDA2YjE4NDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL01ha2VmaWxlXFxuQEAgLTAsMCArMSw5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuK1RFU1RfR0VOX1BST0dTIDo9IGFsbG9jaW5mb19pb2N0bF90ZXN0XFxuK1xcbitDRkxBR1MgKz0gLVdhbGxcXG4rQ0ZMQUdTICs9ICQoS0hEUl9JTkNMVURFUylcXG4rXFxuK2luY2x1ZGUgLi4vbGliLm1rXFxuK1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMDkyMzQ4MDk3MjA0MzlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcXG5AQCAtMCwwICsxLDU0OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuK1xcbisvKiBrc2VsZnRlc3QgZm9yIGFsbG9jaW5mbyBpb2N0bFxcbisgKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bFxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBJbmMuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FsbG9jX3RhZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4va3NlbGZ0ZXN0LmhcXFwiXFxuK1xcbisjZGVmaW5lIE1BWF9MSU5FX0xFTlxcdFxcdDUxMlxcbisjZGVmaW5lIEFMTE9DSU5GT19QUk9DXFx0XFx0XFxcIi9wcm9jL2FsbG9jaW5mb1xcXCJcXG4rXFxuK2VudW0gaW9jdGxfcmV0IHtcXG4rXFx0SU9DVExfU1VDQ0VTUyA9IDAsXFxuK1xcdElPQ1RMX0ZBSUxVUkUgPSAxLFxcbitcXHRJT0NUTF9JTlZBTElEX0RBVEEgPSAyLFxcbit9O1xcbitcXG4rI2RlZmluZSBWRUNfTUFYX0VOVFJJRVMgMzJcXG4rXFxuK3N0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjIHtcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSB0YWdbVkVDX01BWF9FTlRSSUVTXTtcXG4rXFx0X191NjQgY291bnQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgKnBhcmFtcylcXG4re1xcbitcXHRyZXR1cm4gaW9jdGwoZGV2X2ZkLCBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQsIHBhcmFtcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fYWxsb2NpbmZvX2dldF9hdChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCAqcGFyYW1zKVxcbit7XFxuK1xcdHJldHVybiBpb2N0bChkZXZfZmQsIEFMTE9DSU5GT19JT0NfR0VUX0FULCBwYXJhbXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfbmV4dChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpwYXJhbXMpXFxuK3tcXG4rXFx0cmV0dXJuIGlvY3RsKGRldl9mZCwgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVCwgcGFyYW1zKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbWF0Y2hfZW50cnkoY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqcHJvY2ZzX2VudHJ5LFxcbitcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YWdfZGF0YSxcXG4rXFx0XFx0XFx0Ym9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sXFxuK1xcdFxcdFxcdGJvb2wgbWF0Y2hfZnVuY3Rpb24sIGJvb2wgbWF0Y2hfZmlsZW5hbWUpXFxuK3tcXG4rXFx0aWYgKG1hdGNoX2J5dGVzIFxcdTAwMjZcXHUwMDI2IHRhZ19kYXRhLVxcdTAwM2Vjb3VudGVyLmJ5dGVzICE9IHByb2Nmc19lbnRyeS1cXHUwMDNlY291bnRlci5ieXRlcykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwic2l6ZSByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtYXRjaF9jYWxscyBcXHUwMDI2XFx1MDAyNiB0YWdfZGF0YS1cXHUwMDNlY291bnRlci5jYWxscyAhPSBwcm9jZnNfZW50cnktXFx1MDAzZWNvdW50ZXIuY2FsbHMpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhbGwgY291bnQgcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobWF0Y2hfbGluZW5vIFxcdTAwMjZcXHUwMDI2IHRhZ19kYXRhLVxcdTAwM2V0YWcubGluZW5vICE9IHByb2Nmc19lbnRyeS1cXHUwMDNldGFnLmxpbmVubykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwibGluZW5vIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1hdGNoX2Z1bmN0aW9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzdHJuY21wKHRhZ19kYXRhLVxcdTAwM2V0YWcuZnVuY3Rpb24sIHByb2Nmc19lbnRyeS1cXHUwMDNldGFnLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJmdW5jdGlvbiByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtYXRjaF9maWxlbmFtZSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc3RybmNtcCh0YWdfZGF0YS1cXHUwMDNldGFnLmZpbGVuYW1lLCBwcm9jZnNfZW50cnktXFx1MDAzZXRhZy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiZmlsZW5hbWUgcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBtYXRjaF9lbnRyaWVzKGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyxcXG4rXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyxcXG4rXFx0XFx0XFx0ICBib29sIG1hdGNoX2J5dGVzLCBib29sIG1hdGNoX2NhbGxzLCBib29sIG1hdGNoX2xpbmVubyxcXG4rXFx0XFx0XFx0ICBib29sIG1hdGNoX2Z1bmN0aW9uLCBib29sIG1hdGNoX2ZpbGVuYW1lKVxcbit7XFxuK1xcdF9fdTY0IGk7XFxuK1xcbitcXHRpZiAocHJvY2ZzX2VudHJpZXMtXFx1MDAzZWNvdW50ICE9IHRhZ3MtXFx1MDAzZWNvdW50KSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFbnRyeSBjb3VudCBtaXNtYXRjaC4gaW9jdGwgZW50cmllczogJWxsdSwgcHJvYyBlbnRyaWVzOiAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgdGFncy1cXHUwMDNlY291bnQsIHByb2Nmc19lbnRyaWVzLVxcdTAwM2Vjb3VudCk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJvY2ZzX2VudHJpZXMtXFx1MDAzZWNvdW50OyBpKyspIHtcXG4rXFx0XFx0aWYgKCFtYXRjaF9lbnRyeShcXHUwMDI2cHJvY2ZzX2VudHJpZXMtXFx1MDAzZXRhZ1tpXSwgXFx1MDAyNnRhZ3MtXFx1MDAzZXRhZ1tpXSxcXG4rXFx0XFx0XFx0XFx0IG1hdGNoX2J5dGVzLCBtYXRjaF9jYWxscywgbWF0Y2hfbGluZW5vLFxcbitcXHRcXHRcXHRcXHQgbWF0Y2hfZnVuY3Rpb24sIG1hdGNoX2ZpbGVuYW1lKSkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJWxsdXRoIGVudHJ5IGRvZXMgbm90IG1hdGNoLlxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpXFxuK3tcXG4rXFx0c2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpO1xcbitcXG4rXFx0aWYgKGxlbiBcXHUwMDNlPSBBTExPQ0lORk9fU1RSX1NJWkUpXFxuK1xcdFxcdHN0ciArPSAobGVuIC0gQUxMT0NJTkZPX1NUUl9TSVpFKSArIDE7XFxuK1xcdHJldHVybiBzdHI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFsbG9jaW5mb19jb3B5X3N0cihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpXFxuK3tcXG4rXFx0c3RybmNweShkZXN0LCBhbGxvY2luZm9fc3RyKHNyYyksIEFMTE9DSU5GT19TVFJfU0laRSAtIDEpO1xcbitcXHRkZXN0W0FMTE9DSU5GT19TVFJfU0laRSAtIDFdID0gJ1xcXFwwJztcXG4rfVxcbitcXG4rc3RhdGljIGludCBnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcilcXG4re1xcbitcXHRGSUxFICpmcCA9IGZvcGVuKEFMTE9DSU5GT19QUk9DLCBcXFwiclxcXCIpO1xcbitcXHRjaGFyIGxpbmVbTUFYX0xJTkVfTEVOXTtcXG4rXFx0aW50IG1hdGNoZXM7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcHJvY2ZzX2VudHJ5O1xcbitcXG4rXFx0aWYgKCFmcCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRmFpbGVkIHRvIG9wZW4gXFxcIiBBTExPQ0lORk9fUFJPQyBcXFwiIGZvciByZWFkaW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFx0bWVtc2V0KHByb2Nmc19lbnRyaWVzLCAwLCBzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XFxuK1xcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSBcXHUwMDI2XFx1MDAyNiBwcm9jZnNfZW50cmllcy1cXHUwMDNlY291bnQgXFx1MDAzYyBWRUNfTUFYX0VOVFJJRVMpIHtcXG4rXFx0XFx0Y2hhciBmaWxlbmFtZVtNQVhfTElORV9MRU5dO1xcbitcXHRcXHRjaGFyIGZ1bmN0aW9uW01BWF9MSU5FX0xFTl07XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnByb2Nmc19lbnRyeSwgMCwgc2l6ZW9mKHByb2Nmc19lbnRyeSkpO1xcbitcXHRcXHRtYXRjaGVzID0gc3NjYW5mKGxpbmUsIFxcXCIlbGx1ICVsbHUgJVteOl06JWxsdSBmdW5jOiVzXFxcIixcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcyxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZwcm9jZnNfZW50cnkuY291bnRlci5jYWxscyxcXG4rXFx0XFx0XFx0XFx0IGZpbGVuYW1lLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnByb2Nmc19lbnRyeS50YWcubGluZW5vLFxcbitcXHRcXHRcXHRcXHQgZnVuY3Rpb24pO1xcbitcXG4rXFx0XFx0aWYgKG1hdGNoZXMgIT0gNSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5maWxlbmFtZSwgZmlsZW5hbWUpO1xcbitcXHRcXHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbiwgZnVuY3Rpb24pO1xcbitcXG4rXFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlbWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkge1xcbitcXHRcXHRcXHRpZiAoc3RybmNtcChwcm9jZnNfZW50cnkudGFnLmZpbGVuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgZmlsdGVyLVxcdTAwM2VmaWVsZHMuZmlsZW5hbWUsIEFMTE9DSU5GT19TVFJfU0laRSkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT04pIHtcXG4rXFx0XFx0XFx0aWYgKHN0cm5jbXAocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbixcXG4rXFx0XFx0XFx0XFx0ICAgIGZpbHRlci1cXHUwMDNlZmllbGRzLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykge1xcbitcXHRcXHRcXHRpZiAocHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8gIT0gZmlsdGVyLVxcdTAwM2VmaWVsZHMubGluZW5vKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSB7XFxuK1xcdFxcdFxcdGlmIChwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcyBcXHUwMDNjIGZpbHRlci1cXHUwMDNlbWluX3NpemUpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIHtcXG4rXFx0XFx0XFx0aWYgKHByb2Nmc19lbnRyeS5jb3VudGVyLmJ5dGVzIFxcdTAwM2UgZmlsdGVyLVxcdTAwM2VtYXhfc2l6ZSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1lbWNweShcXHUwMDI2cHJvY2ZzX2VudHJpZXMtXFx1MDAzZXRhZ1twcm9jZnNfZW50cmllcy1cXHUwMDNlY291bnQrK10sIFxcdTAwMjZwcm9jZnNfZW50cnksXFxuK1xcdFxcdCAgICAgICBzaXplb2YocHJvY2ZzX2VudHJ5KSk7XFxuK1xcdH1cXG4rXFx0ZmNsb3NlKGZwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBlbnVtIGlvY3RsX3JldCBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyhzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBfX3U2NCBzdGFydF9wb3MpXFxuK3tcXG4rXFx0aW50IGZkID0gb3BlbihBTExPQ0lORk9fUFJPQywgT19SRE9OTFkpO1xcbitcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRmFpbGVkIHRvIG9wZW4gXFxcIiBBTExPQ0lORk9fUFJPQyBcXFwiIGZvciBJT0NUTFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBJT0NUTF9GQUlMVVJFO1xcbitcXHR9XFxuK1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgc3RhcnRfY29udF9pZCwgZW5kX2NvbnRfaWQ7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IGdldF9hdF9wYXJhbXM7XFxuK1xcdGNvbnN0IGludCBtYXhfcmV0cmllcyA9IDEwO1xcbitcXHRpbnQgcmV0cnlfY291bnQgPSAwO1xcbitcXHRpbnQgc3RhdHVzO1xcbitcXG4rXFx0LypcXG4rXFx0ICogX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgbWF5IHJldHVybiBkaWZmZXJlbnQgdmFsdWVzIGlmIGEga2VybmVsIG1vZHVsZSB3YXMgbG9hZGVkXFxuK1xcdCAqIGJldHdlZW4gdGhlIHR3byBjYWxscy4gSWYgdGhhdCBoYXBwZW5zLCB0aGUgZGF0YSBnYXRoZXJlZCBjYW5ub3QgYmUgY29uc2lkZXJlZCBjb25zaXN0ZW50XFxuK1xcdCAqIGFuZCBoZW5jZSBuZWVkcyB0byBiZSBmZXRjaGVkIGFnYWluIHRvIGF2b2lkIGZsYWtpbmVzcy5cXG4rXFx0ICovXFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCBcXHUwMDI2c3RhcnRfY29udF9pZCkpIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImFsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bWVtc2V0KHRhZ3MsIDAsIHNpemVvZigqdGFncykpO1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmdldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7XFxuK1xcdFxcdG1lbWNweShcXHUwMDI2Z2V0X2F0X3BhcmFtcy5maWx0ZXIsIGZpbHRlciwgc2l6ZW9mKCpmaWx0ZXIpKTtcXG4rXFx0XFx0Z2V0X2F0X3BhcmFtcy5wb3MgPSBzdGFydF9wb3M7XFxuK1xcdFxcdGlmIChfX2FsbG9jaW5mb19nZXRfYXQoZmQsIFxcdTAwMjZnZXRfYXRfcGFyYW1zKSkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiYWxsb2NpbmZvX2dldF9hdCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRtZW1jcHkoXFx1MDAyNnRhZ3MtXFx1MDAzZXRhZ1t0YWdzLVxcdTAwM2Vjb3VudCsrXSwgXFx1MDAyNmdldF9hdF9wYXJhbXMuZGF0YSwgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpO1xcbitcXG4rXFx0XFx0d2hpbGUgKHRhZ3MtXFx1MDAzZWNvdW50IFxcdTAwM2MgVkVDX01BWF9FTlRSSUVTIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgXFx1MDAyNnRhZ3MtXFx1MDAzZXRhZ1t0YWdzLVxcdTAwM2Vjb3VudF0pID09IDApXFxuK1xcdFxcdFxcdHRhZ3MtXFx1MDAzZWNvdW50Kys7XFxuK1xcbitcXHRcXHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFxcdTAwMjZlbmRfY29udF9pZCkpIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImFsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN0YXJ0X2NvbnRfaWQuaWQgPT0gZW5kX2NvbnRfaWQuaWQpIHtcXG4rXFx0XFx0XFx0c3RhdHVzID0gSU9DVExfU1VDQ0VTUztcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImFsbG9jaW5mb19nZXRfY29udGVudF9pZCBtaXNtYXRjaCwgcmV0cnlpbmcuLi5cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBJT0NUTF9JTlZBTElEX0RBVEE7XFxuK1xcdFxcdH1cXG4rXFx0fSB3aGlsZSAoc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSBcXHUwMDI2XFx1MDAyNiByZXRyeV9jb3VudCsrIFxcdTAwM2MgbWF4X3JldHJpZXMpO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gc3RhdHVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9maWx0ZXJfdGVzdChjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyKVxcbit7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzID0gbWFsbG9jKHNpemVvZigqdGFncykpO1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqcHJvY2ZzX2VudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xcbitcXHRpbnQgaW9jdGxfc3RhdHVzO1xcbitcXHRpbnQgcmV0ID0gS1NGVF9QQVNTO1xcbitcXG4rXFx0aWYgKCF0YWdzIHx8ICFwcm9jZnNfZW50cmllcykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBmaWx0ZXIpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcXFwiIEFMTE9DSU5GT19QUk9DIFxcXCJcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX1NLSVA7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByb2Nmc19lbnRyaWVzLVxcdTAwM2Vjb3VudCA9PSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJObyBlbnRyaWVzIGZvdW5kIGluIFxcXCIgQUxMT0NJTkZPX1BST0MgXFxcIiwgc2tpcHBpbmcgdGVzdFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuK1xcbitcXHRpb2N0bF9zdGF0dXMgPSBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyh0YWdzLCBmaWx0ZXIsIDApO1xcbitcXHRpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiVHJvdWJsZSByZXRyaWV2aW5nIHZhbGlkIElPQ1RMIGVudHJpZXMsIHNraXBwaW5nLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuK1xcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfRkFJTFVSRSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRXJyb3IgcmV0cmlldmluZyBJT0NUTCBlbnRyaWVzLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIW1hdGNoX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIHRhZ3MsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpXFxuK1xcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFxuK2V4aXQ6XFxuK1xcdGZyZWUodGFncyk7XFxuK1xcdGZyZWUocHJvY2ZzX2VudHJpZXMpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlc3RfZmlsZW5hbWVfZmlsdGVyKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xcbitcXHRjb25zdCBjaGFyICp0YXJnZXRfZmlsZW5hbWUgPSBcXFwibW0vbWVtb3J5LmNcXFwiO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTtcXG4rXFx0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FO1xcbitcXHRzdHJuY3B5KGZpbHRlci5maWVsZHMuZmlsZW5hbWUsIHRhcmdldF9maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcXG4rXFxuK1xcdHJldHVybiBydW5fZmlsdGVyX3Rlc3QoXFx1MDAyNmZpbHRlcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9mdW5jdGlvbl9maWx0ZXIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XFxuK1xcdGNvbnN0IGNoYXIgKnRhcmdldF9mdW5jdGlvbiA9IFxcXCJkdXBfbW1cXFwiO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTtcXG4rXFx0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OO1xcbitcXHRzdHJuY3B5KGZpbHRlci5maWVsZHMuZnVuY3Rpb24sIHRhcmdldF9mdW5jdGlvbiwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcXG4rXFxuK1xcdHJldHVybiBydW5fZmlsdGVyX3Rlc3QoXFx1MDAyNmZpbHRlcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9zaXplX2ZpbHRlcih2b2lkKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcXG4rXFx0aW50IHJldCA9IEtTRlRfUEFTUztcXG4rXFx0X191NjQgdGFyZ2V0X3NpemUsIGksIHBvcztcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqZm91bmRfdGFnID0gTlVMTDtcXG4rXFx0Y29uc3QgY2hhciAqdGFyZ2V0X2Z1bmN0aW9uID0gXFxcImRvX2luaXRfbW9kdWxlXFxcIjtcXG4rXFx0c3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHN0YXJ0X2NvbnRfaWQsIGVuZF9jb250X2lkO1xcbitcXHRpbnQgcmV0cnkgPSAwO1xcbitcXHRjb25zdCBpbnQgbWF4X3JldHJpZXMgPSAxMDtcXG4rXFxuK1xcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdFxcdGdvdG8gZnJlZW1lbTtcXG4rXFx0fVxcbitcXG4rXFx0ZmQgPSBvcGVuKEFMTE9DSU5GT19QUk9DLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkZhaWxlZCB0byBvcGVuIFxcXCIgQUxMT0NJTkZPX1BST0MgXFxcIjogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0Z290byBmcmVlbWVtO1xcbitcXHR9XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGZvdW5kX3RhZyA9IE5VTEw7XFxuK1xcdFxcdHBvcyA9IDA7XFxuK1xcbitcXHRcXHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFxcdTAwMjZzdGFydF9jb250X2lkKSkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiYWxsb2NpbmZvX2dldF9jb250ZW50X2lkIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xcbitcXHRcXHRmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT047XFxuK1xcdFxcdHN0cm5jcHkoZmlsdGVyLmZpZWxkcy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xcbitcXG4rXFx0XFx0aWYgKGdldF9maWx0ZXJlZF9wcm9jZnNfZW50cmllcyhwcm9jZnNfZW50cmllcywgXFx1MDAyNmZpbHRlcikpIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVycm9yIHJldHJpZXZpbmcgZW50cmllcyBmcm9tIFxcXCIgQUxMT0NJTkZPX1BST0MgXFxcIlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocHJvY2ZzX2VudHJpZXMtXFx1MDAzZWNvdW50ID09IDApIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkZ1bmN0aW9uICVzIG5vdCBmb3VuZCBpbiBwcm9jZnNcXFxcblxcXCIsIHRhcmdldF9mdW5jdGlvbik7XFxuK1xcdFxcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR0YXJnZXRfc2l6ZSA9IHByb2Nmc19lbnRyaWVzLVxcdTAwM2V0YWdbMF0uY291bnRlci5ieXRlcztcXG4rXFxuK1xcdFxcdG1lbXNldChcXHUwMDI2ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7XFxuK1xcdFxcdGZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRTtcXG4rXFx0XFx0ZmlsdGVyLm1pbl9zaXplID0gdGFyZ2V0X3NpemU7XFxuK1xcdFxcdGZpbHRlci5tYXhfc2l6ZSA9IHRhcmdldF9zaXplO1xcbitcXG4rXFx0XFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGFsbG9jaW5mb19nZXRfYXQgZ2V0X2F0X3BhcmFtcztcXG4rXFxuK1xcdFxcdFxcdG1lbXNldChcXHUwMDI2Z2V0X2F0X3BhcmFtcywgMCwgc2l6ZW9mKGdldF9hdF9wYXJhbXMpKTtcXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZnZXRfYXRfcGFyYW1zLmZpbHRlciwgXFx1MDAyNmZpbHRlciwgc2l6ZW9mKGZpbHRlcikpO1xcbitcXHRcXHRcXHRnZXRfYXRfcGFyYW1zLnBvcyA9IHBvcztcXG4rXFxuK1xcdFxcdFxcdGlmIChfX2FsbG9jaW5mb19nZXRfYXQoZmQsIFxcdTAwMjZnZXRfYXRfcGFyYW1zKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHR0YWdzLVxcdTAwM2Vjb3VudCA9IDA7XFxuK1xcdFxcdFxcdG1lbWNweShcXHUwMDI2dGFncy1cXHUwMDNldGFnW3RhZ3MtXFx1MDAzZWNvdW50KytdLCBcXHUwMDI2Z2V0X2F0X3BhcmFtcy5kYXRhLFxcbitcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpO1xcbitcXG4rXFx0XFx0XFx0d2hpbGUgKHRhZ3MtXFx1MDAzZWNvdW50IFxcdTAwM2MgVkVDX01BWF9FTlRSSUVTIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgXFx1MDAyNnRhZ3MtXFx1MDAzZXRhZ1t0YWdzLVxcdTAwM2Vjb3VudF0pID09IDApXFxuK1xcdFxcdFxcdFxcdHRhZ3MtXFx1MDAzZWNvdW50Kys7XFxuK1xcbitcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGFncy1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHRcXHRcXHRpZiAoc3RyY21wKHRhZ3MtXFx1MDAzZXRhZ1tpXS50YWcuZnVuY3Rpb24sIHRhcmdldF9mdW5jdGlvbikgPT0gMCkge1xcbitcXHRcXHRcXHRcXHRcXHRmb3VuZF90YWcgPSBcXHUwMDI2dGFncy1cXHUwMDNldGFnW2ldO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRpZiAoZm91bmRfdGFnIHx8IHRhZ3MtXFx1MDAzZWNvdW50IFxcdTAwM2MgVkVDX01BWF9FTlRSSUVTKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdHBvcyArPSB0YWdzLVxcdTAwM2Vjb3VudDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCBcXHUwMDI2ZW5kX2NvbnRfaWQpKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJhbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0ID0gS1NGVF9GQUlMO1xcbitcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJNb2R1bGUgbG9hZCBkZXRlY3RlZCBkdXJpbmcgc2l6ZSB2ZXJpZmljYXRpb24sIHJldHJ5aW5nLi4uXFxcXG5cXFwiKTtcXG4rXFx0fSB3aGlsZSAocmV0cnkrKyBcXHUwMDNjIG1heF9yZXRyaWVzKTtcXG4rXFxuK1xcdGlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkIFxcdTAwMjZcXHUwMDI2ICFmb3VuZF90YWcpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVudHJ5IHdpdGggZnVuY3Rpb24gJXMgbm90IGZvdW5kIGluIElPQ1RMIHJlc3VsdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICB0YXJnZXRfZnVuY3Rpb24pO1xcbitcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdH0gZWxzZSBpZiAoc3RhcnRfY29udF9pZC5pZCAhPSBlbmRfY29udF9pZC5pZCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRmFpbGVkIHRvIG1hdGNoIGNvbnRlbnRfaWRzIGZvciBwcm9jZnMgYW5kIElPQ1RMLCBza2lwcGluZy4uLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0fSBlbHNlIGlmIChmb3VuZF90YWcgXFx1MDAyNlxcdTAwMjYgZm91bmRfdGFnLVxcdTAwM2Vjb3VudGVyLmJ5dGVzICE9IHRhcmdldF9zaXplKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJJT0NUTCBlbnRyeSBzaXplICVsbHUgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IHNpemUgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGZvdW5kX3RhZy1cXHUwMDNlY291bnRlci5ieXRlcywgdGFyZ2V0X3NpemUpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdH1cXG4rXFxuK2V4aXQ6XFxuK1xcdGNsb3NlKGZkKTtcXG4rZnJlZW1lbTpcXG4rXFx0ZnJlZSh0YWdzKTtcXG4rXFx0ZnJlZShwcm9jZnNfZW50cmllcyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9saW5lbm9fZmlsdGVyKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcXG4rXFx0ZW51bSBpb2N0bF9yZXQgaW9jdGxfc3RhdHVzO1xcbitcXHRpbnQgcmV0ID0gS1NGVF9QQVNTO1xcbitcXHRfX3U2NCB0YXJnZXRfbGluZW5vLCBpO1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YXJnZXRfdGFnO1xcbitcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcbitcXHRpZiAoIXRhZ3MgfHwgIXByb2Nmc19lbnRyaWVzKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gS1NGVF9GQUlMO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7XFxuK1xcbitcXHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBcXHUwMDI2ZmlsdGVyKSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRXJyb3IgcmV0cmlldmluZyBlbnRyaWVzIGZyb20gXFxcIiBBTExPQ0lORk9fUFJPQyBcXFwiXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gS1NGVF9GQUlMO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFx0aWYgKHByb2Nmc19lbnRyaWVzLVxcdTAwM2Vjb3VudCA9PSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDb3VsZCBub3QgcmV0cmlldmUgcHJvY2ZzIGVudHJpZXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX1NLSVA7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbitcXHQvKlxcbitcXHQgKiBXZSBkZXBlbmQgb24gdGhlIHByb2NmcyByZXN1bHRzIHRvIGRldGVybWluZSB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBmaWx0ZXIgYmVmb3JlXFxuK1xcdCAqIG1ha2luZyB0aGUgaW9jdGwgcXVlcnkuIEhlbmNlLCB3ZSBjYW5ub3QgcmV1c2UgcnVuX2ZpbHRlcl90ZXN0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHR0YXJnZXRfdGFnID0gXFx1MDAyNnByb2Nmc19lbnRyaWVzLVxcdTAwM2V0YWdbMF07XFxuK1xcdHRhcmdldF9saW5lbm8gPSB0YXJnZXRfdGFnLVxcdTAwM2V0YWcubGluZW5vO1xcbitcXG4rXFx0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTztcXG4rXFx0ZmlsdGVyLmZpZWxkcy5saW5lbm8gPSB0YXJnZXRfbGluZW5vO1xcbitcXG4rXFx0aW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgXFx1MDAyNmZpbHRlciwgMCk7XFxuK1xcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfSU5WQUxJRF9EQVRBKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcm91YmxlIHJldHJpZXZpbmcgdmFsaWQgSU9DVEwgZW50cmllcywgc2tpcHBpbmcuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gS1NGVF9TS0lQO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFx0aWYgKGlvY3RsX3N0YXR1cyA9PSBJT0NUTF9GQUlMVVJFKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFcnJvciByZXRyaWV2aW5nIElPQ1RMIGVudHJpZXMuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gS1NGVF9GQUlMO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWdzLVxcdTAwM2Vjb3VudDsgaSsrKSB7XFxuK1xcdFxcdGlmICh0YWdzLVxcdTAwM2V0YWdbaV0udGFnLmxpbmVubyAhPSB0YXJnZXRfbGluZW5vKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJJT0NUTCBlbnRyeSAlbGx1IGhhcyBpbmNvcnJlY3QgbGluZW5vICVsbHUuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgaSwgdGFncy1cXHUwMDNldGFnW2ldLnRhZy5saW5lbm8pO1xcbitcXHRcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdFxcdFxcdGdvdG8gZXhpdDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN0cm5jbXAodGFncy1cXHUwMDNldGFnW2ldLnRhZy5mdW5jdGlvbiwgdGFyZ2V0X3RhZy1cXHUwMDNldGFnLmZ1bmN0aW9uLFxcbitcXHRcXHRcXHQgICAgQUxMT0NJTkZPX1NUUl9TSVpFKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBzdHJuY21wKHRhZ3MtXFx1MDAzZXRhZ1tpXS50YWcuZmlsZW5hbWUsIHRhcmdldF90YWctXFx1MDAzZXRhZy5maWxlbmFtZSxcXG4rXFx0XFx0XFx0ICAgIEFMTE9DSU5GT19TVFJfU0laRSkgPT0gMClcXG4rXFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWZvdW5kKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJPcmlnaW5hbCBwcm9jZnMgZW50cnkgbm90IGZvdW5kIGluIElPQ1RMIGxpbmVubyBmaWx0ZXIgcmVzdWx0cy5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdH1cXG4rXFxuK2V4aXQ6XFxuK1xcdGZyZWUodGFncyk7XFxuK1xcdGZyZWUocHJvY2ZzX2VudHJpZXMpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRrc2Z0X3NldF9wbGFuKDQpO1xcbitcXG4rXFx0cmV0ID0gdGVzdF9maWxlbmFtZV9maWx0ZXIoKTtcXG4rXFx0aWYgKHJldCA9PSBLU0ZUX1NLSVApXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiU2tpcHBpbmcgdGVzdF9maWxlbmFtZV9maWx0ZXJcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXFxcInRlc3RfZmlsZW5hbWVfZmlsdGVyXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IHRlc3RfZnVuY3Rpb25fZmlsdGVyKCk7XFxuK1xcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlNraXBwaW5nIHRlc3RfZnVuY3Rpb25fZmlsdGVyXFxcXG5cXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsIFxcXCJ0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXQgPSB0ZXN0X3NpemVfZmlsdGVyKCk7XFxuK1xcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlNraXBwaW5nIHRlc3Rfc2l6ZV9maWx0ZXJcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXFxcInRlc3Rfc2l6ZV9maWx0ZXJcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gdGVzdF9saW5lbm9fZmlsdGVyKCk7XFxuK1xcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlNraXBwaW5nIHRlc3RfbGluZW5vX2ZpbHRlclxcXFxuXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdChyZXQgPT0gS1NGVF9QQVNTLCBcXFwidGVzdF9saW5lbm9fZmlsdGVyXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjoyODoxNC40MDk3NjQ3MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzU0NDY3MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY2luZm9faW9jdGxcIixcbiAgICBcImFsbG9jaW5mb19jb21wYXRfaW9jdGxcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZFwiLFxuICAgIFwiYWxsb2NpbmZvX2lvY3RsX2dldF9hdFwiLFxuICAgIFwiYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0XCIsXG4gICAgXCJtYXRjaGVzX2ZpbHRlclwiLFxuICAgIFwiY29kZXRhZ19nZXRfY29udGVudF9pZFwiLFxuICAgIFwiY29kZXRhZ19nZXRfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvY3RsIGludGVyZmFjZSBmb3IgYC9wcm9jL2FsbG9jaW5mb2AgdG8gYWxsb3cgc3RydWN0dXJlZCBiaW5hcnkgZGF0YSBleHRyYWN0aW9uIGFuZCBmaWx0ZXJpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGRhdGEuIFRoaXMgaXMgYSBuZXcgdXNlcnNwYWNlLWZhY2luZyBBUEkgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGludmFsaWQgaW5wdXRzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgY29uY3VycmVuY3kgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyOTBlZDg0NmYxZDE1YzdlNDFjY2Y0NzhmZWU2OTYwMjE1YTRlYThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDAyOjI4OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuaW5kZXggNTM4OWQyNDExNzZhOGEuLmMzYTI4NDY3OTU1ZjNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5AQCAtNDYsNiArNDYsMTEgQEAgc3lzY3RsOlxuIFJ1bnRpbWUgaW5mbzpcbiAgIC9wcm9jL2FsbG9jaW5mb1xuIFxuKyAgUHJvZmlsaW5nIGRhdGEgY2FuIGJlIHJldHJpZXZlZCBlaXRoZXIgYnkgcmVhZGluZyBgL3Byb2MvYWxsb2NpbmZvYCBkaXJlY3RseSBhc1xuKyAgdGV4dCBvciBwcm9ncmFtbWF0aWNhbGx5IHZpYSBgaW9jdGwoKWAgY2FsbHMgZGVmaW5lZCBpbiBgXHUwMDNjdWFwaS9saW51eC9hbGxvY190YWcuaFx1MDAzZWAuXG4rICBUaGUgaW9jdGwgaW50ZXJmYWNlIHN1cHBvcnRzIHN0cnVjdHVyZWQgYmluYXJ5IGRhdGEgZXh0cmFjdGlvbiBhcyB3ZWxsIGFzIGZpbHRlcmluZ1xuKyAgYnkgbW9kdWxlIG5hbWUsIGZ1bmN0aW9uLCBmaWxlLCBsaW5lIG51bWJlciwgYWNjdXJhY3ksIG9yIGFsbG9jYXRpb24gc2l6ZSBsaW1pdHMuXG4rXG4gRXhhbXBsZSBvdXRwdXQ6OlxuIFxuICAgcm9vdEBtb3JpYS1rdm06fiMgc29ydCAtZyAvcHJvYy9hbGxvY2luZm98dGFpbHxudW1mbXQgLS10bz1pZWNcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5pbmRleCAzZjBlZjFlMjdlYjA3ZC4uMmZjNTMwOTM3NTJkMTMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcbkBAIC0zNDYsNiArMzQ2LDggQEAgQ29kZSAgU2VxIyAgICBJbmNsdWRlIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOmx1em1heGltaWxpYW5AZ21haWwuY29tXHUwMDNlXG4gMHhBNSAgMjAtMkYgIGxpbnV4L3N1cmZhY2VfYWdncmVnYXRvci9kdHguaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgU3VyZmFjZSBEVFggZHJpdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2NtYWlsdG86bHV6bWF4aW1pbGlhbkBnbWFpbC5jb21cdTAwM2VcbisweEE2ICAwMC0wRiAgdWFwaS9saW51eC9hbGxvY190YWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOnN1cmVuYkBnb29nbGUuY29tXHUwMDNlXG4gMHhBQSAgMDAtM0YgIGxpbnV4L3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaFxuIDB4QUIgIDAwLTFGICBsaW51eC9uYmQuaFxuIDB4QUMgIDAwLTFGICBsaW51eC9yYXcuaFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDI5YzMwMmU5YzE3YmEzLi44NjdkNGFkNThmYjQyMiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE2OTM3LDcgKzE2OTM3LDkgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbiBGOlx0aW5jbHVkZS9saW51eC9hbGxvY190YWcuaFxuIEY6XHRpbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmhcbitGOlx0aW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXG4gRjpcdG1tL2FsbG9jX3RhZy5jXG4rRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9cbiBcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEJBTExPT05cbiBNOlx0QW5kcmV3IE1vcnRvbiBcdTAwM2Nha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RldGFnLmggYi9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaFxuaW5kZXggZGRhZTc0ODRjYTQ1NmMuLmEyNWEwODVjMmRmMTk5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb2RldGFnLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY29kZXRhZy5oXG5AQCAtNzcsNiArNzcsOCBAQCBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciB7XG4gdm9pZCBjb2RldGFnX2xvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbiBib29sIGNvZGV0YWdfdHJ5bG9ja19tb2R1bGVfbGlzdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpO1xuIHZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbit1bnNpZ25lZCBsb25nIGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbit1bnNpZ25lZCBpbnQgY29kZXRhZ19nZXRfY291bnQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XG4gc3RydWN0IGNvZGV0YWcgKmNvZGV0YWdfbmV4dF9jdChzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciAqaXRlcik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI3MGY2OTNiMTgyMjA0XG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbkBAIC0wLDAgKzEsOTkgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xuKy8qXG4rICogYWxsb2NfdGFnIElPQ1RMIEFQSSBkZWZpbml0aW9uXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKyAqXG4rICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhc1xuKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuKyAqL1xuK1xuKyNpZm5kZWYgX1VBUElfQUxMT0NfVEFHX0hcbisjZGVmaW5lIF9VQVBJX0FMTE9DX1RBR19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuK1xuKy8qXG4rICogRnVuY3Rpb24sIGZpbGUgYW5kIG1vZHVsZSBuYW1lcyBvZnRlbiBoYXZlIHRoZSBzYW1lIHByZWZpeGVzLCB0aGVyZWZvcmVcbisgKiB3aGVuIGZpbHRlcmluZyBieSB0aGVzZSBjcml0ZXJpYSwgd2UgY29tcGFyZSB0aGUgbGFzdCA2NCBjaGFyYWN0ZXJzIHRvXG4rICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXG4rICovXG4rI2RlZmluZSBBTExPQ0lORk9fU1RSX1NJWkVcdDY0XG4rXG4rc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHtcbitcdF9fdTY0IGlkO1xuK307XG4rXG4rc3RydWN0IGFsbG9jaW5mb190YWcge1xuK1x0LyogTG9uZ2VyIG5hbWVzIGFyZSB0cmltbWVkICovXG4rXHRjaGFyIG1vZG5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcbitcdGNoYXIgZnVuY3Rpb25bQUxMT0NJTkZPX1NUUl9TSVpFXTtcbitcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcbitcdF9fdTY0IGxpbmVubztcbitcdC8qIGZpbHRlciBjcml0ZXJpYSBvbmx5OyBzZWUgYWxsb2NpbmZvX2NvdW50ZXIuYWNjdXJhdGUgZm9yIGFjdHVhbCBhY2N1cmFjeSAqL1xuK1x0X191NjQgaW5hY2N1cmF0ZTtcbit9O1xuK1xuKy8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXG4rc3RydWN0IGFsbG9jaW5mb19jb3VudGVyIHtcbitcdF9fdTY0IGJ5dGVzO1xuK1x0X191NjQgY2FsbHM7XG4rXHRfX3U4IGFjY3VyYXRlO1xuK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpO1xuK1xuK3N0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEge1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWcgdGFnO1xuK1x0c3RydWN0IGFsbG9jaW5mb19jb3VudGVyIGNvdW50ZXI7XG4rfTtcbitcbitlbnVtIHtcbitcdEFMTE9DSU5GT19GSUxURVJfTU9ETkFNRSxcbitcdEFMTE9DSU5GT19GSUxURVJfRlVOQ1RJT04sXG4rXHRBTExPQ0lORk9fRklMVEVSX0ZJTEVOQU1FLFxuK1x0QUxMT0NJTkZPX0ZJTFRFUl9MSU5FTk8sXG4rXHRBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUsXG4rXHRBTExPQ0lORk9fRklMVEVSX01JTl9TSVpFLFxuK1x0QUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRSxcbitcdF9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUID0gQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRVxuK307XG4rXG4rI2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTU9ETkFNRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9NT0ROQU1FKVxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OKVxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0ZJTEVOQU1FKVxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOT1x0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9MSU5FTk8pXG4rI2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURVx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfSU5BQ0NVUkFURSlcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9NSU5fU0laRSlcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRSlcbitcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS1MgXFxcbitcdCgoMSBcdTAwM2NcdTAwM2MgKF9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUICsgMSkpIC0gMSlcbitcbitzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciB7XG4rXHRfX3U2NCBtYXNrOyAvKiBiaXRtYXNrIG9mIHRoZSBmaWx0ZXIgZmllbGRzIHVzZWQgKi9cbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnIGZpZWxkcztcbitcdF9fdTY0IG1pbl9zaXplO1xuK1x0X191NjQgbWF4X3NpemU7XG4rfTtcbitcbitzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XG4rXHQvKiBpbnB1dHMgKi9cbitcdF9fdTY0IHBvcztcbitcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbitcdC8qIG91dHB1dCAqL1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSBkYXRhO1xuK307XG4rXG4rI2RlZmluZSBfQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEXHQwXG4rI2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfQVRcdFx0MVxuKyNkZWZpbmUgX0FMTE9DSU5GT19JT0NfR0VUX05FWFRcdFx0MlxuK1xuKyNkZWZpbmUgQUxMT0NJTkZPX0lPQ19CQVNFXHRcdDB4QTZcbisjZGVmaW5lIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQsXHRcXFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZClcbisjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX0FUXHRcdF9JT1dSKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfR0VUX0FULFx0XFxcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IGFsbG9jaW5mb19nZXRfYXQpXG4rI2RlZmluZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUXHRcdF9JT1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVCxcdFxcXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSlcbitcbisjZW5kaWYgLyogX1VBUElfQUxMT0NfVEFHX0ggKi9cbmRpZmYgLS1naXQgYS9saWIvY29kZXRhZy5jIGIvbGliL2NvZGV0YWcuY1xuaW5kZXggNDAwMWE3ZWE2Njc1NDIuLmE5Y2RhNGM5NjJhMzAzIDEwMDY0NFxuLS0tIGEvbGliL2NvZGV0YWcuY1xuKysrIGIvbGliL2NvZGV0YWcuY1xuQEAgLTE5LDYgKzE5LDggQEAgc3RydWN0IGNvZGV0YWdfdHlwZSB7XG4gXHRzdHJ1Y3QgY29kZXRhZ190eXBlX2Rlc2MgZGVzYztcbiBcdC8qIGdlbmVyYXRlcyB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIGZvciBtb2R1bGUgbG9hZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0X21vZF9zZXE7XG4rXHQvKiBidW1wZWQgb24gZXZlcnkgbW9kdWxlIGxvYWQgYW5kIHVubG9hZCAqL1xuK1x0dW5zaWduZWQgbG9uZyBjb250ZW50X2lkO1xuIH07XG4gXG4gc3RydWN0IGNvZGV0YWdfcmFuZ2Uge1xuQEAgLTUwLDYgKzUyLDIwIEBAIHZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuIFx0dXBfcmVhZChcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuIH1cbiBcbit1bnNpZ25lZCBsb25nIGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbitcbitcdHJldHVybiBjdHR5cGUtXHUwMDNlY29udGVudF9pZDtcbit9XG4rXG4rdW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4rXG4rXHRyZXR1cm4gY3R0eXBlLVx1MDAzZWNvdW50O1xuK31cbitcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbiB7XG4gXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyID0ge1xuQEAgLTIwNCw2ICsyMjAsNyBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXG4gXHRkb3duX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gXHRjbW9kLVx1MDAzZW1vZF9zZXEgPSArK2N0dHlwZS1cdTAwM2VuZXh0X21vZF9zZXE7XG4rXHQrK2N0dHlwZS1cdTAwM2Vjb250ZW50X2lkO1xuIFx0bW9kX2lkID0gaWRyX2FsbG9jKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfaWRyLCBjbW9kLCAwLCAwLCBHRlBfS0VSTkVMKTtcbiBcdGlmIChtb2RfaWQgXHUwMDNlPSAwKSB7XG4gXHRcdGlmIChjdHR5cGUtXHUwMDNlZGVzYy5tb2R1bGVfbG9hZCkge1xuQEAgLTM2OCw2ICszODUsNyBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0Y3R0eXBlLVx1MDAzZWNvdW50IC09IHJhbmdlX3NpemUoY3R0eXBlLCBcdTAwMjZjbW9kLVx1MDAzZXJhbmdlKTtcbiBcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfaWRyLCBtb2RfaWQpO1xuIFx0XHRcdGtmcmVlKGNtb2QpO1xuK1x0XHRcdCsrY3R0eXBlLVx1MDAzZWNvbnRlbnRfaWQ7XG4gXHRcdH1cbiBcdFx0dXBfd3JpdGUoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiBcdFx0aWYgKGZvdW5kIFx1MDAyNlx1MDAyNiBjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGQ5YmUxY2Y1MTg3ZDk3Li4zMmFjMDY3NGQ4YmY2ZCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTUsNiArNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYWxsc3ltcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9leHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2NfdGFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbkBAIC0xNCw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2FsbG9jX3RhZy5oXHUwMDNlXG4gXG4gI2RlZmluZSBBTExPQ0lORk9fRklMRV9OQU1FXHRcdFwiYWxsb2NpbmZvXCJcbiAjZGVmaW5lIE1PRFVMRV9BTExPQ19UQUdfVk1BUF9TSVpFXHQoMTAwMDAwVUwgKiBzaXplb2Yoc3RydWN0IGFsbG9jX3RhZykpXG5AQCAtNDcsNiArNDksMTEgQEAgc3RydWN0IGFsbG9jaW5mb19wcml2YXRlIHtcbiBcdHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIGl0ZXI7XG4gXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciByZXBvcnRlZF9pdGVyO1xuIFx0Ym9vbCBwcmludF9oZWFkZXI7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XG4rXHQvKiBpb2N0bCB1c2VzIGEgc2VwYXJhdGUgaXRlcmF0b3Igbm90IHRvIGludGVyZmVyZSB3aXRoIHJlYWRzICovXG4rXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpb2N0bF9pdGVyO1xuK1x0Ym9vbCBwb3NpdGlvbmVkOyAvKiBzZXFfb3Blbl9wcml2YXRlKCkgc2V0cyB0byAwICovXG4rXHRzdHJ1Y3QgbXV0ZXggaW9jdGxfbG9jaztcbiB9O1xuIFxuIHN0YXRpYyB2b2lkICphbGxvY2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbkBAIC0xMzAsNiArMTM3LDM0MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFsbG9jaW5mb19zZXFfb3AgPSB7XG4gXHQuc2hvd1x0PSBhbGxvY2luZm9fc2hvdyxcbiB9O1xuIFxuKy8qXG4rICogSW5pdGlhbGl6ZXMgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgYWxsb2NhdGVzIHByaXZhdGUgc3RhdGUgd2hlbiBvcGVuaW5nXG4rICogdGhlIC9wcm9jL2FsbG9jaW5mbyBwcm9jZnMgZW50cnkuXG4rICovXG4rc3RhdGljIGludCBhbGxvY2luZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZhbGxvY2luZm9fc2VxX29wLFxuK1x0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGFsbG9jaW5mb19wcml2YXRlKSk7XG4rXHRpZiAoIXJldCkge1xuK1x0XHRzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdFx0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuK1xuK1x0XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKlxuKyAqIENsZWFucyB1cCB0aGUgc2VxX2ZpbGUgc3RhdGUgYW5kIGZyZWVzIHVwIHRoZSBwcml2YXRlIHN0YXRlIGFsbG9jYXRlZCBpblxuKyAqIGFsbG9jaW5mb19vcGVuKCkgd2hlbiBjbG9zaW5nIHRoZSAvcHJvYy9hbGxvY2luZm8gZmlsZSBkZXNjcmlwdG9yLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWxsb2NpbmZvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0c3RydWN0IHNlcV9maWxlICptID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4rXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4rXHRyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN1ZmZpeCBvZiBhIHN0cmluZyBzbyB0aGF0IGl0cyBsZW5ndGggZml0cyB3aXRoaW5cbisgKiBBTExPQ0lORk9fU1RSX1NJWkUsIHByZXNlcnZpbmcgdGhlIHRyYWlsaW5nIGNoYXJhY3RlcnMuXG4rICogRnVuY3Rpb24sIGZpbGUgYW5kIG1vZHVsZSBuYW1lcyBvZnRlbiBoYXZlIHRoZSBzYW1lIHByZWZpeGVzLCB0aGVyZWZvcmVcbisgKiB3aGVuIGZpbHRlcmluZyBieSB0aGVzZSBjcml0ZXJpYSwgd2UgY29tcGFyZSB0aGUgbGFzdCA2NCBjaGFyYWN0ZXJzIHRvXG4rICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXG4rICovXG4rc3RhdGljIGNvbnN0IGNoYXIgKmFsbG9jaW5mb19zdHIoY29uc3QgY2hhciAqc3RyKVxuK3tcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyKTtcbitcbitcdC8qIEtlZXAgYW4gZXh0cmEgc3BhY2UgZm9yIHRoZSB0cmFpbGluZyBOVUxMLiAqL1xuK1x0aWYgKGxlbiBcdTAwM2U9IEFMTE9DSU5GT19TVFJfU0laRSlcbitcdFx0c3RyICs9IChsZW4gLSBBTExPQ0lORk9fU1RSX1NJWkUpICsgMTtcbitcdHJldHVybiBzdHI7XG4rfVxuK1xuKy8qIENvcHkgYSBzdHJpbmcgYW5kIHRyaW0gZnJvbSB0aGUgYmVnaW5uaW5nIGlmIGl0J3MgdG9vIGxvbmcgKi9cbitzdGF0aWMgdm9pZCBhbGxvY2luZm9fY29weV9zdHIoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKVxuK3tcbitcdHN0cnNjcHlfcGFkKGRlc3QsIGFsbG9jaW5mb19zdHIoc3JjKSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcbit9XG4rXG4rLyogQ29tcGFyZSB0d28gc3RyaW5ncyBhbmQgb25seSBjb25zaWRlciB0aGUgdHJpbW1lZCBzdWZmaXggaWYgczEgaXMgdG9vIGxvbmcgKi9cbitzdGF0aWMgaW50IGFsbG9jaW5mb19jbXBfc3RyKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqdGVtcGxhdGUpXG4re1xuK1x0cmV0dXJuIHN0cm5jbXAoYWxsb2NpbmZvX3N0cihzdHIpLCB0ZW1wbGF0ZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcbit9XG4rXG4rLyogRmV0Y2ggdGhlIHBlci1DUFUgY291bnRlcnMgKi9cbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgYWxsb2NpbmZvX3ByZWZldGNoX2NvdW50ZXJzKHN0cnVjdCBjb2RldGFnICpjdClcbit7XG4rXHRyZXR1cm4gYWxsb2NfdGFnX3JlYWQoY3RfdG9fYWxsb2NfdGFnKGN0KSk7XG4rfVxuK1xuKy8qXG4rICogUG9wdWxhdGVzIHRoZSBVQVBJIGFsbG9jaW5mb190YWdfZGF0YSBzdHJ1Y3R1cmUgd2l0aCBhY3RpdmUgcnVudGltZVxuKyAqIHByb2ZpbGluZyBjb3VudGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgZ2l2ZW4ga2VybmVsIGNvZGV0YWcuXG4rICovXG4rc3RhdGljIHZvaWQgYWxsb2NpbmZvX3RvX3BhcmFtcyhzdHJ1Y3QgY29kZXRhZyAqY3QsXG4rXHRcdFx0XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpkYXRhLFxuK1x0XHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMpXG4re1xuK1x0aWYgKGN0LVx1MDAzZW1vZG5hbWUpXG4rXHRcdGFsbG9jaW5mb19jb3B5X3N0cihkYXRhLVx1MDAzZXRhZy5tb2RuYW1lLCBjdC1cdTAwM2Vtb2RuYW1lKTtcbitcdGVsc2VcbitcdFx0ZGF0YS1cdTAwM2V0YWcubW9kbmFtZVswXSA9ICdcXDAnO1xuK1x0YWxsb2NpbmZvX2NvcHlfc3RyKGRhdGEtXHUwMDNldGFnLmZ1bmN0aW9uLCBjdC1cdTAwM2VmdW5jdGlvbik7XG4rXHRhbGxvY2luZm9fY29weV9zdHIoZGF0YS1cdTAwM2V0YWcuZmlsZW5hbWUsIGN0LVx1MDAzZWZpbGVuYW1lKTtcbitcdGRhdGEtXHUwMDNldGFnLmxpbmVubyA9IGN0LVx1MDAzZWxpbmVubztcbitcdGRhdGEtXHUwMDNlY291bnRlci5ieXRlcyA9IGNvdW50ZXJzLVx1MDAzZWJ5dGVzO1xuK1x0ZGF0YS1cdTAwM2Vjb3VudGVyLmNhbGxzID0gY291bnRlcnMtXHUwMDNlY2FsbHM7XG4rXHRkYXRhLVx1MDAzZWNvdW50ZXIuYWNjdXJhdGUgPSAhYWxsb2NfdGFnX2lzX2luYWNjdXJhdGUoY3RfdG9fYWxsb2NfdGFnKGN0KSk7XG4rfVxuK1xuKy8qXG4rICogUmV0cmlldmVzIHRoZSB1bmlxdWUgY29udGVudCBJRCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiB0YWcgbW9kdWxlXG4rICogbGF5b3V0LCBhbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGV0ZWN0IGlmIG1vZHVsZXMgd2VyZSBsb2FkZWQgLyB1bmxvYWRlZC5cbisgKi9cbitzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG4re1xuK1x0c3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHBhcmFtcztcbitcbitcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcdHBhcmFtcy5pZCA9IGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoYWxsb2NfdGFnX2N0dHlwZSk7XG4rXHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBWZXJpZmllcyB3aGV0aGVyIGEgZ2l2ZW4gY29kZXRhZyBzYXRpc2ZpZXMgdGhlIGFjdGl2ZSBmaWx0ZXJpbmcgY3JpdGVyaWEgYnlcbisgKiBtYXRjaGluZyBpdHMgY2hhcmFjdGVyaXN0aWNzIGFnYWluc3QgdGhlIHNwZWNpZmllZCBmaWx0ZXIuXG4rICovXG4rc3RhdGljIGJvb2wgbWF0Y2hlc19maWx0ZXIoc3RydWN0IGNvZGV0YWcgKmN0LCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyLFxuK1x0XHRcdCAgIHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgKmNvdW50ZXJzLFxuK1x0XHRcdCAgIGJvb2wgKmZldGNoZWRfY291bnRlcnMpXG4re1xuK1x0Ym9vbCBpbmFjY3VyYXRlO1xuK1xuK1x0aWYgKCFmaWx0ZXIgfHwgIWZpbHRlci1cdTAwM2VtYXNrKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUUpIHtcbitcdFx0LyogdXNlciB3YW50cyB0byBmaWx0ZXIgYnkgbW9kbmFtZSBidXQgY3QtXHUwMDNlbW9kbmFtZSBpcyBOVUxMICovXG4rXHRcdGlmICghY3QtXHUwMDNlbW9kbmFtZSkge1xuK1x0XHRcdC8qIHZhbGlkYXRlIGlmIHVzZXIgd2FzIGF0dGVtcHRpbmcgdG8gZmlsdGVyIGZvciBidWlsdC1pbiBhbGxvY2F0aW9ucyAqL1xuK1x0XHRcdGlmIChmaWx0ZXItXHUwMDNlZmllbGRzLm1vZG5hbWVbMF0gIT0gJ1xcMCcpXG4rXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH0gZWxzZSBpZiAoYWxsb2NpbmZvX2NtcF9zdHIoY3QtXHUwMDNlbW9kbmFtZSwgZmlsdGVyLVx1MDAzZWZpZWxkcy5tb2RuYW1lKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT04pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGN0LVx1MDAzZWZ1bmN0aW9uIFx1MDAyNlx1MDAyNiBhbGxvY2luZm9fY21wX3N0cihjdC1cdTAwM2VmdW5jdGlvbiwgZmlsdGVyLVx1MDAzZWZpZWxkcy5mdW5jdGlvbikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgY3QtXHUwMDNlZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGFsbG9jaW5mb19jbXBfc3RyKGN0LVx1MDAzZWZpbGVuYW1lLCBmaWx0ZXItXHUwMDNlZmllbGRzLmZpbGVuYW1lKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykgXHUwMDI2XHUwMDI2XG4rXHQgICAgY3QtXHUwMDNlbGluZW5vICE9IGZpbHRlci1cdTAwM2VmaWVsZHMubGluZW5vKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19JTkFDQ1VSQVRFKSB7XG4rXHRcdGluYWNjdXJhdGUgPSAhIShjdC1cdTAwM2VmbGFncyBcdTAwMjYgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpO1xuK1x0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlZmllbGRzLmluYWNjdXJhdGUpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHtcbitcdFx0aWYgKCEqZmV0Y2hlZF9jb3VudGVycykge1xuK1x0XHRcdCpjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4rXHRcdFx0KmZldGNoZWRfY291bnRlcnMgPSB0cnVlO1xuK1x0XHR9XG4rXHRcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjb3VudGVycy1cdTAwM2VieXRlcyBcdTAwM2MgZmlsdGVyLVx1MDAzZW1pbl9zaXplKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGNvdW50ZXJzLVx1MDAzZWJ5dGVzIFx1MDAzZSBmaWx0ZXItXHUwMDNlbWF4X3NpemUpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzXG4rICogcHJvZmlsaW5nIGRhdGEgYW5kIHJldHVybnMgaXQgdG8gdXNlcnNwYWNlLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG4re1xuK1x0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xuK1x0c3RydWN0IGNvZGV0YWcgKmN0O1xuK1x0c3RydWN0IGFsbG9jaW5mb19nZXRfYXQgcGFyYW1zID0gezB9O1xuK1x0X191NjQgc2tpcF9jb3VudDtcbitcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcnM7XG4rXHRib29sIGZldGNoZWRfY291bnRlcnM7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cGFyYW1zLCBhcmcsIHNpemVvZihwYXJhbXMpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoKHBhcmFtcy5maWx0ZXIubWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSBcdTAwMjZcdTAwMjZcbitcdCAgICAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBhcmFtcy5maWx0ZXIubWluX3NpemUgXHUwMDNlIHBhcmFtcy5maWx0ZXIubWF4X3NpemUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbitcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcbitcdGlmIChwYXJhbXMucG9zIFx1MDAzZT0gY29kZXRhZ19nZXRfY291bnQoYWxsb2NfdGFnX2N0dHlwZSkpIHtcbitcdFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdH1cbitcbitcdHNraXBfY291bnQgPSBwYXJhbXMucG9zO1xuK1xuK1x0aWYgKHBhcmFtcy5maWx0ZXIubWFzaylcbitcdFx0cHJpdi1cdTAwM2VmaWx0ZXIgPSBwYXJhbXMuZmlsdGVyO1xuK1x0ZWxzZVxuK1x0XHRwcml2LVx1MDAzZWZpbHRlci5tYXNrID0gMDtcbitcbitcdC8qIEZpbmQgdGhlIGNvZGV0YWcgKi9cbitcdHByaXYtXHUwMDNlaW9jdGxfaXRlciA9IGNvZGV0YWdfZ2V0X2N0X2l0ZXIoYWxsb2NfdGFnX2N0dHlwZSk7XG4rXHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2l0ZXIpO1xuK1xuK1x0d2hpbGUgKGN0KSB7XG4rXHRcdGZldGNoZWRfY291bnRlcnMgPSBmYWxzZTtcbitcdFx0aWYgKG1hdGNoZXNfZmlsdGVyKGN0LCBcdTAwMjZwcml2LVx1MDAzZWZpbHRlciwgXHUwMDI2Y291bnRlcnMsIFx1MDAyNmZldGNoZWRfY291bnRlcnMpKSB7XG4rXHRcdFx0aWYgKHNraXBfY291bnQgPT0gMClcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdHNraXBfY291bnQtLTtcbitcdFx0fVxuK1x0XHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2l0ZXIpO1xuK1x0fVxuK1xuK1x0aWYgKGN0KSB7XG4rXHRcdGlmICghZmV0Y2hlZF9jb3VudGVycylcbitcdFx0XHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4rXHRcdGFsbG9jaW5mb190b19wYXJhbXMoY3QsIFx1MDAyNnBhcmFtcy5kYXRhLCBcdTAwMjZjb3VudGVycyk7XG4rXHRcdHByaXYtXHUwMDNlcG9zaXRpb25lZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuK1xuK1x0aWYgKCFjdClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2cGFyYW1zLCBzaXplb2YocGFyYW1zKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQWR2YW5jZXMgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGFsbG9jYXRpb24gdGFnIGluIHRoZSBzZXF1ZW5jZSBhbmRcbisgKiByZXR1cm5zIGl0cyBwcm9maWxpbmcgZGF0YSB0byB1c2Vyc3BhY2UuXG4rICovXG4rc3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxuK3tcbitcdHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSAqcHJpdjtcbitcdHN0cnVjdCBjb2RldGFnICpjdDtcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcGFyYW1zO1xuK1x0aW50IHJldCA9IDA7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXJzO1xuK1x0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xuK1xuK1x0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuK1x0cHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbitcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcbitcdGlmICghcHJpdi1cdTAwM2Vwb3NpdGlvbmVkKSB7XG4rXHRcdHByaXYtXHUwMDNlaW9jdGxfaXRlciA9IGNvZGV0YWdfZ2V0X2N0X2l0ZXIoYWxsb2NfdGFnX2N0dHlwZSk7XG4rXHRcdHByaXYtXHUwMDNlcG9zaXRpb25lZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2l0ZXIpO1xuK1x0d2hpbGUgKGN0KSB7XG4rXHRcdGZldGNoZWRfY291bnRlcnMgPSBmYWxzZTtcbitcdFx0aWYgKG1hdGNoZXNfZmlsdGVyKGN0LCBcdTAwMjZwcml2LVx1MDAzZWZpbHRlciwgXHUwMDI2Y291bnRlcnMsIFx1MDAyNmZldGNoZWRfY291bnRlcnMpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2l0ZXIpO1xuK1x0fVxuK1xuK1x0aWYgKGN0KSB7XG4rXHRcdGlmICghZmV0Y2hlZF9jb3VudGVycylcbitcdFx0XHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4rXHRcdGFsbG9jaW5mb190b19wYXJhbXMoY3QsIFx1MDAyNnBhcmFtcywgXHUwMDI2Y291bnRlcnMpO1xuK1x0fVxuK1x0aWYgKCFjdCkge1xuK1x0XHRwcml2LVx1MDAzZXBvc2l0aW9uZWQgPSBmYWxzZTtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdH1cbitcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4rXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLypcbisgKiBFbnRyeSBwb2ludCBpb2N0bCBmdW5jdGlvbiBmb3IgL3Byb2MvYWxsb2NpbmZvIHJvdXRpbmcgcmVxdWVzdHMgdG8gZmV0Y2ggdGhlXG4rICogbGF5b3V0IGNvbnRlbnQgSUQsIHNlZWsgdG8gYSBzcGVjaWZpYyB0YWcsIG9yIHJlYWQgc2VxdWVudGlhbCB0YWdzLlxuKyAqL1xuK3N0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbitcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBfX2FyZylcbit7XG4rXHR2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopX19hcmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c3dpdGNoIChjbWQpIHtcbitcdGNhc2UgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEOlxuK1x0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9BVDpcbitcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9hdChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX05FWFQ6XG4rXHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSAtRU5PSU9DVExDTUQ7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rI2lmZGVmIENPTkZJR19DT01QQVRcbitzdGF0aWMgbG9uZyBhbGxvY2luZm9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4re1xuK1x0cmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xuK1x0LnByb2Nfb3Blblx0XHQ9IGFsbG9jaW5mb19vcGVuLFxuK1x0LnByb2NfcmVhZF9pdGVyXHRcdD0gc2VxX3JlYWRfaXRlcixcbitcdC5wcm9jX2xzZWVrXHRcdD0gc2VxX2xzZWVrLFxuK1x0LnByb2NfcmVsZWFzZVx0XHQ9IGFsbG9jaW5mb19yZWxlYXNlLFxuK1x0LnByb2NfaW9jdGxcdFx0PSBhbGxvY2luZm9faW9jdGwsXG4rI2lmZGVmIENPTkZJR19DT01QQVRcbitcdC5wcm9jX2NvbXBhdF9pb2N0bFx0PSBhbGxvY2luZm9fY29tcGF0X2lvY3RsLFxuKyNlbmRpZlxuK307XG4rXG4gc2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApXG4ge1xuIFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlcjtcbkBAIC05OTMsOCArMTMzNCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0aWYgKCFwcm9jX2NyZWF0ZV9zZXFfcHJpdmF0ZShBTExPQ0lORk9fRklMRV9OQU1FLCAwNDAwLCBOVUxMLCBcdTAwMjZhbGxvY2luZm9fc2VxX29wLFxuLVx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGFsbG9jaW5mb19wcml2YXRlKSwgTlVMTCkpIHtcbitcdGlmICghcHJvY19jcmVhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgXHUwMDI2YWxsb2NpbmZvX3Byb2Nfb3BzKSkge1xuIFx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gY3JlYXRlICVzIGZpbGVcXG5cIiwgQUxMT0NJTkZPX0ZJTEVfTkFNRSk7XG4gXHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcoZmFsc2UpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5pbmRleCA4ZDRkYjIyNDFjYzJhMi4uMTI5NDFkNjhhN2Y4YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbkBAIC0xLDUgKzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBUQVJHRVRTICs9IGFjY3RcbitUQVJHRVRTICs9IGFsbG9jX3RhZ1xuIFRBUkdFVFMgKz0gYWxzYVxuIFRBUkdFVFMgKz0gYW1kLXBzdGF0ZVxuIFRBUkdFVFMgKz0gYXJtNjRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjQxZDkyZDA2YjE4NDhcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZVxuQEAgLTAsMCArMSw5IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuK1RFU1RfR0VOX1BST0dTIDo9IGFsbG9jaW5mb19pb2N0bF90ZXN0XG4rXG4rQ0ZMQUdTICs9IC1XYWxsXG4rQ0ZMQUdTICs9ICQoS0hEUl9JTkNMVURFUylcbitcbitpbmNsdWRlIC4uL2xpYi5ta1xuK1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMDkyMzQ4MDk3MjA0Mzlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jXG5AQCAtMCwwICsxLDU0OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitcbisvKiBrc2VsZnRlc3QgZm9yIGFsbG9jaW5mbyBpb2N0bFxuKyAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaXZlcyBhbGxvY2luZm8gZGF0YSB0aHJvdWdoIGlvY3RsXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgSW5jLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FsbG9jX3RhZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCIuLi9rc2VsZnRlc3QuaFwiXG4rXG4rI2RlZmluZSBNQVhfTElORV9MRU5cdFx0NTEyXG4rI2RlZmluZSBBTExPQ0lORk9fUFJPQ1x0XHRcIi9wcm9jL2FsbG9jaW5mb1wiXG4rXG4rZW51bSBpb2N0bF9yZXQge1xuK1x0SU9DVExfU1VDQ0VTUyA9IDAsXG4rXHRJT0NUTF9GQUlMVVJFID0gMSxcbitcdElPQ1RMX0lOVkFMSURfREFUQSA9IDIsXG4rfTtcbitcbisjZGVmaW5lIFZFQ19NQVhfRU5UUklFUyAzMlxuK1xuK3N0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjIHtcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgdGFnW1ZFQ19NQVhfRU5UUklFU107XG4rXHRfX3U2NCBjb3VudDtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCAqcGFyYW1zKVxuK3tcbitcdHJldHVybiBpb2N0bChkZXZfZmQsIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRCwgcGFyYW1zKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgX19hbGxvY2luZm9fZ2V0X2F0KGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0ICpwYXJhbXMpXG4re1xuK1x0cmV0dXJuIGlvY3RsKGRldl9mZCwgQUxMT0NJTkZPX0lPQ19HRVRfQVQsIHBhcmFtcyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IF9fYWxsb2NpbmZvX2dldF9uZXh0KGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgKnBhcmFtcylcbit7XG4rXHRyZXR1cm4gaW9jdGwoZGV2X2ZkLCBBTExPQ0lORk9fSU9DX0dFVF9ORVhULCBwYXJhbXMpO1xuK31cbitcbitzdGF0aWMgYm9vbCBtYXRjaF9lbnRyeShjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpwcm9jZnNfZW50cnksXG4rXHRcdFx0Y29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqdGFnX2RhdGEsXG4rXHRcdFx0Ym9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sXG4rXHRcdFx0Ym9vbCBtYXRjaF9mdW5jdGlvbiwgYm9vbCBtYXRjaF9maWxlbmFtZSlcbit7XG4rXHRpZiAobWF0Y2hfYnl0ZXMgXHUwMDI2XHUwMDI2IHRhZ19kYXRhLVx1MDAzZWNvdW50ZXIuYnl0ZXMgIT0gcHJvY2ZzX2VudHJ5LVx1MDAzZWNvdW50ZXIuYnl0ZXMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJzaXplIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKG1hdGNoX2NhbGxzIFx1MDAyNlx1MDAyNiB0YWdfZGF0YS1cdTAwM2Vjb3VudGVyLmNhbGxzICE9IHByb2Nmc19lbnRyeS1cdTAwM2Vjb3VudGVyLmNhbGxzKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2FsbCBjb3VudCByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChtYXRjaF9saW5lbm8gXHUwMDI2XHUwMDI2IHRhZ19kYXRhLVx1MDAzZXRhZy5saW5lbm8gIT0gcHJvY2ZzX2VudHJ5LVx1MDAzZXRhZy5saW5lbm8pIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJsaW5lbm8gcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxuXCIpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAobWF0Y2hfZnVuY3Rpb24gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmNtcCh0YWdfZGF0YS1cdTAwM2V0YWcuZnVuY3Rpb24sIHByb2Nmc19lbnRyeS1cdTAwM2V0YWcuZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSkpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJmdW5jdGlvbiByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChtYXRjaF9maWxlbmFtZSBcdTAwMjZcdTAwMjZcbitcdCAgICBzdHJuY21wKHRhZ19kYXRhLVx1MDAzZXRhZy5maWxlbmFtZSwgcHJvY2ZzX2VudHJ5LVx1MDAzZXRhZy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImZpbGVuYW1lIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1hdGNoX2VudHJpZXMoY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MsXG4rXHRcdFx0ICBib29sIG1hdGNoX2J5dGVzLCBib29sIG1hdGNoX2NhbGxzLCBib29sIG1hdGNoX2xpbmVubyxcbitcdFx0XHQgIGJvb2wgbWF0Y2hfZnVuY3Rpb24sIGJvb2wgbWF0Y2hfZmlsZW5hbWUpXG4re1xuK1x0X191NjQgaTtcbitcbitcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCAhPSB0YWdzLVx1MDAzZWNvdW50KSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiRW50cnkgY291bnQgbWlzbWF0Y2guIGlvY3RsIGVudHJpZXM6ICVsbHUsIHByb2MgZW50cmllczogJWxsdVxcblwiLFxuK1x0XHRcdCAgICAgICB0YWdzLVx1MDAzZWNvdW50LCBwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb2Nmc19lbnRyaWVzLVx1MDAzZWNvdW50OyBpKyspIHtcbitcdFx0aWYgKCFtYXRjaF9lbnRyeShcdTAwMjZwcm9jZnNfZW50cmllcy1cdTAwM2V0YWdbaV0sIFx1MDAyNnRhZ3MtXHUwMDNldGFnW2ldLFxuK1x0XHRcdFx0IG1hdGNoX2J5dGVzLCBtYXRjaF9jYWxscywgbWF0Y2hfbGluZW5vLFxuK1x0XHRcdFx0IG1hdGNoX2Z1bmN0aW9uLCBtYXRjaF9maWxlbmFtZSkpIHtcbitcdFx0XHRrc2Z0X3ByaW50X21zZyhcIiVsbHV0aCBlbnRyeSBkb2VzIG5vdCBtYXRjaC5cXG5cIiwgaSk7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKmFsbG9jaW5mb19zdHIoY29uc3QgY2hhciAqc3RyKVxuK3tcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyKTtcbitcbitcdGlmIChsZW4gXHUwMDNlPSBBTExPQ0lORk9fU1RSX1NJWkUpXG4rXHRcdHN0ciArPSAobGVuIC0gQUxMT0NJTkZPX1NUUl9TSVpFKSArIDE7XG4rXHRyZXR1cm4gc3RyO1xuK31cbitcbitzdGF0aWMgdm9pZCBhbGxvY2luZm9fY29weV9zdHIoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKVxuK3tcbitcdHN0cm5jcHkoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUgLSAxKTtcbitcdGRlc3RbQUxMT0NJTkZPX1NUUl9TSVpFIC0gMV0gPSAnXFwwJztcbit9XG4rXG4rc3RhdGljIGludCBnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIpXG4re1xuK1x0RklMRSAqZnAgPSBmb3BlbihBTExPQ0lORk9fUFJPQywgXCJyXCIpO1xuK1x0Y2hhciBsaW5lW01BWF9MSU5FX0xFTl07XG4rXHRpbnQgbWF0Y2hlcztcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcHJvY2ZzX2VudHJ5O1xuK1xuK1x0aWYgKCFmcCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkZhaWxlZCB0byBvcGVuIFwiIEFMTE9DSU5GT19QUk9DIFwiIGZvciByZWFkaW5nXFxuXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdG1lbXNldChwcm9jZnNfZW50cmllcywgMCwgc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xuK1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApIFx1MDAyNlx1MDAyNiBwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCBcdTAwM2MgVkVDX01BWF9FTlRSSUVTKSB7XG4rXHRcdGNoYXIgZmlsZW5hbWVbTUFYX0xJTkVfTEVOXTtcbitcdFx0Y2hhciBmdW5jdGlvbltNQVhfTElORV9MRU5dO1xuK1xuK1x0XHRtZW1zZXQoXHUwMDI2cHJvY2ZzX2VudHJ5LCAwLCBzaXplb2YocHJvY2ZzX2VudHJ5KSk7XG4rXHRcdG1hdGNoZXMgPSBzc2NhbmYobGluZSwgXCIlbGx1ICVsbHUgJVteOl06JWxsdSBmdW5jOiVzXCIsXG4rXHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LmNvdW50ZXIuYnl0ZXMsXG4rXHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LmNvdW50ZXIuY2FsbHMsXG4rXHRcdFx0XHQgZmlsZW5hbWUsXG4rXHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8sXG4rXHRcdFx0XHQgZnVuY3Rpb24pO1xuK1xuK1x0XHRpZiAobWF0Y2hlcyAhPSA1KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5maWxlbmFtZSwgZmlsZW5hbWUpO1xuK1x0XHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbiwgZnVuY3Rpb24pO1xuK1xuK1x0XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkge1xuK1x0XHRcdGlmIChzdHJuY21wKHByb2Nmc19lbnRyeS50YWcuZmlsZW5hbWUsXG4rXHRcdFx0XHQgICAgZmlsdGVyLVx1MDAzZWZpZWxkcy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSB7XG4rXHRcdFx0aWYgKHN0cm5jbXAocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbixcbitcdFx0XHRcdCAgICBmaWx0ZXItXHUwMDNlZmllbGRzLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PKSB7XG4rXHRcdFx0aWYgKHByb2Nmc19lbnRyeS50YWcubGluZW5vICE9IGZpbHRlci1cdTAwM2VmaWVsZHMubGluZW5vKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUpIHtcbitcdFx0XHRpZiAocHJvY2ZzX2VudHJ5LmNvdW50ZXIuYnl0ZXMgXHUwMDNjIGZpbHRlci1cdTAwM2VtaW5fc2l6ZSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSB7XG4rXHRcdFx0aWYgKHByb2Nmc19lbnRyeS5jb3VudGVyLmJ5dGVzIFx1MDAzZSBmaWx0ZXItXHUwMDNlbWF4X3NpemUpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRtZW1jcHkoXHUwMDI2cHJvY2ZzX2VudHJpZXMtXHUwMDNldGFnW3Byb2Nmc19lbnRyaWVzLVx1MDAzZWNvdW50KytdLCBcdTAwMjZwcm9jZnNfZW50cnksXG4rXHRcdCAgICAgICBzaXplb2YocHJvY2ZzX2VudHJ5KSk7XG4rXHR9XG4rXHRmY2xvc2UoZnApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBlbnVtIGlvY3RsX3JldCBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyhzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyxcbitcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbitcdFx0XHRcdFx0XHQgX191NjQgc3RhcnRfcG9zKVxuK3tcbitcdGludCBmZCA9IG9wZW4oQUxMT0NJTkZPX1BST0MsIE9fUkRPTkxZKTtcbitcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkZhaWxlZCB0byBvcGVuIFwiIEFMTE9DSU5GT19QUk9DIFwiIGZvciBJT0NUTFxcblwiKTtcbitcdFx0cmV0dXJuIElPQ1RMX0ZBSUxVUkU7XG4rXHR9XG4rXG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgc3RhcnRfY29udF9pZCwgZW5kX2NvbnRfaWQ7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCBnZXRfYXRfcGFyYW1zO1xuK1x0Y29uc3QgaW50IG1heF9yZXRyaWVzID0gMTA7XG4rXHRpbnQgcmV0cnlfY291bnQgPSAwO1xuK1x0aW50IHN0YXR1cztcbitcbitcdC8qXG4rXHQgKiBfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBtYXkgcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMgaWYgYSBrZXJuZWwgbW9kdWxlIHdhcyBsb2FkZWRcbitcdCAqIGJldHdlZW4gdGhlIHR3byBjYWxscy4gSWYgdGhhdCBoYXBwZW5zLCB0aGUgZGF0YSBnYXRoZXJlZCBjYW5ub3QgYmUgY29uc2lkZXJlZCBjb25zaXN0ZW50XG4rXHQgKiBhbmQgaGVuY2UgbmVlZHMgdG8gYmUgZmV0Y2hlZCBhZ2FpbiB0byBhdm9pZCBmbGFraW5lc3MuXG4rXHQgKi9cbitcdGRvIHtcbitcdFx0aWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCBcdTAwMjZzdGFydF9jb250X2lkKSkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiYWxsb2NpbmZvX2dldF9jb250ZW50X2lkIGZhaWxlZFxcblwiKTtcbitcdFx0XHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdG1lbXNldCh0YWdzLCAwLCBzaXplb2YoKnRhZ3MpKTtcbitcdFx0bWVtc2V0KFx1MDAyNmdldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7XG4rXHRcdG1lbWNweShcdTAwMjZnZXRfYXRfcGFyYW1zLmZpbHRlciwgZmlsdGVyLCBzaXplb2YoKmZpbHRlcikpO1xuK1x0XHRnZXRfYXRfcGFyYW1zLnBvcyA9IHN0YXJ0X3BvcztcbitcdFx0aWYgKF9fYWxsb2NpbmZvX2dldF9hdChmZCwgXHUwMDI2Z2V0X2F0X3BhcmFtcykpIHtcbitcdFx0XHRrc2Z0X3ByaW50X21zZyhcImFsbG9jaW5mb19nZXRfYXQgZmFpbGVkXFxuXCIpO1xuK1x0XHRcdHN0YXR1cyA9IElPQ1RMX0ZBSUxVUkU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0bWVtY3B5KFx1MDAyNnRhZ3MtXHUwMDNldGFnW3RhZ3MtXHUwMDNlY291bnQrK10sIFx1MDAyNmdldF9hdF9wYXJhbXMuZGF0YSwgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpO1xuK1xuK1x0XHR3aGlsZSAodGFncy1cdTAwM2Vjb3VudCBcdTAwM2MgVkVDX01BWF9FTlRSSUVTIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgX19hbGxvY2luZm9fZ2V0X25leHQoZmQsIFx1MDAyNnRhZ3MtXHUwMDNldGFnW3RhZ3MtXHUwMDNlY291bnRdKSA9PSAwKVxuK1x0XHRcdHRhZ3MtXHUwMDNlY291bnQrKztcbitcbitcdFx0aWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCBcdTAwMjZlbmRfY29udF9pZCkpIHtcbitcdFx0XHRrc2Z0X3ByaW50X21zZyhcImFsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXG5cIik7XG4rXHRcdFx0c3RhdHVzID0gSU9DVExfRkFJTFVSRTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoc3RhcnRfY29udF9pZC5pZCA9PSBlbmRfY29udF9pZC5pZCkge1xuK1x0XHRcdHN0YXR1cyA9IElPQ1RMX1NVQ0NFU1M7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJhbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgbWlzbWF0Y2gsIHJldHJ5aW5nLi4uXFxuXCIpO1xuK1x0XHRcdHN0YXR1cyA9IElPQ1RMX0lOVkFMSURfREFUQTtcbitcdFx0fVxuK1x0fSB3aGlsZSAoc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSBcdTAwMjZcdTAwMjYgcmV0cnlfY291bnQrKyBcdTAwM2MgbWF4X3JldHJpZXMpO1xuK1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIHN0YXR1cztcbit9XG4rXG4rc3RhdGljIGludCBydW5fZmlsdGVyX3Rlc3QoY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcilcbit7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyA9IG1hbGxvYyhzaXplb2YoKnRhZ3MpKTtcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XG4rXHRpbnQgaW9jdGxfc3RhdHVzO1xuK1x0aW50IHJldCA9IEtTRlRfUEFTUztcbitcbitcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbitcdGlmIChnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIGZpbHRlcikpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcIiBBTExPQ0lORk9fUFJPQyBcIlxcblwiKTtcbitcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0XHRnb3RvIGV4aXQ7XG4rXHR9XG4rXG4rXHRpZiAocHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQgPT0gMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIk5vIGVudHJpZXMgZm91bmQgaW4gXCIgQUxMT0NJTkZPX1BST0MgXCIsIHNraXBwaW5nIHRlc3RcXG5cIik7XG4rXHRcdHJldCA9IEtTRlRfU0tJUDtcbitcdFx0Z290byBleGl0O1xuK1x0fVxuK1xuK1x0aW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgZmlsdGVyLCAwKTtcbitcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfSU5WQUxJRF9EQVRBKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiVHJvdWJsZSByZXRyaWV2aW5nIHZhbGlkIElPQ1RMIGVudHJpZXMsIHNraXBwaW5nLlxcblwiKTtcbitcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0XHRnb3RvIGV4aXQ7XG4rXHR9XG4rXHRpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0ZBSUxVUkUpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJFcnJvciByZXRyaWV2aW5nIElPQ1RMIGVudHJpZXMuXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbitcdGlmICghbWF0Y2hfZW50cmllcyhwcm9jZnNfZW50cmllcywgdGFncywgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlKSlcbitcdFx0cmV0ID0gS1NGVF9GQUlMO1xuK1xuK2V4aXQ6XG4rXHRmcmVlKHRhZ3MpO1xuK1x0ZnJlZShwcm9jZnNfZW50cmllcyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfZmlsZW5hbWVfZmlsdGVyKHZvaWQpXG4re1xuK1x0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuK1x0Y29uc3QgY2hhciAqdGFyZ2V0X2ZpbGVuYW1lID0gXCJtbS9tZW1vcnkuY1wiO1xuK1xuK1x0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuK1x0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FO1xuK1x0c3RybmNweShmaWx0ZXIuZmllbGRzLmZpbGVuYW1lLCB0YXJnZXRfZmlsZW5hbWUsIEFMTE9DSU5GT19TVFJfU0laRSk7XG4rXG4rXHRyZXR1cm4gcnVuX2ZpbHRlcl90ZXN0KFx1MDAyNmZpbHRlcik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9mdW5jdGlvbl9maWx0ZXIodm9pZClcbit7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XG4rXHRjb25zdCBjaGFyICp0YXJnZXRfZnVuY3Rpb24gPSBcImR1cF9tbVwiO1xuK1xuK1x0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuK1x0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OO1xuK1x0c3RybmNweShmaWx0ZXIuZmllbGRzLmZ1bmN0aW9uLCB0YXJnZXRfZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSk7XG4rXG4rXHRyZXR1cm4gcnVuX2ZpbHRlcl90ZXN0KFx1MDAyNmZpbHRlcik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9zaXplX2ZpbHRlcih2b2lkKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzID0gbWFsbG9jKHNpemVvZigqdGFncykpO1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzID0gbWFsbG9jKHNpemVvZigqcHJvY2ZzX2VudHJpZXMpKTtcbitcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbitcdGludCByZXQgPSBLU0ZUX1BBU1M7XG4rXHRfX3U2NCB0YXJnZXRfc2l6ZSwgaSwgcG9zO1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqZm91bmRfdGFnID0gTlVMTDtcbitcdGNvbnN0IGNoYXIgKnRhcmdldF9mdW5jdGlvbiA9IFwiZG9faW5pdF9tb2R1bGVcIjtcbitcdHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBzdGFydF9jb250X2lkLCBlbmRfY29udF9pZDtcbitcdGludCByZXRyeSA9IDA7XG4rXHRjb25zdCBpbnQgbWF4X3JldHJpZXMgPSAxMDtcbitcbitcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdGdvdG8gZnJlZW1lbTtcbitcdH1cbitcbitcdGZkID0gb3BlbihBTExPQ0lORk9fUFJPQywgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiRmFpbGVkIHRvIG9wZW4gXCIgQUxMT0NJTkZPX1BST0MgXCI6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdFx0Z290byBmcmVlbWVtO1xuK1x0fVxuK1xuK1x0ZG8ge1xuK1x0XHRmb3VuZF90YWcgPSBOVUxMO1xuK1x0XHRwb3MgPSAwO1xuK1xuK1x0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFx1MDAyNnN0YXJ0X2NvbnRfaWQpKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJhbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgZmFpbGVkXFxuXCIpO1xuK1x0XHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXHRcdH1cbitcbitcdFx0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuK1x0XHRmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT047XG4rXHRcdHN0cm5jcHkoZmlsdGVyLmZpZWxkcy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xuK1xuK1x0XHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBcdTAwMjZmaWx0ZXIpKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcIiBBTExPQ0lORk9fUFJPQyBcIlxcblwiKTtcbitcdFx0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdFx0Z290byBleGl0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCA9PSAwKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJGdW5jdGlvbiAlcyBub3QgZm91bmQgaW4gcHJvY2ZzXFxuXCIsIHRhcmdldF9mdW5jdGlvbik7XG4rXHRcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0XHRcdGdvdG8gZXhpdDtcbitcdFx0fVxuK1xuK1x0XHR0YXJnZXRfc2l6ZSA9IHByb2Nmc19lbnRyaWVzLVx1MDAzZXRhZ1swXS5jb3VudGVyLmJ5dGVzO1xuK1xuK1x0XHRtZW1zZXQoXHUwMDI2ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7XG4rXHRcdGZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRTtcbitcdFx0ZmlsdGVyLm1pbl9zaXplID0gdGFyZ2V0X3NpemU7XG4rXHRcdGZpbHRlci5tYXhfc2l6ZSA9IHRhcmdldF9zaXplO1xuK1xuK1x0XHR3aGlsZSAoMSkge1xuK1x0XHRcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IGdldF9hdF9wYXJhbXM7XG4rXG4rXHRcdFx0bWVtc2V0KFx1MDAyNmdldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7XG4rXHRcdFx0bWVtY3B5KFx1MDAyNmdldF9hdF9wYXJhbXMuZmlsdGVyLCBcdTAwMjZmaWx0ZXIsIHNpemVvZihmaWx0ZXIpKTtcbitcdFx0XHRnZXRfYXRfcGFyYW1zLnBvcyA9IHBvcztcbitcbitcdFx0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2F0KGZkLCBcdTAwMjZnZXRfYXRfcGFyYW1zKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdHRhZ3MtXHUwMDNlY291bnQgPSAwO1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0YWdzLVx1MDAzZXRhZ1t0YWdzLVx1MDAzZWNvdW50KytdLCBcdTAwMjZnZXRfYXRfcGFyYW1zLmRhdGEsXG4rXHRcdFx0ICAgICAgIHNpemVvZihnZXRfYXRfcGFyYW1zLmRhdGEpKTtcbitcbitcdFx0XHR3aGlsZSAodGFncy1cdTAwM2Vjb3VudCBcdTAwM2MgVkVDX01BWF9FTlRSSUVTIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgXHUwMDI2dGFncy1cdTAwM2V0YWdbdGFncy1cdTAwM2Vjb3VudF0pID09IDApXG4rXHRcdFx0XHR0YWdzLVx1MDAzZWNvdW50Kys7XG4rXG4rXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFncy1cdTAwM2Vjb3VudDsgaSsrKSB7XG4rXHRcdFx0XHRpZiAoc3RyY21wKHRhZ3MtXHUwMDNldGFnW2ldLnRhZy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uKSA9PSAwKSB7XG4rXHRcdFx0XHRcdGZvdW5kX3RhZyA9IFx1MDAyNnRhZ3MtXHUwMDNldGFnW2ldO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4rXG4rXHRcdFx0aWYgKGZvdW5kX3RhZyB8fCB0YWdzLVx1MDAzZWNvdW50IFx1MDAzYyBWRUNfTUFYX0VOVFJJRVMpXG4rXHRcdFx0XHRicmVhaztcbitcbitcdFx0XHRwb3MgKz0gdGFncy1cdTAwM2Vjb3VudDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFx1MDAyNmVuZF9jb250X2lkKSkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiYWxsb2NpbmZvX2dldF9jb250ZW50X2lkIGZhaWxlZFxcblwiKTtcbitcdFx0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdFx0Z290byBleGl0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIk1vZHVsZSBsb2FkIGRldGVjdGVkIGR1cmluZyBzaXplIHZlcmlmaWNhdGlvbiwgcmV0cnlpbmcuLi5cXG5cIik7XG4rXHR9IHdoaWxlIChyZXRyeSsrIFx1MDAzYyBtYXhfcmV0cmllcyk7XG4rXG4rXHRpZiAoc3RhcnRfY29udF9pZC5pZCA9PSBlbmRfY29udF9pZC5pZCBcdTAwMjZcdTAwMjYgIWZvdW5kX3RhZykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVudHJ5IHdpdGggZnVuY3Rpb24gJXMgbm90IGZvdW5kIGluIElPQ1RMIHJlc3VsdHNcXG5cIixcbitcdFx0XHQgICAgICAgdGFyZ2V0X2Z1bmN0aW9uKTtcbitcdFx0cmV0ID0gS1NGVF9GQUlMO1xuK1x0fSBlbHNlIGlmIChzdGFydF9jb250X2lkLmlkICE9IGVuZF9jb250X2lkLmlkKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiRmFpbGVkIHRvIG1hdGNoIGNvbnRlbnRfaWRzIGZvciBwcm9jZnMgYW5kIElPQ1RMLCBza2lwcGluZy4uLlxcblwiKTtcbitcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0fSBlbHNlIGlmIChmb3VuZF90YWcgXHUwMDI2XHUwMDI2IGZvdW5kX3RhZy1cdTAwM2Vjb3VudGVyLmJ5dGVzICE9IHRhcmdldF9zaXplKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiSU9DVEwgZW50cnkgc2l6ZSAlbGx1IGRvZXMgbm90IG1hdGNoIHRhcmdldCBzaXplICVsbHVcXG5cIixcbitcdFx0XHQgICAgICAgZm91bmRfdGFnLVx1MDAzZWNvdW50ZXIuYnl0ZXMsIHRhcmdldF9zaXplKTtcbitcdFx0cmV0ID0gS1NGVF9GQUlMO1xuK1x0fVxuK1xuK2V4aXQ6XG4rXHRjbG9zZShmZCk7XG4rZnJlZW1lbTpcbitcdGZyZWUodGFncyk7XG4rXHRmcmVlKHByb2Nmc19lbnRyaWVzKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9saW5lbm9fZmlsdGVyKHZvaWQpXG4re1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqcHJvY2ZzX2VudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xuK1x0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuK1x0ZW51bSBpb2N0bF9yZXQgaW9jdGxfc3RhdHVzO1xuK1x0aW50IHJldCA9IEtTRlRfUEFTUztcbitcdF9fdTY0IHRhcmdldF9saW5lbm8sIGk7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YXJnZXRfdGFnO1xuK1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1xuK1x0aWYgKCF0YWdzIHx8ICFwcm9jZnNfZW50cmllcykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cXG5cIik7XG4rXHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdFx0Z290byBleGl0O1xuK1x0fVxuK1xuK1x0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuK1xuK1x0aWYgKGdldF9maWx0ZXJlZF9wcm9jZnNfZW50cmllcyhwcm9jZnNfZW50cmllcywgXHUwMDI2ZmlsdGVyKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVycm9yIHJldHJpZXZpbmcgZW50cmllcyBmcm9tIFwiIEFMTE9DSU5GT19QUk9DIFwiXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCA9PSAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiQ291bGQgbm90IHJldHJpZXZlIHByb2NmcyBlbnRyaWVzXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcdC8qXG4rXHQgKiBXZSBkZXBlbmQgb24gdGhlIHByb2NmcyByZXN1bHRzIHRvIGRldGVybWluZSB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBmaWx0ZXIgYmVmb3JlXG4rXHQgKiBtYWtpbmcgdGhlIGlvY3RsIHF1ZXJ5LiBIZW5jZSwgd2UgY2Fubm90IHJldXNlIHJ1bl9maWx0ZXJfdGVzdCBoZXJlLlxuK1x0ICovXG4rXHR0YXJnZXRfdGFnID0gXHUwMDI2cHJvY2ZzX2VudHJpZXMtXHUwMDNldGFnWzBdO1xuK1x0dGFyZ2V0X2xpbmVubyA9IHRhcmdldF90YWctXHUwMDNldGFnLmxpbmVubztcbitcbitcdGZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk87XG4rXHRmaWx0ZXIuZmllbGRzLmxpbmVubyA9IHRhcmdldF9saW5lbm87XG4rXG4rXHRpb2N0bF9zdGF0dXMgPSBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyh0YWdzLCBcdTAwMjZmaWx0ZXIsIDApO1xuK1x0aWYgKGlvY3RsX3N0YXR1cyA9PSBJT0NUTF9JTlZBTElEX0RBVEEpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJUcm91YmxlIHJldHJpZXZpbmcgdmFsaWQgSU9DVEwgZW50cmllcywgc2tpcHBpbmcuXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfRkFJTFVSRSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVycm9yIHJldHJpZXZpbmcgSU9DVEwgZW50cmllcy5cXG5cIik7XG4rXHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdFx0Z290byBleGl0O1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFncy1cdTAwM2Vjb3VudDsgaSsrKSB7XG4rXHRcdGlmICh0YWdzLVx1MDAzZXRhZ1tpXS50YWcubGluZW5vICE9IHRhcmdldF9saW5lbm8pIHtcbitcdFx0XHRrc2Z0X3ByaW50X21zZyhcIklPQ1RMIGVudHJ5ICVsbHUgaGFzIGluY29ycmVjdCBsaW5lbm8gJWxsdS5cXG5cIixcbitcdFx0XHRcdCAgICAgICBpLCB0YWdzLVx1MDAzZXRhZ1tpXS50YWcubGluZW5vKTtcbitcdFx0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdFx0Z290byBleGl0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzdHJuY21wKHRhZ3MtXHUwMDNldGFnW2ldLnRhZy5mdW5jdGlvbiwgdGFyZ2V0X3RhZy1cdTAwM2V0YWcuZnVuY3Rpb24sXG4rXHRcdFx0ICAgIEFMTE9DSU5GT19TVFJfU0laRSkgPT0gMCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHN0cm5jbXAodGFncy1cdTAwM2V0YWdbaV0udGFnLmZpbGVuYW1lLCB0YXJnZXRfdGFnLVx1MDAzZXRhZy5maWxlbmFtZSxcbitcdFx0XHQgICAgQUxMT0NJTkZPX1NUUl9TSVpFKSA9PSAwKVxuK1x0XHRcdGZvdW5kID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZm91bmQpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJPcmlnaW5hbCBwcm9jZnMgZW50cnkgbm90IGZvdW5kIGluIElPQ1RMIGxpbmVubyBmaWx0ZXIgcmVzdWx0cy5cXG5cIik7XG4rXHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdH1cbitcbitleGl0OlxuK1x0ZnJlZSh0YWdzKTtcbitcdGZyZWUocHJvY2ZzX2VudHJpZXMpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0a3NmdF9zZXRfcGxhbig0KTtcbitcbitcdHJldCA9IHRlc3RfZmlsZW5hbWVfZmlsdGVyKCk7XG4rXHRpZiAocmV0ID09IEtTRlRfU0tJUClcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiU2tpcHBpbmcgdGVzdF9maWxlbmFtZV9maWx0ZXJcXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXCJ0ZXN0X2ZpbGVuYW1lX2ZpbHRlclxcblwiKTtcbitcbitcdHJldCA9IHRlc3RfZnVuY3Rpb25fZmlsdGVyKCk7XG4rXHRpZiAocmV0ID09IEtTRlRfU0tJUClcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiU2tpcHBpbmcgdGVzdF9mdW5jdGlvbl9maWx0ZXJcXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXCJ0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxcblwiKTtcbitcbitcdHJldCA9IHRlc3Rfc2l6ZV9maWx0ZXIoKTtcbitcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJTa2lwcGluZyB0ZXN0X3NpemVfZmlsdGVyXFxuXCIpO1xuK1x0ZWxzZVxuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsIFwidGVzdF9zaXplX2ZpbHRlclxcblwiKTtcbitcbitcdHJldCA9IHRlc3RfbGluZW5vX2ZpbHRlcigpO1xuK1x0aWYgKHJldCA9PSBLU0ZUX1NLSVApXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlNraXBwaW5nIHRlc3RfbGluZW5vX2ZpbHRlclxcblwiKTtcbitcdGVsc2VcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdChyZXQgPT0gS1NGVF9QQVNTLCBcInRlc3RfbGluZW5vX2ZpbHRlclxcblwiKTtcbitcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjoyODoxNC40MDk3NjYxNDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjMzNTgxNTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGFuIGBpb2N0bGAgaW50ZXJmYWNlIHRvIGAvcHJvYy9hbGxvY2luZm9gIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcuIEludGVyZXN0aW5nLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIG91dCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIGRvY3VtZW50YXRpb24gKGBEb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdGAsIGBEb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdGApLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChnb29kLCBuZWVkIHRvIGtlZXAgdGhhdCB1cCB0byBkYXRlISksIGhlYWRlciBmaWxlcyAoYGluY2x1ZGUvbGludXgvY29kZXRhZy5oYCwgYGluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaGApLCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiAoYGxpYi9jb2RldGFnLmNgLCBgbW0vYWxsb2NfdGFnLmNgKSwgYW5kIHNvbWUgc2VsZi10ZXN0cyAoYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4uLmApLlxuXG5NeSBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBtbS9hbGxvY190YWcuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIGBpb2N0bGAgaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIHRoaXMgYGlvY3RsYCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGV4cG9zZWQgdGhyb3VnaCBgL3Byb2MvYWxsb2NpbmZvYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guIEkgc2VlIHRocmVlIGBpb2N0bGAgY29tbWFuZHM6IGBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSURgLCBgQUxMT0NJTkZPX0lPQ19HRVRfQVRgLCBhbmQgYEFMTE9DSU5GT19JT0NfR0VUX05FWFRgLiBVc2Vyc3BhY2Ugd2lsbCBpbnRlcmFjdCB3aXRoIHRoaXMgYnkgb3BlbmluZyBgL3Byb2MvYWxsb2NpbmZvYCBhbmQgbWFraW5nIGNhbGxzIHRvIGBpb2N0bCgpYC4gVGhpcyBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwsIGFuZCB0aGF0IHNjcmVhbXMgZnV6emluZyB0byBtZS4gSXQncyBjcnVjaWFsIHdlIHRob3JvdWdobHkgdGVzdCB0aGlzIGludGVyZmFjZSBmb3IgYW55IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5Ob3csIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbiB0aGlzIHdpbGwgYmUgZW5hYmxlZC4gSSdsbCBjaGVjayBgbW0vYWxsb2NfdGFnLmNgIGFuZCBjb25maXJtIHRoYXQgaXQncyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLiBJZiBpdCBpc24ndCwgdGhlcmUncyBsaWtlbHkgc29tZSBtaXN0YWtlIGluIHRoZSBidWlsZCBydWxlcywgb3IgcGVyaGFwcyB0aGUgZmVhdHVyZSBpcyBpbnRlbmRlZCB0byBiZSBlbmFibGVkIGluIGEgZGlmZmVyZW50IG1hbm5lciwgb3IgdW5kZXIgYSBkaWZmZXJlbnQgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjI4OjIwLjY0MzM0OTY1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDUyNTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY190YWcub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xcbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgKz0gYWxsb2NfdGFnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MjAuNzA3ODgwODc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NzM2MTMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcgQ29uZmlndXJhdGlvbiBhbmQgVGFyZ2V0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlOyB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBleHBsaWNpdGx5IGVuYWJsZWQuIE5vdywgbGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW1wbGljaXRseSBuZWVkZWQsIG9yIGlmIGl0J3MgZGVwZW5kZW50IG9uIHNvbWUgb3RoZXIgZmVhdHVyZS5cblxuQWgsIHRoZSBgaW9jdGxgIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQgdGhyb3VnaCBgL3Byb2MvYWxsb2NpbmZvYC4gUmlnaHQsIHRoYXQgZmlsZSBpcyBjcmVhdGVkIGR1cmluZyBgYWxsb2NfdGFnX2luaXQoKWAgd2l0aGluIGBtbS9hbGxvY190YWcuY2AsIGFzIGluZGljYXRlZCBieSB0aGlzIGNvZGUgc25pcHBldDpcbmBgYGNcblx0aWYgKCFwcm9jX2NyZWF0ZShBTExPQ0lORk9fRklMRV9OQU1FLCAwNDAwLCBOVUxMLCBcdTAwMjZhbGxvY2luZm9fcHJvY19vcHMpKSB7XG5gYGBcblNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkga25ldyB0aGUgYHByb2NgIGZpbGVzeXN0ZW0gd2FzIGludm9sdmVkLCBhbmQsIHllcywgYENPTkZJR19QUk9DX0ZTYCBpcyByZXF1aXJlZC4gSG93ZXZlciwgaXQncyBzdWNoIGEgZ2VuZXJhbCBkZXBlbmRlbmN5IHRoYXQgSSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgaXQuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgdGhlIGltcG9ydGFudCwgbW9yZSBzcGVjaWZpYyBvbmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hlcmUgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZz8gTGV0J3Mgc2lmdCB0aHJvdWdoIGBtbS9hbGxvY190YWcuY2AgZmlyc3QuIEJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZyBoZXJlLCB0aGVzZSBsb29rIGxpa2UgcHJpbWUgdGFyZ2V0czogYGFsbG9jaW5mb19pb2N0bGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9hdGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X25leHRgLCBgbWF0Y2hlc19maWx0ZXJgLCBgYWxsb2NpbmZvX3RvX3BhcmFtc2AsIGBhbGxvY2luZm9fcHJlZmV0Y2hfY291bnRlcnNgLCBgYWxsb2NpbmZvX2NtcF9zdHJgLCBgYWxsb2NpbmZvX2NvcHlfc3RyYCwgYGFsbG9jaW5mb19zdHJgLCBgYWxsb2NpbmZvX29wZW5gLCBhbmQgYGFsbG9jaW5mb19yZWxlYXNlYC5cblxuSSdsbCBhbHNvIGhhdmUgYSBsb29rIGF0IGBsaWIvY29kZXRhZy5jYC4gT2theSwgaGVyZSBJIHNlZSBgY29kZXRhZ19nZXRfY29udGVudF9pZGAgYW5kIGBjb2RldGFnX2dldF9jb3VudGAgd2hpY2ggbWlnaHQgYmUgaW50ZXJlc3RpbmcgYXMgd2VsbC5cblxuSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBmdW5jdGlvbnMgaW4gYG1tL2FsbG9jX3RhZy5jYCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZW0gY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5ODksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MjYuOTU1MjQ1NjQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzgyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jaW5mb19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9hbGxvY190YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz0yMTE9c3RhdGljIHZvaWQgYWxsb2NpbmZvX3RvX3BhcmFtcyhzdHJ1Y3QgY29kZXRhZyAqY3QsXFxuLS1cXG5tbS9hbGxvY190YWcuYy0yMzAtICovXFxubW0vYWxsb2NfdGFnLmM6MjMxOnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG5tbS9hbGxvY190YWcuYy0yMzIte1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9MjQ4PXN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTMwNC0gKi9cXG5tbS9hbGxvY190YWcuYzozMDU6c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG5tbS9hbGxvY190YWcuYy0zMDYte1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtMzc5LSAqL1xcbm1tL2FsbG9jX3RhZy5jOjM4MDpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxubW0vYWxsb2NfdGFnLmMtMzgxLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTQzMC0gKi9cXG5tbS9hbGxvY190YWcuYzo0MzE6c3RhdGljIGxvbmcgYWxsb2NpbmZvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbm1tL2FsbG9jX3RhZy5jLTQzMi1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBfX2FyZylcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTQzOC1cXHRjYXNlIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRDpcXG5tbS9hbGxvY190YWcuYzo0Mzk6XFx0XFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcXG5tbS9hbGxvY190YWcuYy00NDAtXFx0XFx0YnJlYWs7XFxubW0vYWxsb2NfdGFnLmMtNDQxLVxcdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfQVQ6XFxubW0vYWxsb2NfdGFnLmM6NDQyOlxcdFxcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfYXQoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xcbm1tL2FsbG9jX3RhZy5jLTQ0My1cXHRcXHRicmVhaztcXG5tbS9hbGxvY190YWcuYy00NDQtXFx0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUOlxcbm1tL2FsbG9jX3RhZy5jOjQ0NTpcXHRcXHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xcbm1tL2FsbG9jX3RhZy5jLTQ0Ni1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTQ1Nj1zdGF0aWMgbG9uZyBhbGxvY2luZm9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDU4LXtcXG5tbS9hbGxvY190YWcuYzo0NTk6XFx0cmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XFxubW0vYWxsb2NfdGFnLmMtNDYwLX1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGFsbG9jaW5mb19wcm9jX29wcyA9IHtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTQ2Ny1cXHQucHJvY19yZWxlYXNlXFx0XFx0PSBhbGxvY2luZm9fcmVsZWFzZSxcXG5tbS9hbGxvY190YWcuYzo0Njg6XFx0LnByb2NfaW9jdGxcXHRcXHQ9IGFsbG9jaW5mb19pb2N0bCxcXG5tbS9hbGxvY190YWcuYy00NjktI2lmZGVmIENPTkZJR19DT01QQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MjcuMDE3MDMzMjgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NTk0NDY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aGVtIHRocm91Z2ggYXMgSSBhbmFseXplIHRoZSBjb2RlOlxuXG4qKkFuYWx5emluZyBhbGxvY2luZm8gaW9jdGwgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBgYWxsb2NpbmZvYCBpb2N0bCBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgcGllY2VzOiBgYWxsb2NpbmZvX2lvY3RsYCwgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkYCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfYXRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0YCwgYW5kIGZpbmFsbHkgYG1hdGNoZXNfZmlsdGVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgcmVsYXRlZCBmaWx0ZXJpbmcgbG9naWMsIHByZXN1bWFibHkgZm9yIG1hbmFnaW5nIGFuZCByZXRyaWV2aW5nIGFsbG9jYXRpb24gaW5mb3JtYXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgaW50ZXJhY3QgYW5kIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zOyB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgaXMgY3JpdGljYWwuIE5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbGliL2NvZGV0YWcuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBkZXBlbmRlbmNpZXMgaGVyZSB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2hhdCB0aGlzIGRhdGEgbWVhbnMsIG9yIHRoYXQgdGhlcmUgYXJlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBoZXJlIHRoYXQgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBvcGVyYXRpb24gb2YgYGFsbG9jaW5mb2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjAxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MzAuNjEyOTgwNzAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDM0MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvZGV0YWdfZ2V0X2NvbnRlbnRfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL2NvZGV0YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvY29kZXRhZy5jPTUwPXZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxcbi0tXFxubGliL2NvZGV0YWcuYy01NC1cXG5saWIvY29kZXRhZy5jOjU1OnVuc2lnbmVkIGxvbmcgY29kZXRhZ19nZXRfY29udGVudF9pZChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpXFxubGliL2NvZGV0YWcuYy01Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjI4OjMwLjY3MTAxOTU1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjE3NjYwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBjb2RldGFnX2dldF9jb3VudGAgaW4gQ29udGV4dCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgY29kZXRhZ19nZXRfY291bnRgLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBhc2ssIFwiV2hlcmUgZG9lcyB0aGlzIGZpdCBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbT8gV2hhdCBpcyB0aGUgZnVuY3Rpb24ncyByZXNwb25zaWJpbGl0eT8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBtb2R1bGUgb3IgZnJhbWV3b3JrP1wiIEknbSBtZW50YWxseSB0cmFjaW5nIGl0cyBjb25uZWN0aW9ucy4gSSdtIGFscmVhZHkgZW52aXNpb25pbmcgcG90ZW50aWFsIGNhbGxpbmcgY29udGV4dHMsIGxpa2VseSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgdG8gc3RvcmUgdGhlIGNvZGUgdGFncyBhbmQgd2hlcmUgdGhpcyBjb3VudCBtaWdodCBiZSBuZWVkZWQuXG5cblRoZW4gSSBtb3ZlIHRvIHRoZSBkZXNpZ24gaXRzZWxmLiBXaGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIHRoaXM/IFdoYXQgZWRnZSBjYXNlcyBtaWdodCBub3QgYmUgaGFuZGxlZD8gSXMgaXQgb3B0aW1pemVkIGZvciBjb21tb24gc2NlbmFyaW9zPyBXaGF0IGlzIHRoZSBleHBlY3RlZCBzY2FsZSwgYW5kIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvdW50aW5nIG1lY2hhbmlzbT8gSXMgaXQgTygxKSwgTyhuKSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBpbmRleGluZyBtZXRob2RzLCBhbmQgYW55IGNhY2hpbmcgc3RyYXRlZ2llcyB0byB0cnVseSBncmFzcCB0aGUgdGltZSBjb21wbGV4aXR5LiBJ4oCZbSB0aGlua2luZywgXCJJcyB0aGVyZSBhIHRyYWRlLW9mZiBoZXJlPyBEb2VzIHRoaXMgZnVuY3Rpb24gcHJpb3JpdGl6ZSBzcGVlZCBvdmVyIG1lbW9yeSwgb3IgdmljZSB2ZXJzYT9cIlxuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBhIHNpbXBsZSBjb3VudGVyIG9uIGEgZGF0YWJhc2UgcmVjb3JkPyBJcyBpdCBhbiBpbi1tZW1vcnkgYWdncmVnYXRpb24/IERvZXMgaXQgaW52b2x2ZSBpdGVyYXRpbmcgb3ZlciBhIGRhdGEgc3RydWN0dXJlLCBvciBhcmUgd2UgbGV2ZXJhZ2luZyBzb21lIHNvcnQgb2YgcHJlY29tcHV0ZWQgaW5kZXg/IEknbSBhbHJlYWR5IHNlZWluZyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgaXQncyBub3QgdGhyZWFkLXNhZmUgYW5kIGNvbnNpZGVyaW5nIGhvdyB0byBtYW5hZ2UgY29uY3VycmVudCBhY2Nlc3MgdG8gc2hhcmVkIGNvdW50ZXJzIG9yIGRhdGEgc3RydWN0dXJlcy4gSSdtIGFsc28gYXNraW5nIG15c2VsZiBpZiB0aGUgZnVuY3Rpb24gbmVlZHMgdG8gaGFuZGxlIG51bGwgb3IgZW1wdHkgcmVzdWx0cyBncmFjZWZ1bGx5LlxuXG5Nb3N0IGltcG9ydGFudGx5LCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGVycm9ycywgYmVjYXVzZSBubyBwaWVjZSBvZiBjb2RlIGlzIHBlcmZlY3QuIEFyZSB0aGVyZSBndWFyZHJhaWxzIGluIHBsYWNlIGZvciBwb3RlbnRpYWwgZGF0YWJhc2UgZXJyb3JzIG9yIGludmFsaWQgaW5wdXQ/IERvIGVycm9yIG1lc3NhZ2VzIGNsZWFybHkgY29tbXVuaWNhdGUgdGhlIHByb2JsZW0gYW5kIGl0cyBsaWtlbHkgY2F1c2U/IEnigJltIGltYWdpbmluZyB0aGUgd29yc3QtY2FzZSBzY2VuYXJpb3MgYW5kIHRoZSBkZWJ1Z2dpbmcgc3RlcHMgSSdkIG5lZWQgdG8gdGFrZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy5cblxuVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGBjb2RldGFnX2dldF9jb3VudGAgcmFpc2VzIGEgaG9zdCBvZiBxdWVzdGlvbnMgdGhhdCBtdXN0IGJlIGFkZHJlc3NlZCB0byBlbnN1cmUgaXRzIGVmZmVjdGl2ZSBhbmQgcmVsaWFibGUgb3BlcmF0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDIyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjoyODozNS41OTI3ODg2NjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NDQ4NzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RldGFnX2dldF9jb3VudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvY29kZXRhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9jb2RldGFnLmM9NTU9dW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcXG4tLVxcbmxpYi9jb2RldGFnLmMtNjEtXFxubGliL2NvZGV0YWcuYzo2Mjp1bnNpZ25lZCBpbnQgY29kZXRhZ19nZXRfY291bnQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxcbmxpYi9jb2RldGFnLmMtNjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjoyODozNS45NTcyODE1MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMDI0NTEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgS2VybmVsIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBicmFuZCBuZXcgaW9jdGwgaW50ZXJmYWNlIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcsIGV4cG9zZWQgdGhyb3VnaCBgL3Byb2MvYWxsb2NpbmZvYC4gVGhhdCdzIGEgYmlnIHJlZCBmbGFnIGZvciBmdXp6aW5nLCByaWdodCBvZmYgdGhlIGJhdC4gQW55IG5ldyB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBBUEksIGVzcGVjaWFsbHkgb25lIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUga2VybmVsIG1lbW9yeSBpbmZvcm1hdGlvbiwgbmVlZHMgc2VyaW91cyBzY3J1dGlueS4gVGhlIGFpbSBpcyB0byBleHRyYWN0IGFuZCBmaWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gZGF0YSBhcyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhLiBUaGF0IHNvdW5kcyBpbnRlcmVzdGluZy5cblxuVGhlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBjb25maWcgZW5hYmxlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCB0aGF0J3MgZXhwZWN0ZWQuIFdlIHNob3VsZCBlbnN1cmUgdGhlIG5ldyBgYWxsb2NpbmZvX2lvY3RsYCBhbmQgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgIGNhbGxzIGFyZSByZXNpbGllbnQgdG8gYSBtdWx0aXR1ZGUgb2YgbWFsZm9ybWVkIGFuZCBpbnZhbGlkIGlucHV0cy4gV2Ugc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhcmlvdXMgZnVuY3Rpb25zIHdpdGhpbiB0aGVzZSBpb2N0bHM6IGBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9hdGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X25leHRgLCBgbWF0Y2hlc19maWx0ZXJgLCBgY29kZXRhZ19nZXRfY29udGVudF9pZGAsIGFuZCBgY29kZXRhZ19nZXRfY291bnRgLiAgVGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3MsIGFuZCB0aGV5J3JlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gZXhwbG9yZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYnVmZmVyIG92ZXJmbG93cywgYW5kIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgaW9jdGxzLiBJJ2xsIG5lZWQgdG8gZGV2ZWxvcCBhIGZ1enppbmcgc3RyYXRlZ3kgdGhhdCBmb2N1c2VzIHNwZWNpZmljYWxseSBvbiB0aGVzZSBpZGVudGlmaWVkIGZ1bmN0aW9ucywgdmFyeWluZyBpbnB1dHMsIHNpemVzLCBhbmQgc2VxdWVuY2VzLlxuXG5JJ2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBjb25maWdzOyBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBtYWluIG9uZSwgYXMgZXhwZWN0ZWQuIEknbGwgYWxzbyBkb3VibGUgY2hlY2sgYENPTkZJR19DT01QQVRgLCBidXQgdGhhdCdzIGEgZ2VuZXJpYyBvbmUuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQgaWYgd2UncmUgZGVhbGluZyB3aXRoIG9sZGVyIHVzZXJsYW5kLCBhbmQgZnV6eiB0aGF0IHRvby4gTGV0J3MgY2FsbCB0aGlzIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYxNSwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6NDUuMDU3NTI5MzU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2Njk2NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NpbmZvX2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9fY29tcGF0X2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfYXRcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dFwiLFxuICAgIFwibWF0Y2hlc19maWx0ZXJcIixcbiAgICBcImNvZGV0YWdfZ2V0X2NvbnRlbnRfaWRcIixcbiAgICBcImNvZGV0YWdfZ2V0X2NvdW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpb2N0bCBpbnRlcmZhY2UgZm9yIGAvcHJvYy9hbGxvY2luZm9gIHRvIGFsbG93IHN0cnVjdHVyZWQgYmluYXJ5IGRhdGEgZXh0cmFjdGlvbiBhbmQgZmlsdGVyaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBkYXRhLiBUaGlzIGlzIGEgbmV3IHVzZXJzcGFjZS1mYWNpbmcgQVBJIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgaGFuZGxlcyBpbnZhbGlkIGlucHV0cywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NpbmZvX2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9fY29tcGF0X2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfYXRcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dFwiLFxuICAgIFwibWF0Y2hlc19maWx0ZXJcIixcbiAgICBcImNvZGV0YWdfZ2V0X2NvbnRlbnRfaWRcIixcbiAgICBcImNvZGV0YWdfZ2V0X2NvdW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpb2N0bCBpbnRlcmZhY2UgZm9yIGAvcHJvYy9hbGxvY2luZm9gIHRvIGFsbG93IHN0cnVjdHVyZWQgYmluYXJ5IGRhdGEgZXh0cmFjdGlvbiBhbmQgZmlsdGVyaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBkYXRhLiBUaGlzIGlzIGEgbmV3IHVzZXJzcGFjZS1mYWNpbmcgQVBJIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgaGFuZGxlcyBpbnZhbGlkIGlucHV0cywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4thq7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 02:03:49 +0000 UTC FinishedAt: 2026-07-07 02:28:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d009220c76e1af167492a8912b651e60316b2ca4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d009220c76e1af167492a8912b651e60316b2ca4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "4acae500-50b1-4cb5-9fd6-d09164017d89" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "allocinfo_ioctl", "allocinfo_compat_ioctl", "allocinfo_ioctl_get_content_id", "allocinfo_ioctl_get_at", "allocinfo_ioctl_get_next", "matches_filter", "codetag_get_content_id", "codetag_get_count" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2NvbXBhdF9pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2lvY3RsX2dldF9hdCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X25leHQmIzM0OywKICAgICYjMzQ7bWF0Y2hlc19maWx0ZXImIzM0OywKICAgICYjMzQ7Y29kZXRhZ19nZXRfY29udGVudF9pZCYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2dldF9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvY3RsIGludGVyZmFjZSBmb3IgYC9wcm9jL2FsbG9jaW5mb2AgdG8gYWxsb3cgc3RydWN0dXJlZCBiaW5hcnkgZGF0YSBleHRyYWN0aW9uIGFuZCBmaWx0ZXJpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGRhdGEuIFRoaXMgaXMgYSBuZXcgdXNlcnNwYWNlLWZhY2luZyBBUEkgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGludmFsaWQgaW5wdXRzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgY29uY3VycmVuY3kgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDI5MGVkODQ2ZjFkMTVjN2U0MWNjZjQ3OGZlZTY5NjAyMTVhNGVhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDI6Mjg6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuaW5kZXggNTM4OWQyNDExNzZhOGEuLmMzYTI4NDY3OTU1ZjNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5AQCAtNDYsNiAmIzQzOzQ2LDExIEBAIHN5c2N0bDpcbiBSdW50aW1lIGluZm86XG4gICAvcHJvYy9hbGxvY2luZm9cbiBcbiYjNDM7ICBQcm9maWxpbmcgZGF0YSBjYW4gYmUgcmV0cmlldmVkIGVpdGhlciBieSByZWFkaW5nIGAvcHJvYy9hbGxvY2luZm9gIGRpcmVjdGx5IGFzXG4mIzQzOyAgdGV4dCBvciBwcm9ncmFtbWF0aWNhbGx5IHZpYSBgaW9jdGwoKWAgY2FsbHMgZGVmaW5lZCBpbiBgXHUwMDNjdWFwaS9saW51eC9hbGxvY190YWcuaFx1MDAzZWAuXG4mIzQzOyAgVGhlIGlvY3RsIGludGVyZmFjZSBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYXMgd2VsbCBhcyBmaWx0ZXJpbmdcbiYjNDM7ICBieSBtb2R1bGUgbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUgbnVtYmVyLCBhY2N1cmFjeSwgb3IgYWxsb2NhdGlvbiBzaXplIGxpbWl0cy5cbiYjNDM7XG4gRXhhbXBsZSBvdXRwdXQ6OlxuIFxuICAgcm9vdEBtb3JpYS1rdm06fiMgc29ydCAtZyAvcHJvYy9hbGxvY2luZm98dGFpbHxudW1mbXQgLS10bz1pZWNcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5pbmRleCAzZjBlZjFlMjdlYjA3ZC4uMmZjNTMwOTM3NTJkMTMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcbkBAIC0zNDYsNiAmIzQzOzM0Niw4IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzY21haWx0bzpsdXptYXhpbWlsaWFuQGdtYWlsLmNvbVx1MDAzZVxuIDB4QTUgIDIwLTJGICBsaW51eC9zdXJmYWNlX2FnZ3JlZ2F0b3IvZHR4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IFN1cmZhY2UgRFRYIGRyaXZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOmx1em1heGltaWxpYW5AZ21haWwuY29tXHUwMDNlXG4mIzQzOzB4QTYgIDAwLTBGICB1YXBpL2xpbnV4L2FsbG9jX3RhZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOnN1cmVuYkBnb29nbGUuY29tXHUwMDNlXG4gMHhBQSAgMDAtM0YgIGxpbnV4L3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaFxuIDB4QUIgIDAwLTFGICBsaW51eC9uYmQuaFxuIDB4QUMgIDAwLTFGICBsaW51eC9yYXcuaFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDI5YzMwMmU5YzE3YmEzLi44NjdkNGFkNThmYjQyMiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE2OTM3LDcgJiM0MzsxNjkzNyw5IEBAIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG4gRjpcdGluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmhcbiBGOlx0aW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oXG4mIzQzO0Y6XHRpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbiBGOlx0bW0vYWxsb2NfdGFnLmNcbiYjNDM7RjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9cbiBcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEJBTExPT05cbiBNOlx0QW5kcmV3IE1vcnRvbiBcdTAwM2Nha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RldGFnLmggYi9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaFxuaW5kZXggZGRhZTc0ODRjYTQ1NmMuLmEyNWEwODVjMmRmMTk5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb2RldGFnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY29kZXRhZy5oXG5AQCAtNzcsNiAmIzQzOzc3LDggQEAgc3RydWN0IGNvZGV0YWdfaXRlcmF0b3Ige1xuIHZvaWQgY29kZXRhZ19sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XG4gYm9vbCBjb2RldGFnX3RyeWxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbiB2b2lkIGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgY29kZXRhZ19nZXRfY29udGVudF9pZChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpO1xuJiM0Mzt1bnNpZ25lZCBpbnQgY29kZXRhZ19nZXRfY291bnQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XG4gc3RydWN0IGNvZGV0YWcgKmNvZGV0YWdfbmV4dF9jdChzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciAqaXRlcik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI3MGY2OTNiMTgyMjA0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbkBAIC0wLDAgJiM0MzsxLDk5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXG4mIzQzOy8qXG4mIzQzOyAqIGFsbG9jX3RhZyBJT0NUTCBBUEkgZGVmaW5pdGlvblxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuJiM0MzsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhc1xuJiM0MzsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9VQVBJX0FMTE9DX1RBR19IXG4mIzQzOyNkZWZpbmUgX1VBUElfQUxMT0NfVEFHX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXG4mIzQzOyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG9cbiYjNDM7ICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19TVFJfU0laRVx0NjRcbiYjNDM7XG4mIzQzO3N0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCB7XG4mIzQzO1x0X191NjQgaWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB7XG4mIzQzO1x0LyogTG9uZ2VyIG5hbWVzIGFyZSB0cmltbWVkICovXG4mIzQzO1x0Y2hhciBtb2RuYW1lW0FMTE9DSU5GT19TVFJfU0laRV07XG4mIzQzO1x0Y2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdO1xuJiM0MztcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcbiYjNDM7XHRfX3U2NCBsaW5lbm87XG4mIzQzO1x0LyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovXG4mIzQzO1x0X191NjQgaW5hY2N1cmF0ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXG4mIzQzO3N0cnVjdCBhbGxvY2luZm9fY291bnRlciB7XG4mIzQzO1x0X191NjQgYnl0ZXM7XG4mIzQzO1x0X191NjQgY2FsbHM7XG4mIzQzO1x0X191OCBhY2N1cmF0ZTtcbiYjNDM7fSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB0YWc7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19jb3VudGVyIGNvdW50ZXI7XG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsXG4mIzQzO1x0QUxMT0NJTkZPX0ZJTFRFUl9GVU5DVElPTixcbiYjNDM7XHRBTExPQ0lORk9fRklMVEVSX0ZJTEVOQU1FLFxuJiM0MztcdEFMTE9DSU5GT19GSUxURVJfTElORU5PLFxuJiM0MztcdEFMTE9DSU5GT19GSUxURVJfSU5BQ0NVUkFURSxcbiYjNDM7XHRBTExPQ0lORk9fRklMVEVSX01JTl9TSVpFLFxuJiM0MztcdEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsXG4mIzQzO1x0X19BTExPQ0lORk9fRklMVEVSX0xBU1QgPSBBTExPQ0lORk9fRklMVEVSX01BWF9TSVpFXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NT0ROQU1FXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX01PRE5BTUUpXG4mIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OKVxuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9GSUxFTkFNRSlcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0xJTkVOTylcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURVx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfSU5BQ0NVUkFURSlcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkVcdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpXG4mIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX01BWF9TSVpFKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tTIFxcXG4mIzQzO1x0KCgxIFx1MDAzY1x1MDAzYyAoX19BTExPQ0lORk9fRklMVEVSX0xBU1QgJiM0MzsgMSkpIC0gMSlcbiYjNDM7XG4mIzQzO3N0cnVjdCBhbGxvY2luZm9fZmlsdGVyIHtcbiYjNDM7XHRfX3U2NCBtYXNrOyAvKiBiaXRtYXNrIG9mIHRoZSBmaWx0ZXIgZmllbGRzIHVzZWQgKi9cbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyBmaWVsZHM7XG4mIzQzO1x0X191NjQgbWluX3NpemU7XG4mIzQzO1x0X191NjQgbWF4X3NpemU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XG4mIzQzO1x0LyogaW5wdXRzICovXG4mIzQzO1x0X191NjQgcG9zO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbiYjNDM7XHQvKiBvdXRwdXQgKi9cbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIGRhdGE7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSURcdDBcbiYjNDM7I2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfQVRcdFx0MVxuJiM0MzsjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhUXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0lPQ19CQVNFXHRcdDB4QTZcbiYjNDM7I2RlZmluZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSURcdF9JT1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19DT05URU5UX0lELFx0XFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKVxuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX0FUXHRcdF9JT1dSKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfR0VUX0FULFx0XFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0KVxuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX05FWFRcdFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhULFx0XFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSlcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfVUFQSV9BTExPQ19UQUdfSCAqL1xuZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jXG5pbmRleCA0MDAxYTdlYTY2NzU0Mi4uYTljZGE0Yzk2MmEzMDMgMTAwNjQ0XG4tLS0gYS9saWIvY29kZXRhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvY29kZXRhZy5jXG5AQCAtMTksNiAmIzQzOzE5LDggQEAgc3RydWN0IGNvZGV0YWdfdHlwZSB7XG4gXHRzdHJ1Y3QgY29kZXRhZ190eXBlX2Rlc2MgZGVzYztcbiBcdC8qIGdlbmVyYXRlcyB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIGZvciBtb2R1bGUgbG9hZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0X21vZF9zZXE7XG4mIzQzO1x0LyogYnVtcGVkIG9uIGV2ZXJ5IG1vZHVsZSBsb2FkIGFuZCB1bmxvYWQgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNvbnRlbnRfaWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgY29kZXRhZ19yYW5nZSB7XG5AQCAtNTAsNiAmIzQzOzUyLDIwIEBAIHZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuIFx0dXBfcmVhZChcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuIH1cbiBcbiYjNDM7dW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGN0dHlwZS1cdTAwM2Vjb250ZW50X2lkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1bnNpZ25lZCBpbnQgY29kZXRhZ19nZXRfY291bnQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY3R0eXBlLVx1MDAzZWNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIGNvZGV0YWdfZ2V0X2N0X2l0ZXIoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuIHtcbiBcdHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIGl0ZXIgPSB7XG5AQCAtMjA0LDYgJiM0MzsyMjAsNyBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXG4gXHRkb3duX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gXHRjbW9kLVx1MDAzZW1vZF9zZXEgPSAmIzQzOyYjNDM7Y3R0eXBlLVx1MDAzZW5leHRfbW9kX3NlcTtcbiYjNDM7XHQmIzQzOyYjNDM7Y3R0eXBlLVx1MDAzZWNvbnRlbnRfaWQ7XG4gXHRtb2RfaWQgPSBpZHJfYWxsb2MoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9pZHIsIGNtb2QsIDAsIDAsIEdGUF9LRVJORUwpO1xuIFx0aWYgKG1vZF9pZCBcdTAwM2U9IDApIHtcbiBcdFx0aWYgKGN0dHlwZS1cdTAwM2VkZXNjLm1vZHVsZV9sb2FkKSB7XG5AQCAtMzY4LDYgJiM0MzszODUsNyBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0Y3R0eXBlLVx1MDAzZWNvdW50IC09IHJhbmdlX3NpemUoY3R0eXBlLCBcdTAwMjZjbW9kLVx1MDAzZXJhbmdlKTtcbiBcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfaWRyLCBtb2RfaWQpO1xuIFx0XHRcdGtmcmVlKGNtb2QpO1xuJiM0MztcdFx0XHQmIzQzOyYjNDM7Y3R0eXBlLVx1MDAzZWNvbnRlbnRfaWQ7XG4gXHRcdH1cbiBcdFx0dXBfd3JpdGUoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiBcdFx0aWYgKGZvdW5kIFx1MDAyNlx1MDAyNiBjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGQ5YmUxY2Y1MTg3ZDk3Li4zMmFjMDY3NGQ4YmY2ZCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9hbGxvY190YWcuY1xuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FsbHN5bXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2V4dC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuQEAgLTE0LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9hbGxvY190YWcuaFx1MDAzZVxuIFxuICNkZWZpbmUgQUxMT0NJTkZPX0ZJTEVfTkFNRVx0XHRcJiMzNDthbGxvY2luZm9cJiMzNDtcbiAjZGVmaW5lIE1PRFVMRV9BTExPQ19UQUdfVk1BUF9TSVpFXHQoMTAwMDAwVUwgKiBzaXplb2Yoc3RydWN0IGFsbG9jX3RhZykpXG5AQCAtNDcsNiAmIzQzOzQ5LDExIEBAIHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyO1xuIFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgcmVwb3J0ZWRfaXRlcjtcbiBcdGJvb2wgcHJpbnRfaGVhZGVyO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbiYjNDM7XHQvKiBpb2N0bCB1c2VzIGEgc2VwYXJhdGUgaXRlcmF0b3Igbm90IHRvIGludGVyZmVyZSB3aXRoIHJlYWRzICovXG4mIzQzO1x0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaW9jdGxfaXRlcjtcbiYjNDM7XHRib29sIHBvc2l0aW9uZWQ7IC8qIHNlcV9vcGVuX3ByaXZhdGUoKSBzZXRzIHRvIDAgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggaW9jdGxfbG9jaztcbiB9O1xuIFxuIHN0YXRpYyB2b2lkICphbGxvY2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbkBAIC0xMzAsNiAmIzQzOzEzNywzNDAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhbGxvY2luZm9fc2VxX29wID0ge1xuIFx0LnNob3dcdD0gYWxsb2NpbmZvX3Nob3csXG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogSW5pdGlhbGl6ZXMgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgYWxsb2NhdGVzIHByaXZhdGUgc3RhdGUgd2hlbiBvcGVuaW5nXG4mIzQzOyAqIHRoZSAvcHJvYy9hbGxvY2luZm8gcHJvY2ZzIGVudHJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhbGxvY2luZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2YWxsb2NpbmZvX3NlcV9vcCxcbiYjNDM7XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUpKTtcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0c3RydWN0IHNlcV9maWxlICptID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0XHRzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDbGVhbnMgdXAgdGhlIHNlcV9maWxlIHN0YXRlIGFuZCBmcmVlcyB1cCB0aGUgcHJpdmF0ZSBzdGF0ZSBhbGxvY2F0ZWQgaW5cbiYjNDM7ICogYWxsb2NpbmZvX29wZW4oKSB3aGVuIGNsb3NpbmcgdGhlIC9wcm9jL2FsbG9jaW5mbyBmaWxlIGRlc2NyaXB0b3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFsbG9jaW5mb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNlcV9maWxlICptID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3VmZml4IG9mIGEgc3RyaW5nIHNvIHRoYXQgaXRzIGxlbmd0aCBmaXRzIHdpdGhpblxuJiM0MzsgKiBBTExPQ0lORk9fU1RSX1NJWkUsIHByZXNlcnZpbmcgdGhlIHRyYWlsaW5nIGNoYXJhY3RlcnMuXG4mIzQzOyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXG4mIzQzOyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG9cbiYjNDM7ICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbGVuID0gc3RybGVuKHN0cik7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgYW4gZXh0cmEgc3BhY2UgZm9yIHRoZSB0cmFpbGluZyBOVUxMLiAqL1xuJiM0MztcdGlmIChsZW4gXHUwMDNlPSBBTExPQ0lORk9fU1RSX1NJWkUpXG4mIzQzO1x0XHRzdHIgJiM0Mzs9IChsZW4gLSBBTExPQ0lORk9fU1RSX1NJWkUpICYjNDM7IDE7XG4mIzQzO1x0cmV0dXJuIHN0cjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29weSBhIHN0cmluZyBhbmQgdHJpbSBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgaXQmIzM5O3MgdG9vIGxvbmcgKi9cbiYjNDM7c3RhdGljIHZvaWQgYWxsb2NpbmZvX2NvcHlfc3RyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYylcbiYjNDM7e1xuJiM0MztcdHN0cnNjcHlfcGFkKGRlc3QsIGFsbG9jaW5mb19zdHIoc3JjKSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29tcGFyZSB0d28gc3RyaW5ncyBhbmQgb25seSBjb25zaWRlciB0aGUgdHJpbW1lZCBzdWZmaXggaWYgczEgaXMgdG9vIGxvbmcgKi9cbiYjNDM7c3RhdGljIGludCBhbGxvY2luZm9fY21wX3N0cihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnRlbXBsYXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0cm5jbXAoYWxsb2NpbmZvX3N0cihzdHIpLCB0ZW1wbGF0ZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRmV0Y2ggdGhlIHBlci1DUFUgY291bnRlcnMgKi9cbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhzdHJ1Y3QgY29kZXRhZyAqY3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWxsb2NfdGFnX3JlYWQoY3RfdG9fYWxsb2NfdGFnKGN0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBvcHVsYXRlcyB0aGUgVUFQSSBhbGxvY2luZm9fdGFnX2RhdGEgc3RydWN0dXJlIHdpdGggYWN0aXZlIHJ1bnRpbWVcbiYjNDM7ICogcHJvZmlsaW5nIGNvdW50ZXJzIGV4dHJhY3RlZCBmcm9tIHRoZSBnaXZlbiBrZXJuZWwgY29kZXRhZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFsbG9jaW5mb190b19wYXJhbXMoc3RydWN0IGNvZGV0YWcgKmN0LFxuJiM0MztcdFx0XHRcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgKmRhdGEsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY3QtXHUwMDNlbW9kbmFtZSlcbiYjNDM7XHRcdGFsbG9jaW5mb19jb3B5X3N0cihkYXRhLVx1MDAzZXRhZy5tb2RuYW1lLCBjdC1cdTAwM2Vtb2RuYW1lKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkYXRhLVx1MDAzZXRhZy5tb2RuYW1lWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRhbGxvY2luZm9fY29weV9zdHIoZGF0YS1cdTAwM2V0YWcuZnVuY3Rpb24sIGN0LVx1MDAzZWZ1bmN0aW9uKTtcbiYjNDM7XHRhbGxvY2luZm9fY29weV9zdHIoZGF0YS1cdTAwM2V0YWcuZmlsZW5hbWUsIGN0LVx1MDAzZWZpbGVuYW1lKTtcbiYjNDM7XHRkYXRhLVx1MDAzZXRhZy5saW5lbm8gPSBjdC1cdTAwM2VsaW5lbm87XG4mIzQzO1x0ZGF0YS1cdTAwM2Vjb3VudGVyLmJ5dGVzID0gY291bnRlcnMtXHUwMDNlYnl0ZXM7XG4mIzQzO1x0ZGF0YS1cdTAwM2Vjb3VudGVyLmNhbGxzID0gY291bnRlcnMtXHUwMDNlY2FsbHM7XG4mIzQzO1x0ZGF0YS1cdTAwM2Vjb3VudGVyLmFjY3VyYXRlID0gIWFsbG9jX3RhZ19pc19pbmFjY3VyYXRlKGN0X3RvX2FsbG9jX3RhZyhjdCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXRyaWV2ZXMgdGhlIHVuaXF1ZSBjb250ZW50IElEIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBhbGxvY2F0aW9uIHRhZyBtb2R1bGVcbiYjNDM7ICogbGF5b3V0LCBhbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGV0ZWN0IGlmIG1vZHVsZXMgd2VyZSBsb2FkZWQgLyB1bmxvYWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBwYXJhbXM7XG4mIzQzO1xuJiM0MztcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbiYjNDM7XHRwYXJhbXMuaWQgPSBjb2RldGFnX2dldF9jb250ZW50X2lkKGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVmVyaWZpZXMgd2hldGhlciBhIGdpdmVuIGNvZGV0YWcgc2F0aXNmaWVzIHRoZSBhY3RpdmUgZmlsdGVyaW5nIGNyaXRlcmlhIGJ5XG4mIzQzOyAqIG1hdGNoaW5nIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGZpbHRlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXG4mIzQzO1x0XHRcdCAgIGJvb2wgKmZldGNoZWRfY291bnRlcnMpXG4mIzQzO3tcbiYjNDM7XHRib29sIGluYWNjdXJhdGU7XG4mIzQzO1xuJiM0MztcdGlmICghZmlsdGVyIHx8ICFmaWx0ZXItXHUwMDNlbWFzaylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NT0ROQU1FKSB7XG4mIzQzO1x0XHQvKiB1c2VyIHdhbnRzIHRvIGZpbHRlciBieSBtb2RuYW1lIGJ1dCBjdC1cdTAwM2Vtb2RuYW1lIGlzIE5VTEwgKi9cbiYjNDM7XHRcdGlmICghY3QtXHUwMDNlbW9kbmFtZSkge1xuJiM0MztcdFx0XHQvKiB2YWxpZGF0ZSBpZiB1c2VyIHdhcyBhdHRlbXB0aW5nIHRvIGZpbHRlciBmb3IgYnVpbHQtaW4gYWxsb2NhdGlvbnMgKi9cbiYjNDM7XHRcdFx0aWYgKGZpbHRlci1cdTAwM2VmaWVsZHMubW9kbmFtZVswXSAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoYWxsb2NpbmZvX2NtcF9zdHIoY3QtXHUwMDNlbW9kbmFtZSwgZmlsdGVyLVx1MDAzZWZpZWxkcy5tb2RuYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgY3QtXHUwMDNlZnVuY3Rpb24gXHUwMDI2XHUwMDI2IGFsbG9jaW5mb19jbXBfc3RyKGN0LVx1MDAzZWZ1bmN0aW9uLCBmaWx0ZXItXHUwMDNlZmllbGRzLmZ1bmN0aW9uKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgY3QtXHUwMDNlZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGFsbG9jaW5mb19jbXBfc3RyKGN0LVx1MDAzZWZpbGVuYW1lLCBmaWx0ZXItXHUwMDNlZmllbGRzLmZpbGVuYW1lKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGN0LVx1MDAzZWxpbmVubyAhPSBmaWx0ZXItXHUwMDNlZmllbGRzLmxpbmVubylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkge1xuJiM0MztcdFx0aW5hY2N1cmF0ZSA9ICEhKGN0LVx1MDAzZWZsYWdzIFx1MDAyNiBDT0RFVEFHX0ZMQUdfSU5BQ0NVUkFURSk7XG4mIzQzO1x0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlZmllbGRzLmluYWNjdXJhdGUpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IChBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUgfCBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpKSB7XG4mIzQzO1x0XHRpZiAoISpmZXRjaGVkX2NvdW50ZXJzKSB7XG4mIzQzO1x0XHRcdCpjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4mIzQzO1x0XHRcdCpmZXRjaGVkX2NvdW50ZXJzID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY291bnRlcnMtXHUwMDNlYnl0ZXMgXHUwMDNjIGZpbHRlci1cdTAwM2VtaW5fc2l6ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjb3VudGVycy1cdTAwM2VieXRlcyBcdTAwM2UgZmlsdGVyLVx1MDAzZW1heF9zaXplKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzXG4mIzQzOyAqIHByb2ZpbGluZyBkYXRhIGFuZCByZXR1cm5zIGl0IHRvIHVzZXJzcGFjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXY7XG4mIzQzO1x0c3RydWN0IGNvZGV0YWcgKmN0O1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHBhcmFtcyA9IHswfTtcbiYjNDM7XHRfX3U2NCBza2lwX2NvdW50O1xuJiM0MztcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcnM7XG4mIzQzO1x0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cGFyYW1zLCBhcmcsIHNpemVvZihwYXJhbXMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoKHBhcmFtcy5maWx0ZXIubWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKHBhcmFtcy5maWx0ZXIubWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGFyYW1zLmZpbHRlci5taW5fc2l6ZSBcdTAwM2UgcGFyYW1zLmZpbHRlci5tYXhfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4mIzQzO1x0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocGFyYW1zLnBvcyBcdTAwM2U9IGNvZGV0YWdfZ2V0X2NvdW50KGFsbG9jX3RhZ19jdHR5cGUpKSB7XG4mIzQzO1x0XHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2lwX2NvdW50ID0gcGFyYW1zLnBvcztcbiYjNDM7XG4mIzQzO1x0aWYgKHBhcmFtcy5maWx0ZXIubWFzaylcbiYjNDM7XHRcdHByaXYtXHUwMDNlZmlsdGVyID0gcGFyYW1zLmZpbHRlcjtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwcml2LVx1MDAzZWZpbHRlci5tYXNrID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogRmluZCB0aGUgY29kZXRhZyAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW9jdGxfaXRlciA9IGNvZGV0YWdfZ2V0X2N0X2l0ZXIoYWxsb2NfdGFnX2N0dHlwZSk7XG4mIzQzO1x0Y3QgPSBjb2RldGFnX25leHRfY3QoXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9pdGVyKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGN0KSB7XG4mIzQzO1x0XHRmZXRjaGVkX2NvdW50ZXJzID0gZmFsc2U7XG4mIzQzO1x0XHRpZiAobWF0Y2hlc19maWx0ZXIoY3QsIFx1MDAyNnByaXYtXHUwMDNlZmlsdGVyLCBcdTAwMjZjb3VudGVycywgXHUwMDI2ZmV0Y2hlZF9jb3VudGVycykpIHtcbiYjNDM7XHRcdFx0aWYgKHNraXBfY291bnQgPT0gMClcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0c2tpcF9jb3VudC0tO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9pdGVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjdCkge1xuJiM0MztcdFx0aWYgKCFmZXRjaGVkX2NvdW50ZXJzKVxuJiM0MztcdFx0XHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4mIzQzO1x0XHRhbGxvY2luZm9fdG9fcGFyYW1zKGN0LCBcdTAwMjZwYXJhbXMuZGF0YSwgXHUwMDI2Y291bnRlcnMpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3NpdGlvbmVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIWN0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQWR2YW5jZXMgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGFsbG9jYXRpb24gdGFnIGluIHRoZSBzZXF1ZW5jZSBhbmRcbiYjNDM7ICogcmV0dXJucyBpdHMgcHJvZmlsaW5nIGRhdGEgdG8gdXNlcnNwYWNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xuJiM0MztcdHN0cnVjdCBjb2RldGFnICpjdDtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHBhcmFtcztcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXJzO1xuJiM0MztcdGJvb2wgZmV0Y2hlZF9jb3VudGVycztcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuJiM0MztcdHByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbiYjNDM7XHRjb2RldGFnX2xvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vwb3NpdGlvbmVkKSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlvY3RsX2l0ZXIgPSBjb2RldGFnX2dldF9jdF9pdGVyKGFsbG9jX3RhZ19jdHR5cGUpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3NpdGlvbmVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0ID0gY29kZXRhZ19uZXh0X2N0KFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfaXRlcik7XG4mIzQzO1x0d2hpbGUgKGN0KSB7XG4mIzQzO1x0XHRmZXRjaGVkX2NvdW50ZXJzID0gZmFsc2U7XG4mIzQzO1x0XHRpZiAobWF0Y2hlc19maWx0ZXIoY3QsIFx1MDAyNnByaXYtXHUwMDNlZmlsdGVyLCBcdTAwMjZjb3VudGVycywgXHUwMDI2ZmV0Y2hlZF9jb3VudGVycykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9pdGVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjdCkge1xuJiM0MztcdFx0aWYgKCFmZXRjaGVkX2NvdW50ZXJzKVxuJiM0MztcdFx0XHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4mIzQzO1x0XHRhbGxvY2luZm9fdG9fcGFyYW1zKGN0LCBcdTAwMjZwYXJhbXMsIFx1MDAyNmNvdW50ZXJzKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFjdCkge1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3NpdGlvbmVkID0gZmFsc2U7XG4mIzQzO1x0XHRyZXQgPSAtRU5PRU5UO1xuJiM0MztcdH1cbiYjNDM7XHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAwKSB7XG4mIzQzO1x0XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2cGFyYW1zLCBzaXplb2YocGFyYW1zKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFbnRyeSBwb2ludCBpb2N0bCBmdW5jdGlvbiBmb3IgL3Byb2MvYWxsb2NpbmZvIHJvdXRpbmcgcmVxdWVzdHMgdG8gZmV0Y2ggdGhlXG4mIzQzOyAqIGxheW91dCBjb250ZW50IElELCBzZWVrIHRvIGEgc3BlY2lmaWMgdGFnLCBvciByZWFkIHNlcXVlbnRpYWwgdGFncy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgX19hcmcpXG4mIzQzO3tcbiYjNDM7XHR2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopX19hcmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjbWQpIHtcbiYjNDM7XHRjYXNlIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRDpcbiYjNDM7XHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfQVQ6XG4mIzQzO1x0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUOlxuJiM0MztcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldCA9IC1FTk9JT0NUTENNRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19DT01QQVRcbiYjNDM7c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhbGxvY2luZm9faW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBhbGxvY2luZm9fcHJvY19vcHMgPSB7XG4mIzQzO1x0LnByb2Nfb3Blblx0XHQ9IGFsbG9jaW5mb19vcGVuLFxuJiM0MztcdC5wcm9jX3JlYWRfaXRlclx0XHQ9IHNlcV9yZWFkX2l0ZXIsXG4mIzQzO1x0LnByb2NfbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4mIzQzO1x0LnByb2NfcmVsZWFzZVx0XHQ9IGFsbG9jaW5mb19yZWxlYXNlLFxuJiM0MztcdC5wcm9jX2lvY3RsXHRcdD0gYWxsb2NpbmZvX2lvY3RsLFxuJiM0MzsjaWZkZWYgQ09ORklHX0NPTVBBVFxuJiM0MztcdC5wcm9jX2NvbXBhdF9pb2N0bFx0PSBhbGxvY2luZm9fY29tcGF0X2lvY3RsLFxuJiM0MzsjZW5kaWZcbiYjNDM7fTtcbiYjNDM7XG4gc2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApXG4ge1xuIFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlcjtcbkBAIC05OTMsOCAmIzQzOzEzMzQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGlmICghcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgXHUwMDI2YWxsb2NpbmZvX3NlcV9vcCxcbi1cdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSksIE5VTEwpKSB7XG4mIzQzO1x0aWYgKCFwcm9jX2NyZWF0ZShBTExPQ0lORk9fRklMRV9OQU1FLCAwNDAwLCBOVUxMLCBcdTAwMjZhbGxvY2luZm9fcHJvY19vcHMpKSB7XG4gXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gY3JlYXRlICVzIGZpbGVcXG5cJiMzNDssIEFMTE9DSU5GT19GSUxFX05BTUUpO1xuIFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuaW5kZXggOGQ0ZGIyMjQxY2MyYTIuLjEyOTQxZDY4YTdmOGFlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5AQCAtMSw1ICYjNDM7MSw2IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFRBUkdFVFMgJiM0Mzs9IGFjY3RcbiYjNDM7VEFSR0VUUyAmIzQzOz0gYWxsb2NfdGFnXG4gVEFSR0VUUyAmIzQzOz0gYWxzYVxuIFRBUkdFVFMgJiM0Mzs9IGFtZC1wc3RhdGVcbiBUQVJHRVRTICYjNDM7PSBhcm02NFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNDFkOTJkMDZiMTg0OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSw5IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzO1RFU1RfR0VOX1BST0dTIDo9IGFsbG9jaW5mb19pb2N0bF90ZXN0XG4mIzQzO1xuJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsXG4mIzQzO0NGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKVxuJiM0MztcbiYjNDM7aW5jbHVkZSAuLi9saWIubWtcbiYjNDM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wOTIzNDgwOTcyMDQzOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDU0OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzO1xuJiM0MzsvKiBrc2VsZnRlc3QgZm9yIGFsbG9jaW5mbyBpb2N0bFxuJiM0MzsgKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bFxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBJbmMuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWxsb2NfdGFnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4va3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFYX0xJTkVfTEVOXHRcdDUxMlxuJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19QUk9DXHRcdFwmIzM0Oy9wcm9jL2FsbG9jaW5mb1wmIzM0O1xuJiM0MztcbiYjNDM7ZW51bSBpb2N0bF9yZXQge1xuJiM0MztcdElPQ1RMX1NVQ0NFU1MgPSAwLFxuJiM0MztcdElPQ1RMX0ZBSUxVUkUgPSAxLFxuJiM0MztcdElPQ1RMX0lOVkFMSURfREFUQSA9IDIsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFZFQ19NQVhfRU5UUklFUyAzMlxuJiM0MztcbiYjNDM7c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMge1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgdGFnW1ZFQ19NQVhfRU5UUklFU107XG4mIzQzO1x0X191NjQgY291bnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgKnBhcmFtcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpb2N0bChkZXZfZmQsIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRCwgcGFyYW1zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19hbGxvY2luZm9fZ2V0X2F0KGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0ICpwYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaW9jdGwoZGV2X2ZkLCBBTExPQ0lORk9fSU9DX0dFVF9BVCwgcGFyYW1zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19hbGxvY2luZm9fZ2V0X25leHQoaW50IGRldl9mZCwgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqcGFyYW1zKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGlvY3RsKGRldl9mZCwgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVCwgcGFyYW1zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbWF0Y2hfZW50cnkoY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqcHJvY2ZzX2VudHJ5LFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YWdfZGF0YSxcbiYjNDM7XHRcdFx0Ym9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sXG4mIzQzO1x0XHRcdGJvb2wgbWF0Y2hfZnVuY3Rpb24sIGJvb2wgbWF0Y2hfZmlsZW5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAobWF0Y2hfYnl0ZXMgXHUwMDI2XHUwMDI2IHRhZ19kYXRhLVx1MDAzZWNvdW50ZXIuYnl0ZXMgIT0gcHJvY2ZzX2VudHJ5LVx1MDAzZWNvdW50ZXIuYnl0ZXMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3NpemUgcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtYXRjaF9jYWxscyBcdTAwMjZcdTAwMjYgdGFnX2RhdGEtXHUwMDNlY291bnRlci5jYWxscyAhPSBwcm9jZnNfZW50cnktXHUwMDNlY291bnRlci5jYWxscykge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2FsbCBjb3VudCByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1hdGNoX2xpbmVubyBcdTAwMjZcdTAwMjYgdGFnX2RhdGEtXHUwMDNldGFnLmxpbmVubyAhPSBwcm9jZnNfZW50cnktXHUwMDNldGFnLmxpbmVubykge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bGluZW5vIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobWF0Y2hfZnVuY3Rpb24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHN0cm5jbXAodGFnX2RhdGEtXHUwMDNldGFnLmZ1bmN0aW9uLCBwcm9jZnNfZW50cnktXHUwMDNldGFnLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtmdW5jdGlvbiByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1hdGNoX2ZpbGVuYW1lIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzdHJuY21wKHRhZ19kYXRhLVx1MDAzZXRhZy5maWxlbmFtZSwgcHJvY2ZzX2VudHJ5LVx1MDAzZXRhZy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZmlsZW5hbWUgcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1hdGNoX2VudHJpZXMoY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxuJiM0MztcdFx0XHQgIGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzLFxuJiM0MztcdFx0XHQgIGJvb2wgbWF0Y2hfYnl0ZXMsIGJvb2wgbWF0Y2hfY2FsbHMsIGJvb2wgbWF0Y2hfbGluZW5vLFxuJiM0MztcdFx0XHQgIGJvb2wgbWF0Y2hfZnVuY3Rpb24sIGJvb2wgbWF0Y2hfZmlsZW5hbWUpXG4mIzQzO3tcbiYjNDM7XHRfX3U2NCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQgIT0gdGFncy1cdTAwM2Vjb3VudCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RW50cnkgY291bnQgbWlzbWF0Y2guIGlvY3RsIGVudHJpZXM6ICVsbHUsIHByb2MgZW50cmllczogJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHRhZ3MtXHUwMDNlY291bnQsIHByb2Nmc19lbnRyaWVzLVx1MDAzZWNvdW50KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIW1hdGNoX2VudHJ5KFx1MDAyNnByb2Nmc19lbnRyaWVzLVx1MDAzZXRhZ1tpXSwgXHUwMDI2dGFncy1cdTAwM2V0YWdbaV0sXG4mIzQzO1x0XHRcdFx0IG1hdGNoX2J5dGVzLCBtYXRjaF9jYWxscywgbWF0Y2hfbGluZW5vLFxuJiM0MztcdFx0XHRcdCBtYXRjaF9mdW5jdGlvbiwgbWF0Y2hfZmlsZW5hbWUpKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVsbHV0aCBlbnRyeSBkb2VzIG5vdCBtYXRjaC5cXG5cJiMzNDssIGkpO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbGVuID0gc3RybGVuKHN0cik7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlPSBBTExPQ0lORk9fU1RSX1NJWkUpXG4mIzQzO1x0XHRzdHIgJiM0Mzs9IChsZW4gLSBBTExPQ0lORk9fU1RSX1NJWkUpICYjNDM7IDE7XG4mIzQzO1x0cmV0dXJuIHN0cjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWxsb2NpbmZvX2NvcHlfc3RyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYylcbiYjNDM7e1xuJiM0MztcdHN0cm5jcHkoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUgLSAxKTtcbiYjNDM7XHRkZXN0W0FMTE9DSU5GT19TVFJfU0laRSAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyKVxuJiM0Mzt7XG4mIzQzO1x0RklMRSAqZnAgPSBmb3BlbihBTExPQ0lORk9fUFJPQywgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0Y2hhciBsaW5lW01BWF9MSU5FX0xFTl07XG4mIzQzO1x0aW50IG1hdGNoZXM7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSBwcm9jZnNfZW50cnk7XG4mIzQzO1xuJiM0MztcdGlmICghZnApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0ZhaWxlZCB0byBvcGVuIFwmIzM0OyBBTExPQ0lORk9fUFJPQyBcJiMzNDsgZm9yIHJlYWRpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdG1lbXNldChwcm9jZnNfZW50cmllcywgMCwgc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xuJiM0MztcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSBcdTAwMjZcdTAwMjYgcHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQgXHUwMDNjIFZFQ19NQVhfRU5UUklFUykge1xuJiM0MztcdFx0Y2hhciBmaWxlbmFtZVtNQVhfTElORV9MRU5dO1xuJiM0MztcdFx0Y2hhciBmdW5jdGlvbltNQVhfTElORV9MRU5dO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZwcm9jZnNfZW50cnksIDAsIHNpemVvZihwcm9jZnNfZW50cnkpKTtcbiYjNDM7XHRcdG1hdGNoZXMgPSBzc2NhbmYobGluZSwgXCYjMzQ7JWxsdSAlbGx1ICVbXjpdOiVsbHUgZnVuYzolc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LmNvdW50ZXIuYnl0ZXMsXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnByb2Nmc19lbnRyeS5jb3VudGVyLmNhbGxzLFxuJiM0MztcdFx0XHRcdCBmaWxlbmFtZSxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8sXG4mIzQzO1x0XHRcdFx0IGZ1bmN0aW9uKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWF0Y2hlcyAhPSA1KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5maWxlbmFtZSwgZmlsZW5hbWUpO1xuJiM0MztcdFx0YWxsb2NpbmZvX2NvcHlfc3RyKHByb2Nmc19lbnRyeS50YWcuZnVuY3Rpb24sIGZ1bmN0aW9uKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkge1xuJiM0MztcdFx0XHRpZiAoc3RybmNtcChwcm9jZnNfZW50cnkudGFnLmZpbGVuYW1lLFxuJiM0MztcdFx0XHRcdCAgICBmaWx0ZXItXHUwMDNlZmllbGRzLmZpbGVuYW1lLCBBTExPQ0lORk9fU1RSX1NJWkUpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT04pIHtcbiYjNDM7XHRcdFx0aWYgKHN0cm5jbXAocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbixcbiYjNDM7XHRcdFx0XHQgICAgZmlsdGVyLVx1MDAzZWZpZWxkcy5mdW5jdGlvbiwgQUxMT0NJTkZPX1NUUl9TSVpFKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykge1xuJiM0MztcdFx0XHRpZiAocHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8gIT0gZmlsdGVyLVx1MDAzZWZpZWxkcy5saW5lbm8pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkge1xuJiM0MztcdFx0XHRpZiAocHJvY2ZzX2VudHJ5LmNvdW50ZXIuYnl0ZXMgXHUwMDNjIGZpbHRlci1cdTAwM2VtaW5fc2l6ZSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSB7XG4mIzQzO1x0XHRcdGlmIChwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcyBcdTAwM2UgZmlsdGVyLVx1MDAzZW1heF9zaXplKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZwcm9jZnNfZW50cmllcy1cdTAwM2V0YWdbcHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQmIzQzOyYjNDM7XSwgXHUwMDI2cHJvY2ZzX2VudHJ5LFxuJiM0MztcdFx0ICAgICAgIHNpemVvZihwcm9jZnNfZW50cnkpKTtcbiYjNDM7XHR9XG4mIzQzO1x0ZmNsb3NlKGZwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGVudW0gaW9jdGxfcmV0IGdldF9maWx0ZXJlZF9pb2N0bF9lbnRyaWVzKHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzLFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdFx0XHRcdFx0IF9fdTY0IHN0YXJ0X3BvcylcbiYjNDM7e1xuJiM0MztcdGludCBmZCA9IG9wZW4oQUxMT0NJTkZPX1BST0MsIE9fUkRPTkxZKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtGYWlsZWQgdG8gb3BlbiBcJiMzNDsgQUxMT0NJTkZPX1BST0MgXCYjMzQ7IGZvciBJT0NUTFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gSU9DVExfRkFJTFVSRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBzdGFydF9jb250X2lkLCBlbmRfY29udF9pZDtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCBnZXRfYXRfcGFyYW1zO1xuJiM0MztcdGNvbnN0IGludCBtYXhfcmV0cmllcyA9IDEwO1xuJiM0MztcdGludCByZXRyeV9jb3VudCA9IDA7XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBtYXkgcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMgaWYgYSBrZXJuZWwgbW9kdWxlIHdhcyBsb2FkZWRcbiYjNDM7XHQgKiBiZXR3ZWVuIHRoZSB0d28gY2FsbHMuIElmIHRoYXQgaGFwcGVucywgdGhlIGRhdGEgZ2F0aGVyZWQgY2Fubm90IGJlIGNvbnNpZGVyZWQgY29uc2lzdGVudFxuJiM0MztcdCAqIGFuZCBoZW5jZSBuZWVkcyB0byBiZSBmZXRjaGVkIGFnYWluIHRvIGF2b2lkIGZsYWtpbmVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFx1MDAyNnN0YXJ0X2NvbnRfaWQpKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQodGFncywgMCwgc2l6ZW9mKCp0YWdzKSk7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2Z2V0X2F0X3BhcmFtcywgMCwgc2l6ZW9mKGdldF9hdF9wYXJhbXMpKTtcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZnZXRfYXRfcGFyYW1zLmZpbHRlciwgZmlsdGVyLCBzaXplb2YoKmZpbHRlcikpO1xuJiM0MztcdFx0Z2V0X2F0X3BhcmFtcy5wb3MgPSBzdGFydF9wb3M7XG4mIzQzO1x0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2F0KGZkLCBcdTAwMjZnZXRfYXRfcGFyYW1zKSkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDthbGxvY2luZm9fZ2V0X2F0IGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IElPQ1RMX0ZBSUxVUkU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWVtY3B5KFx1MDAyNnRhZ3MtXHUwMDNldGFnW3RhZ3MtXHUwMDNlY291bnQmIzQzOyYjNDM7XSwgXHUwMDI2Z2V0X2F0X3BhcmFtcy5kYXRhLCBzaXplb2YoZ2V0X2F0X3BhcmFtcy5kYXRhKSk7XG4mIzQzO1xuJiM0MztcdFx0d2hpbGUgKHRhZ3MtXHUwMDNlY291bnQgXHUwMDNjIFZFQ19NQVhfRU5UUklFUyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgXHUwMDI2dGFncy1cdTAwM2V0YWdbdGFncy1cdTAwM2Vjb3VudF0pID09IDApXG4mIzQzO1x0XHRcdHRhZ3MtXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChmZCwgXHUwMDI2ZW5kX2NvbnRfaWQpKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhcnRfY29udF9pZC5pZCA9PSBlbmRfY29udF9pZC5pZCkge1xuJiM0MztcdFx0XHRzdGF0dXMgPSBJT0NUTF9TVUNDRVNTO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7YWxsb2NpbmZvX2dldF9jb250ZW50X2lkIG1pc21hdGNoLCByZXRyeWluZy4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHN0YXR1cyA9IElPQ1RMX0lOVkFMSURfREFUQTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IHdoaWxlIChzdGF0dXMgPT0gSU9DVExfSU5WQUxJRF9EQVRBIFx1MDAyNlx1MDAyNiByZXRyeV9jb3VudCYjNDM7JiM0MzsgXHUwMDNjIG1heF9yZXRyaWVzKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdHJldHVybiBzdGF0dXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnVuX2ZpbHRlcl90ZXN0KGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyA9IG1hbGxvYyhzaXplb2YoKnRhZ3MpKTtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqcHJvY2ZzX2VudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xuJiM0MztcdGludCBpb2N0bF9zdGF0dXM7XG4mIzQzO1x0aW50IHJldCA9IEtTRlRfUEFTUztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0YWdzIHx8ICFwcm9jZnNfZW50cmllcykge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBmaWx0ZXIpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcJiMzNDsgQUxMT0NJTkZPX1BST0MgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IEtTRlRfU0tJUDtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtObyBlbnRyaWVzIGZvdW5kIGluIFwmIzM0OyBBTExPQ0lORk9fUFJPQyBcJiMzNDssIHNraXBwaW5nIHRlc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9TS0lQO1xuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgZmlsdGVyLCAwKTtcbiYjNDM7XHRpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7VHJvdWJsZSByZXRyaWV2aW5nIHZhbGlkIElPQ1RMIGVudHJpZXMsIHNraXBwaW5nLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfRkFJTFVSRSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RXJyb3IgcmV0cmlldmluZyBJT0NUTCBlbnRyaWVzLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIW1hdGNoX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIHRhZ3MsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpXG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1xuJiM0MztleGl0OlxuJiM0MztcdGZyZWUodGFncyk7XG4mIzQzO1x0ZnJlZShwcm9jZnNfZW50cmllcyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2ZpbGVuYW1lX2ZpbHRlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuJiM0MztcdGNvbnN0IGNoYXIgKnRhcmdldF9maWxlbmFtZSA9IFwmIzM0O21tL21lbW9yeS5jXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7XG4mIzQzO1x0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FO1xuJiM0MztcdHN0cm5jcHkoZmlsdGVyLmZpZWxkcy5maWxlbmFtZSwgdGFyZ2V0X2ZpbGVuYW1lLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnVuX2ZpbHRlcl90ZXN0KFx1MDAyNmZpbHRlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGVzdF9mdW5jdGlvbl9maWx0ZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbiYjNDM7XHRjb25zdCBjaGFyICp0YXJnZXRfZnVuY3Rpb24gPSBcJiMzNDtkdXBfbW1cJiMzNDs7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTtcbiYjNDM7XHRmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT047XG4mIzQzO1x0c3RybmNweShmaWx0ZXIuZmllbGRzLmZ1bmN0aW9uLCB0YXJnZXRfZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fZmlsdGVyX3Rlc3QoXHUwMDI2ZmlsdGVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X3NpemVfZmlsdGVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzID0gbWFsbG9jKHNpemVvZigqcHJvY2ZzX2VudHJpZXMpKTtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XG4mIzQzO1x0aW50IHJldCA9IEtTRlRfUEFTUztcbiYjNDM7XHRfX3U2NCB0YXJnZXRfc2l6ZSwgaSwgcG9zO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgKmZvdW5kX3RhZyA9IE5VTEw7XG4mIzQzO1x0Y29uc3QgY2hhciAqdGFyZ2V0X2Z1bmN0aW9uID0gXCYjMzQ7ZG9faW5pdF9tb2R1bGVcJiMzNDs7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHN0YXJ0X2NvbnRfaWQsIGVuZF9jb250X2lkO1xuJiM0MztcdGludCByZXRyeSA9IDA7XG4mIzQzO1x0Y29uc3QgaW50IG1heF9yZXRyaWVzID0gMTA7XG4mIzQzO1xuJiM0MztcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9GQUlMO1xuJiM0MztcdFx0Z290byBmcmVlbWVtO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKEFMTE9DSU5GT19QUk9DLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtGYWlsZWQgdG8gb3BlbiBcJiMzNDsgQUxMT0NJTkZPX1BST0MgXCYjMzQ7OiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRcdGdvdG8gZnJlZW1lbTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGZvdW5kX3RhZyA9IE5VTEw7XG4mIzQzO1x0XHRwb3MgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChmZCwgXHUwMDI2c3RhcnRfY29udF9pZCkpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7YWxsb2NpbmZvX2dldF9jb250ZW50X2lkIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTtcbiYjNDM7XHRcdGZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTjtcbiYjNDM7XHRcdHN0cm5jcHkoZmlsdGVyLmZpZWxkcy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIFx1MDAyNmZpbHRlcikpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RXJyb3IgcmV0cmlldmluZyBlbnRyaWVzIGZyb20gXCYjMzQ7IEFMTE9DSU5GT19QUk9DIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0Z1bmN0aW9uICVzIG5vdCBmb3VuZCBpbiBwcm9jZnNcXG5cJiMzNDssIHRhcmdldF9mdW5jdGlvbik7XG4mIzQzO1x0XHRcdHJldCA9IEtTRlRfU0tJUDtcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHRhcmdldF9zaXplID0gcHJvY2ZzX2VudHJpZXMtXHUwMDNldGFnWzBdLmNvdW50ZXIuYnl0ZXM7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuJiM0MztcdFx0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFIHwgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFO1xuJiM0MztcdFx0ZmlsdGVyLm1pbl9zaXplID0gdGFyZ2V0X3NpemU7XG4mIzQzO1x0XHRmaWx0ZXIubWF4X3NpemUgPSB0YXJnZXRfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoMSkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCBnZXRfYXRfcGFyYW1zO1xuJiM0MztcbiYjNDM7XHRcdFx0bWVtc2V0KFx1MDAyNmdldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7XG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZnZXRfYXRfcGFyYW1zLmZpbHRlciwgXHUwMDI2ZmlsdGVyLCBzaXplb2YoZmlsdGVyKSk7XG4mIzQzO1x0XHRcdGdldF9hdF9wYXJhbXMucG9zID0gcG9zO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKF9fYWxsb2NpbmZvX2dldF9hdChmZCwgXHUwMDI2Z2V0X2F0X3BhcmFtcykpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHR0YWdzLVx1MDAzZWNvdW50ID0gMDtcbiYjNDM7XHRcdFx0bWVtY3B5KFx1MDAyNnRhZ3MtXHUwMDNldGFnW3RhZ3MtXHUwMDNlY291bnQmIzQzOyYjNDM7XSwgXHUwMDI2Z2V0X2F0X3BhcmFtcy5kYXRhLFxuJiM0MztcdFx0XHQgICAgICAgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpO1xuJiM0MztcbiYjNDM7XHRcdFx0d2hpbGUgKHRhZ3MtXHUwMDNlY291bnQgXHUwMDNjIFZFQ19NQVhfRU5UUklFUyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICAgIF9fYWxsb2NpbmZvX2dldF9uZXh0KGZkLCBcdTAwMjZ0YWdzLVx1MDAzZXRhZ1t0YWdzLVx1MDAzZWNvdW50XSkgPT0gMClcbiYjNDM7XHRcdFx0XHR0YWdzLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRhZ3MtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdFx0aWYgKHN0cmNtcCh0YWdzLVx1MDAzZXRhZ1tpXS50YWcuZnVuY3Rpb24sIHRhcmdldF9mdW5jdGlvbikgPT0gMCkge1xuJiM0MztcdFx0XHRcdFx0Zm91bmRfdGFnID0gXHUwMDI2dGFncy1cdTAwM2V0YWdbaV07XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChmb3VuZF90YWcgfHwgdGFncy1cdTAwM2Vjb3VudCBcdTAwM2MgVkVDX01BWF9FTlRSSUVTKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0cG9zICYjNDM7PSB0YWdzLVx1MDAzZWNvdW50O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChmZCwgXHUwMDI2ZW5kX2NvbnRfaWQpKSB7XG4mIzQzO1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhcnRfY29udF9pZC5pZCA9PSBlbmRfY29udF9pZC5pZClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7TW9kdWxlIGxvYWQgZGV0ZWN0ZWQgZHVyaW5nIHNpemUgdmVyaWZpY2F0aW9uLCByZXRyeWluZy4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0fSB3aGlsZSAocmV0cnkmIzQzOyYjNDM7IFx1MDAzYyBtYXhfcmV0cmllcyk7XG4mIzQzO1xuJiM0MztcdGlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkIFx1MDAyNlx1MDAyNiAhZm91bmRfdGFnKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFbnRyeSB3aXRoIGZ1bmN0aW9uICVzIG5vdCBmb3VuZCBpbiBJT0NUTCByZXN1bHRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgdGFyZ2V0X2Z1bmN0aW9uKTtcbiYjNDM7XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0YXJ0X2NvbnRfaWQuaWQgIT0gZW5kX2NvbnRfaWQuaWQpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0ZhaWxlZCB0byBtYXRjaCBjb250ZW50X2lkcyBmb3IgcHJvY2ZzIGFuZCBJT0NUTCwgc2tpcHBpbmcuLi5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9TS0lQO1xuJiM0MztcdH0gZWxzZSBpZiAoZm91bmRfdGFnIFx1MDAyNlx1MDAyNiBmb3VuZF90YWctXHUwMDNlY291bnRlci5ieXRlcyAhPSB0YXJnZXRfc2l6ZSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7SU9DVEwgZW50cnkgc2l6ZSAlbGx1IGRvZXMgbm90IG1hdGNoIHRhcmdldCBzaXplICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBmb3VuZF90YWctXHUwMDNlY291bnRlci5ieXRlcywgdGFyZ2V0X3NpemUpO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9GQUlMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2V4aXQ6XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztmcmVlbWVtOlxuJiM0MztcdGZyZWUodGFncyk7XG4mIzQzO1x0ZnJlZShwcm9jZnNfZW50cmllcyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2xpbmVub19maWx0ZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzID0gbWFsbG9jKHNpemVvZigqdGFncykpO1xuJiM0MztcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuJiM0MztcdGVudW0gaW9jdGxfcmV0IGlvY3RsX3N0YXR1cztcbiYjNDM7XHRpbnQgcmV0ID0gS1NGVF9QQVNTO1xuJiM0MztcdF9fdTY0IHRhcmdldF9saW5lbm8sIGk7XG4mIzQzO1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqdGFyZ2V0X3RhZztcbiYjNDM7XHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gS1NGVF9GQUlMO1xuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBcdTAwMjZmaWx0ZXIpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcJiMzNDsgQUxMT0NJTkZPX1BST0MgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IEtTRlRfRkFJTDtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHByb2Nmc19lbnRyaWVzLVx1MDAzZWNvdW50ID09IDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0NvdWxkIG5vdCByZXRyaWV2ZSBwcm9jZnMgZW50cmllc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgZGVwZW5kIG9uIHRoZSBwcm9jZnMgcmVzdWx0cyB0byBkZXRlcm1pbmUgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgZmlsdGVyIGJlZm9yZVxuJiM0MztcdCAqIG1ha2luZyB0aGUgaW9jdGwgcXVlcnkuIEhlbmNlLCB3ZSBjYW5ub3QgcmV1c2UgcnVuX2ZpbHRlcl90ZXN0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0dGFyZ2V0X3RhZyA9IFx1MDAyNnByb2Nmc19lbnRyaWVzLVx1MDAzZXRhZ1swXTtcbiYjNDM7XHR0YXJnZXRfbGluZW5vID0gdGFyZ2V0X3RhZy1cdTAwM2V0YWcubGluZW5vO1xuJiM0MztcbiYjNDM7XHRmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PO1xuJiM0MztcdGZpbHRlci5maWVsZHMubGluZW5vID0gdGFyZ2V0X2xpbmVubztcbiYjNDM7XG4mIzQzO1x0aW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgXHUwMDI2ZmlsdGVyLCAwKTtcbiYjNDM7XHRpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7VHJvdWJsZSByZXRyaWV2aW5nIHZhbGlkIElPQ1RMIGVudHJpZXMsIHNraXBwaW5nLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfRkFJTFVSRSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RXJyb3IgcmV0cmlldmluZyBJT0NUTCBlbnRyaWVzLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWdzLVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRhZ3MtXHUwMDNldGFnW2ldLnRhZy5saW5lbm8gIT0gdGFyZ2V0X2xpbmVubykge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtJT0NUTCBlbnRyeSAlbGx1IGhhcyBpbmNvcnJlY3QgbGluZW5vICVsbHUuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBpLCB0YWdzLVx1MDAzZXRhZ1tpXS50YWcubGluZW5vKTtcbiYjNDM7XHRcdFx0cmV0ID0gS1NGVF9GQUlMO1xuJiM0MztcdFx0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0cm5jbXAodGFncy1cdTAwM2V0YWdbaV0udGFnLmZ1bmN0aW9uLCB0YXJnZXRfdGFnLVx1MDAzZXRhZy5mdW5jdGlvbixcbiYjNDM7XHRcdFx0ICAgIEFMTE9DSU5GT19TVFJfU0laRSkgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBzdHJuY21wKHRhZ3MtXHUwMDNldGFnW2ldLnRhZy5maWxlbmFtZSwgdGFyZ2V0X3RhZy1cdTAwM2V0YWcuZmlsZW5hbWUsXG4mIzQzO1x0XHRcdCAgICBBTExPQ0lORk9fU1RSX1NJWkUpID09IDApXG4mIzQzO1x0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZm91bmQpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O09yaWdpbmFsIHByb2NmcyBlbnRyeSBub3QgZm91bmQgaW4gSU9DVEwgbGluZW5vIGZpbHRlciByZXN1bHRzLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXhpdDpcbiYjNDM7XHRmcmVlKHRhZ3MpO1xuJiM0MztcdGZyZWUocHJvY2ZzX2VudHJpZXMpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRrc2Z0X3NldF9wbGFuKDQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB0ZXN0X2ZpbGVuYW1lX2ZpbHRlcigpO1xuJiM0MztcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0O1NraXBwaW5nIHRlc3RfZmlsZW5hbWVfZmlsdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsIFwmIzM0O3Rlc3RfZmlsZW5hbWVfZmlsdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdGVzdF9mdW5jdGlvbl9maWx0ZXIoKTtcbiYjNDM7XHRpZiAocmV0ID09IEtTRlRfU0tJUClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtTa2lwcGluZyB0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxcblwmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdChyZXQgPT0gS1NGVF9QQVNTLCBcJiMzNDt0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRlc3Rfc2l6ZV9maWx0ZXIoKTtcbiYjNDM7XHRpZiAocmV0ID09IEtTRlRfU0tJUClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtTa2lwcGluZyB0ZXN0X3NpemVfZmlsdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsIFwmIzM0O3Rlc3Rfc2l6ZV9maWx0ZXJcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB0ZXN0X2xpbmVub19maWx0ZXIoKTtcbiYjNDM7XHRpZiAocmV0ID09IEtTRlRfU0tJUClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtTa2lwcGluZyB0ZXN0X2xpbmVub19maWx0ZXJcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXCYjMzQ7dGVzdF9saW5lbm9fZmlsdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a3NmdF9maW5pc2hlZCgpO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9fY29tcGF0X2lvY3RsJiMzNDssCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X2F0JiMzNDssCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bF9nZXRfbmV4dCYjMzQ7LAogICAgJiMzNDttYXRjaGVzX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2dldF9jb250ZW50X2lkJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfZ2V0X2NvdW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9jdGwgaW50ZXJmYWNlIGZvciBgL3Byb2MvYWxsb2NpbmZvYCB0byBhbGxvdyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYW5kIGZpbHRlcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgZGF0YS4gVGhpcyBpcyBhIG5ldyB1c2Vyc3BhY2UtZmFjaW5nIEFQSSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGhhbmRsZXMgaW52YWxpZCBpbnB1dHMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBjb25jdXJyZW5jeSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyOTBlZDg0NmYxZDE1YzdlNDFjY2Y0NzhmZWU2OTYwMjE1YTRlYTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDAyOjI4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdAppbmRleCA1Mzg5ZDI0MTE3NmE4YS4uYzNhMjg0Njc5NTVmM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0CkBAIC00Niw2ICYjNDM7NDYsMTEgQEAgc3lzY3RsOgogUnVudGltZSBpbmZvOgogICAvcHJvYy9hbGxvY2luZm8KIAomIzQzOyAgUHJvZmlsaW5nIGRhdGEgY2FuIGJlIHJldHJpZXZlZCBlaXRoZXIgYnkgcmVhZGluZyBgL3Byb2MvYWxsb2NpbmZvYCBkaXJlY3RseSBhcwomIzQzOyAgdGV4dCBvciBwcm9ncmFtbWF0aWNhbGx5IHZpYSBgaW9jdGwoKWAgY2FsbHMgZGVmaW5lZCBpbiBgJmx0O3VhcGkvbGludXgvYWxsb2NfdGFnLmgmZ3Q7YC4KJiM0MzsgIFRoZSBpb2N0bCBpbnRlcmZhY2Ugc3VwcG9ydHMgc3RydWN0dXJlZCBiaW5hcnkgZGF0YSBleHRyYWN0aW9uIGFzIHdlbGwgYXMgZmlsdGVyaW5nCiYjNDM7ICBieSBtb2R1bGUgbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUgbnVtYmVyLCBhY2N1cmFjeSwgb3IgYWxsb2NhdGlvbiBzaXplIGxpbWl0cy4KJiM0MzsKIEV4YW1wbGUgb3V0cHV0OjoKIAogICByb290QG1vcmlhLWt2bTp+IyBzb3J0IC1nIC9wcm9jL2FsbG9jaW5mb3x0YWlsfG51bWZtdCAtLXRvPWllYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QgYi9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdAppbmRleCAzZjBlZjFlMjdlYjA3ZC4uMmZjNTMwOTM3NTJkMTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CkBAIC0zNDYsNiAmIzQzOzM0Niw4IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0O21haWx0bzpsdXptYXhpbWlsaWFuQGdtYWlsLmNvbSZndDsKIDB4QTUgIDIwLTJGICBsaW51eC9zdXJmYWNlX2FnZ3JlZ2F0b3IvZHR4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IFN1cmZhY2UgRFRYIGRyaXZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7bWFpbHRvOmx1em1heGltaWxpYW5AZ21haWwuY29tJmd0OwomIzQzOzB4QTYgIDAwLTBGICB1YXBpL2xpbnV4L2FsbG9jX3RhZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7bWFpbHRvOnN1cmVuYkBnb29nbGUuY29tJmd0OwogMHhBQSAgMDAtM0YgIGxpbnV4L3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaAogMHhBQiAgMDAtMUYgIGxpbnV4L25iZC5oCiAweEFDICAwMC0xRiAgbGludXgvcmF3LmgKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMjljMzAyZTljMTdiYTMuLjg2N2Q0YWQ1OGZiNDIyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTY5MzcsNyAmIzQzOzE2OTM3LDkgQEAgUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QKIEY6CWluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgKIEY6CWluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaAomIzQzO0Y6CWluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaAogRjoJbW0vYWxsb2NfdGFnLmMKJiM0MztGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvCiAKIE1FTU9SWSBNQU5BR0VNRU5UIC0gQkFMTE9PTgogTToJQW5kcmV3IE1vcnRvbiAmbHQ7YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZyZndDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29kZXRhZy5oIGIvaW5jbHVkZS9saW51eC9jb2RldGFnLmgKaW5kZXggZGRhZTc0ODRjYTQ1NmMuLmEyNWEwODVjMmRmMTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaApAQCAtNzcsNiAmIzQzOzc3LDggQEAgc3RydWN0IGNvZGV0YWdfaXRlcmF0b3Igewogdm9pZCBjb2RldGFnX2xvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTsKIGJvb2wgY29kZXRhZ190cnlsb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiB2b2lkIGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiYjNDM7dW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiYjNDM7dW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7CiBzdHJ1Y3QgY29kZXRhZyAqY29kZXRhZ19uZXh0X2N0KHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yICppdGVyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNzBmNjkzYjE4MjIwNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaApAQCAtMCwwICYjNDM7MSw5OSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovCiYjNDM7LyoKJiM0MzsgKiBhbGxvY190YWcgSU9DVEwgQVBJIGRlZmluaXRpb24KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUsIExMQy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQomIzQzOyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiYjNDM7ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfVUFQSV9BTExPQ19UQUdfSAomIzQzOyNkZWZpbmUgX1VBUElfQUxMT0NfVEFHX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlCiYjNDM7ICogd2hlbiBmaWx0ZXJpbmcgYnkgdGhlc2UgY3JpdGVyaWEsIHdlIGNvbXBhcmUgdGhlIGxhc3QgNjQgY2hhcmFjdGVycyB0bwomIzQzOyAqIG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIG5hbWUgY29sbGlzaW9ucwomIzQzOyAqLwomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX1NUUl9TSVpFCTY0CiYjNDM7CiYjNDM7c3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHsKJiM0MzsJX191NjQgaWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB7CiYjNDM7CS8qIExvbmdlciBuYW1lcyBhcmUgdHJpbW1lZCAqLwomIzQzOwljaGFyIG1vZG5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTsKJiM0MzsJY2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdOwomIzQzOwljaGFyIGZpbGVuYW1lW0FMTE9DSU5GT19TVFJfU0laRV07CiYjNDM7CV9fdTY0IGxpbmVubzsKJiM0MzsJLyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovCiYjNDM7CV9fdTY0IGluYWNjdXJhdGU7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBUaGUgYWxpZ25tZW50IGVuc3VyZXMgMzItYml0IGNvbXBhdGlibGUgaW50ZXJmYWNlcyBhcmUgbm90IGJyb2tlbiAqLwomIzQzO3N0cnVjdCBhbGxvY2luZm9fY291bnRlciB7CiYjNDM7CV9fdTY0IGJ5dGVzOwomIzQzOwlfX3U2NCBjYWxsczsKJiM0MzsJX191OCBhY2N1cmF0ZTsKJiM0Mzt9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKJiM0MzsKJiM0MztzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb190YWcgdGFnOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX2NvdW50ZXIgY291bnRlcjsKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfRlVOQ1RJT04sCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfRklMRU5BTUUsCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfTElORU5PLAomIzQzOwlBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUsCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUsCiYjNDM7CUFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsCiYjNDM7CV9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUID0gQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRQomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTU9ETkFNRQkJKDEgJmx0OyZsdDsgQUxMT0NJTkZPX0ZJTFRFUl9NT0ROQU1FKQomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OCQkoMSAmbHQ7Jmx0OyBBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OKQomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FCQkoMSAmbHQ7Jmx0OyBBTExPQ0lORk9fRklMVEVSX0ZJTEVOQU1FKQomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTwkJKDEgJmx0OyZsdDsgQUxMT0NJTkZPX0ZJTFRFUl9MSU5FTk8pCiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURQkoMSAmbHQ7Jmx0OyBBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUpCiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUJCSgxICZsdDsmbHQ7IEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpCiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUJCSgxICZsdDsmbHQ7IEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUpCiYjNDM7CiYjNDM7I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tTIFwKJiM0MzsJKCgxICZsdDsmbHQ7IChfX0FMTE9DSU5GT19GSUxURVJfTEFTVCAmIzQzOyAxKSkgLSAxKQomIzQzOwomIzQzO3N0cnVjdCBhbGxvY2luZm9fZmlsdGVyIHsKJiM0MzsJX191NjQgbWFzazsgLyogYml0bWFzayBvZiB0aGUgZmlsdGVyIGZpZWxkcyB1c2VkICovCiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnIGZpZWxkczsKJiM0MzsJX191NjQgbWluX3NpemU7CiYjNDM7CV9fdTY0IG1heF9zaXplOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFsbG9jaW5mb19nZXRfYXQgewomIzQzOwkvKiBpbnB1dHMgKi8KJiM0MzsJX191NjQgcG9zOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7CiYjNDM7CS8qIG91dHB1dCAqLwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIGRhdGE7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQJMAomIzQzOyNkZWZpbmUgX0FMTE9DSU5GT19JT0NfR0VUX0FUCQkxCiYjNDM7I2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVAkJMgomIzQzOwomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0lPQ19CQVNFCQkweEE2CiYjNDM7I2RlZmluZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQJX0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQsCVwKJiM0MzsJCQkJCSAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKQomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX0lPQ19HRVRfQVQJCV9JT1dSKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfR0VUX0FULAlcCiYjNDM7CQkJCQkgICAgICBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCkKJiM0MzsjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX05FWFQJCV9JT1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVCwJXAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhKQomIzQzOwomIzQzOyNlbmRpZiAvKiBfVUFQSV9BTExPQ19UQUdfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2NvZGV0YWcuYyBiL2xpYi9jb2RldGFnLmMKaW5kZXggNDAwMWE3ZWE2Njc1NDIuLmE5Y2RhNGM5NjJhMzAzIDEwMDY0NAotLS0gYS9saWIvY29kZXRhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9jb2RldGFnLmMKQEAgLTE5LDYgJiM0MzsxOSw4IEBAIHN0cnVjdCBjb2RldGFnX3R5cGUgewogCXN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyBkZXNjOwogCS8qIGdlbmVyYXRlcyB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIGZvciBtb2R1bGUgbG9hZCAqLwogCXVuc2lnbmVkIGxvbmcgbmV4dF9tb2Rfc2VxOwomIzQzOwkvKiBidW1wZWQgb24gZXZlcnkgbW9kdWxlIGxvYWQgYW5kIHVubG9hZCAqLwomIzQzOwl1bnNpZ25lZCBsb25nIGNvbnRlbnRfaWQ7CiB9OwogCiBzdHJ1Y3QgY29kZXRhZ19yYW5nZSB7CkBAIC01MCw2ICYjNDM7NTIsMjAgQEAgdm9pZCBjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpCiAJdXBfcmVhZCgmYW1wO2N0dHlwZS0mZ3Q7bW9kX2xvY2spOwogfQogCiYjNDM7dW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtjdHR5cGUtJmd0O21vZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGN0dHlwZS0mZ3Q7Y29udGVudF9pZDsKJiM0Mzt9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtjdHR5cGUtJmd0O21vZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGN0dHlwZS0mZ3Q7Y291bnQ7CiYjNDM7fQomIzQzOwogc3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgY29kZXRhZ19nZXRfY3RfaXRlcihzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpCiB7CiAJc3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlciA9IHsKQEAgLTIwNCw2ICYjNDM7MjIwLDcgQEAgc3RhdGljIGludCBjb2RldGFnX21vZHVsZV9pbml0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSwgc3RydWN0IG1vZHVsZSAqbW9kKQogCiAJZG93bl93cml0ZSgmYW1wO2N0dHlwZS0mZ3Q7bW9kX2xvY2spOwogCWNtb2QtJmd0O21vZF9zZXEgPSAmIzQzOyYjNDM7Y3R0eXBlLSZndDtuZXh0X21vZF9zZXE7CiYjNDM7CSYjNDM7JiM0MztjdHR5cGUtJmd0O2NvbnRlbnRfaWQ7CiAJbW9kX2lkID0gaWRyX2FsbG9jKCZhbXA7Y3R0eXBlLSZndDttb2RfaWRyLCBjbW9kLCAwLCAwLCBHRlBfS0VSTkVMKTsKIAlpZiAobW9kX2lkICZndDs9IDApIHsKIAkJaWYgKGN0dHlwZS0mZ3Q7ZGVzYy5tb2R1bGVfbG9hZCkgewpAQCAtMzY4LDYgJiM0MzszODUsNyBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpCiAJCQljdHR5cGUtJmd0O2NvdW50IC09IHJhbmdlX3NpemUoY3R0eXBlLCAmYW1wO2Ntb2QtJmd0O3JhbmdlKTsKIAkJCWlkcl9yZW1vdmUoJmFtcDtjdHR5cGUtJmd0O21vZF9pZHIsIG1vZF9pZCk7CiAJCQlrZnJlZShjbW9kKTsKJiM0MzsJCQkmIzQzOyYjNDM7Y3R0eXBlLSZndDtjb250ZW50X2lkOwogCQl9CiAJCXVwX3dyaXRlKCZhbXA7Y3R0eXBlLSZndDttb2RfbG9jayk7CiAJCWlmIChmb3VuZCAmYW1wOyZhbXA7IGN0dHlwZS0mZ3Q7ZGVzYy5mcmVlX3NlY3Rpb25fbWVtKQpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuYwppbmRleCBkOWJlMWNmNTE4N2Q5Ny4uMzJhYzA2NzRkOGJmNmQgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC01LDYgJiM0Mzs1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rYWxsc3ltcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfZXh0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGdhbGxvY190YWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9jX2ZzLmgmZ3Q7CkBAIC0xNCw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ19jaG9pY2VzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ttZW1sZWFrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvYWxsb2NfdGFnLmgmZ3Q7CiAKICNkZWZpbmUgQUxMT0NJTkZPX0ZJTEVfTkFNRQkJJiMzNDthbGxvY2luZm8mIzM0OwogI2RlZmluZSBNT0RVTEVfQUxMT0NfVEFHX1ZNQVBfU0laRQkoMTAwMDAwVUwgKiBzaXplb2Yoc3RydWN0IGFsbG9jX3RhZykpCkBAIC00Nyw2ICYjNDM7NDksMTEgQEAgc3RydWN0IGFsbG9jaW5mb19wcml2YXRlIHsKIAlzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyOwogCXN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIHJlcG9ydGVkX2l0ZXI7CiAJYm9vbCBwcmludF9oZWFkZXI7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJLyogaW9jdGwgdXNlcyBhIHNlcGFyYXRlIGl0ZXJhdG9yIG5vdCB0byBpbnRlcmZlcmUgd2l0aCByZWFkcyAqLwomIzQzOwlzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpb2N0bF9pdGVyOwomIzQzOwlib29sIHBvc2l0aW9uZWQ7IC8qIHNlcV9vcGVuX3ByaXZhdGUoKSBzZXRzIHRvIDAgKi8KJiM0MzsJc3RydWN0IG11dGV4IGlvY3RsX2xvY2s7CiB9OwogCiBzdGF0aWMgdm9pZCAqYWxsb2NpbmZvX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCkBAIC0xMzAsNiAmIzQzOzEzNywzNDAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBhbGxvY2luZm9fc2VxX29wID0gewogCS5zaG93CT0gYWxsb2NpbmZvX3Nob3csCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBJbml0aWFsaXplcyBzZXFfZmlsZSBvcGVyYXRpb25zIGFuZCBhbGxvY2F0ZXMgcHJpdmF0ZSBzdGF0ZSB3aGVuIG9wZW5pbmcKJiM0MzsgKiB0aGUgL3Byb2MvYWxsb2NpbmZvIHByb2NmcyBlbnRyeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFsbG9jaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmYW1wO2FsbG9jaW5mb19zZXFfb3AsCiYjNDM7CQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUpKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJCXN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSAqcHJpdiA9IG0tJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7CQltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7aW9jdGxfbG9jayk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDbGVhbnMgdXAgdGhlIHNlcV9maWxlIHN0YXRlIGFuZCBmcmVlcyB1cCB0aGUgcHJpdmF0ZSBzdGF0ZSBhbGxvY2F0ZWQgaW4KJiM0MzsgKiBhbGxvY2luZm9fb3BlbigpIHdoZW4gY2xvc2luZyB0aGUgL3Byb2MvYWxsb2NpbmZvIGZpbGUgZGVzY3JpcHRvci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFsbG9jaW5mb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXYgPSBtLSZndDtwcml2YXRlOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7cHJpdi0mZ3Q7aW9jdGxfbG9jayk7CiYjNDM7CXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3VmZml4IG9mIGEgc3RyaW5nIHNvIHRoYXQgaXRzIGxlbmd0aCBmaXRzIHdpdGhpbgomIzQzOyAqIEFMTE9DSU5GT19TVFJfU0laRSwgcHJlc2VydmluZyB0aGUgdHJhaWxpbmcgY2hhcmFjdGVycy4KJiM0MzsgKiBGdW5jdGlvbiwgZmlsZSBhbmQgbW9kdWxlIG5hbWVzIG9mdGVuIGhhdmUgdGhlIHNhbWUgcHJlZml4ZXMsIHRoZXJlZm9yZQomIzQzOyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG8KJiM0MzsgKiBtaW5pbWl6ZSB0aGUgY2hhbmNlcyBvZiBuYW1lIGNvbGxpc2lvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpCiYjNDM7ewomIzQzOwlzaXplX3QgbGVuID0gc3RybGVuKHN0cik7CiYjNDM7CiYjNDM7CS8qIEtlZXAgYW4gZXh0cmEgc3BhY2UgZm9yIHRoZSB0cmFpbGluZyBOVUxMLiAqLwomIzQzOwlpZiAobGVuICZndDs9IEFMTE9DSU5GT19TVFJfU0laRSkKJiM0MzsJCXN0ciAmIzQzOz0gKGxlbiAtIEFMTE9DSU5GT19TVFJfU0laRSkgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIHN0cjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ29weSBhIHN0cmluZyBhbmQgdHJpbSBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgaXQmIzM5O3MgdG9vIGxvbmcgKi8KJiM0MztzdGF0aWMgdm9pZCBhbGxvY2luZm9fY29weV9zdHIoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQomIzQzO3sKJiM0MzsJc3Ryc2NweV9wYWQoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCBvbmx5IGNvbnNpZGVyIHRoZSB0cmltbWVkIHN1ZmZpeCBpZiBzMSBpcyB0b28gbG9uZyAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2NtcF9zdHIoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICp0ZW1wbGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdHJuY21wKGFsbG9jaW5mb19zdHIoc3RyKSwgdGVtcGxhdGUsIEFMTE9DSU5GT19TVFJfU0laRSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEZldGNoIHRoZSBwZXItQ1BVIGNvdW50ZXJzICovCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhzdHJ1Y3QgY29kZXRhZyAqY3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gYWxsb2NfdGFnX3JlYWQoY3RfdG9fYWxsb2NfdGFnKGN0KSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUG9wdWxhdGVzIHRoZSBVQVBJIGFsbG9jaW5mb190YWdfZGF0YSBzdHJ1Y3R1cmUgd2l0aCBhY3RpdmUgcnVudGltZQomIzQzOyAqIHByb2ZpbGluZyBjb3VudGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgZ2l2ZW4ga2VybmVsIGNvZGV0YWcuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYWxsb2NpbmZvX3RvX3BhcmFtcyhzdHJ1Y3QgY29kZXRhZyAqY3QsCiYjNDM7CQkJCXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgKmRhdGEsCiYjNDM7CQkJCXN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgKmNvdW50ZXJzKQomIzQzO3sKJiM0MzsJaWYgKGN0LSZndDttb2RuYW1lKQomIzQzOwkJYWxsb2NpbmZvX2NvcHlfc3RyKGRhdGEtJmd0O3RhZy5tb2RuYW1lLCBjdC0mZ3Q7bW9kbmFtZSk7CiYjNDM7CWVsc2UKJiM0MzsJCWRhdGEtJmd0O3RhZy5tb2RuYW1lWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwlhbGxvY2luZm9fY29weV9zdHIoZGF0YS0mZ3Q7dGFnLmZ1bmN0aW9uLCBjdC0mZ3Q7ZnVuY3Rpb24pOwomIzQzOwlhbGxvY2luZm9fY29weV9zdHIoZGF0YS0mZ3Q7dGFnLmZpbGVuYW1lLCBjdC0mZ3Q7ZmlsZW5hbWUpOwomIzQzOwlkYXRhLSZndDt0YWcubGluZW5vID0gY3QtJmd0O2xpbmVubzsKJiM0MzsJZGF0YS0mZ3Q7Y291bnRlci5ieXRlcyA9IGNvdW50ZXJzLSZndDtieXRlczsKJiM0MzsJZGF0YS0mZ3Q7Y291bnRlci5jYWxscyA9IGNvdW50ZXJzLSZndDtjYWxsczsKJiM0MzsJZGF0YS0mZ3Q7Y291bnRlci5hY2N1cmF0ZSA9ICFhbGxvY190YWdfaXNfaW5hY2N1cmF0ZShjdF90b19hbGxvY190YWcoY3QpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXRyaWV2ZXMgdGhlIHVuaXF1ZSBjb250ZW50IElEIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBhbGxvY2F0aW9uIHRhZyBtb2R1bGUKJiM0MzsgKiBsYXlvdXQsIGFsbG93aW5nIHVzZXJzcGFjZSB0byBkZXRlY3QgaWYgbW9kdWxlcyB3ZXJlIGxvYWRlZCAvIHVubG9hZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBwYXJhbXM7CiYjNDM7CiYjNDM7CWNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJcGFyYW1zLmlkID0gY29kZXRhZ19nZXRfY29udGVudF9pZChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7CiYjNDM7CWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3BhcmFtcywgc2l6ZW9mKHBhcmFtcykpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZlcmlmaWVzIHdoZXRoZXIgYSBnaXZlbiBjb2RldGFnIHNhdGlzZmllcyB0aGUgYWN0aXZlIGZpbHRlcmluZyBjcml0ZXJpYSBieQomIzQzOyAqIG1hdGNoaW5nIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGZpbHRlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsCiYjNDM7CQkJICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsCiYjNDM7CQkJICAgYm9vbCAqZmV0Y2hlZF9jb3VudGVycykKJiM0Mzt7CiYjNDM7CWJvb2wgaW5hY2N1cmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFmaWx0ZXIgfHwgIWZpbHRlci0mZ3Q7bWFzaykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19NT0ROQU1FKSB7CiYjNDM7CQkvKiB1c2VyIHdhbnRzIHRvIGZpbHRlciBieSBtb2RuYW1lIGJ1dCBjdC0mZ3Q7bW9kbmFtZSBpcyBOVUxMICovCiYjNDM7CQlpZiAoIWN0LSZndDttb2RuYW1lKSB7CiYjNDM7CQkJLyogdmFsaWRhdGUgaWYgdXNlciB3YXMgYXR0ZW1wdGluZyB0byBmaWx0ZXIgZm9yIGJ1aWx0LWluIGFsbG9jYXRpb25zICovCiYjNDM7CQkJaWYgKGZpbHRlci0mZ3Q7ZmllbGRzLm1vZG5hbWVbMF0gIT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9IGVsc2UgaWYgKGFsbG9jaW5mb19jbXBfc3RyKGN0LSZndDttb2RuYW1lLCBmaWx0ZXItJmd0O2ZpZWxkcy5tb2RuYW1lKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBjdC0mZ3Q7ZnVuY3Rpb24gJmFtcDsmYW1wOyBhbGxvY2luZm9fY21wX3N0cihjdC0mZ3Q7ZnVuY3Rpb24sIGZpbHRlci0mZ3Q7ZmllbGRzLmZ1bmN0aW9uKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBjdC0mZ3Q7ZmlsZW5hbWUgJmFtcDsmYW1wOyBhbGxvY2luZm9fY21wX3N0cihjdC0mZ3Q7ZmlsZW5hbWUsIGZpbHRlci0mZ3Q7ZmllbGRzLmZpbGVuYW1lKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykgJmFtcDsmYW1wOwomIzQzOwkgICAgY3QtJmd0O2xpbmVubyAhPSBmaWx0ZXItJmd0O2ZpZWxkcy5saW5lbm8pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEUpIHsKJiM0MzsJCWluYWNjdXJhdGUgPSAhIShjdC0mZ3Q7ZmxhZ3MgJmFtcDsgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpOwomIzQzOwkJaWYgKGluYWNjdXJhdGUgIT0gISEoZmlsdGVyLSZndDtmaWVsZHMuaW5hY2N1cmF0ZSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmaWx0ZXItJmd0O21hc2sgJmFtcDsgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHsKJiM0MzsJCWlmICghKmZldGNoZWRfY291bnRlcnMpIHsKJiM0MzsJCQkqY291bnRlcnMgPSBhbGxvY2luZm9fcHJlZmV0Y2hfY291bnRlcnMoY3QpOwomIzQzOwkJCSpmZXRjaGVkX2NvdW50ZXJzID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWlmICgoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGNvdW50ZXJzLSZndDtieXRlcyAmbHQ7IGZpbHRlci0mZ3Q7bWluX3NpemUpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJaWYgKChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY291bnRlcnMtJmd0O2J5dGVzICZndDsgZmlsdGVyLSZndDttYXhfc2l6ZSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzCiYjNDM7ICogcHJvZmlsaW5nIGRhdGEgYW5kIHJldHVybnMgaXQgdG8gdXNlcnNwYWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXY7CiYjNDM7CXN0cnVjdCBjb2RldGFnICpjdDsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb19nZXRfYXQgcGFyYW1zID0gezB9OwomIzQzOwlfX3U2NCBza2lwX2NvdW50OwomIzQzOwlzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXJzOwomIzQzOwlib29sIGZldGNoZWRfY291bnRlcnM7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3BhcmFtcywgYXJnLCBzaXplb2YocGFyYW1zKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJaWYgKHBhcmFtcy5maWx0ZXIubWFzayAmYW1wOyB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoKHBhcmFtcy5maWx0ZXIubWFzayAmYW1wOyBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUpICZhbXA7JmFtcDsKJiM0MzsJICAgIChwYXJhbXMuZmlsdGVyLm1hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwYXJhbXMuZmlsdGVyLm1pbl9zaXplICZndDsgcGFyYW1zLmZpbHRlci5tYXhfc2l6ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlwcml2ID0gbS0mZ3Q7cHJpdmF0ZTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O2lvY3RsX2xvY2spOwomIzQzOwljb2RldGFnX2xvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7CiYjNDM7CiYjNDM7CWlmIChwYXJhbXMucG9zICZndDs9IGNvZGV0YWdfZ2V0X2NvdW50KGFsbG9jX3RhZ19jdHR5cGUpKSB7CiYjNDM7CQljb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2lvY3RsX2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tpcF9jb3VudCA9IHBhcmFtcy5wb3M7CiYjNDM7CiYjNDM7CWlmIChwYXJhbXMuZmlsdGVyLm1hc2spCiYjNDM7CQlwcml2LSZndDtmaWx0ZXIgPSBwYXJhbXMuZmlsdGVyOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtmaWx0ZXIubWFzayA9IDA7CiYjNDM7CiYjNDM7CS8qIEZpbmQgdGhlIGNvZGV0YWcgKi8KJiM0MzsJcHJpdi0mZ3Q7aW9jdGxfaXRlciA9IGNvZGV0YWdfZ2V0X2N0X2l0ZXIoYWxsb2NfdGFnX2N0dHlwZSk7CiYjNDM7CWN0ID0gY29kZXRhZ19uZXh0X2N0KCZhbXA7cHJpdi0mZ3Q7aW9jdGxfaXRlcik7CiYjNDM7CiYjNDM7CXdoaWxlIChjdCkgewomIzQzOwkJZmV0Y2hlZF9jb3VudGVycyA9IGZhbHNlOwomIzQzOwkJaWYgKG1hdGNoZXNfZmlsdGVyKGN0LCAmYW1wO3ByaXYtJmd0O2ZpbHRlciwgJmFtcDtjb3VudGVycywgJmFtcDtmZXRjaGVkX2NvdW50ZXJzKSkgewomIzQzOwkJCWlmIChza2lwX2NvdW50ID09IDApCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCXNraXBfY291bnQtLTsKJiM0MzsJCX0KJiM0MzsJCWN0ID0gY29kZXRhZ19uZXh0X2N0KCZhbXA7cHJpdi0mZ3Q7aW9jdGxfaXRlcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGN0KSB7CiYjNDM7CQlpZiAoIWZldGNoZWRfY291bnRlcnMpCiYjNDM7CQkJY291bnRlcnMgPSBhbGxvY2luZm9fcHJlZmV0Y2hfY291bnRlcnMoY3QpOwomIzQzOwkJYWxsb2NpbmZvX3RvX3BhcmFtcyhjdCwgJmFtcDtwYXJhbXMuZGF0YSwgJmFtcDtjb3VudGVycyk7CiYjNDM7CQlwcml2LSZndDtwb3NpdGlvbmVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwljb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7aW9jdGxfbG9jayk7CiYjNDM7CiYjNDM7CWlmICghY3QpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7cGFyYW1zLCBzaXplb2YocGFyYW1zKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWR2YW5jZXMgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGFsbG9jYXRpb24gdGFnIGluIHRoZSBzZXF1ZW5jZSBhbmQKJiM0MzsgKiByZXR1cm5zIGl0cyBwcm9maWxpbmcgZGF0YSB0byB1c2Vyc3BhY2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2OwomIzQzOwlzdHJ1Y3QgY29kZXRhZyAqY3Q7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcGFyYW1zOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyczsKJiM0MzsJYm9vbCBmZXRjaGVkX2NvdW50ZXJzOwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKJiM0MzsJcHJpdiA9IG0tJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtpb2N0bF9sb2NrKTsKJiM0MzsJY29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3Bvc2l0aW9uZWQpIHsKJiM0MzsJCXByaXYtJmd0O2lvY3RsX2l0ZXIgPSBjb2RldGFnX2dldF9jdF9pdGVyKGFsbG9jX3RhZ19jdHR5cGUpOwomIzQzOwkJcHJpdi0mZ3Q7cG9zaXRpb25lZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3QgPSBjb2RldGFnX25leHRfY3QoJmFtcDtwcml2LSZndDtpb2N0bF9pdGVyKTsKJiM0MzsJd2hpbGUgKGN0KSB7CiYjNDM7CQlmZXRjaGVkX2NvdW50ZXJzID0gZmFsc2U7CiYjNDM7CQlpZiAobWF0Y2hlc19maWx0ZXIoY3QsICZhbXA7cHJpdi0mZ3Q7ZmlsdGVyLCAmYW1wO2NvdW50ZXJzLCAmYW1wO2ZldGNoZWRfY291bnRlcnMpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJY3QgPSBjb2RldGFnX25leHRfY3QoJmFtcDtwcml2LSZndDtpb2N0bF9pdGVyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY3QpIHsKJiM0MzsJCWlmICghZmV0Y2hlZF9jb3VudGVycykKJiM0MzsJCQljb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7CiYjNDM7CQlhbGxvY2luZm9fdG9fcGFyYW1zKGN0LCAmYW1wO3BhcmFtcywgJmFtcDtjb3VudGVycyk7CiYjNDM7CX0KJiM0MzsJaWYgKCFjdCkgewomIzQzOwkJcHJpdi0mZ3Q7cG9zaXRpb25lZCA9IGZhbHNlOwomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwljb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7aW9jdGxfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXQgPT0gMCkgewomIzQzOwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7cGFyYW1zLCBzaXplb2YocGFyYW1zKSkpCiYjNDM7CQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFbnRyeSBwb2ludCBpb2N0bCBmdW5jdGlvbiBmb3IgL3Byb2MvYWxsb2NpbmZvIHJvdXRpbmcgcmVxdWVzdHMgdG8gZmV0Y2ggdGhlCiYjNDM7ICogbGF5b3V0IGNvbnRlbnQgSUQsIHNlZWsgdG8gYSBzcGVjaWZpYyB0YWcsIG9yIHJlYWQgc2VxdWVudGlhbCB0YWdzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBfX2FyZykKJiM0Mzt7CiYjNDM7CXZvaWQgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilfX2FyZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChjbWQpIHsKJiM0MzsJY2FzZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQ6CiYjNDM7CQlyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhLCBhcmcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfQVQ6CiYjNDM7CQlyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtJmd0O3ByaXZhdGVfZGF0YSwgYXJnKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFMTE9DSU5GT19JT0NfR0VUX05FWFQ6CiYjNDM7CQlyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhLCBhcmcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXQgPSAtRU5PSU9DVExDTUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0NPTVBBVAomIzQzO3N0YXRpYyBsb25nIGFsbG9jaW5mb19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3sKJiM0MzsJcmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0gewomIzQzOwkucHJvY19vcGVuCQk9IGFsbG9jaW5mb19vcGVuLAomIzQzOwkucHJvY19yZWFkX2l0ZXIJCT0gc2VxX3JlYWRfaXRlciwKJiM0MzsJLnByb2NfbHNlZWsJCT0gc2VxX2xzZWVrLAomIzQzOwkucHJvY19yZWxlYXNlCQk9IGFsbG9jaW5mb19yZWxlYXNlLAomIzQzOwkucHJvY19pb2N0bAkJPSBhbGxvY2luZm9faW9jdGwsCiYjNDM7I2lmZGVmIENPTkZJR19DT01QQVQKJiM0MzsJLnByb2NfY29tcGF0X2lvY3RsCT0gYWxsb2NpbmZvX2NvbXBhdF9pb2N0bCwKJiM0MzsjZW5kaWYKJiM0Mzt9OwomIzQzOwogc2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApCiB7CiAJc3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlcjsKQEAgLTk5Myw4ICYjNDM7MTMzNCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpCiAJCXJldHVybiAwOwogCX0KIAotCWlmICghcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgJmFtcDthbGxvY2luZm9fc2VxX29wLAotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSksIE5VTEwpKSB7CiYjNDM7CWlmICghcHJvY19jcmVhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgJmFtcDthbGxvY2luZm9fcHJvY19vcHMpKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byBjcmVhdGUgJXMgZmlsZVxuJiMzNDssIEFMTE9DSU5GT19GSUxFX05BTUUpOwogCQlzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlCmluZGV4IDhkNGRiMjI0MWNjMmEyLi4xMjk0MWQ2OGE3ZjhhZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGUKQEAgLTEsNSAmIzQzOzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogVEFSR0VUUyAmIzQzOz0gYWNjdAomIzQzO1RBUkdFVFMgJiM0Mzs9IGFsbG9jX3RhZwogVEFSR0VUUyAmIzQzOz0gYWxzYQogVEFSR0VUUyAmIzQzOz0gYW1kLXBzdGF0ZQogVEFSR0VUUyAmIzQzOz0gYXJtNjQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZjQxZDkyZDA2YjE4NDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsOSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MztURVNUX0dFTl9QUk9HUyA6PSBhbGxvY2luZm9faW9jdGxfdGVzdAomIzQzOwomIzQzO0NGTEFHUyAmIzQzOz0gLVdhbGwKJiM0MztDRkxBR1MgJiM0Mzs9ICQoS0hEUl9JTkNMVURFUykKJiM0MzsKJiM0MztpbmNsdWRlIC4uL2xpYi5tawomIzQzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMDkyMzQ4MDk3MjA0MzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSw1NDggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7CiYjNDM7Lyoga3NlbGZ0ZXN0IGZvciBhbGxvY2luZm8gaW9jdGwKJiM0MzsgKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bAomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBHb29nbGUsIEluYy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWxsb2NfdGFnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9rc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBNQVhfTElORV9MRU4JCTUxMgomIzQzOyNkZWZpbmUgQUxMT0NJTkZPX1BST0MJCSYjMzQ7L3Byb2MvYWxsb2NpbmZvJiMzNDsKJiM0MzsKJiM0MztlbnVtIGlvY3RsX3JldCB7CiYjNDM7CUlPQ1RMX1NVQ0NFU1MgPSAwLAomIzQzOwlJT0NUTF9GQUlMVVJFID0gMSwKJiM0MzsJSU9DVExfSU5WQUxJRF9EQVRBID0gMiwKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgVkVDX01BWF9FTlRSSUVTIDMyCiYjNDM7CiYjNDM7c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgewomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHRhZ1tWRUNfTUFYX0VOVFJJRVNdOwomIzQzOwlfX3U2NCBjb3VudDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCAqcGFyYW1zKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlvY3RsKGRldl9mZCwgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lELCBwYXJhbXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfYXQoaW50IGRldl9mZCwgc3RydWN0IGFsbG9jaW5mb19nZXRfYXQgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb2N0bChkZXZfZmQsIEFMTE9DSU5GT19JT0NfR0VUX0FULCBwYXJhbXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfbmV4dChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpwYXJhbXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gaW9jdGwoZGV2X2ZkLCBBTExPQ0lORk9fSU9DX0dFVF9ORVhULCBwYXJhbXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtYXRjaF9lbnRyeShjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpwcm9jZnNfZW50cnksCiYjNDM7CQkJY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqdGFnX2RhdGEsCiYjNDM7CQkJYm9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sCiYjNDM7CQkJYm9vbCBtYXRjaF9mdW5jdGlvbiwgYm9vbCBtYXRjaF9maWxlbmFtZSkKJiM0Mzt7CiYjNDM7CWlmIChtYXRjaF9ieXRlcyAmYW1wOyZhbXA7IHRhZ19kYXRhLSZndDtjb3VudGVyLmJ5dGVzICE9IHByb2Nmc19lbnRyeS0mZ3Q7Y291bnRlci5ieXRlcykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtzaXplIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYXRjaF9jYWxscyAmYW1wOyZhbXA7IHRhZ19kYXRhLSZndDtjb3VudGVyLmNhbGxzICE9IHByb2Nmc19lbnRyeS0mZ3Q7Y291bnRlci5jYWxscykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYWxsIGNvdW50IHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYXRjaF9saW5lbm8gJmFtcDsmYW1wOyB0YWdfZGF0YS0mZ3Q7dGFnLmxpbmVubyAhPSBwcm9jZnNfZW50cnktJmd0O3RhZy5saW5lbm8pIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bGluZW5vIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYXRjaF9mdW5jdGlvbiAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJuY21wKHRhZ19kYXRhLSZndDt0YWcuZnVuY3Rpb24sIHByb2Nmc19lbnRyeS0mZ3Q7dGFnLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Z1bmN0aW9uIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtYXRjaF9maWxlbmFtZSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJuY21wKHRhZ19kYXRhLSZndDt0YWcuZmlsZW5hbWUsIHByb2Nmc19lbnRyeS0mZ3Q7dGFnLmZpbGVuYW1lLCBBTExPQ0lORk9fU1RSX1NJWkUpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2ZpbGVuYW1lIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtYXRjaF9lbnRyaWVzKGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcywKJiM0MzsJCQkgIGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzLAomIzQzOwkJCSAgYm9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sCiYjNDM7CQkJICBib29sIG1hdGNoX2Z1bmN0aW9uLCBib29sIG1hdGNoX2ZpbGVuYW1lKQomIzQzO3sKJiM0MzsJX191NjQgaTsKJiM0MzsKJiM0MzsJaWYgKHByb2Nmc19lbnRyaWVzLSZndDtjb3VudCAhPSB0YWdzLSZndDtjb3VudCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtFbnRyeSBjb3VudCBtaXNtYXRjaC4gaW9jdGwgZW50cmllczogJWxsdSwgcHJvYyBlbnRyaWVzOiAlbGx1XG4mIzM0OywKJiM0MzsJCQkgICAgICAgdGFncy0mZ3Q7Y291bnQsIHByb2Nmc19lbnRyaWVzLSZndDtjb3VudCk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHByb2Nmc19lbnRyaWVzLSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbWF0Y2hfZW50cnkoJmFtcDtwcm9jZnNfZW50cmllcy0mZ3Q7dGFnW2ldLCAmYW1wO3RhZ3MtJmd0O3RhZ1tpXSwKJiM0MzsJCQkJIG1hdGNoX2J5dGVzLCBtYXRjaF9jYWxscywgbWF0Y2hfbGluZW5vLAomIzQzOwkJCQkgbWF0Y2hfZnVuY3Rpb24sIG1hdGNoX2ZpbGVuYW1lKSkgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JWxsdXRoIGVudHJ5IGRvZXMgbm90IG1hdGNoLlxuJiMzNDssIGkpOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmFsbG9jaW5mb19zdHIoY29uc3QgY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpOwomIzQzOwomIzQzOwlpZiAobGVuICZndDs9IEFMTE9DSU5GT19TVFJfU0laRSkKJiM0MzsJCXN0ciAmIzQzOz0gKGxlbiAtIEFMTE9DSU5GT19TVFJfU0laRSkgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIHN0cjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWxsb2NpbmZvX2NvcHlfc3RyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKJiM0Mzt7CiYjNDM7CXN0cm5jcHkoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUgLSAxKTsKJiM0MzsJZGVzdFtBTExPQ0lORk9fU1RSX1NJWkUgLSAxXSA9ICYjMzk7XDAmIzM5OzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcikKJiM0Mzt7CiYjNDM7CUZJTEUgKmZwID0gZm9wZW4oQUxMT0NJTkZPX1BST0MsICYjMzQ7ciYjMzQ7KTsKJiM0MzsJY2hhciBsaW5lW01BWF9MSU5FX0xFTl07CiYjNDM7CWludCBtYXRjaGVzOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHByb2Nmc19lbnRyeTsKJiM0MzsKJiM0MzsJaWYgKCFmcCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAmIzM0OyBBTExPQ0lORk9fUFJPQyAmIzM0OyBmb3IgcmVhZGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsJbWVtc2V0KHByb2Nmc19lbnRyaWVzLCAwLCBzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSAmYW1wOyZhbXA7IHByb2Nmc19lbnRyaWVzLSZndDtjb3VudCAmbHQ7IFZFQ19NQVhfRU5UUklFUykgewomIzQzOwkJY2hhciBmaWxlbmFtZVtNQVhfTElORV9MRU5dOwomIzQzOwkJY2hhciBmdW5jdGlvbltNQVhfTElORV9MRU5dOwomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7cHJvY2ZzX2VudHJ5LCAwLCBzaXplb2YocHJvY2ZzX2VudHJ5KSk7CiYjNDM7CQltYXRjaGVzID0gc3NjYW5mKGxpbmUsICYjMzQ7JWxsdSAlbGx1ICVbXjpdOiVsbHUgZnVuYzolcyYjMzQ7LAomIzQzOwkJCQkgJmFtcDtwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcywKJiM0MzsJCQkJICZhbXA7cHJvY2ZzX2VudHJ5LmNvdW50ZXIuY2FsbHMsCiYjNDM7CQkJCSBmaWxlbmFtZSwKJiM0MzsJCQkJICZhbXA7cHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8sCiYjNDM7CQkJCSBmdW5jdGlvbik7CiYjNDM7CiYjNDM7CQlpZiAobWF0Y2hlcyAhPSA1KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJYWxsb2NpbmZvX2NvcHlfc3RyKHByb2Nmc19lbnRyeS50YWcuZmlsZW5hbWUsIGZpbGVuYW1lKTsKJiM0MzsJCWFsbG9jaW5mb19jb3B5X3N0cihwcm9jZnNfZW50cnkudGFnLmZ1bmN0aW9uLCBmdW5jdGlvbik7CiYjNDM7CiYjNDM7CQlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkgewomIzQzOwkJCWlmIChzdHJuY21wKHByb2Nmc19lbnRyeS50YWcuZmlsZW5hbWUsCiYjNDM7CQkJCSAgICBmaWx0ZXItJmd0O2ZpZWxkcy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTikgewomIzQzOwkJCWlmIChzdHJuY21wKHByb2Nmc19lbnRyeS50YWcuZnVuY3Rpb24sCiYjNDM7CQkJCSAgICBmaWx0ZXItJmd0O2ZpZWxkcy5mdW5jdGlvbiwgQUxMT0NJTkZPX1NUUl9TSVpFKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk8pIHsKJiM0MzsJCQlpZiAocHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8gIT0gZmlsdGVyLSZndDtmaWVsZHMubGluZW5vKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChmaWx0ZXItJmd0O21hc2sgJmFtcDsgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSB7CiYjNDM7CQkJaWYgKHByb2Nmc19lbnRyeS5jb3VudGVyLmJ5dGVzICZsdDsgZmlsdGVyLSZndDttaW5fc2l6ZSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZmlsdGVyLSZndDttYXNrICZhbXA7IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkgewomIzQzOwkJCWlmIChwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcyAmZ3Q7IGZpbHRlci0mZ3Q7bWF4X3NpemUpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVtY3B5KCZhbXA7cHJvY2ZzX2VudHJpZXMtJmd0O3RhZ1twcm9jZnNfZW50cmllcy0mZ3Q7Y291bnQmIzQzOyYjNDM7XSwgJmFtcDtwcm9jZnNfZW50cnksCiYjNDM7CQkgICAgICAgc2l6ZW9mKHByb2Nmc19lbnRyeSkpOwomIzQzOwl9CiYjNDM7CWZjbG9zZShmcCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgZW51bSBpb2N0bF9yZXQgZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MsCiYjNDM7CQkJCQkJIGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsCiYjNDM7CQkJCQkJIF9fdTY0IHN0YXJ0X3BvcykKJiM0Mzt7CiYjNDM7CWludCBmZCA9IG9wZW4oQUxMT0NJTkZPX1BST0MsIE9fUkRPTkxZKTsKJiM0MzsKJiM0MzsJaWYgKGZkICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAmIzM0OyBBTExPQ0lORk9fUFJPQyAmIzM0OyBmb3IgSU9DVExcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBJT0NUTF9GQUlMVVJFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBzdGFydF9jb250X2lkLCBlbmRfY29udF9pZDsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb19nZXRfYXQgZ2V0X2F0X3BhcmFtczsKJiM0MzsJY29uc3QgaW50IG1heF9yZXRyaWVzID0gMTA7CiYjNDM7CWludCByZXRyeV9jb3VudCA9IDA7CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkIG1heSByZXR1cm4gZGlmZmVyZW50IHZhbHVlcyBpZiBhIGtlcm5lbCBtb2R1bGUgd2FzIGxvYWRlZAomIzQzOwkgKiBiZXR3ZWVuIHRoZSB0d28gY2FsbHMuIElmIHRoYXQgaGFwcGVucywgdGhlIGRhdGEgZ2F0aGVyZWQgY2Fubm90IGJlIGNvbnNpZGVyZWQgY29uc2lzdGVudAomIzQzOwkgKiBhbmQgaGVuY2UgbmVlZHMgdG8gYmUgZmV0Y2hlZCBhZ2FpbiB0byBhdm9pZCBmbGFraW5lc3MuCiYjNDM7CSAqLwomIzQzOwlkbyB7CiYjNDM7CQlpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsICZhbXA7c3RhcnRfY29udF9pZCkpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCQlzdGF0dXMgPSBJT0NUTF9GQUlMVVJFOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVtc2V0KHRhZ3MsIDAsIHNpemVvZigqdGFncykpOwomIzQzOwkJbWVtc2V0KCZhbXA7Z2V0X2F0X3BhcmFtcywgMCwgc2l6ZW9mKGdldF9hdF9wYXJhbXMpKTsKJiM0MzsJCW1lbWNweSgmYW1wO2dldF9hdF9wYXJhbXMuZmlsdGVyLCBmaWx0ZXIsIHNpemVvZigqZmlsdGVyKSk7CiYjNDM7CQlnZXRfYXRfcGFyYW1zLnBvcyA9IHN0YXJ0X3BvczsKJiM0MzsJCWlmIChfX2FsbG9jaW5mb19nZXRfYXQoZmQsICZhbXA7Z2V0X2F0X3BhcmFtcykpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2FsbG9jaW5mb19nZXRfYXQgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQkJc3RhdHVzID0gSU9DVExfRkFJTFVSRTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCW1lbWNweSgmYW1wO3RhZ3MtJmd0O3RhZ1t0YWdzLSZndDtjb3VudCYjNDM7JiM0MztdLCAmYW1wO2dldF9hdF9wYXJhbXMuZGF0YSwgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpOwomIzQzOwomIzQzOwkJd2hpbGUgKHRhZ3MtJmd0O2NvdW50ICZsdDsgVkVDX01BWF9FTlRSSUVTICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgJmFtcDt0YWdzLSZndDt0YWdbdGFncy0mZ3Q7Y291bnRdKSA9PSAwKQomIzQzOwkJCXRhZ3MtJmd0O2NvdW50JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChmZCwgJmFtcDtlbmRfY29udF9pZCkpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCQlzdGF0dXMgPSBJT0NUTF9GQUlMVVJFOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHN0YXJ0X2NvbnRfaWQuaWQgPT0gZW5kX2NvbnRfaWQuaWQpIHsKJiM0MzsJCQlzdGF0dXMgPSBJT0NUTF9TVUNDRVNTOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBtaXNtYXRjaCwgcmV0cnlpbmcuLi5cbiYjMzQ7KTsKJiM0MzsJCQlzdGF0dXMgPSBJT0NUTF9JTlZBTElEX0RBVEE7CiYjNDM7CQl9CiYjNDM7CX0gd2hpbGUgKHN0YXR1cyA9PSBJT0NUTF9JTlZBTElEX0RBVEEgJmFtcDsmYW1wOyByZXRyeV9jb3VudCYjNDM7JiM0MzsgJmx0OyBtYXhfcmV0cmllcyk7CiYjNDM7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJcmV0dXJuIHN0YXR1czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW5fZmlsdGVyX3Rlc3QoY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzID0gbWFsbG9jKHNpemVvZigqdGFncykpOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqcHJvY2ZzX2VudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpOwomIzQzOwlpbnQgaW9jdGxfc3RhdHVzOwomIzQzOwlpbnQgcmV0ID0gS1NGVF9QQVNTOwomIzQzOwomIzQzOwlpZiAoIXRhZ3MgfHwgIXByb2Nmc19lbnRyaWVzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O01lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBmaWx0ZXIpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0Vycm9yIHJldHJpZXZpbmcgZW50cmllcyBmcm9tICYjMzQ7IEFMTE9DSU5GT19QUk9DICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByb2Nmc19lbnRyaWVzLSZndDtjb3VudCA9PSAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O05vIGVudHJpZXMgZm91bmQgaW4gJiMzNDsgQUxMT0NJTkZPX1BST0MgJiMzNDssIHNraXBwaW5nIHRlc3RcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfU0tJUDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb2N0bF9zdGF0dXMgPSBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyh0YWdzLCBmaWx0ZXIsIDApOwomIzQzOwlpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtUcm91YmxlIHJldHJpZXZpbmcgdmFsaWQgSU9DVEwgZW50cmllcywgc2tpcHBpbmcuXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsJaWYgKGlvY3RsX3N0YXR1cyA9PSBJT0NUTF9GQUlMVVJFKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0Vycm9yIHJldHJpZXZpbmcgSU9DVEwgZW50cmllcy5cbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIW1hdGNoX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIHRhZ3MsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpCiYjNDM7CQlyZXQgPSBLU0ZUX0ZBSUw7CiYjNDM7CiYjNDM7ZXhpdDoKJiM0MzsJZnJlZSh0YWdzKTsKJiM0MzsJZnJlZShwcm9jZnNfZW50cmllcyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9maWxlbmFtZV9maWx0ZXIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJY29uc3QgY2hhciAqdGFyZ2V0X2ZpbGVuYW1lID0gJiMzNDttbS9tZW1vcnkuYyYjMzQ7OwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTsKJiM0MzsJZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FOwomIzQzOwlzdHJuY3B5KGZpbHRlci5maWVsZHMuZmlsZW5hbWUsIHRhcmdldF9maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9maWx0ZXJfdGVzdCgmYW1wO2ZpbHRlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9mdW5jdGlvbl9maWx0ZXIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJY29uc3QgY2hhciAqdGFyZ2V0X2Z1bmN0aW9uID0gJiMzNDtkdXBfbW0mIzM0OzsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CiYjNDM7CWZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTjsKJiM0MzsJc3RybmNweShmaWx0ZXIuZmllbGRzLmZ1bmN0aW9uLCB0YXJnZXRfZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiBydW5fZmlsdGVyX3Rlc3QoJmFtcDtmaWx0ZXIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3Rfc2l6ZV9maWx0ZXIodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJaW50IHJldCA9IEtTRlRfUEFTUzsKJiM0MzsJX191NjQgdGFyZ2V0X3NpemUsIGksIHBvczsKJiM0MzsJc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqZm91bmRfdGFnID0gTlVMTDsKJiM0MzsJY29uc3QgY2hhciAqdGFyZ2V0X2Z1bmN0aW9uID0gJiMzNDtkb19pbml0X21vZHVsZSYjMzQ7OwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgc3RhcnRfY29udF9pZCwgZW5kX2NvbnRfaWQ7CiYjNDM7CWludCByZXRyeSA9IDA7CiYjNDM7CWNvbnN0IGludCBtYXhfcmV0cmllcyA9IDEwOwomIzQzOwomIzQzOwlpZiAoIXRhZ3MgfHwgIXByb2Nmc19lbnRyaWVzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O01lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZnJlZW1lbTsKJiM0MzsJfQomIzQzOwomIzQzOwlmZCA9IG9wZW4oQUxMT0NJTkZPX1BST0MsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAmIzM0OyBBTExPQ0lORk9fUFJPQyAmIzM0OzogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJZ290byBmcmVlbWVtOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWZvdW5kX3RhZyA9IE5VTEw7CiYjNDM7CQlwb3MgPSAwOwomIzQzOwomIzQzOwkJaWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCAmYW1wO3N0YXJ0X2NvbnRfaWQpKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDthbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW1lbXNldCgmYW1wO2ZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOwomIzQzOwkJZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OOwomIzQzOwkJc3RybmNweShmaWx0ZXIuZmllbGRzLmZ1bmN0aW9uLCB0YXJnZXRfZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSk7CiYjNDM7CiYjNDM7CQlpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCAmYW1wO2ZpbHRlcikpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O0Vycm9yIHJldHJpZXZpbmcgZW50cmllcyBmcm9tICYjMzQ7IEFMTE9DSU5GT19QUk9DICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CQkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwcm9jZnNfZW50cmllcy0mZ3Q7Y291bnQgPT0gMCkgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RnVuY3Rpb24gJXMgbm90IGZvdW5kIGluIHByb2Nmc1xuJiMzNDssIHRhcmdldF9mdW5jdGlvbik7CiYjNDM7CQkJcmV0ID0gS1NGVF9TS0lQOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXRhcmdldF9zaXplID0gcHJvY2ZzX2VudHJpZXMtJmd0O3RhZ1swXS5jb3VudGVyLmJ5dGVzOwomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CiYjNDM7CQlmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUgfCBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkU7CiYjNDM7CQlmaWx0ZXIubWluX3NpemUgPSB0YXJnZXRfc2l6ZTsKJiM0MzsJCWZpbHRlci5tYXhfc2l6ZSA9IHRhcmdldF9zaXplOwomIzQzOwomIzQzOwkJd2hpbGUgKDEpIHsKJiM0MzsJCQlzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCBnZXRfYXRfcGFyYW1zOwomIzQzOwomIzQzOwkJCW1lbXNldCgmYW1wO2dldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7CiYjNDM7CQkJbWVtY3B5KCZhbXA7Z2V0X2F0X3BhcmFtcy5maWx0ZXIsICZhbXA7ZmlsdGVyLCBzaXplb2YoZmlsdGVyKSk7CiYjNDM7CQkJZ2V0X2F0X3BhcmFtcy5wb3MgPSBwb3M7CiYjNDM7CiYjNDM7CQkJaWYgKF9fYWxsb2NpbmZvX2dldF9hdChmZCwgJmFtcDtnZXRfYXRfcGFyYW1zKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJdGFncy0mZ3Q7Y291bnQgPSAwOwomIzQzOwkJCW1lbWNweSgmYW1wO3RhZ3MtJmd0O3RhZ1t0YWdzLSZndDtjb3VudCYjNDM7JiM0MztdLCAmYW1wO2dldF9hdF9wYXJhbXMuZGF0YSwKJiM0MzsJCQkgICAgICAgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpOwomIzQzOwomIzQzOwkJCXdoaWxlICh0YWdzLSZndDtjb3VudCAmbHQ7IFZFQ19NQVhfRU5UUklFUyAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgIF9fYWxsb2NpbmZvX2dldF9uZXh0KGZkLCAmYW1wO3RhZ3MtJmd0O3RhZ1t0YWdzLSZndDtjb3VudF0pID09IDApCiYjNDM7CQkJCXRhZ3MtJmd0O2NvdW50JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCQlmb3IgKGkgPSAwOyBpICZsdDsgdGFncy0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChzdHJjbXAodGFncy0mZ3Q7dGFnW2ldLnRhZy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uKSA9PSAwKSB7CiYjNDM7CQkJCQlmb3VuZF90YWcgPSAmYW1wO3RhZ3MtJmd0O3RhZ1tpXTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWlmIChmb3VuZF90YWcgfHwgdGFncy0mZ3Q7Y291bnQgJmx0OyBWRUNfTUFYX0VOVFJJRVMpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwomIzQzOwkJCXBvcyAmIzQzOz0gdGFncy0mZ3Q7Y291bnQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsICZhbXA7ZW5kX2NvbnRfaWQpKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDthbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtNb2R1bGUgbG9hZCBkZXRlY3RlZCBkdXJpbmcgc2l6ZSB2ZXJpZmljYXRpb24sIHJldHJ5aW5nLi4uXG4mIzM0Oyk7CiYjNDM7CX0gd2hpbGUgKHJldHJ5JiM0MzsmIzQzOyAmbHQ7IG1heF9yZXRyaWVzKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0X2NvbnRfaWQuaWQgPT0gZW5kX2NvbnRfaWQuaWQgJmFtcDsmYW1wOyAhZm91bmRfdGFnKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0VudHJ5IHdpdGggZnVuY3Rpb24gJXMgbm90IGZvdW5kIGluIElPQ1RMIHJlc3VsdHNcbiYjMzQ7LAomIzQzOwkJCSAgICAgICB0YXJnZXRfZnVuY3Rpb24pOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwl9IGVsc2UgaWYgKHN0YXJ0X2NvbnRfaWQuaWQgIT0gZW5kX2NvbnRfaWQuaWQpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RmFpbGVkIHRvIG1hdGNoIGNvbnRlbnRfaWRzIGZvciBwcm9jZnMgYW5kIElPQ1RMLCBza2lwcGluZy4uLlxuJiMzNDspOwomIzQzOwkJcmV0ID0gS1NGVF9TS0lQOwomIzQzOwl9IGVsc2UgaWYgKGZvdW5kX3RhZyAmYW1wOyZhbXA7IGZvdW5kX3RhZy0mZ3Q7Y291bnRlci5ieXRlcyAhPSB0YXJnZXRfc2l6ZSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtJT0NUTCBlbnRyeSBzaXplICVsbHUgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IHNpemUgJWxsdVxuJiMzNDssCiYjNDM7CQkJICAgICAgIGZvdW5kX3RhZy0mZ3Q7Y291bnRlci5ieXRlcywgdGFyZ2V0X3NpemUpOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXhpdDoKJiM0MzsJY2xvc2UoZmQpOwomIzQzO2ZyZWVtZW06CiYjNDM7CWZyZWUodGFncyk7CiYjNDM7CWZyZWUocHJvY2ZzX2VudHJpZXMpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfbGluZW5vX2ZpbHRlcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7CiYjNDM7CXN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjsKJiM0MzsJZW51bSBpb2N0bF9yZXQgaW9jdGxfc3RhdHVzOwomIzQzOwlpbnQgcmV0ID0gS1NGVF9QQVNTOwomIzQzOwlfX3U2NCB0YXJnZXRfbGluZW5vLCBpOwomIzQzOwlzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YXJnZXRfdGFnOwomIzQzOwlib29sIGZvdW5kID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuJiMzNDspOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJZ290byBleGl0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2ZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOwomIzQzOwomIzQzOwlpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCAmYW1wO2ZpbHRlcikpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RXJyb3IgcmV0cmlldmluZyBlbnRyaWVzIGZyb20gJiMzNDsgQUxMT0NJTkZPX1BST0MgJiMzNDtcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwlpZiAocHJvY2ZzX2VudHJpZXMtJmd0O2NvdW50ID09IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Q291bGQgbm90IHJldHJpZXZlIHByb2NmcyBlbnRyaWVzXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsJLyoKJiM0MzsJICogV2UgZGVwZW5kIG9uIHRoZSBwcm9jZnMgcmVzdWx0cyB0byBkZXRlcm1pbmUgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgZmlsdGVyIGJlZm9yZQomIzQzOwkgKiBtYWtpbmcgdGhlIGlvY3RsIHF1ZXJ5LiBIZW5jZSwgd2UgY2Fubm90IHJldXNlIHJ1bl9maWx0ZXJfdGVzdCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJdGFyZ2V0X3RhZyA9ICZhbXA7cHJvY2ZzX2VudHJpZXMtJmd0O3RhZ1swXTsKJiM0MzsJdGFyZ2V0X2xpbmVubyA9IHRhcmdldF90YWctJmd0O3RhZy5saW5lbm87CiYjNDM7CiYjNDM7CWZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk87CiYjNDM7CWZpbHRlci5maWVsZHMubGluZW5vID0gdGFyZ2V0X2xpbmVubzsKJiM0MzsKJiM0MzsJaW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgJmFtcDtmaWx0ZXIsIDApOwomIzQzOwlpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtUcm91YmxlIHJldHJpZXZpbmcgdmFsaWQgSU9DVEwgZW50cmllcywgc2tpcHBpbmcuXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KJiM0MzsJaWYgKGlvY3RsX3N0YXR1cyA9PSBJT0NUTF9GQUlMVVJFKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0Vycm9yIHJldHJpZXZpbmcgSU9DVEwgZW50cmllcy5cbiYjMzQ7KTsKJiM0MzsJCXJldCA9IEtTRlRfRkFJTDsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGFncy0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodGFncy0mZ3Q7dGFnW2ldLnRhZy5saW5lbm8gIT0gdGFyZ2V0X2xpbmVubykgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7SU9DVEwgZW50cnkgJWxsdSBoYXMgaW5jb3JyZWN0IGxpbmVubyAlbGx1LlxuJiMzNDssCiYjNDM7CQkJCSAgICAgICBpLCB0YWdzLSZndDt0YWdbaV0udGFnLmxpbmVubyk7CiYjNDM7CQkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzdHJuY21wKHRhZ3MtJmd0O3RhZ1tpXS50YWcuZnVuY3Rpb24sIHRhcmdldF90YWctJmd0O3RhZy5mdW5jdGlvbiwKJiM0MzsJCQkgICAgQUxMT0NJTkZPX1NUUl9TSVpFKSA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICBzdHJuY21wKHRhZ3MtJmd0O3RhZ1tpXS50YWcuZmlsZW5hbWUsIHRhcmdldF90YWctJmd0O3RhZy5maWxlbmFtZSwKJiM0MzsJCQkgICAgQUxMT0NJTkZPX1NUUl9TSVpFKSA9PSAwKQomIzQzOwkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZvdW5kKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O09yaWdpbmFsIHByb2NmcyBlbnRyeSBub3QgZm91bmQgaW4gSU9DVEwgbGluZW5vIGZpbHRlciByZXN1bHRzLlxuJiMzNDspOwomIzQzOwkJcmV0ID0gS1NGVF9GQUlMOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXhpdDoKJiM0MzsJZnJlZSh0YWdzKTsKJiM0MzsJZnJlZShwcm9jZnNfZW50cmllcyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlrc2Z0X3NldF9wbGFuKDQpOwomIzQzOwomIzQzOwlyZXQgPSB0ZXN0X2ZpbGVuYW1lX2ZpbHRlcigpOwomIzQzOwlpZiAocmV0ID09IEtTRlRfU0tJUCkKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1NraXBwaW5nIHRlc3RfZmlsZW5hbWVfZmlsdGVyXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgJiMzNDt0ZXN0X2ZpbGVuYW1lX2ZpbHRlclxuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSB0ZXN0X2Z1bmN0aW9uX2ZpbHRlcigpOwomIzQzOwlpZiAocmV0ID09IEtTRlRfU0tJUCkKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1NraXBwaW5nIHRlc3RfZnVuY3Rpb25fZmlsdGVyXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgJiMzNDt0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSB0ZXN0X3NpemVfZmlsdGVyKCk7CiYjNDM7CWlmIChyZXQgPT0gS1NGVF9TS0lQKQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7U2tpcHBpbmcgdGVzdF9zaXplX2ZpbHRlclxuJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsICYjMzQ7dGVzdF9zaXplX2ZpbHRlclxuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSB0ZXN0X2xpbmVub19maWx0ZXIoKTsKJiM0MzsJaWYgKHJldCA9PSBLU0ZUX1NLSVApCiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtTa2lwcGluZyB0ZXN0X2xpbmVub19maWx0ZXJcbiYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdChyZXQgPT0gS1NGVF9QQVNTLCAmIzM0O3Rlc3RfbGluZW5vX2ZpbHRlclxuJiMzNDspOwomIzQzOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE2NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhbiBgaW9jdGxgIGludGVyZmFjZSB0byBgL3Byb2MvYWxsb2NpbmZvYCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nLiBJbnRlcmVzdGluZy4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBvdXQgYWNyb3NzIHNldmVyYWwgZmlsZXM6IHRoZSBkb2N1bWVudGF0aW9uIChgRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RgLCBgRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RgKSwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSAoZ29vZCwgbmVlZCB0byBrZWVwIHRoYXQgdXAgdG8gZGF0ZSEpLCBoZWFkZXIgZmlsZXMgKGBpbmNsdWRlL2xpbnV4L2NvZGV0YWcuaGAsIGBpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhgKSwgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gKGBsaWIvY29kZXRhZy5jYCwgYG1tL2FsbG9jX3RhZy5jYCksIGFuZCBzb21lIHNlbGYtdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gKS4KCk15IGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gYG1tL2FsbG9jX3RhZy5jYCB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgYGlvY3RsYCBpbXBsZW1lbnRhdGlvbi4gSXQgc2VlbXMgdGhpcyBgaW9jdGxgIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZXhwb3NlZCB0aHJvdWdoIGAvcHJvYy9hbGxvY2luZm9gLCB3aGljaCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4gSSBzZWUgdGhyZWUgYGlvY3RsYCBjb21tYW5kczogYEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRGAsIGBBTExPQ0lORk9fSU9DX0dFVF9BVGAsIGFuZCBgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVGAuIFVzZXJzcGFjZSB3aWxsIGludGVyYWN0IHdpdGggdGhpcyBieSBvcGVuaW5nIGAvcHJvYy9hbGxvY2luZm9gIGFuZCBtYWtpbmcgY2FsbHMgdG8gYGlvY3RsKClgLiBUaGlzIHNvdW5kcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCwgYW5kIHRoYXQgc2NyZWFtcyBmdXp6aW5nIHRvIG1lLiBJdCYjMzk7cyBjcnVjaWFsIHdlIHRob3JvdWdobHkgdGVzdCB0aGlzIGludGVyZmFjZSBmb3IgYW55IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKTm93LCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmZpZ3VyYXRpb24gdGhpcyB3aWxsIGJlIGVuYWJsZWQuIEkmIzM5O2xsIGNoZWNrIGBtbS9hbGxvY190YWcuY2AgYW5kIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLiBJZiBpdCBpc24mIzM5O3QsIHRoZXJlJiMzOTtzIGxpa2VseSBzb21lIG1pc3Rha2UgaW4gdGhlIGJ1aWxkIHJ1bGVzLCBvciBwZXJoYXBzIHRoZSBmZWF0dXJlIGlzIGludGVuZGVkIHRvIGJlIGVuYWJsZWQgaW4gYSBkaWZmZXJlbnQgbWFubmVyLCBvciB1bmRlciBhIGRpZmZlcmVudCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfdGFnLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICYjNDM7PSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgJiM0Mzs9IGFsbG9jX3RhZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5ODkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIENvbmZpZ3VyYXRpb24gYW5kIFRhcmdldCBGdW5jdGlvbnMqKgoKT2theSwgc28gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGhlcmU7IHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBleHBsaWNpdGx5IGVuYWJsZWQuIE5vdywgbGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW1wbGljaXRseSBuZWVkZWQsIG9yIGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGZlYXR1cmUuCgpBaCwgdGhlIGBpb2N0bGAgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZCB0aHJvdWdoIGAvcHJvYy9hbGxvY2luZm9gLiBSaWdodCwgdGhhdCBmaWxlIGlzIGNyZWF0ZWQgZHVyaW5nIGBhbGxvY190YWdfaW5pdCgpYCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYCwgYXMgaW5kaWNhdGVkIGJ5IHRoaXMgY29kZSBzbmlwcGV0OgpgYGBjCglpZiAoIXByb2NfY3JlYXRlKEFMTE9DSU5GT19GSUxFX05BTUUsIDA0MDAsIE5VTEwsICZhbXA7YWxsb2NpbmZvX3Byb2Nfb3BzKSkgewpgYGAKU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBrbmV3IHRoZSBgcHJvY2AgZmlsZXN5c3RlbSB3YXMgaW52b2x2ZWQsIGFuZCwgeWVzLCBgQ09ORklHX1BST0NfRlNgIGlzIHJlcXVpcmVkLiBIb3dldmVyLCBpdCYjMzk7cyBzdWNoIGEgZ2VuZXJhbCBkZXBlbmRlbmN5IHRoYXQgSSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IGl0LiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBpbXBvcnRhbnQsIG1vcmUgc3BlY2lmaWMgb25lLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiB3aGVyZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nPyBMZXQmIzM5O3Mgc2lmdCB0aHJvdWdoIGBtbS9hbGxvY190YWcuY2AgZmlyc3QuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBzZWVpbmcgaGVyZSwgdGhlc2UgbG9vayBsaWtlIHByaW1lIHRhcmdldHM6IGBhbGxvY2luZm9faW9jdGxgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkYCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfYXRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0YCwgYG1hdGNoZXNfZmlsdGVyYCwgYGFsbG9jaW5mb190b19wYXJhbXNgLCBgYWxsb2NpbmZvX3ByZWZldGNoX2NvdW50ZXJzYCwgYGFsbG9jaW5mb19jbXBfc3RyYCwgYGFsbG9jaW5mb19jb3B5X3N0cmAsIGBhbGxvY2luZm9fc3RyYCwgYGFsbG9jaW5mb19vcGVuYCwgYW5kIGBhbGxvY2luZm9fcmVsZWFzZWAuCgpJJiMzOTtsbCBhbHNvIGhhdmUgYSBsb29rIGF0IGBsaWIvY29kZXRhZy5jYC4gT2theSwgaGVyZSBJIHNlZSBgY29kZXRhZ19nZXRfY29udGVudF9pZGAgYW5kIGBjb2RldGFnX2dldF9jb3VudGAgd2hpY2ggbWlnaHQgYmUgaW50ZXJlc3RpbmcgYXMgd2VsbC4KCkkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBuYW1lcyBvZiB0aGUgZnVuY3Rpb25zIGluIGBtbS9hbGxvY190YWcuY2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGVtIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NpbmZvX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmM9MjExPXN0YXRpYyB2b2lkIGFsbG9jaW5mb190b19wYXJhbXMoc3RydWN0IGNvZGV0YWcgKmN0LFxuLS1cbm1tL2FsbG9jX3RhZy5jLTIzMC0gKi9cbm1tL2FsbG9jX3RhZy5jOjIzMTpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0yMzIte1xuLS1cbm1tL2FsbG9jX3RhZy5jPTI0OD1zdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vYWxsb2NfdGFnLmMtMzA0LSAqL1xubW0vYWxsb2NfdGFnLmM6MzA1OnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0zMDYte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTM3OS0gKi9cbm1tL2FsbG9jX3RhZy5jOjM4MDpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0zODEte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTQzMC0gKi9cbm1tL2FsbG9jX3RhZy5jOjQzMTpzdGF0aWMgbG9uZyBhbGxvY2luZm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5tbS9hbGxvY190YWcuYy00MzItXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgX19hcmcpXG4tLVxubW0vYWxsb2NfdGFnLmMtNDM4LVx0Y2FzZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQ6XG5tbS9hbGxvY190YWcuYzo0Mzk6XHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbm1tL2FsbG9jX3RhZy5jLTQ0MC1cdFx0YnJlYWs7XG5tbS9hbGxvY190YWcuYy00NDEtXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX0FUOlxubW0vYWxsb2NfdGFnLmM6NDQyOlx0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDQzLVx0XHRicmVhaztcbm1tL2FsbG9jX3RhZy5jLTQ0NC1cdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVDpcbm1tL2FsbG9jX3RhZy5jOjQ0NTpcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDQ2LVx0XHRicmVhaztcbi0tXG5tbS9hbGxvY190YWcuYz00NTY9c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5tbS9hbGxvY190YWcuYy00NTgte1xubW0vYWxsb2NfdGFnLmM6NDU5Olx0cmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XG5tbS9hbGxvY190YWcuYy00NjAtfVxuLS1cbm1tL2FsbG9jX3RhZy5jPTQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGFsbG9jaW5mb19wcm9jX29wcyA9IHtcbi0tXG5tbS9hbGxvY190YWcuYy00NjctXHQucHJvY19yZWxlYXNlXHRcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXG5tbS9hbGxvY190YWcuYzo0Njg6XHQucHJvY19pb2N0bFx0XHQ9IGFsbG9jaW5mb19pb2N0bCxcbm1tL2FsbG9jX3RhZy5jLTQ2OS0jaWZkZWYgQ09ORklHX0NPTVBBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjAxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRoZW0gdGhyb3VnaCBhcyBJIGFuYWx5emUgdGhlIGNvZGU6CgoqKkFuYWx5emluZyBhbGxvY2luZm8gaW9jdGwgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZXNlIGBhbGxvY2luZm9gIGlvY3RsIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY29yZSBwaWVjZXM6IGBhbGxvY2luZm9faW9jdGxgLCBgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9hdGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X25leHRgLCBhbmQgZmluYWxseSBgbWF0Y2hlc19maWx0ZXJgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHRoZSByZWxhdGVkIGZpbHRlcmluZyBsb2dpYywgcHJlc3VtYWJseSBmb3IgbWFuYWdpbmcgYW5kIHJldHJpZXZpbmcgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgaW50ZXJhY3QgYW5kIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zOyB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgaXMgY3JpdGljYWwuIE5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbGliL2NvZGV0YWcuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBkZXBlbmRlbmNpZXMgaGVyZSB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2hhdCB0aGlzIGRhdGEgbWVhbnMsIG9yIHRoYXQgdGhlcmUgYXJlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBoZXJlIHRoYXQgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBvcGVyYXRpb24gb2YgYGFsbG9jaW5mb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29kZXRhZ19nZXRfY29udGVudF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9jb2RldGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL2NvZGV0YWcuYz01MD12b2lkIGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbi0tXG5saWIvY29kZXRhZy5jLTU0LVxubGliL2NvZGV0YWcuYzo1NTp1bnNpZ25lZCBsb25nIGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxubGliL2NvZGV0YWcuYy01Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBjb2RldGFnX2dldF9jb3VudGAgaW4gQ29udGV4dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIEkgc2VlIGBjb2RldGFnX2dldF9jb3VudGAsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGFzaywgJiMzNDtXaGVyZSBkb2VzIHRoaXMgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtPyBXaGF0IGlzIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eT8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBtb2R1bGUgb3IgZnJhbWV3b3JrPyYjMzQ7IEkmIzM5O20gbWVudGFsbHkgdHJhY2luZyBpdHMgY29ubmVjdGlvbnMuIEkmIzM5O20gYWxyZWFkeSBlbnZpc2lvbmluZyBwb3RlbnRpYWwgY2FsbGluZyBjb250ZXh0cywgbGlrZWx5IHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCB0byBzdG9yZSB0aGUgY29kZSB0YWdzIGFuZCB3aGVyZSB0aGlzIGNvdW50IG1pZ2h0IGJlIG5lZWRlZC4KClRoZW4gSSBtb3ZlIHRvIHRoZSBkZXNpZ24gaXRzZWxmLiBXaGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIHRoaXM/IFdoYXQgZWRnZSBjYXNlcyBtaWdodCBub3QgYmUgaGFuZGxlZD8gSXMgaXQgb3B0aW1pemVkIGZvciBjb21tb24gc2NlbmFyaW9zPyBXaGF0IGlzIHRoZSBleHBlY3RlZCBzY2FsZSwgYW5kIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvdW50aW5nIG1lY2hhbmlzbT8gSXMgaXQgTygxKSwgTyhuKSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBpbmRleGluZyBtZXRob2RzLCBhbmQgYW55IGNhY2hpbmcgc3RyYXRlZ2llcyB0byB0cnVseSBncmFzcCB0aGUgdGltZSBjb21wbGV4aXR5LiBJ4oCZbSB0aGlua2luZywgJiMzNDtJcyB0aGVyZSBhIHRyYWRlLW9mZiBoZXJlPyBEb2VzIHRoaXMgZnVuY3Rpb24gcHJpb3JpdGl6ZSBzcGVlZCBvdmVyIG1lbW9yeSwgb3IgdmljZSB2ZXJzYT8mIzM0OwoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgaW1wbGVtZW50YXRpb25zLiBJcyB0aGlzIGEgc2ltcGxlIGNvdW50ZXIgb24gYSBkYXRhYmFzZSByZWNvcmQ/IElzIGl0IGFuIGluLW1lbW9yeSBhZ2dyZWdhdGlvbj8gRG9lcyBpdCBpbnZvbHZlIGl0ZXJhdGluZyBvdmVyIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIGFyZSB3ZSBsZXZlcmFnaW5nIHNvbWUgc29ydCBvZiBwcmVjb21wdXRlZCBpbmRleD8gSSYjMzk7bSBhbHJlYWR5IHNlZWluZyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgaXQmIzM5O3Mgbm90IHRocmVhZC1zYWZlIGFuZCBjb25zaWRlcmluZyBob3cgdG8gbWFuYWdlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHNoYXJlZCBjb3VudGVycyBvciBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O20gYWxzbyBhc2tpbmcgbXlzZWxmIGlmIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBoYW5kbGUgbnVsbCBvciBlbXB0eSByZXN1bHRzIGdyYWNlZnVsbHkuCgpNb3N0IGltcG9ydGFudGx5LCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBlcnJvcnMsIGJlY2F1c2Ugbm8gcGllY2Ugb2YgY29kZSBpcyBwZXJmZWN0LiBBcmUgdGhlcmUgZ3VhcmRyYWlscyBpbiBwbGFjZSBmb3IgcG90ZW50aWFsIGRhdGFiYXNlIGVycm9ycyBvciBpbnZhbGlkIGlucHV0PyBEbyBlcnJvciBtZXNzYWdlcyBjbGVhcmx5IGNvbW11bmljYXRlIHRoZSBwcm9ibGVtIGFuZCBpdHMgbGlrZWx5IGNhdXNlPyBJ4oCZbSBpbWFnaW5pbmcgdGhlIHdvcnN0LWNhc2Ugc2NlbmFyaW9zIGFuZCB0aGUgZGVidWdnaW5nIHN0ZXBzIEkmIzM5O2QgbmVlZCB0byB0YWtlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGBjb2RldGFnX2dldF9jb3VudGAgcmFpc2VzIGEgaG9zdCBvZiBxdWVzdGlvbnMgdGhhdCBtdXN0IGJlIGFkZHJlc3NlZCB0byBlbnN1cmUgaXRzIGVmZmVjdGl2ZSBhbmQgcmVsaWFibGUgb3BlcmF0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGV0YWdfZ2V0X2NvdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL2NvZGV0YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jPTU1PXVuc2lnbmVkIGxvbmcgY29kZXRhZ19nZXRfY29udGVudF9pZChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpXG4tLVxubGliL2NvZGV0YWcuYy02MS1cbmxpYi9jb2RldGFnLmM6NjI6dW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbmxpYi9jb2RldGFnLmMtNjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYxNQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcgSW50ZXJmYWNlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGJyYW5kIG5ldyBpb2N0bCBpbnRlcmZhY2UgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZywgZXhwb3NlZCB0aHJvdWdoIGAvcHJvYy9hbGxvY2luZm9gLiBUaGF0JiMzOTtzIGEgYmlnIHJlZCBmbGFnIGZvciBmdXp6aW5nLCByaWdodCBvZmYgdGhlIGJhdC4gQW55IG5ldyB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBBUEksIGVzcGVjaWFsbHkgb25lIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUga2VybmVsIG1lbW9yeSBpbmZvcm1hdGlvbiwgbmVlZHMgc2VyaW91cyBzY3J1dGlueS4gVGhlIGFpbSBpcyB0byBleHRyYWN0IGFuZCBmaWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gZGF0YSBhcyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhLiBUaGF0IHNvdW5kcyBpbnRlcmVzdGluZy4KClRoZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgY29uZmlnIGVuYWJsZXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgdGhhdCYjMzk7cyBleHBlY3RlZC4gV2Ugc2hvdWxkIGVuc3VyZSB0aGUgbmV3IGBhbGxvY2luZm9faW9jdGxgIGFuZCBgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bGAgY2FsbHMgYXJlIHJlc2lsaWVudCB0byBhIG11bHRpdHVkZSBvZiBtYWxmb3JtZWQgYW5kIGludmFsaWQgaW5wdXRzLiBXZSBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdmFyaW91cyBmdW5jdGlvbnMgd2l0aGluIHRoZXNlIGlvY3RsczogYGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dGAsIGBtYXRjaGVzX2ZpbHRlcmAsIGBjb2RldGFnX2dldF9jb250ZW50X2lkYCwgYW5kIGBjb2RldGFnX2dldF9jb3VudGAuICBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcywgYW5kIHRoZXkmIzM5O3JlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gZXhwbG9yZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYnVmZmVyIG92ZXJmbG93cywgYW5kIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgaW9jdGxzLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgYSBmdXp6aW5nIHN0cmF0ZWd5IHRoYXQgZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gdGhlc2UgaWRlbnRpZmllZCBmdW5jdGlvbnMsIHZhcnlpbmcgaW5wdXRzLCBzaXplcywgYW5kIHNlcXVlbmNlcy4KCkkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBjb25maWdzOyBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBtYWluIG9uZSwgYXMgZXhwZWN0ZWQuIEkmIzM5O2xsIGFsc28gZG91YmxlIGNoZWNrIGBDT05GSUdfQ09NUEFUYCwgYnV0IHRoYXQmIzM5O3MgYSBnZW5lcmljIG9uZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggb2xkZXIgdXNlcmxhbmQsIGFuZCBmdXp6IHRoYXQgdG9vLiBMZXQmIzM5O3MgY2FsbCB0aGlzIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9fY29tcGF0X2lvY3RsJiMzNDssCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X2F0JiMzNDssCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bF9nZXRfbmV4dCYjMzQ7LAogICAgJiMzNDttYXRjaGVzX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2dldF9jb250ZW50X2lkJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfZ2V0X2NvdW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9jdGwgaW50ZXJmYWNlIGZvciBgL3Byb2MvYWxsb2NpbmZvYCB0byBhbGxvdyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYW5kIGZpbHRlcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgZGF0YS4gVGhpcyBpcyBhIG5ldyB1c2Vyc3BhY2UtZmFjaW5nIEFQSSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGhhbmRsZXMgaW52YWxpZCBpbnB1dHMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBjb25jdXJyZW5jeSBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2NvbXBhdF9pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2lvY3RsX2dldF9hdCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9faW9jdGxfZ2V0X25leHQmIzM0OywKICAgICYjMzQ7bWF0Y2hlc19maWx0ZXImIzM0OywKICAgICYjMzQ7Y29kZXRhZ19nZXRfY29udGVudF9pZCYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2dldF9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvY3RsIGludGVyZmFjZSBmb3IgYC9wcm9jL2FsbG9jaW5mb2AgdG8gYWxsb3cgc3RydWN0dXJlZCBiaW5hcnkgZGF0YSBleHRyYWN0aW9uIGFuZCBmaWx0ZXJpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGRhdGEuIFRoaXMgaXMgYSBuZXcgdXNlcnNwYWNlLWZhY2luZyBBUEkgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGludmFsaWQgaW5wdXRzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgY29uY3VycmVuY3kgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MTMuODMyMzI3Mzc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMzE5MTczNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jaW5mb19pb2N0bFwiLFxuICAgIFwiYWxsb2NpbmZvX2NvbXBhdF9pb2N0bFwiLFxuICAgIFwiYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkXCIsXG4gICAgXCJhbGxvY2luZm9faW9jdGxfZ2V0X2F0XCIsXG4gICAgXCJhbGxvY2luZm9faW9jdGxfZ2V0X25leHRcIixcbiAgICBcIm1hdGNoZXNfZmlsdGVyXCIsXG4gICAgXCJjb2RldGFnX2dldF9jb250ZW50X2lkXCIsXG4gICAgXCJjb2RldGFnX2dldF9jb3VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW9jdGwgaW50ZXJmYWNlIGZvciBgL3Byb2MvYWxsb2NpbmZvYCB0byBhbGxvdyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYW5kIGZpbHRlcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgZGF0YS4gVGhpcyBpcyBhIG5ldyB1c2Vyc3BhY2UtZmFjaW5nIEFQSSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGhhbmRsZXMgaW52YWxpZCBpbnB1dHMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBjb25jdXJyZW5jeSBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjI4OjEzLjgzMjMzNTQzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2Nzg1ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDI5MGVkODQ2ZjFkMTVjN2U0MWNjZjQ3OGZlZTY5NjAyMTVhNGVhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCA3IDAyOjI4OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG5pbmRleCA1Mzg5ZDI0MTE3NmE4YS4uYzNhMjg0Njc5NTVmM2UgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxcbkBAIC00Niw2ICs0NiwxMSBAQCBzeXNjdGw6XFxuIFJ1bnRpbWUgaW5mbzpcXG4gICAvcHJvYy9hbGxvY2luZm9cXG4gXFxuKyAgUHJvZmlsaW5nIGRhdGEgY2FuIGJlIHJldHJpZXZlZCBlaXRoZXIgYnkgcmVhZGluZyBgL3Byb2MvYWxsb2NpbmZvYCBkaXJlY3RseSBhc1xcbisgIHRleHQgb3IgcHJvZ3JhbW1hdGljYWxseSB2aWEgYGlvY3RsKClgIGNhbGxzIGRlZmluZWQgaW4gYFxcdTAwM2N1YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFx1MDAzZWAuXFxuKyAgVGhlIGlvY3RsIGludGVyZmFjZSBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhIGV4dHJhY3Rpb24gYXMgd2VsbCBhcyBmaWx0ZXJpbmdcXG4rICBieSBtb2R1bGUgbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUgbnVtYmVyLCBhY2N1cmFjeSwgb3IgYWxsb2NhdGlvbiBzaXplIGxpbWl0cy5cXG4rXFxuIEV4YW1wbGUgb3V0cHV0OjpcXG4gXFxuICAgcm9vdEBtb3JpYS1rdm06fiMgc29ydCAtZyAvcHJvYy9hbGxvY2luZm98dGFpbHxudW1mbXQgLS10bz1pZWNcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QgYi9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdFxcbmluZGV4IDNmMGVmMWUyN2ViMDdkLi4yZmM1MzA5Mzc1MmQxMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XFxuQEAgLTM0Niw2ICszNDYsOCBAQCBDb2RlICBTZXEjICAgIEluY2x1ZGUgRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzY21haWx0bzpsdXptYXhpbWlsaWFuQGdtYWlsLmNvbVxcdTAwM2VcXG4gMHhBNSAgMjAtMkYgIGxpbnV4L3N1cmZhY2VfYWdncmVnYXRvci9kdHguaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgU3VyZmFjZSBEVFggZHJpdmVyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzY21haWx0bzpsdXptYXhpbWlsaWFuQGdtYWlsLmNvbVxcdTAwM2VcXG4rMHhBNiAgMDAtMEYgIHVhcGkvbGludXgvYWxsb2NfdGFnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXHUwMDNjbWFpbHRvOnN1cmVuYkBnb29nbGUuY29tXFx1MDAzZVxcbiAweEFBICAwMC0zRiAgbGludXgvdWFwaS9saW51eC91c2VyZmF1bHRmZC5oXFxuIDB4QUIgIDAwLTFGICBsaW51eC9uYmQuaFxcbiAweEFDICAwMC0xRiAgbGludXgvcmF3LmhcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDI5YzMwMmU5YzE3YmEzLi44NjdkNGFkNThmYjQyMiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE2OTM3LDcgKzE2OTM3LDkgQEAgUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oXFxuIEY6XFx0aW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oXFxuK0Y6XFx0aW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxuIEY6XFx0bW0vYWxsb2NfdGFnLmNcXG4rRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvXFxuIFxcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEJBTExPT05cXG4gTTpcXHRBbmRyZXcgTW9ydG9uIFxcdTAwM2Nha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaCBiL2luY2x1ZGUvbGludXgvY29kZXRhZy5oXFxuaW5kZXggZGRhZTc0ODRjYTQ1NmMuLmEyNWEwODVjMmRmMTk5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY29kZXRhZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jb2RldGFnLmhcXG5AQCAtNzcsNiArNzcsOCBAQCBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciB7XFxuIHZvaWQgY29kZXRhZ19sb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XFxuIGJvb2wgY29kZXRhZ190cnlsb2NrX21vZHVsZV9saXN0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XFxuIHZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcXG4rdW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XFxuK3Vuc2lnbmVkIGludCBjb2RldGFnX2dldF9jb3VudChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpO1xcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XFxuIHN0cnVjdCBjb2RldGFnICpjb2RldGFnX25leHRfY3Qoc3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgKml0ZXIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjcwZjY5M2IxODIyMDRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxuQEAgLTAsMCArMSw5OSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbisvKlxcbisgKiBhbGxvY190YWcgSU9DVEwgQVBJIGRlZmluaXRpb25cXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgTExDLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cXG4rICpcXG4rICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcXG4rICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXNcXG4rICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfVUFQSV9BTExPQ19UQUdfSFxcbisjZGVmaW5lIF9VQVBJX0FMTE9DX1RBR19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXFxuKyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG9cXG4rICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXFxuKyAqL1xcbisjZGVmaW5lIEFMTE9DSU5GT19TVFJfU0laRVxcdDY0XFxuK1xcbitzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQge1xcbitcXHRfX3U2NCBpZDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBhbGxvY2luZm9fdGFnIHtcXG4rXFx0LyogTG9uZ2VyIG5hbWVzIGFyZSB0cmltbWVkICovXFxuK1xcdGNoYXIgbW9kbmFtZVtBTExPQ0lORk9fU1RSX1NJWkVdO1xcbitcXHRjaGFyIGZ1bmN0aW9uW0FMTE9DSU5GT19TVFJfU0laRV07XFxuK1xcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcXG4rXFx0X191NjQgbGluZW5vO1xcbitcXHQvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi9cXG4rXFx0X191NjQgaW5hY2N1cmF0ZTtcXG4rfTtcXG4rXFxuKy8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXFxuK3N0cnVjdCBhbGxvY2luZm9fY291bnRlciB7XFxuK1xcdF9fdTY0IGJ5dGVzO1xcbitcXHRfX3U2NCBjYWxscztcXG4rXFx0X191OCBhY2N1cmF0ZTtcXG4rfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7XFxuK1xcbitzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHtcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWcgdGFnO1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvdW50ZXIgY291bnRlcjtcXG4rfTtcXG4rXFxuK2VudW0ge1xcbitcXHRBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfRlVOQ1RJT04sXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfRklMRU5BTUUsXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfTElORU5PLFxcbitcXHRBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUsXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUsXFxuK1xcdEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsXFxuK1xcdF9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUID0gQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRVxcbit9O1xcbitcXG4rI2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTU9ETkFNRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTU9ETkFNRSlcXG4rI2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT05cXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OKVxcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfRklMRU5BTUUpXFxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOT1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTElORU5PKVxcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19JTkFDQ1VSQVRFXFx0KDEgXFx1MDAzY1xcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9JTkFDQ1VSQVRFKVxcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpXFxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRSlcXG4rXFxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLUyBcXFxcXFxuK1xcdCgoMSBcXHUwMDNjXFx1MDAzYyAoX19BTExPQ0lORk9fRklMVEVSX0xBU1QgKyAxKSkgLSAxKVxcbitcXG4rc3RydWN0IGFsbG9jaW5mb19maWx0ZXIge1xcbitcXHRfX3U2NCBtYXNrOyAvKiBiaXRtYXNrIG9mIHRoZSBmaWx0ZXIgZmllbGRzIHVzZWQgKi9cXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWcgZmllbGRzO1xcbitcXHRfX3U2NCBtaW5fc2l6ZTtcXG4rXFx0X191NjQgbWF4X3NpemU7XFxuK307XFxuK1xcbitzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XFxuK1xcdC8qIGlucHV0cyAqL1xcbitcXHRfX3U2NCBwb3M7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcXG4rXFx0Lyogb3V0cHV0ICovXFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgZGF0YTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgX0FMTE9DSU5GT19JT0NfQ09OVEVOVF9JRFxcdDBcXG4rI2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfQVRcXHRcXHQxXFxuKyNkZWZpbmUgX0FMTE9DSU5GT19JT0NfR0VUX05FWFRcXHRcXHQyXFxuK1xcbisjZGVmaW5lIEFMTE9DSU5GT19JT0NfQkFTRVxcdFxcdDB4QTZcXG4rI2RlZmluZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSURcXHRfSU9SKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfQ09OVEVOVF9JRCxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKVxcbisjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX0FUXFx0XFx0X0lPV1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19HRVRfQVQsXFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdClcXG4rI2RlZmluZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUXFx0XFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhULFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhKVxcbitcXG4rI2VuZGlmIC8qIF9VQVBJX0FMTE9DX1RBR19IICovXFxuZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jXFxuaW5kZXggNDAwMWE3ZWE2Njc1NDIuLmE5Y2RhNGM5NjJhMzAzIDEwMDY0NFxcbi0tLSBhL2xpYi9jb2RldGFnLmNcXG4rKysgYi9saWIvY29kZXRhZy5jXFxuQEAgLTE5LDYgKzE5LDggQEAgc3RydWN0IGNvZGV0YWdfdHlwZSB7XFxuIFxcdHN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyBkZXNjO1xcbiBcXHQvKiBnZW5lcmF0ZXMgdW5pcXVlIHNlcXVlbmNlIG51bWJlciBmb3IgbW9kdWxlIGxvYWQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0X21vZF9zZXE7XFxuK1xcdC8qIGJ1bXBlZCBvbiBldmVyeSBtb2R1bGUgbG9hZCBhbmQgdW5sb2FkICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgY29udGVudF9pZDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBjb2RldGFnX3JhbmdlIHtcXG5AQCAtNTAsNiArNTIsMjAgQEAgdm9pZCBjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpXFxuIFxcdHVwX3JlYWQoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbiB9XFxuIFxcbit1bnNpZ25lZCBsb25nIGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGN0dHlwZS1cXHUwMDNlY29udGVudF9pZDtcXG4rfVxcbitcXG4rdW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBjdHR5cGUtXFx1MDAzZWNvdW50O1xcbit9XFxuK1xcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyID0ge1xcbkBAIC0yMDQsNiArMjIwLDcgQEAgc3RhdGljIGludCBjb2RldGFnX21vZHVsZV9pbml0KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSwgc3RydWN0IG1vZHVsZSAqbW9kKVxcbiBcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIFxcdGNtb2QtXFx1MDAzZW1vZF9zZXEgPSArK2N0dHlwZS1cXHUwMDNlbmV4dF9tb2Rfc2VxO1xcbitcXHQrK2N0dHlwZS1cXHUwMDNlY29udGVudF9pZDtcXG4gXFx0bW9kX2lkID0gaWRyX2FsbG9jKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9pZHIsIGNtb2QsIDAsIDAsIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAobW9kX2lkIFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0aWYgKGN0dHlwZS1cXHUwMDNlZGVzYy5tb2R1bGVfbG9hZCkge1xcbkBAIC0zNjgsNiArMzg1LDcgQEAgdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbiBcXHRcXHRcXHRjdHR5cGUtXFx1MDAzZWNvdW50IC09IHJhbmdlX3NpemUoY3R0eXBlLCBcXHUwMDI2Y21vZC1cXHUwMDNlcmFuZ2UpO1xcbiBcXHRcXHRcXHRpZHJfcmVtb3ZlKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9pZHIsIG1vZF9pZCk7XFxuIFxcdFxcdFxcdGtmcmVlKGNtb2QpO1xcbitcXHRcXHRcXHQrK2N0dHlwZS1cXHUwMDNlY29udGVudF9pZDtcXG4gXFx0XFx0fVxcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIFxcdFxcdGlmIChmb3VuZCBcXHUwMDI2XFx1MDAyNiBjdHR5cGUtXFx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbSlcXG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xcbmluZGV4IGQ5YmUxY2Y1MTg3ZDk3Li4zMmFjMDY3NGQ4YmY2ZCAxMDA2NDRcXG4tLS0gYS9tbS9hbGxvY190YWcuY1xcbisrKyBiL21tL2FsbG9jX3RhZy5jXFxuQEAgLTUsNiArNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2thbGxzeW1zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2V4dC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG5AQCAtMTQsNiArMTUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBBTExPQ0lORk9fRklMRV9OQU1FXFx0XFx0XFxcImFsbG9jaW5mb1xcXCJcXG4gI2RlZmluZSBNT0RVTEVfQUxMT0NfVEFHX1ZNQVBfU0laRVxcdCgxMDAwMDBVTCAqIHNpemVvZihzdHJ1Y3QgYWxsb2NfdGFnKSlcXG5AQCAtNDcsNiArNDksMTEgQEAgc3RydWN0IGFsbG9jaW5mb19wcml2YXRlIHtcXG4gXFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlcjtcXG4gXFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgcmVwb3J0ZWRfaXRlcjtcXG4gXFx0Ym9vbCBwcmludF9oZWFkZXI7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcXG4rXFx0LyogaW9jdGwgdXNlcyBhIHNlcGFyYXRlIGl0ZXJhdG9yIG5vdCB0byBpbnRlcmZlcmUgd2l0aCByZWFkcyAqL1xcbitcXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpb2N0bF9pdGVyO1xcbitcXHRib29sIHBvc2l0aW9uZWQ7IC8qIHNlcV9vcGVuX3ByaXZhdGUoKSBzZXRzIHRvIDAgKi9cXG4rXFx0c3RydWN0IG11dGV4IGlvY3RsX2xvY2s7XFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCAqYWxsb2NpbmZvX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXFxuQEAgLTEzMCw2ICsxMzcsMzQwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYWxsb2NpbmZvX3NlcV9vcCA9IHtcXG4gXFx0LnNob3dcXHQ9IGFsbG9jaW5mb19zaG93LFxcbiB9O1xcbiBcXG4rLypcXG4rICogSW5pdGlhbGl6ZXMgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgYWxsb2NhdGVzIHByaXZhdGUgc3RhdGUgd2hlbiBvcGVuaW5nXFxuKyAqIHRoZSAvcHJvYy9hbGxvY2luZm8gcHJvY2ZzIGVudHJ5LlxcbisgKi9cXG4rc3RhdGljIGludCBhbGxvY2luZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2YWxsb2NpbmZvX3NlcV9vcCxcXG4rXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUpKTtcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0c3RydWN0IHNlcV9maWxlICptID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHRcXHRzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXYgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbitcXG4rXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlaW9jdGxfbG9jayk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLypcXG4rICogQ2xlYW5zIHVwIHRoZSBzZXFfZmlsZSBzdGF0ZSBhbmQgZnJlZXMgdXAgdGhlIHByaXZhdGUgc3RhdGUgYWxsb2NhdGVkIGluXFxuKyAqIGFsbG9jaW5mb19vcGVuKCkgd2hlbiBjbG9zaW5nIHRoZSAvcHJvYy9hbGxvY2luZm8gZmlsZSBkZXNjcmlwdG9yLlxcbisgKi9cXG4rc3RhdGljIGludCBhbGxvY2luZm9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSAqcHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2Vpb2N0bF9sb2NrKTtcXG4rXFx0cmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3VmZml4IG9mIGEgc3RyaW5nIHNvIHRoYXQgaXRzIGxlbmd0aCBmaXRzIHdpdGhpblxcbisgKiBBTExPQ0lORk9fU1RSX1NJWkUsIHByZXNlcnZpbmcgdGhlIHRyYWlsaW5nIGNoYXJhY3RlcnMuXFxuKyAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXFxuKyAqIHdoZW4gZmlsdGVyaW5nIGJ5IHRoZXNlIGNyaXRlcmlhLCB3ZSBjb21wYXJlIHRoZSBsYXN0IDY0IGNoYXJhY3RlcnMgdG9cXG4rICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpXFxuK3tcXG4rXFx0c2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpO1xcbitcXG4rXFx0LyogS2VlcCBhbiBleHRyYSBzcGFjZSBmb3IgdGhlIHRyYWlsaW5nIE5VTEwuICovXFxuK1xcdGlmIChsZW4gXFx1MDAzZT0gQUxMT0NJTkZPX1NUUl9TSVpFKVxcbitcXHRcXHRzdHIgKz0gKGxlbiAtIEFMTE9DSU5GT19TVFJfU0laRSkgKyAxO1xcbitcXHRyZXR1cm4gc3RyO1xcbit9XFxuK1xcbisvKiBDb3B5IGEgc3RyaW5nIGFuZCB0cmltIGZyb20gdGhlIGJlZ2lubmluZyBpZiBpdCdzIHRvbyBsb25nICovXFxuK3N0YXRpYyB2b2lkIGFsbG9jaW5mb19jb3B5X3N0cihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpXFxuK3tcXG4rXFx0c3Ryc2NweV9wYWQoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xcbit9XFxuK1xcbisvKiBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCBvbmx5IGNvbnNpZGVyIHRoZSB0cmltbWVkIHN1ZmZpeCBpZiBzMSBpcyB0b28gbG9uZyAqL1xcbitzdGF0aWMgaW50IGFsbG9jaW5mb19jbXBfc3RyKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqdGVtcGxhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIHN0cm5jbXAoYWxsb2NpbmZvX3N0cihzdHIpLCB0ZW1wbGF0ZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcXG4rfVxcbitcXG4rLyogRmV0Y2ggdGhlIHBlci1DUFUgY291bnRlcnMgKi9cXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhzdHJ1Y3QgY29kZXRhZyAqY3QpXFxuK3tcXG4rXFx0cmV0dXJuIGFsbG9jX3RhZ19yZWFkKGN0X3RvX2FsbG9jX3RhZyhjdCkpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQb3B1bGF0ZXMgdGhlIFVBUEkgYWxsb2NpbmZvX3RhZ19kYXRhIHN0cnVjdHVyZSB3aXRoIGFjdGl2ZSBydW50aW1lXFxuKyAqIHByb2ZpbGluZyBjb3VudGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgZ2l2ZW4ga2VybmVsIGNvZGV0YWcuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBhbGxvY2luZm9fdG9fcGFyYW1zKHN0cnVjdCBjb2RldGFnICpjdCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqZGF0YSxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMpXFxuK3tcXG4rXFx0aWYgKGN0LVxcdTAwM2Vtb2RuYW1lKVxcbitcXHRcXHRhbGxvY2luZm9fY29weV9zdHIoZGF0YS1cXHUwMDNldGFnLm1vZG5hbWUsIGN0LVxcdTAwM2Vtb2RuYW1lKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkYXRhLVxcdTAwM2V0YWcubW9kbmFtZVswXSA9ICdcXFxcMCc7XFxuK1xcdGFsbG9jaW5mb19jb3B5X3N0cihkYXRhLVxcdTAwM2V0YWcuZnVuY3Rpb24sIGN0LVxcdTAwM2VmdW5jdGlvbik7XFxuK1xcdGFsbG9jaW5mb19jb3B5X3N0cihkYXRhLVxcdTAwM2V0YWcuZmlsZW5hbWUsIGN0LVxcdTAwM2VmaWxlbmFtZSk7XFxuK1xcdGRhdGEtXFx1MDAzZXRhZy5saW5lbm8gPSBjdC1cXHUwMDNlbGluZW5vO1xcbitcXHRkYXRhLVxcdTAwM2Vjb3VudGVyLmJ5dGVzID0gY291bnRlcnMtXFx1MDAzZWJ5dGVzO1xcbitcXHRkYXRhLVxcdTAwM2Vjb3VudGVyLmNhbGxzID0gY291bnRlcnMtXFx1MDAzZWNhbGxzO1xcbitcXHRkYXRhLVxcdTAwM2Vjb3VudGVyLmFjY3VyYXRlID0gIWFsbG9jX3RhZ19pc19pbmFjY3VyYXRlKGN0X3RvX2FsbG9jX3RhZyhjdCkpO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXRyaWV2ZXMgdGhlIHVuaXF1ZSBjb250ZW50IElEIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBhbGxvY2F0aW9uIHRhZyBtb2R1bGVcXG4rICogbGF5b3V0LCBhbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGV0ZWN0IGlmIG1vZHVsZXMgd2VyZSBsb2FkZWQgLyB1bmxvYWRlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgcGFyYW1zO1xcbitcXG4rXFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRwYXJhbXMuaWQgPSBjb2RldGFnX2dldF9jb250ZW50X2lkKGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcXG4rXFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogVmVyaWZpZXMgd2hldGhlciBhIGdpdmVuIGNvZGV0YWcgc2F0aXNmaWVzIHRoZSBhY3RpdmUgZmlsdGVyaW5nIGNyaXRlcmlhIGJ5XFxuKyAqIG1hdGNoaW5nIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGZpbHRlci5cXG4rICovXFxuK3N0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXFxuK1xcdFxcdFxcdCAgIGJvb2wgKmZldGNoZWRfY291bnRlcnMpXFxuK3tcXG4rXFx0Ym9vbCBpbmFjY3VyYXRlO1xcbitcXG4rXFx0aWYgKCFmaWx0ZXIgfHwgIWZpbHRlci1cXHUwMDNlbWFzaylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUUpIHtcXG4rXFx0XFx0LyogdXNlciB3YW50cyB0byBmaWx0ZXIgYnkgbW9kbmFtZSBidXQgY3QtXFx1MDAzZW1vZG5hbWUgaXMgTlVMTCAqL1xcbitcXHRcXHRpZiAoIWN0LVxcdTAwM2Vtb2RuYW1lKSB7XFxuK1xcdFxcdFxcdC8qIHZhbGlkYXRlIGlmIHVzZXIgd2FzIGF0dGVtcHRpbmcgdG8gZmlsdGVyIGZvciBidWlsdC1pbiBhbGxvY2F0aW9ucyAqL1xcbitcXHRcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VmaWVsZHMubW9kbmFtZVswXSAhPSAnXFxcXDAnKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYWxsb2NpbmZvX2NtcF9zdHIoY3QtXFx1MDAzZW1vZG5hbWUsIGZpbHRlci1cXHUwMDNlZmllbGRzLm1vZG5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgY3QtXFx1MDAzZWZ1bmN0aW9uIFxcdTAwMjZcXHUwMDI2IGFsbG9jaW5mb19jbXBfc3RyKGN0LVxcdTAwM2VmdW5jdGlvbiwgZmlsdGVyLVxcdTAwM2VmaWVsZHMuZnVuY3Rpb24pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoKGZpbHRlci1cXHUwMDNlbWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGN0LVxcdTAwM2VmaWxlbmFtZSBcXHUwMDI2XFx1MDAyNiBhbGxvY2luZm9fY21wX3N0cihjdC1cXHUwMDNlZmlsZW5hbWUsIGZpbHRlci1cXHUwMDNlZmllbGRzLmZpbGVuYW1lKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgY3QtXFx1MDAzZWxpbmVubyAhPSBmaWx0ZXItXFx1MDAzZWZpZWxkcy5saW5lbm8pXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkge1xcbitcXHRcXHRpbmFjY3VyYXRlID0gISEoY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpO1xcbitcXHRcXHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXFx1MDAzZWZpZWxkcy5pbmFjY3VyYXRlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHtcXG4rXFx0XFx0aWYgKCEqZmV0Y2hlZF9jb3VudGVycykge1xcbitcXHRcXHRcXHQqY291bnRlcnMgPSBhbGxvY2luZm9fcHJlZmV0Y2hfY291bnRlcnMoY3QpO1xcbitcXHRcXHRcXHQqZmV0Y2hlZF9jb3VudGVycyA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjb3VudGVycy1cXHUwMDNlYnl0ZXMgXFx1MDAzYyBmaWx0ZXItXFx1MDAzZW1pbl9zaXplKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICgoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgY291bnRlcnMtXFx1MDAzZWJ5dGVzIFxcdTAwM2UgZmlsdGVyLVxcdTAwM2VtYXhfc2l6ZSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLypcXG4rICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzXFxuKyAqIHByb2ZpbGluZyBkYXRhIGFuZCByZXR1cm5zIGl0IHRvIHVzZXJzcGFjZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xcbitcXHRzdHJ1Y3QgY29kZXRhZyAqY3Q7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHBhcmFtcyA9IHswfTtcXG4rXFx0X191NjQgc2tpcF9jb3VudDtcXG4rXFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVycztcXG4rXFx0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZwYXJhbXMsIGFyZywgc2l6ZW9mKHBhcmFtcykpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChwYXJhbXMuZmlsdGVyLm1hc2sgXFx1MDAyNiB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoKHBhcmFtcy5maWx0ZXIubWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChwYXJhbXMuZmlsdGVyLm1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwYXJhbXMuZmlsdGVyLm1pbl9zaXplIFxcdTAwM2UgcGFyYW1zLmZpbHRlci5tYXhfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRwcml2ID0gbS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2xvY2spO1xcbitcXHRjb2RldGFnX2xvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XFxuK1xcbitcXHRpZiAocGFyYW1zLnBvcyBcXHUwMDNlPSBjb2RldGFnX2dldF9jb3VudChhbGxvY190YWdfY3R0eXBlKSkge1xcbitcXHRcXHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vpb2N0bF9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNraXBfY291bnQgPSBwYXJhbXMucG9zO1xcbitcXG4rXFx0aWYgKHBhcmFtcy5maWx0ZXIubWFzaylcXG4rXFx0XFx0cHJpdi1cXHUwMDNlZmlsdGVyID0gcGFyYW1zLmZpbHRlcjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcml2LVxcdTAwM2VmaWx0ZXIubWFzayA9IDA7XFxuK1xcbitcXHQvKiBGaW5kIHRoZSBjb2RldGFnICovXFxuK1xcdHByaXYtXFx1MDAzZWlvY3RsX2l0ZXIgPSBjb2RldGFnX2dldF9jdF9pdGVyKGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcXHUwMDI2cHJpdi1cXHUwMDNlaW9jdGxfaXRlcik7XFxuK1xcbitcXHR3aGlsZSAoY3QpIHtcXG4rXFx0XFx0ZmV0Y2hlZF9jb3VudGVycyA9IGZhbHNlO1xcbitcXHRcXHRpZiAobWF0Y2hlc19maWx0ZXIoY3QsIFxcdTAwMjZwcml2LVxcdTAwM2VmaWx0ZXIsIFxcdTAwMjZjb3VudGVycywgXFx1MDAyNmZldGNoZWRfY291bnRlcnMpKSB7XFxuK1xcdFxcdFxcdGlmIChza2lwX2NvdW50ID09IDApXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRza2lwX2NvdW50LS07XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2l0ZXIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY3QpIHtcXG4rXFx0XFx0aWYgKCFmZXRjaGVkX2NvdW50ZXJzKVxcbitcXHRcXHRcXHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XFxuK1xcdFxcdGFsbG9jaW5mb190b19wYXJhbXMoY3QsIFxcdTAwMjZwYXJhbXMuZGF0YSwgXFx1MDAyNmNvdW50ZXJzKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG9zaXRpb25lZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2xvY2spO1xcbitcXG4rXFx0aWYgKCFjdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBBZHZhbmNlcyB0aGUgaW9jdGwgaXRlcmF0b3IgdG8gdGhlIG5leHQgYWxsb2NhdGlvbiB0YWcgaW4gdGhlIHNlcXVlbmNlIGFuZFxcbisgKiByZXR1cm5zIGl0cyBwcm9maWxpbmcgZGF0YSB0byB1c2Vyc3BhY2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xcbitcXHRzdHJ1Y3QgY29kZXRhZyAqY3Q7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcGFyYW1zO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVycztcXG4rXFx0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTtcXG4rXFx0cHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vpb2N0bF9sb2NrKTtcXG4rXFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vwb3NpdGlvbmVkKSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlvY3RsX2l0ZXIgPSBjb2RldGFnX2dldF9jdF9pdGVyKGFsbG9jX3RhZ19jdHR5cGUpO1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3NpdGlvbmVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2l0ZXIpO1xcbitcXHR3aGlsZSAoY3QpIHtcXG4rXFx0XFx0ZmV0Y2hlZF9jb3VudGVycyA9IGZhbHNlO1xcbitcXHRcXHRpZiAobWF0Y2hlc19maWx0ZXIoY3QsIFxcdTAwMjZwcml2LVxcdTAwM2VmaWx0ZXIsIFxcdTAwMjZjb3VudGVycywgXFx1MDAyNmZldGNoZWRfY291bnRlcnMpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y3QgPSBjb2RldGFnX25leHRfY3QoXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2l0ZXIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY3QpIHtcXG4rXFx0XFx0aWYgKCFmZXRjaGVkX2NvdW50ZXJzKVxcbitcXHRcXHRcXHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XFxuK1xcdFxcdGFsbG9jaW5mb190b19wYXJhbXMoY3QsIFxcdTAwMjZwYXJhbXMsIFxcdTAwMjZjb3VudGVycyk7XFxuK1xcdH1cXG4rXFx0aWYgKCFjdCkge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3NpdGlvbmVkID0gZmFsc2U7XFxuK1xcdFxcdHJldCA9IC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlaW9jdGxfbG9jayk7XFxuK1xcbitcXHRpZiAocmV0ID09IDApIHtcXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLypcXG4rICogRW50cnkgcG9pbnQgaW9jdGwgZnVuY3Rpb24gZm9yIC9wcm9jL2FsbG9jaW5mbyByb3V0aW5nIHJlcXVlc3RzIHRvIGZldGNoIHRoZVxcbisgKiBsYXlvdXQgY29udGVudCBJRCwgc2VlayB0byBhIHNwZWNpZmljIHRhZywgb3IgcmVhZCBzZXF1ZW50aWFsIHRhZ3MuXFxuKyAqL1xcbitzdGF0aWMgbG9uZyBhbGxvY2luZm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIF9fYXJnKVxcbit7XFxuK1xcdHZvaWQgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilfX2FyZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEOlxcbitcXHRcXHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9BVDpcXG4rXFx0XFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9hdChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX05FWFQ6XFxuK1xcdFxcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRU5PSU9DVExDTUQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX0NPTVBBVFxcbitzdGF0aWMgbG9uZyBhbGxvY2luZm9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4re1xcbitcXHRyZXR1cm4gYWxsb2NpbmZvX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbitcXHQucHJvY19vcGVuXFx0XFx0PSBhbGxvY2luZm9fb3BlbixcXG4rXFx0LnByb2NfcmVhZF9pdGVyXFx0XFx0PSBzZXFfcmVhZF9pdGVyLFxcbitcXHQucHJvY19sc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbitcXHQucHJvY19yZWxlYXNlXFx0XFx0PSBhbGxvY2luZm9fcmVsZWFzZSxcXG4rXFx0LnByb2NfaW9jdGxcXHRcXHQ9IGFsbG9jaW5mb19pb2N0bCxcXG4rI2lmZGVmIENPTkZJR19DT01QQVRcXG4rXFx0LnByb2NfY29tcGF0X2lvY3RsXFx0PSBhbGxvY2luZm9fY29tcGF0X2lvY3RsLFxcbisjZW5kaWZcXG4rfTtcXG4rXFxuIHNpemVfdCBhbGxvY190YWdfdG9wX3VzZXJzKHN0cnVjdCBjb2RldGFnX2J5dGVzICp0YWdzLCBzaXplX3QgY291bnQsIGJvb2wgY2FuX3NsZWVwKVxcbiB7XFxuIFxcdHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIGl0ZXI7XFxuQEAgLTk5Myw4ICsxMzM0LDcgQEAgc3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgXFx1MDAyNmFsbG9jaW5mb19zZXFfb3AsXFxuLVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSksIE5VTEwpKSB7XFxuK1xcdGlmICghcHJvY19jcmVhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgXFx1MDAyNmFsbG9jaW5mb19wcm9jX29wcykpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gY3JlYXRlICVzIGZpbGVcXFxcblxcXCIsIEFMTE9DSU5GT19GSUxFX05BTUUpO1xcbiBcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG5pbmRleCA4ZDRkYjIyNDFjYzJhMi4uMTI5NDFkNjhhN2Y4YWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxcbkBAIC0xLDUgKzEsNiBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFRBUkdFVFMgKz0gYWNjdFxcbitUQVJHRVRTICs9IGFsbG9jX3RhZ1xcbiBUQVJHRVRTICs9IGFsc2FcXG4gVEFSR0VUUyArPSBhbWQtcHN0YXRlXFxuIFRBUkdFVFMgKz0gYXJtNjRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjQxZDkyZDA2YjE4NDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL01ha2VmaWxlXFxuQEAgLTAsMCArMSw5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuK1RFU1RfR0VOX1BST0dTIDo9IGFsbG9jaW5mb19pb2N0bF90ZXN0XFxuK1xcbitDRkxBR1MgKz0gLVdhbGxcXG4rQ0ZMQUdTICs9ICQoS0hEUl9JTkNMVURFUylcXG4rXFxuK2luY2x1ZGUgLi4vbGliLm1rXFxuK1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMDkyMzQ4MDk3MjA0MzlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcXG5AQCAtMCwwICsxLDU0OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuK1xcbisvKiBrc2VsZnRlc3QgZm9yIGFsbG9jaW5mbyBpb2N0bFxcbisgKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bFxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBJbmMuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FsbG9jX3RhZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4va3NlbGZ0ZXN0LmhcXFwiXFxuK1xcbisjZGVmaW5lIE1BWF9MSU5FX0xFTlxcdFxcdDUxMlxcbisjZGVmaW5lIEFMTE9DSU5GT19QUk9DXFx0XFx0XFxcIi9wcm9jL2FsbG9jaW5mb1xcXCJcXG4rXFxuK2VudW0gaW9jdGxfcmV0IHtcXG4rXFx0SU9DVExfU1VDQ0VTUyA9IDAsXFxuK1xcdElPQ1RMX0ZBSUxVUkUgPSAxLFxcbitcXHRJT0NUTF9JTlZBTElEX0RBVEEgPSAyLFxcbit9O1xcbitcXG4rI2RlZmluZSBWRUNfTUFYX0VOVFJJRVMgMzJcXG4rXFxuK3N0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjIHtcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSB0YWdbVkVDX01BWF9FTlRSSUVTXTtcXG4rXFx0X191NjQgY291bnQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgKnBhcmFtcylcXG4re1xcbitcXHRyZXR1cm4gaW9jdGwoZGV2X2ZkLCBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQsIHBhcmFtcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fYWxsb2NpbmZvX2dldF9hdChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCAqcGFyYW1zKVxcbit7XFxuK1xcdHJldHVybiBpb2N0bChkZXZfZmQsIEFMTE9DSU5GT19JT0NfR0VUX0FULCBwYXJhbXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBfX2FsbG9jaW5mb19nZXRfbmV4dChpbnQgZGV2X2ZkLCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpwYXJhbXMpXFxuK3tcXG4rXFx0cmV0dXJuIGlvY3RsKGRldl9mZCwgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVCwgcGFyYW1zKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbWF0Y2hfZW50cnkoY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqcHJvY2ZzX2VudHJ5LFxcbitcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YWdfZGF0YSxcXG4rXFx0XFx0XFx0Ym9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sXFxuK1xcdFxcdFxcdGJvb2wgbWF0Y2hfZnVuY3Rpb24sIGJvb2wgbWF0Y2hfZmlsZW5hbWUpXFxuK3tcXG4rXFx0aWYgKG1hdGNoX2J5dGVzIFxcdTAwMjZcXHUwMDI2IHRhZ19kYXRhLVxcdTAwM2Vjb3VudGVyLmJ5dGVzICE9IHByb2Nmc19lbnRyeS1cXHUwMDNlY291bnRlci5ieXRlcykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwic2l6ZSByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtYXRjaF9jYWxscyBcXHUwMDI2XFx1MDAyNiB0YWdfZGF0YS1cXHUwMDNlY291bnRlci5jYWxscyAhPSBwcm9jZnNfZW50cnktXFx1MDAzZWNvdW50ZXIuY2FsbHMpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhbGwgY291bnQgcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobWF0Y2hfbGluZW5vIFxcdTAwMjZcXHUwMDI2IHRhZ19kYXRhLVxcdTAwM2V0YWcubGluZW5vICE9IHByb2Nmc19lbnRyeS1cXHUwMDNldGFnLmxpbmVubykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwibGluZW5vIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1hdGNoX2Z1bmN0aW9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzdHJuY21wKHRhZ19kYXRhLVxcdTAwM2V0YWcuZnVuY3Rpb24sIHByb2Nmc19lbnRyeS1cXHUwMDNldGFnLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJmdW5jdGlvbiByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtYXRjaF9maWxlbmFtZSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc3RybmNtcCh0YWdfZGF0YS1cXHUwMDNldGFnLmZpbGVuYW1lLCBwcm9jZnNfZW50cnktXFx1MDAzZXRhZy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiZmlsZW5hbWUgcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBtYXRjaF9lbnRyaWVzKGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyxcXG4rXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyxcXG4rXFx0XFx0XFx0ICBib29sIG1hdGNoX2J5dGVzLCBib29sIG1hdGNoX2NhbGxzLCBib29sIG1hdGNoX2xpbmVubyxcXG4rXFx0XFx0XFx0ICBib29sIG1hdGNoX2Z1bmN0aW9uLCBib29sIG1hdGNoX2ZpbGVuYW1lKVxcbit7XFxuK1xcdF9fdTY0IGk7XFxuK1xcbitcXHRpZiAocHJvY2ZzX2VudHJpZXMtXFx1MDAzZWNvdW50ICE9IHRhZ3MtXFx1MDAzZWNvdW50KSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFbnRyeSBjb3VudCBtaXNtYXRjaC4gaW9jdGwgZW50cmllczogJWxsdSwgcHJvYyBlbnRyaWVzOiAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgdGFncy1cXHUwMDNlY291bnQsIHByb2Nmc19lbnRyaWVzLVxcdTAwM2Vjb3VudCk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJvY2ZzX2VudHJpZXMtXFx1MDAzZWNvdW50OyBpKyspIHtcXG4rXFx0XFx0aWYgKCFtYXRjaF9lbnRyeShcXHUwMDI2cHJvY2ZzX2VudHJpZXMtXFx1MDAzZXRhZ1tpXSwgXFx1MDAyNnRhZ3MtXFx1MDAzZXRhZ1tpXSxcXG4rXFx0XFx0XFx0XFx0IG1hdGNoX2J5dGVzLCBtYXRjaF9jYWxscywgbWF0Y2hfbGluZW5vLFxcbitcXHRcXHRcXHRcXHQgbWF0Y2hfZnVuY3Rpb24sIG1hdGNoX2ZpbGVuYW1lKSkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJWxsdXRoIGVudHJ5IGRvZXMgbm90IG1hdGNoLlxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqYWxsb2NpbmZvX3N0cihjb25zdCBjaGFyICpzdHIpXFxuK3tcXG4rXFx0c2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpO1xcbitcXG4rXFx0aWYgKGxlbiBcXHUwMDNlPSBBTExPQ0lORk9fU1RSX1NJWkUpXFxuK1xcdFxcdHN0ciArPSAobGVuIC0gQUxMT0NJTkZPX1NUUl9TSVpFKSArIDE7XFxuK1xcdHJldHVybiBzdHI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFsbG9jaW5mb19jb3B5X3N0cihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpXFxuK3tcXG4rXFx0c3RybmNweShkZXN0LCBhbGxvY2luZm9fc3RyKHNyYyksIEFMTE9DSU5GT19TVFJfU0laRSAtIDEpO1xcbitcXHRkZXN0W0FMTE9DSU5GT19TVFJfU0laRSAtIDFdID0gJ1xcXFwwJztcXG4rfVxcbitcXG4rc3RhdGljIGludCBnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcilcXG4re1xcbitcXHRGSUxFICpmcCA9IGZvcGVuKEFMTE9DSU5GT19QUk9DLCBcXFwiclxcXCIpO1xcbitcXHRjaGFyIGxpbmVbTUFYX0xJTkVfTEVOXTtcXG4rXFx0aW50IG1hdGNoZXM7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcHJvY2ZzX2VudHJ5O1xcbitcXG4rXFx0aWYgKCFmcCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRmFpbGVkIHRvIG9wZW4gXFxcIiBBTExPQ0lORk9fUFJPQyBcXFwiIGZvciByZWFkaW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFx0bWVtc2V0KHByb2Nmc19lbnRyaWVzLCAwLCBzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XFxuK1xcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSBcXHUwMDI2XFx1MDAyNiBwcm9jZnNfZW50cmllcy1cXHUwMDNlY291bnQgXFx1MDAzYyBWRUNfTUFYX0VOVFJJRVMpIHtcXG4rXFx0XFx0Y2hhciBmaWxlbmFtZVtNQVhfTElORV9MRU5dO1xcbitcXHRcXHRjaGFyIGZ1bmN0aW9uW01BWF9MSU5FX0xFTl07XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnByb2Nmc19lbnRyeSwgMCwgc2l6ZW9mKHByb2Nmc19lbnRyeSkpO1xcbitcXHRcXHRtYXRjaGVzID0gc3NjYW5mKGxpbmUsIFxcXCIlbGx1ICVsbHUgJVteOl06JWxsdSBmdW5jOiVzXFxcIixcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcyxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZwcm9jZnNfZW50cnkuY291bnRlci5jYWxscyxcXG4rXFx0XFx0XFx0XFx0IGZpbGVuYW1lLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnByb2Nmc19lbnRyeS50YWcubGluZW5vLFxcbitcXHRcXHRcXHRcXHQgZnVuY3Rpb24pO1xcbitcXG4rXFx0XFx0aWYgKG1hdGNoZXMgIT0gNSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5maWxlbmFtZSwgZmlsZW5hbWUpO1xcbitcXHRcXHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbiwgZnVuY3Rpb24pO1xcbitcXG4rXFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlbWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkge1xcbitcXHRcXHRcXHRpZiAoc3RybmNtcChwcm9jZnNfZW50cnkudGFnLmZpbGVuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgZmlsdGVyLVxcdTAwM2VmaWVsZHMuZmlsZW5hbWUsIEFMTE9DSU5GT19TVFJfU0laRSkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT04pIHtcXG4rXFx0XFx0XFx0aWYgKHN0cm5jbXAocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbixcXG4rXFx0XFx0XFx0XFx0ICAgIGZpbHRlci1cXHUwMDNlZmllbGRzLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykge1xcbitcXHRcXHRcXHRpZiAocHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8gIT0gZmlsdGVyLVxcdTAwM2VmaWVsZHMubGluZW5vKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSB7XFxuK1xcdFxcdFxcdGlmIChwcm9jZnNfZW50cnkuY291bnRlci5ieXRlcyBcXHUwMDNjIGZpbHRlci1cXHUwMDNlbWluX3NpemUpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIHtcXG4rXFx0XFx0XFx0aWYgKHByb2Nmc19lbnRyeS5jb3VudGVyLmJ5dGVzIFxcdTAwM2UgZmlsdGVyLVxcdTAwM2VtYXhfc2l6ZSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1lbWNweShcXHUwMDI2cHJvY2ZzX2VudHJpZXMtXFx1MDAzZXRhZ1twcm9jZnNfZW50cmllcy1cXHUwMDNlY291bnQrK10sIFxcdTAwMjZwcm9jZnNfZW50cnksXFxuK1xcdFxcdCAgICAgICBzaXplb2YocHJvY2ZzX2VudHJ5KSk7XFxuK1xcdH1cXG4rXFx0ZmNsb3NlKGZwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBlbnVtIGlvY3RsX3JldCBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyhzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBfX3U2NCBzdGFydF9wb3MpXFxuK3tcXG4rXFx0aW50IGZkID0gb3BlbihBTExPQ0lORk9fUFJPQywgT19SRE9OTFkpO1xcbitcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRmFpbGVkIHRvIG9wZW4gXFxcIiBBTExPQ0lORk9fUFJPQyBcXFwiIGZvciBJT0NUTFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBJT0NUTF9GQUlMVVJFO1xcbitcXHR9XFxuK1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgc3RhcnRfY29udF9pZCwgZW5kX2NvbnRfaWQ7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IGdldF9hdF9wYXJhbXM7XFxuK1xcdGNvbnN0IGludCBtYXhfcmV0cmllcyA9IDEwO1xcbitcXHRpbnQgcmV0cnlfY291bnQgPSAwO1xcbitcXHRpbnQgc3RhdHVzO1xcbitcXG4rXFx0LypcXG4rXFx0ICogX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgbWF5IHJldHVybiBkaWZmZXJlbnQgdmFsdWVzIGlmIGEga2VybmVsIG1vZHVsZSB3YXMgbG9hZGVkXFxuK1xcdCAqIGJldHdlZW4gdGhlIHR3byBjYWxscy4gSWYgdGhhdCBoYXBwZW5zLCB0aGUgZGF0YSBnYXRoZXJlZCBjYW5ub3QgYmUgY29uc2lkZXJlZCBjb25zaXN0ZW50XFxuK1xcdCAqIGFuZCBoZW5jZSBuZWVkcyB0byBiZSBmZXRjaGVkIGFnYWluIHRvIGF2b2lkIGZsYWtpbmVzcy5cXG4rXFx0ICovXFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCBcXHUwMDI2c3RhcnRfY29udF9pZCkpIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImFsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bWVtc2V0KHRhZ3MsIDAsIHNpemVvZigqdGFncykpO1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmdldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7XFxuK1xcdFxcdG1lbWNweShcXHUwMDI2Z2V0X2F0X3BhcmFtcy5maWx0ZXIsIGZpbHRlciwgc2l6ZW9mKCpmaWx0ZXIpKTtcXG4rXFx0XFx0Z2V0X2F0X3BhcmFtcy5wb3MgPSBzdGFydF9wb3M7XFxuK1xcdFxcdGlmIChfX2FsbG9jaW5mb19nZXRfYXQoZmQsIFxcdTAwMjZnZXRfYXRfcGFyYW1zKSkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiYWxsb2NpbmZvX2dldF9hdCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRtZW1jcHkoXFx1MDAyNnRhZ3MtXFx1MDAzZXRhZ1t0YWdzLVxcdTAwM2Vjb3VudCsrXSwgXFx1MDAyNmdldF9hdF9wYXJhbXMuZGF0YSwgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpO1xcbitcXG4rXFx0XFx0d2hpbGUgKHRhZ3MtXFx1MDAzZWNvdW50IFxcdTAwM2MgVkVDX01BWF9FTlRSSUVTIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgXFx1MDAyNnRhZ3MtXFx1MDAzZXRhZ1t0YWdzLVxcdTAwM2Vjb3VudF0pID09IDApXFxuK1xcdFxcdFxcdHRhZ3MtXFx1MDAzZWNvdW50Kys7XFxuK1xcbitcXHRcXHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFxcdTAwMjZlbmRfY29udF9pZCkpIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImFsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN0YXJ0X2NvbnRfaWQuaWQgPT0gZW5kX2NvbnRfaWQuaWQpIHtcXG4rXFx0XFx0XFx0c3RhdHVzID0gSU9DVExfU1VDQ0VTUztcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImFsbG9jaW5mb19nZXRfY29udGVudF9pZCBtaXNtYXRjaCwgcmV0cnlpbmcuLi5cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBJT0NUTF9JTlZBTElEX0RBVEE7XFxuK1xcdFxcdH1cXG4rXFx0fSB3aGlsZSAoc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSBcXHUwMDI2XFx1MDAyNiByZXRyeV9jb3VudCsrIFxcdTAwM2MgbWF4X3JldHJpZXMpO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gc3RhdHVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9maWx0ZXJfdGVzdChjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyKVxcbit7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzID0gbWFsbG9jKHNpemVvZigqdGFncykpO1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqcHJvY2ZzX2VudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xcbitcXHRpbnQgaW9jdGxfc3RhdHVzO1xcbitcXHRpbnQgcmV0ID0gS1NGVF9QQVNTO1xcbitcXG4rXFx0aWYgKCF0YWdzIHx8ICFwcm9jZnNfZW50cmllcykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBmaWx0ZXIpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcXFwiIEFMTE9DSU5GT19QUk9DIFxcXCJcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX1NLSVA7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByb2Nmc19lbnRyaWVzLVxcdTAwM2Vjb3VudCA9PSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJObyBlbnRyaWVzIGZvdW5kIGluIFxcXCIgQUxMT0NJTkZPX1BST0MgXFxcIiwgc2tpcHBpbmcgdGVzdFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuK1xcbitcXHRpb2N0bF9zdGF0dXMgPSBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyh0YWdzLCBmaWx0ZXIsIDApO1xcbitcXHRpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiVHJvdWJsZSByZXRyaWV2aW5nIHZhbGlkIElPQ1RMIGVudHJpZXMsIHNraXBwaW5nLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuK1xcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfRkFJTFVSRSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRXJyb3IgcmV0cmlldmluZyBJT0NUTCBlbnRyaWVzLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIW1hdGNoX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIHRhZ3MsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpXFxuK1xcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFxuK2V4aXQ6XFxuK1xcdGZyZWUodGFncyk7XFxuK1xcdGZyZWUocHJvY2ZzX2VudHJpZXMpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlc3RfZmlsZW5hbWVfZmlsdGVyKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xcbitcXHRjb25zdCBjaGFyICp0YXJnZXRfZmlsZW5hbWUgPSBcXFwibW0vbWVtb3J5LmNcXFwiO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTtcXG4rXFx0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FO1xcbitcXHRzdHJuY3B5KGZpbHRlci5maWVsZHMuZmlsZW5hbWUsIHRhcmdldF9maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcXG4rXFxuK1xcdHJldHVybiBydW5fZmlsdGVyX3Rlc3QoXFx1MDAyNmZpbHRlcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9mdW5jdGlvbl9maWx0ZXIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XFxuK1xcdGNvbnN0IGNoYXIgKnRhcmdldF9mdW5jdGlvbiA9IFxcXCJkdXBfbW1cXFwiO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTtcXG4rXFx0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OO1xcbitcXHRzdHJuY3B5KGZpbHRlci5maWVsZHMuZnVuY3Rpb24sIHRhcmdldF9mdW5jdGlvbiwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcXG4rXFxuK1xcdHJldHVybiBydW5fZmlsdGVyX3Rlc3QoXFx1MDAyNmZpbHRlcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9zaXplX2ZpbHRlcih2b2lkKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcXG4rXFx0aW50IHJldCA9IEtTRlRfUEFTUztcXG4rXFx0X191NjQgdGFyZ2V0X3NpemUsIGksIHBvcztcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqZm91bmRfdGFnID0gTlVMTDtcXG4rXFx0Y29uc3QgY2hhciAqdGFyZ2V0X2Z1bmN0aW9uID0gXFxcImRvX2luaXRfbW9kdWxlXFxcIjtcXG4rXFx0c3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHN0YXJ0X2NvbnRfaWQsIGVuZF9jb250X2lkO1xcbitcXHRpbnQgcmV0cnkgPSAwO1xcbitcXHRjb25zdCBpbnQgbWF4X3JldHJpZXMgPSAxMDtcXG4rXFxuK1xcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdFxcdGdvdG8gZnJlZW1lbTtcXG4rXFx0fVxcbitcXG4rXFx0ZmQgPSBvcGVuKEFMTE9DSU5GT19QUk9DLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkZhaWxlZCB0byBvcGVuIFxcXCIgQUxMT0NJTkZPX1BST0MgXFxcIjogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0Z290byBmcmVlbWVtO1xcbitcXHR9XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGZvdW5kX3RhZyA9IE5VTEw7XFxuK1xcdFxcdHBvcyA9IDA7XFxuK1xcbitcXHRcXHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFxcdTAwMjZzdGFydF9jb250X2lkKSkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiYWxsb2NpbmZvX2dldF9jb250ZW50X2lkIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xcbitcXHRcXHRmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT047XFxuK1xcdFxcdHN0cm5jcHkoZmlsdGVyLmZpZWxkcy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xcbitcXG4rXFx0XFx0aWYgKGdldF9maWx0ZXJlZF9wcm9jZnNfZW50cmllcyhwcm9jZnNfZW50cmllcywgXFx1MDAyNmZpbHRlcikpIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVycm9yIHJldHJpZXZpbmcgZW50cmllcyBmcm9tIFxcXCIgQUxMT0NJTkZPX1BST0MgXFxcIlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldCA9IEtTRlRfRkFJTDtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocHJvY2ZzX2VudHJpZXMtXFx1MDAzZWNvdW50ID09IDApIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkZ1bmN0aW9uICVzIG5vdCBmb3VuZCBpbiBwcm9jZnNcXFxcblxcXCIsIHRhcmdldF9mdW5jdGlvbik7XFxuK1xcdFxcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR0YXJnZXRfc2l6ZSA9IHByb2Nmc19lbnRyaWVzLVxcdTAwM2V0YWdbMF0uY291bnRlci5ieXRlcztcXG4rXFxuK1xcdFxcdG1lbXNldChcXHUwMDI2ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7XFxuK1xcdFxcdGZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRTtcXG4rXFx0XFx0ZmlsdGVyLm1pbl9zaXplID0gdGFyZ2V0X3NpemU7XFxuK1xcdFxcdGZpbHRlci5tYXhfc2l6ZSA9IHRhcmdldF9zaXplO1xcbitcXG4rXFx0XFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGFsbG9jaW5mb19nZXRfYXQgZ2V0X2F0X3BhcmFtcztcXG4rXFxuK1xcdFxcdFxcdG1lbXNldChcXHUwMDI2Z2V0X2F0X3BhcmFtcywgMCwgc2l6ZW9mKGdldF9hdF9wYXJhbXMpKTtcXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZnZXRfYXRfcGFyYW1zLmZpbHRlciwgXFx1MDAyNmZpbHRlciwgc2l6ZW9mKGZpbHRlcikpO1xcbitcXHRcXHRcXHRnZXRfYXRfcGFyYW1zLnBvcyA9IHBvcztcXG4rXFxuK1xcdFxcdFxcdGlmIChfX2FsbG9jaW5mb19nZXRfYXQoZmQsIFxcdTAwMjZnZXRfYXRfcGFyYW1zKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHR0YWdzLVxcdTAwM2Vjb3VudCA9IDA7XFxuK1xcdFxcdFxcdG1lbWNweShcXHUwMDI2dGFncy1cXHUwMDNldGFnW3RhZ3MtXFx1MDAzZWNvdW50KytdLCBcXHUwMDI2Z2V0X2F0X3BhcmFtcy5kYXRhLFxcbitcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpO1xcbitcXG4rXFx0XFx0XFx0d2hpbGUgKHRhZ3MtXFx1MDAzZWNvdW50IFxcdTAwM2MgVkVDX01BWF9FTlRSSUVTIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgXFx1MDAyNnRhZ3MtXFx1MDAzZXRhZ1t0YWdzLVxcdTAwM2Vjb3VudF0pID09IDApXFxuK1xcdFxcdFxcdFxcdHRhZ3MtXFx1MDAzZWNvdW50Kys7XFxuK1xcbitcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGFncy1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHRcXHRcXHRpZiAoc3RyY21wKHRhZ3MtXFx1MDAzZXRhZ1tpXS50YWcuZnVuY3Rpb24sIHRhcmdldF9mdW5jdGlvbikgPT0gMCkge1xcbitcXHRcXHRcXHRcXHRcXHRmb3VuZF90YWcgPSBcXHUwMDI2dGFncy1cXHUwMDNldGFnW2ldO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRpZiAoZm91bmRfdGFnIHx8IHRhZ3MtXFx1MDAzZWNvdW50IFxcdTAwM2MgVkVDX01BWF9FTlRSSUVTKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdHBvcyArPSB0YWdzLVxcdTAwM2Vjb3VudDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCBcXHUwMDI2ZW5kX2NvbnRfaWQpKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJhbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0ID0gS1NGVF9GQUlMO1xcbitcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJNb2R1bGUgbG9hZCBkZXRlY3RlZCBkdXJpbmcgc2l6ZSB2ZXJpZmljYXRpb24sIHJldHJ5aW5nLi4uXFxcXG5cXFwiKTtcXG4rXFx0fSB3aGlsZSAocmV0cnkrKyBcXHUwMDNjIG1heF9yZXRyaWVzKTtcXG4rXFxuK1xcdGlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkIFxcdTAwMjZcXHUwMDI2ICFmb3VuZF90YWcpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkVudHJ5IHdpdGggZnVuY3Rpb24gJXMgbm90IGZvdW5kIGluIElPQ1RMIHJlc3VsdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICB0YXJnZXRfZnVuY3Rpb24pO1xcbitcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdH0gZWxzZSBpZiAoc3RhcnRfY29udF9pZC5pZCAhPSBlbmRfY29udF9pZC5pZCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRmFpbGVkIHRvIG1hdGNoIGNvbnRlbnRfaWRzIGZvciBwcm9jZnMgYW5kIElPQ1RMLCBza2lwcGluZy4uLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0fSBlbHNlIGlmIChmb3VuZF90YWcgXFx1MDAyNlxcdTAwMjYgZm91bmRfdGFnLVxcdTAwM2Vjb3VudGVyLmJ5dGVzICE9IHRhcmdldF9zaXplKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJJT0NUTCBlbnRyeSBzaXplICVsbHUgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IHNpemUgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGZvdW5kX3RhZy1cXHUwMDNlY291bnRlci5ieXRlcywgdGFyZ2V0X3NpemUpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdH1cXG4rXFxuK2V4aXQ6XFxuK1xcdGNsb3NlKGZkKTtcXG4rZnJlZW1lbTpcXG4rXFx0ZnJlZSh0YWdzKTtcXG4rXFx0ZnJlZShwcm9jZnNfZW50cmllcyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9saW5lbm9fZmlsdGVyKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XFxuK1xcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcXG4rXFx0ZW51bSBpb2N0bF9yZXQgaW9jdGxfc3RhdHVzO1xcbitcXHRpbnQgcmV0ID0gS1NGVF9QQVNTO1xcbitcXHRfX3U2NCB0YXJnZXRfbGluZW5vLCBpO1xcbitcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YXJnZXRfdGFnO1xcbitcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcbitcXHRpZiAoIXRhZ3MgfHwgIXByb2Nmc19lbnRyaWVzKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gS1NGVF9GQUlMO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7XFxuK1xcbitcXHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBcXHUwMDI2ZmlsdGVyKSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRXJyb3IgcmV0cmlldmluZyBlbnRyaWVzIGZyb20gXFxcIiBBTExPQ0lORk9fUFJPQyBcXFwiXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gS1NGVF9GQUlMO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFx0aWYgKHByb2Nmc19lbnRyaWVzLVxcdTAwM2Vjb3VudCA9PSAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDb3VsZCBub3QgcmV0cmlldmUgcHJvY2ZzIGVudHJpZXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX1NLSVA7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbitcXHQvKlxcbitcXHQgKiBXZSBkZXBlbmQgb24gdGhlIHByb2NmcyByZXN1bHRzIHRvIGRldGVybWluZSB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBmaWx0ZXIgYmVmb3JlXFxuK1xcdCAqIG1ha2luZyB0aGUgaW9jdGwgcXVlcnkuIEhlbmNlLCB3ZSBjYW5ub3QgcmV1c2UgcnVuX2ZpbHRlcl90ZXN0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHR0YXJnZXRfdGFnID0gXFx1MDAyNnByb2Nmc19lbnRyaWVzLVxcdTAwM2V0YWdbMF07XFxuK1xcdHRhcmdldF9saW5lbm8gPSB0YXJnZXRfdGFnLVxcdTAwM2V0YWcubGluZW5vO1xcbitcXG4rXFx0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTztcXG4rXFx0ZmlsdGVyLmZpZWxkcy5saW5lbm8gPSB0YXJnZXRfbGluZW5vO1xcbitcXG4rXFx0aW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgXFx1MDAyNmZpbHRlciwgMCk7XFxuK1xcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfSU5WQUxJRF9EQVRBKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcm91YmxlIHJldHJpZXZpbmcgdmFsaWQgSU9DVEwgZW50cmllcywgc2tpcHBpbmcuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gS1NGVF9TS0lQO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFx0aWYgKGlvY3RsX3N0YXR1cyA9PSBJT0NUTF9GQUlMVVJFKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFcnJvciByZXRyaWV2aW5nIElPQ1RMIGVudHJpZXMuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gS1NGVF9GQUlMO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YWdzLVxcdTAwM2Vjb3VudDsgaSsrKSB7XFxuK1xcdFxcdGlmICh0YWdzLVxcdTAwM2V0YWdbaV0udGFnLmxpbmVubyAhPSB0YXJnZXRfbGluZW5vKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJJT0NUTCBlbnRyeSAlbGx1IGhhcyBpbmNvcnJlY3QgbGluZW5vICVsbHUuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgaSwgdGFncy1cXHUwMDNldGFnW2ldLnRhZy5saW5lbm8pO1xcbitcXHRcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdFxcdFxcdGdvdG8gZXhpdDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN0cm5jbXAodGFncy1cXHUwMDNldGFnW2ldLnRhZy5mdW5jdGlvbiwgdGFyZ2V0X3RhZy1cXHUwMDNldGFnLmZ1bmN0aW9uLFxcbitcXHRcXHRcXHQgICAgQUxMT0NJTkZPX1NUUl9TSVpFKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBzdHJuY21wKHRhZ3MtXFx1MDAzZXRhZ1tpXS50YWcuZmlsZW5hbWUsIHRhcmdldF90YWctXFx1MDAzZXRhZy5maWxlbmFtZSxcXG4rXFx0XFx0XFx0ICAgIEFMTE9DSU5GT19TVFJfU0laRSkgPT0gMClcXG4rXFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWZvdW5kKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJPcmlnaW5hbCBwcm9jZnMgZW50cnkgbm90IGZvdW5kIGluIElPQ1RMIGxpbmVubyBmaWx0ZXIgcmVzdWx0cy5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBLU0ZUX0ZBSUw7XFxuK1xcdH1cXG4rXFxuK2V4aXQ6XFxuK1xcdGZyZWUodGFncyk7XFxuK1xcdGZyZWUocHJvY2ZzX2VudHJpZXMpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRrc2Z0X3NldF9wbGFuKDQpO1xcbitcXG4rXFx0cmV0ID0gdGVzdF9maWxlbmFtZV9maWx0ZXIoKTtcXG4rXFx0aWYgKHJldCA9PSBLU0ZUX1NLSVApXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiU2tpcHBpbmcgdGVzdF9maWxlbmFtZV9maWx0ZXJcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXFxcInRlc3RfZmlsZW5hbWVfZmlsdGVyXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IHRlc3RfZnVuY3Rpb25fZmlsdGVyKCk7XFxuK1xcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlNraXBwaW5nIHRlc3RfZnVuY3Rpb25fZmlsdGVyXFxcXG5cXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsIFxcXCJ0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXQgPSB0ZXN0X3NpemVfZmlsdGVyKCk7XFxuK1xcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlNraXBwaW5nIHRlc3Rfc2l6ZV9maWx0ZXJcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXFxcInRlc3Rfc2l6ZV9maWx0ZXJcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gdGVzdF9saW5lbm9fZmlsdGVyKCk7XFxuK1xcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlNraXBwaW5nIHRlc3RfbGluZW5vX2ZpbHRlclxcXFxuXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdChyZXQgPT0gS1NGVF9QQVNTLCBcXFwidGVzdF9saW5lbm9fZmlsdGVyXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjoyODoxNC40MDk3NjQ3MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzU0NDY3MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY2luZm9faW9jdGxcIixcbiAgICBcImFsbG9jaW5mb19jb21wYXRfaW9jdGxcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZFwiLFxuICAgIFwiYWxsb2NpbmZvX2lvY3RsX2dldF9hdFwiLFxuICAgIFwiYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0XCIsXG4gICAgXCJtYXRjaGVzX2ZpbHRlclwiLFxuICAgIFwiY29kZXRhZ19nZXRfY29udGVudF9pZFwiLFxuICAgIFwiY29kZXRhZ19nZXRfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGlvY3RsIGludGVyZmFjZSBmb3IgYC9wcm9jL2FsbG9jaW5mb2AgdG8gYWxsb3cgc3RydWN0dXJlZCBiaW5hcnkgZGF0YSBleHRyYWN0aW9uIGFuZCBmaWx0ZXJpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGRhdGEuIFRoaXMgaXMgYSBuZXcgdXNlcnNwYWNlLWZhY2luZyBBUEkgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBoYW5kbGVzIGludmFsaWQgaW5wdXRzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgY29uY3VycmVuY3kgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyOTBlZDg0NmYxZDE1YzdlNDFjY2Y0NzhmZWU2OTYwMjE1YTRlYThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDAyOjI4OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuaW5kZXggNTM4OWQyNDExNzZhOGEuLmMzYTI4NDY3OTU1ZjNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5AQCAtNDYsNiArNDYsMTEgQEAgc3lzY3RsOlxuIFJ1bnRpbWUgaW5mbzpcbiAgIC9wcm9jL2FsbG9jaW5mb1xuIFxuKyAgUHJvZmlsaW5nIGRhdGEgY2FuIGJlIHJldHJpZXZlZCBlaXRoZXIgYnkgcmVhZGluZyBgL3Byb2MvYWxsb2NpbmZvYCBkaXJlY3RseSBhc1xuKyAgdGV4dCBvciBwcm9ncmFtbWF0aWNhbGx5IHZpYSBgaW9jdGwoKWAgY2FsbHMgZGVmaW5lZCBpbiBgXHUwMDNjdWFwaS9saW51eC9hbGxvY190YWcuaFx1MDAzZWAuXG4rICBUaGUgaW9jdGwgaW50ZXJmYWNlIHN1cHBvcnRzIHN0cnVjdHVyZWQgYmluYXJ5IGRhdGEgZXh0cmFjdGlvbiBhcyB3ZWxsIGFzIGZpbHRlcmluZ1xuKyAgYnkgbW9kdWxlIG5hbWUsIGZ1bmN0aW9uLCBmaWxlLCBsaW5lIG51bWJlciwgYWNjdXJhY3ksIG9yIGFsbG9jYXRpb24gc2l6ZSBsaW1pdHMuXG4rXG4gRXhhbXBsZSBvdXRwdXQ6OlxuIFxuICAgcm9vdEBtb3JpYS1rdm06fiMgc29ydCAtZyAvcHJvYy9hbGxvY2luZm98dGFpbHxudW1mbXQgLS10bz1pZWNcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5pbmRleCAzZjBlZjFlMjdlYjA3ZC4uMmZjNTMwOTM3NTJkMTMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcbkBAIC0zNDYsNiArMzQ2LDggQEAgQ29kZSAgU2VxIyAgICBJbmNsdWRlIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOmx1em1heGltaWxpYW5AZ21haWwuY29tXHUwMDNlXG4gMHhBNSAgMjAtMkYgIGxpbnV4L3N1cmZhY2VfYWdncmVnYXRvci9kdHguaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgU3VyZmFjZSBEVFggZHJpdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2NtYWlsdG86bHV6bWF4aW1pbGlhbkBnbWFpbC5jb21cdTAwM2VcbisweEE2ICAwMC0wRiAgdWFwaS9saW51eC9hbGxvY190YWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOnN1cmVuYkBnb29nbGUuY29tXHUwMDNlXG4gMHhBQSAgMDAtM0YgIGxpbnV4L3VhcGkvbGludXgvdXNlcmZhdWx0ZmQuaFxuIDB4QUIgIDAwLTFGICBsaW51eC9uYmQuaFxuIDB4QUMgIDAwLTFGICBsaW51eC9yYXcuaFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDI5YzMwMmU5YzE3YmEzLi44NjdkNGFkNThmYjQyMiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE2OTM3LDcgKzE2OTM3LDkgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbiBGOlx0aW5jbHVkZS9saW51eC9hbGxvY190YWcuaFxuIEY6XHRpbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmhcbitGOlx0aW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXG4gRjpcdG1tL2FsbG9jX3RhZy5jXG4rRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9cbiBcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEJBTExPT05cbiBNOlx0QW5kcmV3IE1vcnRvbiBcdTAwM2Nha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RldGFnLmggYi9pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaFxuaW5kZXggZGRhZTc0ODRjYTQ1NmMuLmEyNWEwODVjMmRmMTk5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb2RldGFnLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY29kZXRhZy5oXG5AQCAtNzcsNiArNzcsOCBAQCBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciB7XG4gdm9pZCBjb2RldGFnX2xvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbiBib29sIGNvZGV0YWdfdHJ5bG9ja19tb2R1bGVfbGlzdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpO1xuIHZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbit1bnNpZ25lZCBsb25nIGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbit1bnNpZ25lZCBpbnQgY29kZXRhZ19nZXRfY291bnQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKTtcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSk7XG4gc3RydWN0IGNvZGV0YWcgKmNvZGV0YWdfbmV4dF9jdChzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciAqaXRlcik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI3MGY2OTNiMTgyMjA0XG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbkBAIC0wLDAgKzEsOTkgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xuKy8qXG4rICogYWxsb2NfdGFnIElPQ1RMIEFQSSBkZWZpbml0aW9uXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKyAqXG4rICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhc1xuKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuKyAqL1xuK1xuKyNpZm5kZWYgX1VBUElfQUxMT0NfVEFHX0hcbisjZGVmaW5lIF9VQVBJX0FMTE9DX1RBR19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuK1xuKy8qXG4rICogRnVuY3Rpb24sIGZpbGUgYW5kIG1vZHVsZSBuYW1lcyBvZnRlbiBoYXZlIHRoZSBzYW1lIHByZWZpeGVzLCB0aGVyZWZvcmVcbisgKiB3aGVuIGZpbHRlcmluZyBieSB0aGVzZSBjcml0ZXJpYSwgd2UgY29tcGFyZSB0aGUgbGFzdCA2NCBjaGFyYWN0ZXJzIHRvXG4rICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXG4rICovXG4rI2RlZmluZSBBTExPQ0lORk9fU1RSX1NJWkVcdDY0XG4rXG4rc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHtcbitcdF9fdTY0IGlkO1xuK307XG4rXG4rc3RydWN0IGFsbG9jaW5mb190YWcge1xuK1x0LyogTG9uZ2VyIG5hbWVzIGFyZSB0cmltbWVkICovXG4rXHRjaGFyIG1vZG5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcbitcdGNoYXIgZnVuY3Rpb25bQUxMT0NJTkZPX1NUUl9TSVpFXTtcbitcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcbitcdF9fdTY0IGxpbmVubztcbitcdC8qIGZpbHRlciBjcml0ZXJpYSBvbmx5OyBzZWUgYWxsb2NpbmZvX2NvdW50ZXIuYWNjdXJhdGUgZm9yIGFjdHVhbCBhY2N1cmFjeSAqL1xuK1x0X191NjQgaW5hY2N1cmF0ZTtcbit9O1xuK1xuKy8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXG4rc3RydWN0IGFsbG9jaW5mb19jb3VudGVyIHtcbitcdF9fdTY0IGJ5dGVzO1xuK1x0X191NjQgY2FsbHM7XG4rXHRfX3U4IGFjY3VyYXRlO1xuK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpO1xuK1xuK3N0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEge1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWcgdGFnO1xuK1x0c3RydWN0IGFsbG9jaW5mb19jb3VudGVyIGNvdW50ZXI7XG4rfTtcbitcbitlbnVtIHtcbitcdEFMTE9DSU5GT19GSUxURVJfTU9ETkFNRSxcbitcdEFMTE9DSU5GT19GSUxURVJfRlVOQ1RJT04sXG4rXHRBTExPQ0lORk9fRklMVEVSX0ZJTEVOQU1FLFxuK1x0QUxMT0NJTkZPX0ZJTFRFUl9MSU5FTk8sXG4rXHRBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUsXG4rXHRBTExPQ0lORk9fRklMVEVSX01JTl9TSVpFLFxuK1x0QUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRSxcbitcdF9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUID0gQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRVxuK307XG4rXG4rI2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTU9ETkFNRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9NT0ROQU1FKVxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OKVxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FXHRcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0ZJTEVOQU1FKVxuKyNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOT1x0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9MSU5FTk8pXG4rI2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURVx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfSU5BQ0NVUkFURSlcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9NSU5fU0laRSlcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9NQVhfU0laRSlcbitcbisjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS1MgXFxcbitcdCgoMSBcdTAwM2NcdTAwM2MgKF9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUICsgMSkpIC0gMSlcbitcbitzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciB7XG4rXHRfX3U2NCBtYXNrOyAvKiBiaXRtYXNrIG9mIHRoZSBmaWx0ZXIgZmllbGRzIHVzZWQgKi9cbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnIGZpZWxkcztcbitcdF9fdTY0IG1pbl9zaXplO1xuK1x0X191NjQgbWF4X3NpemU7XG4rfTtcbitcbitzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XG4rXHQvKiBpbnB1dHMgKi9cbitcdF9fdTY0IHBvcztcbitcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbitcdC8qIG91dHB1dCAqL1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSBkYXRhO1xuK307XG4rXG4rI2RlZmluZSBfQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEXHQwXG4rI2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfQVRcdFx0MVxuKyNkZWZpbmUgX0FMTE9DSU5GT19JT0NfR0VUX05FWFRcdFx0MlxuK1xuKyNkZWZpbmUgQUxMT0NJTkZPX0lPQ19CQVNFXHRcdDB4QTZcbisjZGVmaW5lIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQsXHRcXFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZClcbisjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX0FUXHRcdF9JT1dSKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfR0VUX0FULFx0XFxcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IGFsbG9jaW5mb19nZXRfYXQpXG4rI2RlZmluZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUXHRcdF9JT1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVCxcdFxcXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSlcbitcbisjZW5kaWYgLyogX1VBUElfQUxMT0NfVEFHX0ggKi9cbmRpZmYgLS1naXQgYS9saWIvY29kZXRhZy5jIGIvbGliL2NvZGV0YWcuY1xuaW5kZXggNDAwMWE3ZWE2Njc1NDIuLmE5Y2RhNGM5NjJhMzAzIDEwMDY0NFxuLS0tIGEvbGliL2NvZGV0YWcuY1xuKysrIGIvbGliL2NvZGV0YWcuY1xuQEAgLTE5LDYgKzE5LDggQEAgc3RydWN0IGNvZGV0YWdfdHlwZSB7XG4gXHRzdHJ1Y3QgY29kZXRhZ190eXBlX2Rlc2MgZGVzYztcbiBcdC8qIGdlbmVyYXRlcyB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIGZvciBtb2R1bGUgbG9hZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0X21vZF9zZXE7XG4rXHQvKiBidW1wZWQgb24gZXZlcnkgbW9kdWxlIGxvYWQgYW5kIHVubG9hZCAqL1xuK1x0dW5zaWduZWQgbG9uZyBjb250ZW50X2lkO1xuIH07XG4gXG4gc3RydWN0IGNvZGV0YWdfcmFuZ2Uge1xuQEAgLTUwLDYgKzUyLDIwIEBAIHZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuIFx0dXBfcmVhZChcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuIH1cbiBcbit1bnNpZ25lZCBsb25nIGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbitcbitcdHJldHVybiBjdHR5cGUtXHUwMDNlY29udGVudF9pZDtcbit9XG4rXG4rdW5zaWduZWQgaW50IGNvZGV0YWdfZ2V0X2NvdW50KHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4rXG4rXHRyZXR1cm4gY3R0eXBlLVx1MDAzZWNvdW50O1xuK31cbitcbiBzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBjb2RldGFnX2dldF9jdF9pdGVyKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcbiB7XG4gXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyID0ge1xuQEAgLTIwNCw2ICsyMjAsNyBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXG4gXHRkb3duX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gXHRjbW9kLVx1MDAzZW1vZF9zZXEgPSArK2N0dHlwZS1cdTAwM2VuZXh0X21vZF9zZXE7XG4rXHQrK2N0dHlwZS1cdTAwM2Vjb250ZW50X2lkO1xuIFx0bW9kX2lkID0gaWRyX2FsbG9jKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfaWRyLCBjbW9kLCAwLCAwLCBHRlBfS0VSTkVMKTtcbiBcdGlmIChtb2RfaWQgXHUwMDNlPSAwKSB7XG4gXHRcdGlmIChjdHR5cGUtXHUwMDNlZGVzYy5tb2R1bGVfbG9hZCkge1xuQEAgLTM2OCw2ICszODUsNyBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0Y3R0eXBlLVx1MDAzZWNvdW50IC09IHJhbmdlX3NpemUoY3R0eXBlLCBcdTAwMjZjbW9kLVx1MDAzZXJhbmdlKTtcbiBcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfaWRyLCBtb2RfaWQpO1xuIFx0XHRcdGtmcmVlKGNtb2QpO1xuK1x0XHRcdCsrY3R0eXBlLVx1MDAzZWNvbnRlbnRfaWQ7XG4gXHRcdH1cbiBcdFx0dXBfd3JpdGUoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiBcdFx0aWYgKGZvdW5kIFx1MDAyNlx1MDAyNiBjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGQ5YmUxY2Y1MTg3ZDk3Li4zMmFjMDY3NGQ4YmY2ZCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTUsNiArNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYWxsc3ltcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9leHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2NfdGFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbkBAIC0xNCw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2FsbG9jX3RhZy5oXHUwMDNlXG4gXG4gI2RlZmluZSBBTExPQ0lORk9fRklMRV9OQU1FXHRcdFwiYWxsb2NpbmZvXCJcbiAjZGVmaW5lIE1PRFVMRV9BTExPQ19UQUdfVk1BUF9TSVpFXHQoMTAwMDAwVUwgKiBzaXplb2Yoc3RydWN0IGFsbG9jX3RhZykpXG5AQCAtNDcsNiArNDksMTEgQEAgc3RydWN0IGFsbG9jaW5mb19wcml2YXRlIHtcbiBcdHN0cnVjdCBjb2RldGFnX2l0ZXJhdG9yIGl0ZXI7XG4gXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciByZXBvcnRlZF9pdGVyO1xuIFx0Ym9vbCBwcmludF9oZWFkZXI7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XG4rXHQvKiBpb2N0bCB1c2VzIGEgc2VwYXJhdGUgaXRlcmF0b3Igbm90IHRvIGludGVyZmVyZSB3aXRoIHJlYWRzICovXG4rXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpb2N0bF9pdGVyO1xuK1x0Ym9vbCBwb3NpdGlvbmVkOyAvKiBzZXFfb3Blbl9wcml2YXRlKCkgc2V0cyB0byAwICovXG4rXHRzdHJ1Y3QgbXV0ZXggaW9jdGxfbG9jaztcbiB9O1xuIFxuIHN0YXRpYyB2b2lkICphbGxvY2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbkBAIC0xMzAsNiArMTM3LDM0MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFsbG9jaW5mb19zZXFfb3AgPSB7XG4gXHQuc2hvd1x0PSBhbGxvY2luZm9fc2hvdyxcbiB9O1xuIFxuKy8qXG4rICogSW5pdGlhbGl6ZXMgc2VxX2ZpbGUgb3BlcmF0aW9ucyBhbmQgYWxsb2NhdGVzIHByaXZhdGUgc3RhdGUgd2hlbiBvcGVuaW5nXG4rICogdGhlIC9wcm9jL2FsbG9jaW5mbyBwcm9jZnMgZW50cnkuXG4rICovXG4rc3RhdGljIGludCBhbGxvY2luZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZhbGxvY2luZm9fc2VxX29wLFxuK1x0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGFsbG9jaW5mb19wcml2YXRlKSk7XG4rXHRpZiAoIXJldCkge1xuK1x0XHRzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdFx0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuK1xuK1x0XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKlxuKyAqIENsZWFucyB1cCB0aGUgc2VxX2ZpbGUgc3RhdGUgYW5kIGZyZWVzIHVwIHRoZSBwcml2YXRlIHN0YXRlIGFsbG9jYXRlZCBpblxuKyAqIGFsbG9jaW5mb19vcGVuKCkgd2hlbiBjbG9zaW5nIHRoZSAvcHJvYy9hbGxvY2luZm8gZmlsZSBkZXNjcmlwdG9yLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWxsb2NpbmZvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0c3RydWN0IHNlcV9maWxlICptID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUgKnByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4rXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4rXHRyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN1ZmZpeCBvZiBhIHN0cmluZyBzbyB0aGF0IGl0cyBsZW5ndGggZml0cyB3aXRoaW5cbisgKiBBTExPQ0lORk9fU1RSX1NJWkUsIHByZXNlcnZpbmcgdGhlIHRyYWlsaW5nIGNoYXJhY3RlcnMuXG4rICogRnVuY3Rpb24sIGZpbGUgYW5kIG1vZHVsZSBuYW1lcyBvZnRlbiBoYXZlIHRoZSBzYW1lIHByZWZpeGVzLCB0aGVyZWZvcmVcbisgKiB3aGVuIGZpbHRlcmluZyBieSB0aGVzZSBjcml0ZXJpYSwgd2UgY29tcGFyZSB0aGUgbGFzdCA2NCBjaGFyYWN0ZXJzIHRvXG4rICogbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zXG4rICovXG4rc3RhdGljIGNvbnN0IGNoYXIgKmFsbG9jaW5mb19zdHIoY29uc3QgY2hhciAqc3RyKVxuK3tcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyKTtcbitcbitcdC8qIEtlZXAgYW4gZXh0cmEgc3BhY2UgZm9yIHRoZSB0cmFpbGluZyBOVUxMLiAqL1xuK1x0aWYgKGxlbiBcdTAwM2U9IEFMTE9DSU5GT19TVFJfU0laRSlcbitcdFx0c3RyICs9IChsZW4gLSBBTExPQ0lORk9fU1RSX1NJWkUpICsgMTtcbitcdHJldHVybiBzdHI7XG4rfVxuK1xuKy8qIENvcHkgYSBzdHJpbmcgYW5kIHRyaW0gZnJvbSB0aGUgYmVnaW5uaW5nIGlmIGl0J3MgdG9vIGxvbmcgKi9cbitzdGF0aWMgdm9pZCBhbGxvY2luZm9fY29weV9zdHIoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKVxuK3tcbitcdHN0cnNjcHlfcGFkKGRlc3QsIGFsbG9jaW5mb19zdHIoc3JjKSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcbit9XG4rXG4rLyogQ29tcGFyZSB0d28gc3RyaW5ncyBhbmQgb25seSBjb25zaWRlciB0aGUgdHJpbW1lZCBzdWZmaXggaWYgczEgaXMgdG9vIGxvbmcgKi9cbitzdGF0aWMgaW50IGFsbG9jaW5mb19jbXBfc3RyKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqdGVtcGxhdGUpXG4re1xuK1x0cmV0dXJuIHN0cm5jbXAoYWxsb2NpbmZvX3N0cihzdHIpLCB0ZW1wbGF0ZSwgQUxMT0NJTkZPX1NUUl9TSVpFKTtcbit9XG4rXG4rLyogRmV0Y2ggdGhlIHBlci1DUFUgY291bnRlcnMgKi9cbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgYWxsb2NpbmZvX3ByZWZldGNoX2NvdW50ZXJzKHN0cnVjdCBjb2RldGFnICpjdClcbit7XG4rXHRyZXR1cm4gYWxsb2NfdGFnX3JlYWQoY3RfdG9fYWxsb2NfdGFnKGN0KSk7XG4rfVxuK1xuKy8qXG4rICogUG9wdWxhdGVzIHRoZSBVQVBJIGFsbG9jaW5mb190YWdfZGF0YSBzdHJ1Y3R1cmUgd2l0aCBhY3RpdmUgcnVudGltZVxuKyAqIHByb2ZpbGluZyBjb3VudGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgZ2l2ZW4ga2VybmVsIGNvZGV0YWcuXG4rICovXG4rc3RhdGljIHZvaWQgYWxsb2NpbmZvX3RvX3BhcmFtcyhzdHJ1Y3QgY29kZXRhZyAqY3QsXG4rXHRcdFx0XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpkYXRhLFxuK1x0XHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMpXG4re1xuK1x0aWYgKGN0LVx1MDAzZW1vZG5hbWUpXG4rXHRcdGFsbG9jaW5mb19jb3B5X3N0cihkYXRhLVx1MDAzZXRhZy5tb2RuYW1lLCBjdC1cdTAwM2Vtb2RuYW1lKTtcbitcdGVsc2VcbitcdFx0ZGF0YS1cdTAwM2V0YWcubW9kbmFtZVswXSA9ICdcXDAnO1xuK1x0YWxsb2NpbmZvX2NvcHlfc3RyKGRhdGEtXHUwMDNldGFnLmZ1bmN0aW9uLCBjdC1cdTAwM2VmdW5jdGlvbik7XG4rXHRhbGxvY2luZm9fY29weV9zdHIoZGF0YS1cdTAwM2V0YWcuZmlsZW5hbWUsIGN0LVx1MDAzZWZpbGVuYW1lKTtcbitcdGRhdGEtXHUwMDNldGFnLmxpbmVubyA9IGN0LVx1MDAzZWxpbmVubztcbitcdGRhdGEtXHUwMDNlY291bnRlci5ieXRlcyA9IGNvdW50ZXJzLVx1MDAzZWJ5dGVzO1xuK1x0ZGF0YS1cdTAwM2Vjb3VudGVyLmNhbGxzID0gY291bnRlcnMtXHUwMDNlY2FsbHM7XG4rXHRkYXRhLVx1MDAzZWNvdW50ZXIuYWNjdXJhdGUgPSAhYWxsb2NfdGFnX2lzX2luYWNjdXJhdGUoY3RfdG9fYWxsb2NfdGFnKGN0KSk7XG4rfVxuK1xuKy8qXG4rICogUmV0cmlldmVzIHRoZSB1bmlxdWUgY29udGVudCBJRCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiB0YWcgbW9kdWxlXG4rICogbGF5b3V0LCBhbGxvd2luZyB1c2Vyc3BhY2UgdG8gZGV0ZWN0IGlmIG1vZHVsZXMgd2VyZSBsb2FkZWQgLyB1bmxvYWRlZC5cbisgKi9cbitzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG4re1xuK1x0c3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkIHBhcmFtcztcbitcbitcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcdHBhcmFtcy5pZCA9IGNvZGV0YWdfZ2V0X2NvbnRlbnRfaWQoYWxsb2NfdGFnX2N0dHlwZSk7XG4rXHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBWZXJpZmllcyB3aGV0aGVyIGEgZ2l2ZW4gY29kZXRhZyBzYXRpc2ZpZXMgdGhlIGFjdGl2ZSBmaWx0ZXJpbmcgY3JpdGVyaWEgYnlcbisgKiBtYXRjaGluZyBpdHMgY2hhcmFjdGVyaXN0aWNzIGFnYWluc3QgdGhlIHNwZWNpZmllZCBmaWx0ZXIuXG4rICovXG4rc3RhdGljIGJvb2wgbWF0Y2hlc19maWx0ZXIoc3RydWN0IGNvZGV0YWcgKmN0LCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyLFxuK1x0XHRcdCAgIHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgKmNvdW50ZXJzLFxuK1x0XHRcdCAgIGJvb2wgKmZldGNoZWRfY291bnRlcnMpXG4re1xuK1x0Ym9vbCBpbmFjY3VyYXRlO1xuK1xuK1x0aWYgKCFmaWx0ZXIgfHwgIWZpbHRlci1cdTAwM2VtYXNrKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUUpIHtcbitcdFx0LyogdXNlciB3YW50cyB0byBmaWx0ZXIgYnkgbW9kbmFtZSBidXQgY3QtXHUwMDNlbW9kbmFtZSBpcyBOVUxMICovXG4rXHRcdGlmICghY3QtXHUwMDNlbW9kbmFtZSkge1xuK1x0XHRcdC8qIHZhbGlkYXRlIGlmIHVzZXIgd2FzIGF0dGVtcHRpbmcgdG8gZmlsdGVyIGZvciBidWlsdC1pbiBhbGxvY2F0aW9ucyAqL1xuK1x0XHRcdGlmIChmaWx0ZXItXHUwMDNlZmllbGRzLm1vZG5hbWVbMF0gIT0gJ1xcMCcpXG4rXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH0gZWxzZSBpZiAoYWxsb2NpbmZvX2NtcF9zdHIoY3QtXHUwMDNlbW9kbmFtZSwgZmlsdGVyLVx1MDAzZWZpZWxkcy5tb2RuYW1lKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT04pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGN0LVx1MDAzZWZ1bmN0aW9uIFx1MDAyNlx1MDAyNiBhbGxvY2luZm9fY21wX3N0cihjdC1cdTAwM2VmdW5jdGlvbiwgZmlsdGVyLVx1MDAzZWZpZWxkcy5mdW5jdGlvbikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgY3QtXHUwMDNlZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGFsbG9jaW5mb19jbXBfc3RyKGN0LVx1MDAzZWZpbGVuYW1lLCBmaWx0ZXItXHUwMDNlZmllbGRzLmZpbGVuYW1lKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0xJTkVOTykgXHUwMDI2XHUwMDI2XG4rXHQgICAgY3QtXHUwMDNlbGluZW5vICE9IGZpbHRlci1cdTAwM2VmaWVsZHMubGluZW5vKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19JTkFDQ1VSQVRFKSB7XG4rXHRcdGluYWNjdXJhdGUgPSAhIShjdC1cdTAwM2VmbGFncyBcdTAwMjYgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpO1xuK1x0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlZmllbGRzLmluYWNjdXJhdGUpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHtcbitcdFx0aWYgKCEqZmV0Y2hlZF9jb3VudGVycykge1xuK1x0XHRcdCpjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4rXHRcdFx0KmZldGNoZWRfY291bnRlcnMgPSB0cnVlO1xuK1x0XHR9XG4rXHRcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjb3VudGVycy1cdTAwM2VieXRlcyBcdTAwM2MgZmlsdGVyLVx1MDAzZW1pbl9zaXplKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGNvdW50ZXJzLVx1MDAzZWJ5dGVzIFx1MDAzZSBmaWx0ZXItXHUwMDNlbWF4X3NpemUpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzXG4rICogcHJvZmlsaW5nIGRhdGEgYW5kIHJldHVybnMgaXQgdG8gdXNlcnNwYWNlLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG4re1xuK1x0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xuK1x0c3RydWN0IGNvZGV0YWcgKmN0O1xuK1x0c3RydWN0IGFsbG9jaW5mb19nZXRfYXQgcGFyYW1zID0gezB9O1xuK1x0X191NjQgc2tpcF9jb3VudDtcbitcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcnM7XG4rXHRib29sIGZldGNoZWRfY291bnRlcnM7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cGFyYW1zLCBhcmcsIHNpemVvZihwYXJhbXMpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoKHBhcmFtcy5maWx0ZXIubWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSBcdTAwMjZcdTAwMjZcbitcdCAgICAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBhcmFtcy5maWx0ZXIubWluX3NpemUgXHUwMDNlIHBhcmFtcy5maWx0ZXIubWF4X3NpemUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbitcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcbitcdGlmIChwYXJhbXMucG9zIFx1MDAzZT0gY29kZXRhZ19nZXRfY291bnQoYWxsb2NfdGFnX2N0dHlwZSkpIHtcbitcdFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdH1cbitcbitcdHNraXBfY291bnQgPSBwYXJhbXMucG9zO1xuK1xuK1x0aWYgKHBhcmFtcy5maWx0ZXIubWFzaylcbitcdFx0cHJpdi1cdTAwM2VmaWx0ZXIgPSBwYXJhbXMuZmlsdGVyO1xuK1x0ZWxzZVxuK1x0XHRwcml2LVx1MDAzZWZpbHRlci5tYXNrID0gMDtcbitcbitcdC8qIEZpbmQgdGhlIGNvZGV0YWcgKi9cbitcdHByaXYtXHUwMDNlaW9jdGxfaXRlciA9IGNvZGV0YWdfZ2V0X2N0X2l0ZXIoYWxsb2NfdGFnX2N0dHlwZSk7XG4rXHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2l0ZXIpO1xuK1xuK1x0d2hpbGUgKGN0KSB7XG4rXHRcdGZldGNoZWRfY291bnRlcnMgPSBmYWxzZTtcbitcdFx0aWYgKG1hdGNoZXNfZmlsdGVyKGN0LCBcdTAwMjZwcml2LVx1MDAzZWZpbHRlciwgXHUwMDI2Y291bnRlcnMsIFx1MDAyNmZldGNoZWRfY291bnRlcnMpKSB7XG4rXHRcdFx0aWYgKHNraXBfY291bnQgPT0gMClcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdHNraXBfY291bnQtLTtcbitcdFx0fVxuK1x0XHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2l0ZXIpO1xuK1x0fVxuK1xuK1x0aWYgKGN0KSB7XG4rXHRcdGlmICghZmV0Y2hlZF9jb3VudGVycylcbitcdFx0XHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4rXHRcdGFsbG9jaW5mb190b19wYXJhbXMoY3QsIFx1MDAyNnBhcmFtcy5kYXRhLCBcdTAwMjZjb3VudGVycyk7XG4rXHRcdHByaXYtXHUwMDNlcG9zaXRpb25lZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRjb2RldGFnX3VubG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuK1xuK1x0aWYgKCFjdClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2cGFyYW1zLCBzaXplb2YocGFyYW1zKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQWR2YW5jZXMgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGFsbG9jYXRpb24gdGFnIGluIHRoZSBzZXF1ZW5jZSBhbmRcbisgKiByZXR1cm5zIGl0cyBwcm9maWxpbmcgZGF0YSB0byB1c2Vyc3BhY2UuXG4rICovXG4rc3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxuK3tcbitcdHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSAqcHJpdjtcbitcdHN0cnVjdCBjb2RldGFnICpjdDtcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcGFyYW1zO1xuK1x0aW50IHJldCA9IDA7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXJzO1xuK1x0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xuK1xuK1x0bWVtc2V0KFx1MDAyNnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpO1xuK1x0cHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbitcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbitcbitcdGlmICghcHJpdi1cdTAwM2Vwb3NpdGlvbmVkKSB7XG4rXHRcdHByaXYtXHUwMDNlaW9jdGxfaXRlciA9IGNvZGV0YWdfZ2V0X2N0X2l0ZXIoYWxsb2NfdGFnX2N0dHlwZSk7XG4rXHRcdHByaXYtXHUwMDNlcG9zaXRpb25lZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2l0ZXIpO1xuK1x0d2hpbGUgKGN0KSB7XG4rXHRcdGZldGNoZWRfY291bnRlcnMgPSBmYWxzZTtcbitcdFx0aWYgKG1hdGNoZXNfZmlsdGVyKGN0LCBcdTAwMjZwcml2LVx1MDAzZWZpbHRlciwgXHUwMDI2Y291bnRlcnMsIFx1MDAyNmZldGNoZWRfY291bnRlcnMpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjdCA9IGNvZGV0YWdfbmV4dF9jdChcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2l0ZXIpO1xuK1x0fVxuK1xuK1x0aWYgKGN0KSB7XG4rXHRcdGlmICghZmV0Y2hlZF9jb3VudGVycylcbitcdFx0XHRjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4rXHRcdGFsbG9jaW5mb190b19wYXJhbXMoY3QsIFx1MDAyNnBhcmFtcywgXHUwMDI2Y291bnRlcnMpO1xuK1x0fVxuK1x0aWYgKCFjdCkge1xuK1x0XHRwcml2LVx1MDAzZXBvc2l0aW9uZWQgPSBmYWxzZTtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdH1cbitcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlaW9jdGxfbG9jayk7XG4rXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLypcbisgKiBFbnRyeSBwb2ludCBpb2N0bCBmdW5jdGlvbiBmb3IgL3Byb2MvYWxsb2NpbmZvIHJvdXRpbmcgcmVxdWVzdHMgdG8gZmV0Y2ggdGhlXG4rICogbGF5b3V0IGNvbnRlbnQgSUQsIHNlZWsgdG8gYSBzcGVjaWZpYyB0YWcsIG9yIHJlYWQgc2VxdWVudGlhbCB0YWdzLlxuKyAqL1xuK3N0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbitcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBfX2FyZylcbit7XG4rXHR2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopX19hcmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c3dpdGNoIChjbWQpIHtcbitcdGNhc2UgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEOlxuK1x0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9BVDpcbitcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9hdChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX05FWFQ6XG4rXHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSAtRU5PSU9DVExDTUQ7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rI2lmZGVmIENPTkZJR19DT01QQVRcbitzdGF0aWMgbG9uZyBhbGxvY2luZm9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4re1xuK1x0cmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xuK1x0LnByb2Nfb3Blblx0XHQ9IGFsbG9jaW5mb19vcGVuLFxuK1x0LnByb2NfcmVhZF9pdGVyXHRcdD0gc2VxX3JlYWRfaXRlcixcbitcdC5wcm9jX2xzZWVrXHRcdD0gc2VxX2xzZWVrLFxuK1x0LnByb2NfcmVsZWFzZVx0XHQ9IGFsbG9jaW5mb19yZWxlYXNlLFxuK1x0LnByb2NfaW9jdGxcdFx0PSBhbGxvY2luZm9faW9jdGwsXG4rI2lmZGVmIENPTkZJR19DT01QQVRcbitcdC5wcm9jX2NvbXBhdF9pb2N0bFx0PSBhbGxvY2luZm9fY29tcGF0X2lvY3RsLFxuKyNlbmRpZlxuK307XG4rXG4gc2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApXG4ge1xuIFx0c3RydWN0IGNvZGV0YWdfaXRlcmF0b3IgaXRlcjtcbkBAIC05OTMsOCArMTMzNCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0aWYgKCFwcm9jX2NyZWF0ZV9zZXFfcHJpdmF0ZShBTExPQ0lORk9fRklMRV9OQU1FLCAwNDAwLCBOVUxMLCBcdTAwMjZhbGxvY2luZm9fc2VxX29wLFxuLVx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGFsbG9jaW5mb19wcml2YXRlKSwgTlVMTCkpIHtcbitcdGlmICghcHJvY19jcmVhdGUoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgMDQwMCwgTlVMTCwgXHUwMDI2YWxsb2NpbmZvX3Byb2Nfb3BzKSkge1xuIFx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gY3JlYXRlICVzIGZpbGVcXG5cIiwgQUxMT0NJTkZPX0ZJTEVfTkFNRSk7XG4gXHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcoZmFsc2UpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlXG5pbmRleCA4ZDRkYjIyNDFjYzJhMi4uMTI5NDFkNjhhN2Y4YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGVcbkBAIC0xLDUgKzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBUQVJHRVRTICs9IGFjY3RcbitUQVJHRVRTICs9IGFsbG9jX3RhZ1xuIFRBUkdFVFMgKz0gYWxzYVxuIFRBUkdFVFMgKz0gYW1kLXBzdGF0ZVxuIFRBUkdFVFMgKz0gYXJtNjRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjQxZDkyZDA2YjE4NDhcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9NYWtlZmlsZVxuQEAgLTAsMCArMSw5IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuK1RFU1RfR0VOX1BST0dTIDo9IGFsbG9jaW5mb19pb2N0bF90ZXN0XG4rXG4rQ0ZMQUdTICs9IC1XYWxsXG4rQ0ZMQUdTICs9ICQoS0hEUl9JTkNMVURFUylcbitcbitpbmNsdWRlIC4uL2xpYi5ta1xuK1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMDkyMzQ4MDk3MjA0Mzlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jXG5AQCAtMCwwICsxLDU0OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitcbisvKiBrc2VsZnRlc3QgZm9yIGFsbG9jaW5mbyBpb2N0bFxuKyAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaXZlcyBhbGxvY2luZm8gZGF0YSB0aHJvdWdoIGlvY3RsXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgSW5jLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FsbG9jX3RhZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCIuLi9rc2VsZnRlc3QuaFwiXG4rXG4rI2RlZmluZSBNQVhfTElORV9MRU5cdFx0NTEyXG4rI2RlZmluZSBBTExPQ0lORk9fUFJPQ1x0XHRcIi9wcm9jL2FsbG9jaW5mb1wiXG4rXG4rZW51bSBpb2N0bF9yZXQge1xuK1x0SU9DVExfU1VDQ0VTUyA9IDAsXG4rXHRJT0NUTF9GQUlMVVJFID0gMSxcbitcdElPQ1RMX0lOVkFMSURfREFUQSA9IDIsXG4rfTtcbitcbisjZGVmaW5lIFZFQ19NQVhfRU5UUklFUyAzMlxuK1xuK3N0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjIHtcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgdGFnW1ZFQ19NQVhfRU5UUklFU107XG4rXHRfX3U2NCBjb3VudDtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCAqcGFyYW1zKVxuK3tcbitcdHJldHVybiBpb2N0bChkZXZfZmQsIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRCwgcGFyYW1zKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgX19hbGxvY2luZm9fZ2V0X2F0KGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0ICpwYXJhbXMpXG4re1xuK1x0cmV0dXJuIGlvY3RsKGRldl9mZCwgQUxMT0NJTkZPX0lPQ19HRVRfQVQsIHBhcmFtcyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IF9fYWxsb2NpbmZvX2dldF9uZXh0KGludCBkZXZfZmQsIHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgKnBhcmFtcylcbit7XG4rXHRyZXR1cm4gaW9jdGwoZGV2X2ZkLCBBTExPQ0lORk9fSU9DX0dFVF9ORVhULCBwYXJhbXMpO1xuK31cbitcbitzdGF0aWMgYm9vbCBtYXRjaF9lbnRyeShjb25zdCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICpwcm9jZnNfZW50cnksXG4rXHRcdFx0Y29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqdGFnX2RhdGEsXG4rXHRcdFx0Ym9vbCBtYXRjaF9ieXRlcywgYm9vbCBtYXRjaF9jYWxscywgYm9vbCBtYXRjaF9saW5lbm8sXG4rXHRcdFx0Ym9vbCBtYXRjaF9mdW5jdGlvbiwgYm9vbCBtYXRjaF9maWxlbmFtZSlcbit7XG4rXHRpZiAobWF0Y2hfYnl0ZXMgXHUwMDI2XHUwMDI2IHRhZ19kYXRhLVx1MDAzZWNvdW50ZXIuYnl0ZXMgIT0gcHJvY2ZzX2VudHJ5LVx1MDAzZWNvdW50ZXIuYnl0ZXMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJzaXplIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKG1hdGNoX2NhbGxzIFx1MDAyNlx1MDAyNiB0YWdfZGF0YS1cdTAwM2Vjb3VudGVyLmNhbGxzICE9IHByb2Nmc19lbnRyeS1cdTAwM2Vjb3VudGVyLmNhbGxzKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2FsbCBjb3VudCByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChtYXRjaF9saW5lbm8gXHUwMDI2XHUwMDI2IHRhZ19kYXRhLVx1MDAzZXRhZy5saW5lbm8gIT0gcHJvY2ZzX2VudHJ5LVx1MDAzZXRhZy5saW5lbm8pIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJsaW5lbm8gcmV0cmlldmVkIHRocm91Z2ggaW9jdGwgZG9lcyBub3QgbWF0Y2ggcHJvY2ZzXFxuXCIpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAobWF0Y2hfZnVuY3Rpb24gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmNtcCh0YWdfZGF0YS1cdTAwM2V0YWcuZnVuY3Rpb24sIHByb2Nmc19lbnRyeS1cdTAwM2V0YWcuZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSkpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJmdW5jdGlvbiByZXRyaWV2ZWQgdGhyb3VnaCBpb2N0bCBkb2VzIG5vdCBtYXRjaCBwcm9jZnNcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmIChtYXRjaF9maWxlbmFtZSBcdTAwMjZcdTAwMjZcbitcdCAgICBzdHJuY21wKHRhZ19kYXRhLVx1MDAzZXRhZy5maWxlbmFtZSwgcHJvY2ZzX2VudHJ5LVx1MDAzZXRhZy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImZpbGVuYW1lIHJldHJpZXZlZCB0aHJvdWdoIGlvY3RsIGRvZXMgbm90IG1hdGNoIHByb2Nmc1xcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1hdGNoX2VudHJpZXMoY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MsXG4rXHRcdFx0ICBib29sIG1hdGNoX2J5dGVzLCBib29sIG1hdGNoX2NhbGxzLCBib29sIG1hdGNoX2xpbmVubyxcbitcdFx0XHQgIGJvb2wgbWF0Y2hfZnVuY3Rpb24sIGJvb2wgbWF0Y2hfZmlsZW5hbWUpXG4re1xuK1x0X191NjQgaTtcbitcbitcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCAhPSB0YWdzLVx1MDAzZWNvdW50KSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiRW50cnkgY291bnQgbWlzbWF0Y2guIGlvY3RsIGVudHJpZXM6ICVsbHUsIHByb2MgZW50cmllczogJWxsdVxcblwiLFxuK1x0XHRcdCAgICAgICB0YWdzLVx1MDAzZWNvdW50LCBwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb2Nmc19lbnRyaWVzLVx1MDAzZWNvdW50OyBpKyspIHtcbitcdFx0aWYgKCFtYXRjaF9lbnRyeShcdTAwMjZwcm9jZnNfZW50cmllcy1cdTAwM2V0YWdbaV0sIFx1MDAyNnRhZ3MtXHUwMDNldGFnW2ldLFxuK1x0XHRcdFx0IG1hdGNoX2J5dGVzLCBtYXRjaF9jYWxscywgbWF0Y2hfbGluZW5vLFxuK1x0XHRcdFx0IG1hdGNoX2Z1bmN0aW9uLCBtYXRjaF9maWxlbmFtZSkpIHtcbitcdFx0XHRrc2Z0X3ByaW50X21zZyhcIiVsbHV0aCBlbnRyeSBkb2VzIG5vdCBtYXRjaC5cXG5cIiwgaSk7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKmFsbG9jaW5mb19zdHIoY29uc3QgY2hhciAqc3RyKVxuK3tcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyKTtcbitcbitcdGlmIChsZW4gXHUwMDNlPSBBTExPQ0lORk9fU1RSX1NJWkUpXG4rXHRcdHN0ciArPSAobGVuIC0gQUxMT0NJTkZPX1NUUl9TSVpFKSArIDE7XG4rXHRyZXR1cm4gc3RyO1xuK31cbitcbitzdGF0aWMgdm9pZCBhbGxvY2luZm9fY29weV9zdHIoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKVxuK3tcbitcdHN0cm5jcHkoZGVzdCwgYWxsb2NpbmZvX3N0cihzcmMpLCBBTExPQ0lORk9fU1RSX1NJWkUgLSAxKTtcbitcdGRlc3RbQUxMT0NJTkZPX1NUUl9TSVpFIC0gMV0gPSAnXFwwJztcbit9XG4rXG4rc3RhdGljIGludCBnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMoc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIpXG4re1xuK1x0RklMRSAqZnAgPSBmb3BlbihBTExPQ0lORk9fUFJPQywgXCJyXCIpO1xuK1x0Y2hhciBsaW5lW01BWF9MSU5FX0xFTl07XG4rXHRpbnQgbWF0Y2hlcztcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgcHJvY2ZzX2VudHJ5O1xuK1xuK1x0aWYgKCFmcCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkZhaWxlZCB0byBvcGVuIFwiIEFMTE9DSU5GT19QUk9DIFwiIGZvciByZWFkaW5nXFxuXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdG1lbXNldChwcm9jZnNfZW50cmllcywgMCwgc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xuK1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApIFx1MDAyNlx1MDAyNiBwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCBcdTAwM2MgVkVDX01BWF9FTlRSSUVTKSB7XG4rXHRcdGNoYXIgZmlsZW5hbWVbTUFYX0xJTkVfTEVOXTtcbitcdFx0Y2hhciBmdW5jdGlvbltNQVhfTElORV9MRU5dO1xuK1xuK1x0XHRtZW1zZXQoXHUwMDI2cHJvY2ZzX2VudHJ5LCAwLCBzaXplb2YocHJvY2ZzX2VudHJ5KSk7XG4rXHRcdG1hdGNoZXMgPSBzc2NhbmYobGluZSwgXCIlbGx1ICVsbHUgJVteOl06JWxsdSBmdW5jOiVzXCIsXG4rXHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LmNvdW50ZXIuYnl0ZXMsXG4rXHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LmNvdW50ZXIuY2FsbHMsXG4rXHRcdFx0XHQgZmlsZW5hbWUsXG4rXHRcdFx0XHQgXHUwMDI2cHJvY2ZzX2VudHJ5LnRhZy5saW5lbm8sXG4rXHRcdFx0XHQgZnVuY3Rpb24pO1xuK1xuK1x0XHRpZiAobWF0Y2hlcyAhPSA1KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5maWxlbmFtZSwgZmlsZW5hbWUpO1xuK1x0XHRhbGxvY2luZm9fY29weV9zdHIocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbiwgZnVuY3Rpb24pO1xuK1xuK1x0XHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRSkge1xuK1x0XHRcdGlmIChzdHJuY21wKHByb2Nmc19lbnRyeS50YWcuZmlsZW5hbWUsXG4rXHRcdFx0XHQgICAgZmlsdGVyLVx1MDAzZWZpZWxkcy5maWxlbmFtZSwgQUxMT0NJTkZPX1NUUl9TSVpFKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSB7XG4rXHRcdFx0aWYgKHN0cm5jbXAocHJvY2ZzX2VudHJ5LnRhZy5mdW5jdGlvbixcbitcdFx0XHRcdCAgICBmaWx0ZXItXHUwMDNlZmllbGRzLmZ1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PKSB7XG4rXHRcdFx0aWYgKHByb2Nmc19lbnRyeS50YWcubGluZW5vICE9IGZpbHRlci1cdTAwM2VmaWVsZHMubGluZW5vKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkUpIHtcbitcdFx0XHRpZiAocHJvY2ZzX2VudHJ5LmNvdW50ZXIuYnl0ZXMgXHUwMDNjIGZpbHRlci1cdTAwM2VtaW5fc2l6ZSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSB7XG4rXHRcdFx0aWYgKHByb2Nmc19lbnRyeS5jb3VudGVyLmJ5dGVzIFx1MDAzZSBmaWx0ZXItXHUwMDNlbWF4X3NpemUpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRtZW1jcHkoXHUwMDI2cHJvY2ZzX2VudHJpZXMtXHUwMDNldGFnW3Byb2Nmc19lbnRyaWVzLVx1MDAzZWNvdW50KytdLCBcdTAwMjZwcm9jZnNfZW50cnksXG4rXHRcdCAgICAgICBzaXplb2YocHJvY2ZzX2VudHJ5KSk7XG4rXHR9XG4rXHRmY2xvc2UoZnApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBlbnVtIGlvY3RsX3JldCBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyhzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyxcbitcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbitcdFx0XHRcdFx0XHQgX191NjQgc3RhcnRfcG9zKVxuK3tcbitcdGludCBmZCA9IG9wZW4oQUxMT0NJTkZPX1BST0MsIE9fUkRPTkxZKTtcbitcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkZhaWxlZCB0byBvcGVuIFwiIEFMTE9DSU5GT19QUk9DIFwiIGZvciBJT0NUTFxcblwiKTtcbitcdFx0cmV0dXJuIElPQ1RMX0ZBSUxVUkU7XG4rXHR9XG4rXG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQgc3RhcnRfY29udF9pZCwgZW5kX2NvbnRfaWQ7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCBnZXRfYXRfcGFyYW1zO1xuK1x0Y29uc3QgaW50IG1heF9yZXRyaWVzID0gMTA7XG4rXHRpbnQgcmV0cnlfY291bnQgPSAwO1xuK1x0aW50IHN0YXR1cztcbitcbitcdC8qXG4rXHQgKiBfX2FsbG9jaW5mb19nZXRfY29udGVudF9pZCBtYXkgcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMgaWYgYSBrZXJuZWwgbW9kdWxlIHdhcyBsb2FkZWRcbitcdCAqIGJldHdlZW4gdGhlIHR3byBjYWxscy4gSWYgdGhhdCBoYXBwZW5zLCB0aGUgZGF0YSBnYXRoZXJlZCBjYW5ub3QgYmUgY29uc2lkZXJlZCBjb25zaXN0ZW50XG4rXHQgKiBhbmQgaGVuY2UgbmVlZHMgdG8gYmUgZmV0Y2hlZCBhZ2FpbiB0byBhdm9pZCBmbGFraW5lc3MuXG4rXHQgKi9cbitcdGRvIHtcbitcdFx0aWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCBcdTAwMjZzdGFydF9jb250X2lkKSkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiYWxsb2NpbmZvX2dldF9jb250ZW50X2lkIGZhaWxlZFxcblwiKTtcbitcdFx0XHRzdGF0dXMgPSBJT0NUTF9GQUlMVVJFO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdG1lbXNldCh0YWdzLCAwLCBzaXplb2YoKnRhZ3MpKTtcbitcdFx0bWVtc2V0KFx1MDAyNmdldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7XG4rXHRcdG1lbWNweShcdTAwMjZnZXRfYXRfcGFyYW1zLmZpbHRlciwgZmlsdGVyLCBzaXplb2YoKmZpbHRlcikpO1xuK1x0XHRnZXRfYXRfcGFyYW1zLnBvcyA9IHN0YXJ0X3BvcztcbitcdFx0aWYgKF9fYWxsb2NpbmZvX2dldF9hdChmZCwgXHUwMDI2Z2V0X2F0X3BhcmFtcykpIHtcbitcdFx0XHRrc2Z0X3ByaW50X21zZyhcImFsbG9jaW5mb19nZXRfYXQgZmFpbGVkXFxuXCIpO1xuK1x0XHRcdHN0YXR1cyA9IElPQ1RMX0ZBSUxVUkU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0bWVtY3B5KFx1MDAyNnRhZ3MtXHUwMDNldGFnW3RhZ3MtXHUwMDNlY291bnQrK10sIFx1MDAyNmdldF9hdF9wYXJhbXMuZGF0YSwgc2l6ZW9mKGdldF9hdF9wYXJhbXMuZGF0YSkpO1xuK1xuK1x0XHR3aGlsZSAodGFncy1cdTAwM2Vjb3VudCBcdTAwM2MgVkVDX01BWF9FTlRSSUVTIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgX19hbGxvY2luZm9fZ2V0X25leHQoZmQsIFx1MDAyNnRhZ3MtXHUwMDNldGFnW3RhZ3MtXHUwMDNlY291bnRdKSA9PSAwKVxuK1x0XHRcdHRhZ3MtXHUwMDNlY291bnQrKztcbitcbitcdFx0aWYgKF9fYWxsb2NpbmZvX2dldF9jb250ZW50X2lkKGZkLCBcdTAwMjZlbmRfY29udF9pZCkpIHtcbitcdFx0XHRrc2Z0X3ByaW50X21zZyhcImFsbG9jaW5mb19nZXRfY29udGVudF9pZCBmYWlsZWRcXG5cIik7XG4rXHRcdFx0c3RhdHVzID0gSU9DVExfRkFJTFVSRTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoc3RhcnRfY29udF9pZC5pZCA9PSBlbmRfY29udF9pZC5pZCkge1xuK1x0XHRcdHN0YXR1cyA9IElPQ1RMX1NVQ0NFU1M7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJhbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgbWlzbWF0Y2gsIHJldHJ5aW5nLi4uXFxuXCIpO1xuK1x0XHRcdHN0YXR1cyA9IElPQ1RMX0lOVkFMSURfREFUQTtcbitcdFx0fVxuK1x0fSB3aGlsZSAoc3RhdHVzID09IElPQ1RMX0lOVkFMSURfREFUQSBcdTAwMjZcdTAwMjYgcmV0cnlfY291bnQrKyBcdTAwM2MgbWF4X3JldHJpZXMpO1xuK1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIHN0YXR1cztcbit9XG4rXG4rc3RhdGljIGludCBydW5fZmlsdGVyX3Rlc3QoY29uc3Qgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcilcbit7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqdGFncyA9IG1hbGxvYyhzaXplb2YoKnRhZ3MpKTtcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICpwcm9jZnNfZW50cmllcyA9IG1hbGxvYyhzaXplb2YoKnByb2Nmc19lbnRyaWVzKSk7XG4rXHRpbnQgaW9jdGxfc3RhdHVzO1xuK1x0aW50IHJldCA9IEtTRlRfUEFTUztcbitcbitcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbitcdGlmIChnZXRfZmlsdGVyZWRfcHJvY2ZzX2VudHJpZXMocHJvY2ZzX2VudHJpZXMsIGZpbHRlcikpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcIiBBTExPQ0lORk9fUFJPQyBcIlxcblwiKTtcbitcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0XHRnb3RvIGV4aXQ7XG4rXHR9XG4rXG4rXHRpZiAocHJvY2ZzX2VudHJpZXMtXHUwMDNlY291bnQgPT0gMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIk5vIGVudHJpZXMgZm91bmQgaW4gXCIgQUxMT0NJTkZPX1BST0MgXCIsIHNraXBwaW5nIHRlc3RcXG5cIik7XG4rXHRcdHJldCA9IEtTRlRfU0tJUDtcbitcdFx0Z290byBleGl0O1xuK1x0fVxuK1xuK1x0aW9jdGxfc3RhdHVzID0gZ2V0X2ZpbHRlcmVkX2lvY3RsX2VudHJpZXModGFncywgZmlsdGVyLCAwKTtcbitcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfSU5WQUxJRF9EQVRBKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiVHJvdWJsZSByZXRyaWV2aW5nIHZhbGlkIElPQ1RMIGVudHJpZXMsIHNraXBwaW5nLlxcblwiKTtcbitcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0XHRnb3RvIGV4aXQ7XG4rXHR9XG4rXHRpZiAoaW9jdGxfc3RhdHVzID09IElPQ1RMX0ZBSUxVUkUpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJFcnJvciByZXRyaWV2aW5nIElPQ1RMIGVudHJpZXMuXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbitcdGlmICghbWF0Y2hfZW50cmllcyhwcm9jZnNfZW50cmllcywgdGFncywgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlKSlcbitcdFx0cmV0ID0gS1NGVF9GQUlMO1xuK1xuK2V4aXQ6XG4rXHRmcmVlKHRhZ3MpO1xuK1x0ZnJlZShwcm9jZnNfZW50cmllcyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfZmlsZW5hbWVfZmlsdGVyKHZvaWQpXG4re1xuK1x0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuK1x0Y29uc3QgY2hhciAqdGFyZ2V0X2ZpbGVuYW1lID0gXCJtbS9tZW1vcnkuY1wiO1xuK1xuK1x0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuK1x0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FO1xuK1x0c3RybmNweShmaWx0ZXIuZmllbGRzLmZpbGVuYW1lLCB0YXJnZXRfZmlsZW5hbWUsIEFMTE9DSU5GT19TVFJfU0laRSk7XG4rXG4rXHRyZXR1cm4gcnVuX2ZpbHRlcl90ZXN0KFx1MDAyNmZpbHRlcik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9mdW5jdGlvbl9maWx0ZXIodm9pZClcbit7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XG4rXHRjb25zdCBjaGFyICp0YXJnZXRfZnVuY3Rpb24gPSBcImR1cF9tbVwiO1xuK1xuK1x0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuK1x0ZmlsdGVyLm1hc2sgfD0gQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OO1xuK1x0c3RybmNweShmaWx0ZXIuZmllbGRzLmZ1bmN0aW9uLCB0YXJnZXRfZnVuY3Rpb24sIEFMTE9DSU5GT19TVFJfU0laRSk7XG4rXG4rXHRyZXR1cm4gcnVuX2ZpbHRlcl90ZXN0KFx1MDAyNmZpbHRlcik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9zaXplX2ZpbHRlcih2b2lkKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGFfdmVjICp0YWdzID0gbWFsbG9jKHNpemVvZigqdGFncykpO1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnByb2Nmc19lbnRyaWVzID0gbWFsbG9jKHNpemVvZigqcHJvY2ZzX2VudHJpZXMpKTtcbitcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIGZpbHRlcjtcbitcdGludCByZXQgPSBLU0ZUX1BBU1M7XG4rXHRfX3U2NCB0YXJnZXRfc2l6ZSwgaSwgcG9zO1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSAqZm91bmRfdGFnID0gTlVMTDtcbitcdGNvbnN0IGNoYXIgKnRhcmdldF9mdW5jdGlvbiA9IFwiZG9faW5pdF9tb2R1bGVcIjtcbitcdHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCBzdGFydF9jb250X2lkLCBlbmRfY29udF9pZDtcbitcdGludCByZXRyeSA9IDA7XG4rXHRjb25zdCBpbnQgbWF4X3JldHJpZXMgPSAxMDtcbitcbitcdGlmICghdGFncyB8fCAhcHJvY2ZzX2VudHJpZXMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdGdvdG8gZnJlZW1lbTtcbitcdH1cbitcbitcdGZkID0gb3BlbihBTExPQ0lORk9fUFJPQywgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiRmFpbGVkIHRvIG9wZW4gXCIgQUxMT0NJTkZPX1BST0MgXCI6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdFx0Z290byBmcmVlbWVtO1xuK1x0fVxuK1xuK1x0ZG8ge1xuK1x0XHRmb3VuZF90YWcgPSBOVUxMO1xuK1x0XHRwb3MgPSAwO1xuK1xuK1x0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFx1MDAyNnN0YXJ0X2NvbnRfaWQpKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJhbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQgZmFpbGVkXFxuXCIpO1xuK1x0XHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXHRcdH1cbitcbitcdFx0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuK1x0XHRmaWx0ZXIubWFzayB8PSBBTExPQ0lORk9fRklMVEVSX01BU0tfRlVOQ1RJT047XG4rXHRcdHN0cm5jcHkoZmlsdGVyLmZpZWxkcy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uLCBBTExPQ0lORk9fU1RSX1NJWkUpO1xuK1xuK1x0XHRpZiAoZ2V0X2ZpbHRlcmVkX3Byb2Nmc19lbnRyaWVzKHByb2Nmc19lbnRyaWVzLCBcdTAwMjZmaWx0ZXIpKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJFcnJvciByZXRyaWV2aW5nIGVudHJpZXMgZnJvbSBcIiBBTExPQ0lORk9fUFJPQyBcIlxcblwiKTtcbitcdFx0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdFx0Z290byBleGl0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCA9PSAwKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJGdW5jdGlvbiAlcyBub3QgZm91bmQgaW4gcHJvY2ZzXFxuXCIsIHRhcmdldF9mdW5jdGlvbik7XG4rXHRcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0XHRcdGdvdG8gZXhpdDtcbitcdFx0fVxuK1xuK1x0XHR0YXJnZXRfc2l6ZSA9IHByb2Nmc19lbnRyaWVzLVx1MDAzZXRhZ1swXS5jb3VudGVyLmJ5dGVzO1xuK1xuK1x0XHRtZW1zZXQoXHUwMDI2ZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7XG4rXHRcdGZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRTtcbitcdFx0ZmlsdGVyLm1pbl9zaXplID0gdGFyZ2V0X3NpemU7XG4rXHRcdGZpbHRlci5tYXhfc2l6ZSA9IHRhcmdldF9zaXplO1xuK1xuK1x0XHR3aGlsZSAoMSkge1xuK1x0XHRcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IGdldF9hdF9wYXJhbXM7XG4rXG4rXHRcdFx0bWVtc2V0KFx1MDAyNmdldF9hdF9wYXJhbXMsIDAsIHNpemVvZihnZXRfYXRfcGFyYW1zKSk7XG4rXHRcdFx0bWVtY3B5KFx1MDAyNmdldF9hdF9wYXJhbXMuZmlsdGVyLCBcdTAwMjZmaWx0ZXIsIHNpemVvZihmaWx0ZXIpKTtcbitcdFx0XHRnZXRfYXRfcGFyYW1zLnBvcyA9IHBvcztcbitcbitcdFx0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2F0KGZkLCBcdTAwMjZnZXRfYXRfcGFyYW1zKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdHRhZ3MtXHUwMDNlY291bnQgPSAwO1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0YWdzLVx1MDAzZXRhZ1t0YWdzLVx1MDAzZWNvdW50KytdLCBcdTAwMjZnZXRfYXRfcGFyYW1zLmRhdGEsXG4rXHRcdFx0ICAgICAgIHNpemVvZihnZXRfYXRfcGFyYW1zLmRhdGEpKTtcbitcbitcdFx0XHR3aGlsZSAodGFncy1cdTAwM2Vjb3VudCBcdTAwM2MgVkVDX01BWF9FTlRSSUVTIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgICBfX2FsbG9jaW5mb19nZXRfbmV4dChmZCwgXHUwMDI2dGFncy1cdTAwM2V0YWdbdGFncy1cdTAwM2Vjb3VudF0pID09IDApXG4rXHRcdFx0XHR0YWdzLVx1MDAzZWNvdW50Kys7XG4rXG4rXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFncy1cdTAwM2Vjb3VudDsgaSsrKSB7XG4rXHRcdFx0XHRpZiAoc3RyY21wKHRhZ3MtXHUwMDNldGFnW2ldLnRhZy5mdW5jdGlvbiwgdGFyZ2V0X2Z1bmN0aW9uKSA9PSAwKSB7XG4rXHRcdFx0XHRcdGZvdW5kX3RhZyA9IFx1MDAyNnRhZ3MtXHUwMDNldGFnW2ldO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4rXG4rXHRcdFx0aWYgKGZvdW5kX3RhZyB8fCB0YWdzLVx1MDAzZWNvdW50IFx1MDAzYyBWRUNfTUFYX0VOVFJJRVMpXG4rXHRcdFx0XHRicmVhaztcbitcbitcdFx0XHRwb3MgKz0gdGFncy1cdTAwM2Vjb3VudDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoX19hbGxvY2luZm9fZ2V0X2NvbnRlbnRfaWQoZmQsIFx1MDAyNmVuZF9jb250X2lkKSkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiYWxsb2NpbmZvX2dldF9jb250ZW50X2lkIGZhaWxlZFxcblwiKTtcbitcdFx0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdFx0Z290byBleGl0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzdGFydF9jb250X2lkLmlkID09IGVuZF9jb250X2lkLmlkKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIk1vZHVsZSBsb2FkIGRldGVjdGVkIGR1cmluZyBzaXplIHZlcmlmaWNhdGlvbiwgcmV0cnlpbmcuLi5cXG5cIik7XG4rXHR9IHdoaWxlIChyZXRyeSsrIFx1MDAzYyBtYXhfcmV0cmllcyk7XG4rXG4rXHRpZiAoc3RhcnRfY29udF9pZC5pZCA9PSBlbmRfY29udF9pZC5pZCBcdTAwMjZcdTAwMjYgIWZvdW5kX3RhZykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVudHJ5IHdpdGggZnVuY3Rpb24gJXMgbm90IGZvdW5kIGluIElPQ1RMIHJlc3VsdHNcXG5cIixcbitcdFx0XHQgICAgICAgdGFyZ2V0X2Z1bmN0aW9uKTtcbitcdFx0cmV0ID0gS1NGVF9GQUlMO1xuK1x0fSBlbHNlIGlmIChzdGFydF9jb250X2lkLmlkICE9IGVuZF9jb250X2lkLmlkKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiRmFpbGVkIHRvIG1hdGNoIGNvbnRlbnRfaWRzIGZvciBwcm9jZnMgYW5kIElPQ1RMLCBza2lwcGluZy4uLlxcblwiKTtcbitcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0fSBlbHNlIGlmIChmb3VuZF90YWcgXHUwMDI2XHUwMDI2IGZvdW5kX3RhZy1cdTAwM2Vjb3VudGVyLmJ5dGVzICE9IHRhcmdldF9zaXplKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiSU9DVEwgZW50cnkgc2l6ZSAlbGx1IGRvZXMgbm90IG1hdGNoIHRhcmdldCBzaXplICVsbHVcXG5cIixcbitcdFx0XHQgICAgICAgZm91bmRfdGFnLVx1MDAzZWNvdW50ZXIuYnl0ZXMsIHRhcmdldF9zaXplKTtcbitcdFx0cmV0ID0gS1NGVF9GQUlMO1xuK1x0fVxuK1xuK2V4aXQ6XG4rXHRjbG9zZShmZCk7XG4rZnJlZW1lbTpcbitcdGZyZWUodGFncyk7XG4rXHRmcmVlKHByb2Nmc19lbnRyaWVzKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9saW5lbm9fZmlsdGVyKHZvaWQpXG4re1xuK1x0c3RydWN0IGFsbG9jaW5mb190YWdfZGF0YV92ZWMgKnRhZ3MgPSBtYWxsb2Moc2l6ZW9mKCp0YWdzKSk7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhX3ZlYyAqcHJvY2ZzX2VudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKCpwcm9jZnNfZW50cmllcykpO1xuK1x0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuK1x0ZW51bSBpb2N0bF9yZXQgaW9jdGxfc3RhdHVzO1xuK1x0aW50IHJldCA9IEtTRlRfUEFTUztcbitcdF9fdTY0IHRhcmdldF9saW5lbm8sIGk7XG4rXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhICp0YXJnZXRfdGFnO1xuK1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuK1xuK1x0aWYgKCF0YWdzIHx8ICFwcm9jZnNfZW50cmllcykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cXG5cIik7XG4rXHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdFx0Z290byBleGl0O1xuK1x0fVxuK1xuK1x0bWVtc2V0KFx1MDAyNmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpO1xuK1xuK1x0aWYgKGdldF9maWx0ZXJlZF9wcm9jZnNfZW50cmllcyhwcm9jZnNfZW50cmllcywgXHUwMDI2ZmlsdGVyKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVycm9yIHJldHJpZXZpbmcgZW50cmllcyBmcm9tIFwiIEFMTE9DSU5GT19QUk9DIFwiXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcdGlmIChwcm9jZnNfZW50cmllcy1cdTAwM2Vjb3VudCA9PSAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiQ291bGQgbm90IHJldHJpZXZlIHByb2NmcyBlbnRyaWVzXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcdC8qXG4rXHQgKiBXZSBkZXBlbmQgb24gdGhlIHByb2NmcyByZXN1bHRzIHRvIGRldGVybWluZSB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBmaWx0ZXIgYmVmb3JlXG4rXHQgKiBtYWtpbmcgdGhlIGlvY3RsIHF1ZXJ5LiBIZW5jZSwgd2UgY2Fubm90IHJldXNlIHJ1bl9maWx0ZXJfdGVzdCBoZXJlLlxuK1x0ICovXG4rXHR0YXJnZXRfdGFnID0gXHUwMDI2cHJvY2ZzX2VudHJpZXMtXHUwMDNldGFnWzBdO1xuK1x0dGFyZ2V0X2xpbmVubyA9IHRhcmdldF90YWctXHUwMDNldGFnLmxpbmVubztcbitcbitcdGZpbHRlci5tYXNrIHw9IEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk87XG4rXHRmaWx0ZXIuZmllbGRzLmxpbmVubyA9IHRhcmdldF9saW5lbm87XG4rXG4rXHRpb2N0bF9zdGF0dXMgPSBnZXRfZmlsdGVyZWRfaW9jdGxfZW50cmllcyh0YWdzLCBcdTAwMjZmaWx0ZXIsIDApO1xuK1x0aWYgKGlvY3RsX3N0YXR1cyA9PSBJT0NUTF9JTlZBTElEX0RBVEEpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJUcm91YmxlIHJldHJpZXZpbmcgdmFsaWQgSU9DVEwgZW50cmllcywgc2tpcHBpbmcuXFxuXCIpO1xuK1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcdGlmIChpb2N0bF9zdGF0dXMgPT0gSU9DVExfRkFJTFVSRSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkVycm9yIHJldHJpZXZpbmcgSU9DVEwgZW50cmllcy5cXG5cIik7XG4rXHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdFx0Z290byBleGl0O1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFncy1cdTAwM2Vjb3VudDsgaSsrKSB7XG4rXHRcdGlmICh0YWdzLVx1MDAzZXRhZ1tpXS50YWcubGluZW5vICE9IHRhcmdldF9saW5lbm8pIHtcbitcdFx0XHRrc2Z0X3ByaW50X21zZyhcIklPQ1RMIGVudHJ5ICVsbHUgaGFzIGluY29ycmVjdCBsaW5lbm8gJWxsdS5cXG5cIixcbitcdFx0XHRcdCAgICAgICBpLCB0YWdzLVx1MDAzZXRhZ1tpXS50YWcubGluZW5vKTtcbitcdFx0XHRyZXQgPSBLU0ZUX0ZBSUw7XG4rXHRcdFx0Z290byBleGl0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzdHJuY21wKHRhZ3MtXHUwMDNldGFnW2ldLnRhZy5mdW5jdGlvbiwgdGFyZ2V0X3RhZy1cdTAwM2V0YWcuZnVuY3Rpb24sXG4rXHRcdFx0ICAgIEFMTE9DSU5GT19TVFJfU0laRSkgPT0gMCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHN0cm5jbXAodGFncy1cdTAwM2V0YWdbaV0udGFnLmZpbGVuYW1lLCB0YXJnZXRfdGFnLVx1MDAzZXRhZy5maWxlbmFtZSxcbitcdFx0XHQgICAgQUxMT0NJTkZPX1NUUl9TSVpFKSA9PSAwKVxuK1x0XHRcdGZvdW5kID0gdHJ1ZTtcbitcdH1cbitcbitcdGlmICghZm91bmQpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJPcmlnaW5hbCBwcm9jZnMgZW50cnkgbm90IGZvdW5kIGluIElPQ1RMIGxpbmVubyBmaWx0ZXIgcmVzdWx0cy5cXG5cIik7XG4rXHRcdHJldCA9IEtTRlRfRkFJTDtcbitcdH1cbitcbitleGl0OlxuK1x0ZnJlZSh0YWdzKTtcbitcdGZyZWUocHJvY2ZzX2VudHJpZXMpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0a3NmdF9zZXRfcGxhbig0KTtcbitcbitcdHJldCA9IHRlc3RfZmlsZW5hbWVfZmlsdGVyKCk7XG4rXHRpZiAocmV0ID09IEtTRlRfU0tJUClcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiU2tpcHBpbmcgdGVzdF9maWxlbmFtZV9maWx0ZXJcXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXCJ0ZXN0X2ZpbGVuYW1lX2ZpbHRlclxcblwiKTtcbitcbitcdHJldCA9IHRlc3RfZnVuY3Rpb25fZmlsdGVyKCk7XG4rXHRpZiAocmV0ID09IEtTRlRfU0tJUClcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiU2tpcHBpbmcgdGVzdF9mdW5jdGlvbl9maWx0ZXJcXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQocmV0ID09IEtTRlRfUEFTUywgXCJ0ZXN0X2Z1bmN0aW9uX2ZpbHRlclxcblwiKTtcbitcbitcdHJldCA9IHRlc3Rfc2l6ZV9maWx0ZXIoKTtcbitcdGlmIChyZXQgPT0gS1NGVF9TS0lQKVxuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJTa2lwcGluZyB0ZXN0X3NpemVfZmlsdGVyXFxuXCIpO1xuK1x0ZWxzZVxuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KHJldCA9PSBLU0ZUX1BBU1MsIFwidGVzdF9zaXplX2ZpbHRlclxcblwiKTtcbitcbitcdHJldCA9IHRlc3RfbGluZW5vX2ZpbHRlcigpO1xuK1x0aWYgKHJldCA9PSBLU0ZUX1NLSVApXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlNraXBwaW5nIHRlc3RfbGluZW5vX2ZpbHRlclxcblwiKTtcbitcdGVsc2VcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdChyZXQgPT0gS1NGVF9QQVNTLCBcInRlc3RfbGluZW5vX2ZpbHRlclxcblwiKTtcbitcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjoyODoxNC40MDk3NjYxNDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjMzNTgxNTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGFuIGBpb2N0bGAgaW50ZXJmYWNlIHRvIGAvcHJvYy9hbGxvY2luZm9gIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcuIEludGVyZXN0aW5nLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIG91dCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIGRvY3VtZW50YXRpb24gKGBEb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdGAsIGBEb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdGApLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChnb29kLCBuZWVkIHRvIGtlZXAgdGhhdCB1cCB0byBkYXRlISksIGhlYWRlciBmaWxlcyAoYGluY2x1ZGUvbGludXgvY29kZXRhZy5oYCwgYGluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaGApLCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiAoYGxpYi9jb2RldGFnLmNgLCBgbW0vYWxsb2NfdGFnLmNgKSwgYW5kIHNvbWUgc2VsZi10ZXN0cyAoYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4uLmApLlxuXG5NeSBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBtbS9hbGxvY190YWcuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIGBpb2N0bGAgaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIHRoaXMgYGlvY3RsYCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGV4cG9zZWQgdGhyb3VnaCBgL3Byb2MvYWxsb2NpbmZvYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guIEkgc2VlIHRocmVlIGBpb2N0bGAgY29tbWFuZHM6IGBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSURgLCBgQUxMT0NJTkZPX0lPQ19HRVRfQVRgLCBhbmQgYEFMTE9DSU5GT19JT0NfR0VUX05FWFRgLiBVc2Vyc3BhY2Ugd2lsbCBpbnRlcmFjdCB3aXRoIHRoaXMgYnkgb3BlbmluZyBgL3Byb2MvYWxsb2NpbmZvYCBhbmQgbWFraW5nIGNhbGxzIHRvIGBpb2N0bCgpYC4gVGhpcyBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwsIGFuZCB0aGF0IHNjcmVhbXMgZnV6emluZyB0byBtZS4gSXQncyBjcnVjaWFsIHdlIHRob3JvdWdobHkgdGVzdCB0aGlzIGludGVyZmFjZSBmb3IgYW55IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5Ob3csIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgY29uZmlndXJhdGlvbiB0aGlzIHdpbGwgYmUgZW5hYmxlZC4gSSdsbCBjaGVjayBgbW0vYWxsb2NfdGFnLmNgIGFuZCBjb25maXJtIHRoYXQgaXQncyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLiBJZiBpdCBpc24ndCwgdGhlcmUncyBsaWtlbHkgc29tZSBtaXN0YWtlIGluIHRoZSBidWlsZCBydWxlcywgb3IgcGVyaGFwcyB0aGUgZmVhdHVyZSBpcyBpbnRlbmRlZCB0byBiZSBlbmFibGVkIGluIGEgZGlmZmVyZW50IG1hbm5lciwgb3IgdW5kZXIgYSBkaWZmZXJlbnQgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjI4OjIwLjY0MzM0OTY1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDUyNTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY190YWcub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xcbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgKz0gYWxsb2NfdGFnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MjAuNzA3ODgwODc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NzM2MTMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcgQ29uZmlndXJhdGlvbiBhbmQgVGFyZ2V0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlOyB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBleHBsaWNpdGx5IGVuYWJsZWQuIE5vdywgbGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW1wbGljaXRseSBuZWVkZWQsIG9yIGlmIGl0J3MgZGVwZW5kZW50IG9uIHNvbWUgb3RoZXIgZmVhdHVyZS5cblxuQWgsIHRoZSBgaW9jdGxgIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQgdGhyb3VnaCBgL3Byb2MvYWxsb2NpbmZvYC4gUmlnaHQsIHRoYXQgZmlsZSBpcyBjcmVhdGVkIGR1cmluZyBgYWxsb2NfdGFnX2luaXQoKWAgd2l0aGluIGBtbS9hbGxvY190YWcuY2AsIGFzIGluZGljYXRlZCBieSB0aGlzIGNvZGUgc25pcHBldDpcbmBgYGNcblx0aWYgKCFwcm9jX2NyZWF0ZShBTExPQ0lORk9fRklMRV9OQU1FLCAwNDAwLCBOVUxMLCBcdTAwMjZhbGxvY2luZm9fcHJvY19vcHMpKSB7XG5gYGBcblNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkga25ldyB0aGUgYHByb2NgIGZpbGVzeXN0ZW0gd2FzIGludm9sdmVkLCBhbmQsIHllcywgYENPTkZJR19QUk9DX0ZTYCBpcyByZXF1aXJlZC4gSG93ZXZlciwgaXQncyBzdWNoIGEgZ2VuZXJhbCBkZXBlbmRlbmN5IHRoYXQgSSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgaXQuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgdGhlIGltcG9ydGFudCwgbW9yZSBzcGVjaWZpYyBvbmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hlcmUgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZz8gTGV0J3Mgc2lmdCB0aHJvdWdoIGBtbS9hbGxvY190YWcuY2AgZmlyc3QuIEJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZyBoZXJlLCB0aGVzZSBsb29rIGxpa2UgcHJpbWUgdGFyZ2V0czogYGFsbG9jaW5mb19pb2N0bGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9hdGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X25leHRgLCBgbWF0Y2hlc19maWx0ZXJgLCBgYWxsb2NpbmZvX3RvX3BhcmFtc2AsIGBhbGxvY2luZm9fcHJlZmV0Y2hfY291bnRlcnNgLCBgYWxsb2NpbmZvX2NtcF9zdHJgLCBgYWxsb2NpbmZvX2NvcHlfc3RyYCwgYGFsbG9jaW5mb19zdHJgLCBgYWxsb2NpbmZvX29wZW5gLCBhbmQgYGFsbG9jaW5mb19yZWxlYXNlYC5cblxuSSdsbCBhbHNvIGhhdmUgYSBsb29rIGF0IGBsaWIvY29kZXRhZy5jYC4gT2theSwgaGVyZSBJIHNlZSBgY29kZXRhZ19nZXRfY29udGVudF9pZGAgYW5kIGBjb2RldGFnX2dldF9jb3VudGAgd2hpY2ggbWlnaHQgYmUgaW50ZXJlc3RpbmcgYXMgd2VsbC5cblxuSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBmdW5jdGlvbnMgaW4gYG1tL2FsbG9jX3RhZy5jYCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZW0gY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5ODksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MjYuOTU1MjQ1NjQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzgyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jaW5mb19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9hbGxvY190YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz0yMTE9c3RhdGljIHZvaWQgYWxsb2NpbmZvX3RvX3BhcmFtcyhzdHJ1Y3QgY29kZXRhZyAqY3QsXFxuLS1cXG5tbS9hbGxvY190YWcuYy0yMzAtICovXFxubW0vYWxsb2NfdGFnLmM6MjMxOnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG5tbS9hbGxvY190YWcuYy0yMzIte1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9MjQ4PXN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTMwNC0gKi9cXG5tbS9hbGxvY190YWcuYzozMDU6c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG5tbS9hbGxvY190YWcuYy0zMDYte1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtMzc5LSAqL1xcbm1tL2FsbG9jX3RhZy5jOjM4MDpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxubW0vYWxsb2NfdGFnLmMtMzgxLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTQzMC0gKi9cXG5tbS9hbGxvY190YWcuYzo0MzE6c3RhdGljIGxvbmcgYWxsb2NpbmZvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbm1tL2FsbG9jX3RhZy5jLTQzMi1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBfX2FyZylcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTQzOC1cXHRjYXNlIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRDpcXG5tbS9hbGxvY190YWcuYzo0Mzk6XFx0XFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcXG5tbS9hbGxvY190YWcuYy00NDAtXFx0XFx0YnJlYWs7XFxubW0vYWxsb2NfdGFnLmMtNDQxLVxcdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfQVQ6XFxubW0vYWxsb2NfdGFnLmM6NDQyOlxcdFxcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfYXQoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xcbm1tL2FsbG9jX3RhZy5jLTQ0My1cXHRcXHRicmVhaztcXG5tbS9hbGxvY190YWcuYy00NDQtXFx0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUOlxcbm1tL2FsbG9jX3RhZy5jOjQ0NTpcXHRcXHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xcbm1tL2FsbG9jX3RhZy5jLTQ0Ni1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTQ1Nj1zdGF0aWMgbG9uZyBhbGxvY2luZm9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDU4LXtcXG5tbS9hbGxvY190YWcuYzo0NTk6XFx0cmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XFxubW0vYWxsb2NfdGFnLmMtNDYwLX1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGFsbG9jaW5mb19wcm9jX29wcyA9IHtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTQ2Ny1cXHQucHJvY19yZWxlYXNlXFx0XFx0PSBhbGxvY2luZm9fcmVsZWFzZSxcXG5tbS9hbGxvY190YWcuYzo0Njg6XFx0LnByb2NfaW9jdGxcXHRcXHQ9IGFsbG9jaW5mb19pb2N0bCxcXG5tbS9hbGxvY190YWcuYy00NjktI2lmZGVmIENPTkZJR19DT01QQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MjcuMDE3MDMzMjgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NTk0NDY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aGVtIHRocm91Z2ggYXMgSSBhbmFseXplIHRoZSBjb2RlOlxuXG4qKkFuYWx5emluZyBhbGxvY2luZm8gaW9jdGwgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBgYWxsb2NpbmZvYCBpb2N0bCBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgcGllY2VzOiBgYWxsb2NpbmZvX2lvY3RsYCwgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkYCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfYXRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0YCwgYW5kIGZpbmFsbHkgYG1hdGNoZXNfZmlsdGVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgcmVsYXRlZCBmaWx0ZXJpbmcgbG9naWMsIHByZXN1bWFibHkgZm9yIG1hbmFnaW5nIGFuZCByZXRyaWV2aW5nIGFsbG9jYXRpb24gaW5mb3JtYXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgaW50ZXJhY3QgYW5kIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zOyB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgaXMgY3JpdGljYWwuIE5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbGliL2NvZGV0YWcuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBkZXBlbmRlbmNpZXMgaGVyZSB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2hhdCB0aGlzIGRhdGEgbWVhbnMsIG9yIHRoYXQgdGhlcmUgYXJlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBoZXJlIHRoYXQgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBvcGVyYXRpb24gb2YgYGFsbG9jaW5mb2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjAxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6MzAuNjEyOTgwNzAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDM0MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvZGV0YWdfZ2V0X2NvbnRlbnRfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL2NvZGV0YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvY29kZXRhZy5jPTUwPXZvaWQgY29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3Qoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxcbi0tXFxubGliL2NvZGV0YWcuYy01NC1cXG5saWIvY29kZXRhZy5jOjU1OnVuc2lnbmVkIGxvbmcgY29kZXRhZ19nZXRfY29udGVudF9pZChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUpXFxubGliL2NvZGV0YWcuYy01Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjI4OjMwLjY3MTAxOTU1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjE3NjYwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBjb2RldGFnX2dldF9jb3VudGAgaW4gQ29udGV4dCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgY29kZXRhZ19nZXRfY291bnRgLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSBhc2ssIFwiV2hlcmUgZG9lcyB0aGlzIGZpdCBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbT8gV2hhdCBpcyB0aGUgZnVuY3Rpb24ncyByZXNwb25zaWJpbGl0eT8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBtb2R1bGUgb3IgZnJhbWV3b3JrP1wiIEknbSBtZW50YWxseSB0cmFjaW5nIGl0cyBjb25uZWN0aW9ucy4gSSdtIGFscmVhZHkgZW52aXNpb25pbmcgcG90ZW50aWFsIGNhbGxpbmcgY29udGV4dHMsIGxpa2VseSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgdG8gc3RvcmUgdGhlIGNvZGUgdGFncyBhbmQgd2hlcmUgdGhpcyBjb3VudCBtaWdodCBiZSBuZWVkZWQuXG5cblRoZW4gSSBtb3ZlIHRvIHRoZSBkZXNpZ24gaXRzZWxmLiBXaGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIHRoaXM/IFdoYXQgZWRnZSBjYXNlcyBtaWdodCBub3QgYmUgaGFuZGxlZD8gSXMgaXQgb3B0aW1pemVkIGZvciBjb21tb24gc2NlbmFyaW9zPyBXaGF0IGlzIHRoZSBleHBlY3RlZCBzY2FsZSwgYW5kIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvdW50aW5nIG1lY2hhbmlzbT8gSXMgaXQgTygxKSwgTyhuKSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBpbmRleGluZyBtZXRob2RzLCBhbmQgYW55IGNhY2hpbmcgc3RyYXRlZ2llcyB0byB0cnVseSBncmFzcCB0aGUgdGltZSBjb21wbGV4aXR5LiBJ4oCZbSB0aGlua2luZywgXCJJcyB0aGVyZSBhIHRyYWRlLW9mZiBoZXJlPyBEb2VzIHRoaXMgZnVuY3Rpb24gcHJpb3JpdGl6ZSBzcGVlZCBvdmVyIG1lbW9yeSwgb3IgdmljZSB2ZXJzYT9cIlxuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBhIHNpbXBsZSBjb3VudGVyIG9uIGEgZGF0YWJhc2UgcmVjb3JkPyBJcyBpdCBhbiBpbi1tZW1vcnkgYWdncmVnYXRpb24/IERvZXMgaXQgaW52b2x2ZSBpdGVyYXRpbmcgb3ZlciBhIGRhdGEgc3RydWN0dXJlLCBvciBhcmUgd2UgbGV2ZXJhZ2luZyBzb21lIHNvcnQgb2YgcHJlY29tcHV0ZWQgaW5kZXg/IEknbSBhbHJlYWR5IHNlZWluZyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgaXQncyBub3QgdGhyZWFkLXNhZmUgYW5kIGNvbnNpZGVyaW5nIGhvdyB0byBtYW5hZ2UgY29uY3VycmVudCBhY2Nlc3MgdG8gc2hhcmVkIGNvdW50ZXJzIG9yIGRhdGEgc3RydWN0dXJlcy4gSSdtIGFsc28gYXNraW5nIG15c2VsZiBpZiB0aGUgZnVuY3Rpb24gbmVlZHMgdG8gaGFuZGxlIG51bGwgb3IgZW1wdHkgcmVzdWx0cyBncmFjZWZ1bGx5LlxuXG5Nb3N0IGltcG9ydGFudGx5LCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGVycm9ycywgYmVjYXVzZSBubyBwaWVjZSBvZiBjb2RlIGlzIHBlcmZlY3QuIEFyZSB0aGVyZSBndWFyZHJhaWxzIGluIHBsYWNlIGZvciBwb3RlbnRpYWwgZGF0YWJhc2UgZXJyb3JzIG9yIGludmFsaWQgaW5wdXQ/IERvIGVycm9yIG1lc3NhZ2VzIGNsZWFybHkgY29tbXVuaWNhdGUgdGhlIHByb2JsZW0gYW5kIGl0cyBsaWtlbHkgY2F1c2U/IEnigJltIGltYWdpbmluZyB0aGUgd29yc3QtY2FzZSBzY2VuYXJpb3MgYW5kIHRoZSBkZWJ1Z2dpbmcgc3RlcHMgSSdkIG5lZWQgdG8gdGFrZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy5cblxuVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGBjb2RldGFnX2dldF9jb3VudGAgcmFpc2VzIGEgaG9zdCBvZiBxdWVzdGlvbnMgdGhhdCBtdXN0IGJlIGFkZHJlc3NlZCB0byBlbnN1cmUgaXRzIGVmZmVjdGl2ZSBhbmQgcmVsaWFibGUgb3BlcmF0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDIyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjoyODozNS41OTI3ODg2NjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NDQ4NzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RldGFnX2dldF9jb3VudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvY29kZXRhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9jb2RldGFnLmM9NTU9dW5zaWduZWQgbG9uZyBjb2RldGFnX2dldF9jb250ZW50X2lkKHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZSlcXG4tLVxcbmxpYi9jb2RldGFnLmMtNjEtXFxubGliL2NvZGV0YWcuYzo2Mjp1bnNpZ25lZCBpbnQgY29kZXRhZ19nZXRfY291bnQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlKVxcbmxpYi9jb2RldGFnLmMtNjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjoyODozNS45NTcyODE1MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMDI0NTEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgS2VybmVsIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBicmFuZCBuZXcgaW9jdGwgaW50ZXJmYWNlIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcsIGV4cG9zZWQgdGhyb3VnaCBgL3Byb2MvYWxsb2NpbmZvYC4gVGhhdCdzIGEgYmlnIHJlZCBmbGFnIGZvciBmdXp6aW5nLCByaWdodCBvZmYgdGhlIGJhdC4gQW55IG5ldyB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBBUEksIGVzcGVjaWFsbHkgb25lIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUga2VybmVsIG1lbW9yeSBpbmZvcm1hdGlvbiwgbmVlZHMgc2VyaW91cyBzY3J1dGlueS4gVGhlIGFpbSBpcyB0byBleHRyYWN0IGFuZCBmaWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gZGF0YSBhcyBzdHJ1Y3R1cmVkIGJpbmFyeSBkYXRhLiBUaGF0IHNvdW5kcyBpbnRlcmVzdGluZy5cblxuVGhlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBjb25maWcgZW5hYmxlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCB0aGF0J3MgZXhwZWN0ZWQuIFdlIHNob3VsZCBlbnN1cmUgdGhlIG5ldyBgYWxsb2NpbmZvX2lvY3RsYCBhbmQgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgIGNhbGxzIGFyZSByZXNpbGllbnQgdG8gYSBtdWx0aXR1ZGUgb2YgbWFsZm9ybWVkIGFuZCBpbnZhbGlkIGlucHV0cy4gV2Ugc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhcmlvdXMgZnVuY3Rpb25zIHdpdGhpbiB0aGVzZSBpb2N0bHM6IGBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9hdGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X25leHRgLCBgbWF0Y2hlc19maWx0ZXJgLCBgY29kZXRhZ19nZXRfY29udGVudF9pZGAsIGFuZCBgY29kZXRhZ19nZXRfY291bnRgLiAgVGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3MsIGFuZCB0aGV5J3JlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gZXhwbG9yZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYnVmZmVyIG92ZXJmbG93cywgYW5kIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgaW9jdGxzLiBJJ2xsIG5lZWQgdG8gZGV2ZWxvcCBhIGZ1enppbmcgc3RyYXRlZ3kgdGhhdCBmb2N1c2VzIHNwZWNpZmljYWxseSBvbiB0aGVzZSBpZGVudGlmaWVkIGZ1bmN0aW9ucywgdmFyeWluZyBpbnB1dHMsIHNpemVzLCBhbmQgc2VxdWVuY2VzLlxuXG5JJ2xsIGFsc28gZG91YmxlLWNoZWNrIHRoZSBjb25maWdzOyBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBtYWluIG9uZSwgYXMgZXhwZWN0ZWQuIEknbGwgYWxzbyBkb3VibGUgY2hlY2sgYENPTkZJR19DT01QQVRgLCBidXQgdGhhdCdzIGEgZ2VuZXJpYyBvbmUuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQgaWYgd2UncmUgZGVhbGluZyB3aXRoIG9sZGVyIHVzZXJsYW5kLCBhbmQgZnV6eiB0aGF0IHRvby4gTGV0J3MgY2FsbCB0aGlzIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYxNSwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6Mjg6NDUuMDU3NTI5MzU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2Njk2NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NpbmZvX2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9fY29tcGF0X2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfYXRcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dFwiLFxuICAgIFwibWF0Y2hlc19maWx0ZXJcIixcbiAgICBcImNvZGV0YWdfZ2V0X2NvbnRlbnRfaWRcIixcbiAgICBcImNvZGV0YWdfZ2V0X2NvdW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpb2N0bCBpbnRlcmZhY2UgZm9yIGAvcHJvYy9hbGxvY2luZm9gIHRvIGFsbG93IHN0cnVjdHVyZWQgYmluYXJ5IGRhdGEgZXh0cmFjdGlvbiBhbmQgZmlsdGVyaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBkYXRhLiBUaGlzIGlzIGEgbmV3IHVzZXJzcGFjZS1mYWNpbmcgQVBJIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgaGFuZGxlcyBpbnZhbGlkIGlucHV0cywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NpbmZvX2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9fY29tcGF0X2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfYXRcIixcbiAgICBcImFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dFwiLFxuICAgIFwibWF0Y2hlc19maWx0ZXJcIixcbiAgICBcImNvZGV0YWdfZ2V0X2NvbnRlbnRfaWRcIixcbiAgICBcImNvZGV0YWdfZ2V0X2NvdW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpb2N0bCBpbnRlcmZhY2UgZm9yIGAvcHJvYy9hbGxvY2luZm9gIHRvIGFsbG93IHN0cnVjdHVyZWQgYmluYXJ5IGRhdGEgZXh0cmFjdGlvbiBhbmQgZmlsdGVyaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBkYXRhLiBUaGlzIGlzIGEgbmV3IHVzZXJzcGFjZS1mYWNpbmcgQVBJIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgaGFuZGxlcyBpbnZhbGlkIGlucHV0cywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4thq7[1] Phase: Succeeded StartedAt: 2026-07-07 02:29:49 +0000 UTC FinishedAt: 2026-07-07 02:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 02:29:49 +0000 UTC FinishedAt: 2026-07-07 02:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2] Phase: Succeeded StartedAt: 2026-07-07 02:29:49 +0000 UTC FinishedAt: 2026-07-07 06:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 02:29:49 +0000 UTC FinishedAt: 2026-07-07 06:38:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 02:29:49 +0000 UTC FinishedAt: 2026-07-07 02:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 02:29:49 +0000 UTC FinishedAt: 2026-07-07 02:29:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow4thq7/series-workflow4thq7-convert-artifact-1106717073/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 02:30:09 +0000 UTC FinishedAt: 2026-07-07 03:00:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 02:30:09 +0000 UTC FinishedAt: 2026-07-07 03:00:03 +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:*34a8bfc6-8617-4c4a-9f4a-f1d93e7afce6,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-workflow4thq7/series-workflow4thq7-convert-artifact-1106717073/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": "b85de3ab-6a45-4a4a-bcc2-0429066fdc6a", "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-workflow4thq7/series-workflow4thq7-build-action-1328089919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 02:30:09 +0000 UTC FinishedAt: 2026-07-07 02:59:53 +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:*34a8bfc6-8617-4c4a-9f4a-f1d93e7afce6,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-workflow4thq7/series-workflow4thq7-convert-artifact-1106717073/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": "b85de3ab-6a45-4a4a-bcc2-0429066fdc6a", "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-workflow4thq7/series-workflow4thq7-build-action-1328089919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 03:00:03 +0000 UTC FinishedAt: 2026-07-07 03:00:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 03:00:03 +0000 UTC FinishedAt: 2026-07-07 03:00:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 03:00:03 +0000 UTC FinishedAt: 2026-07-07 03:00:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 03:00:03 +0000 UTC FinishedAt: 2026-07-07 03:00:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow4thq7/series-workflow4thq7-convert-artifact-1091321188/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 03:00:13 +0000 UTC FinishedAt: 2026-07-07 03:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 03:00:13 +0000 UTC FinishedAt: 2026-07-07 03:02:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b85de3ab-6a45-4a4a-bcc2-0429066fdc6a,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-workflow4thq7/series-workflow4thq7-build-action-1328089919/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-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 03:02:18 +0000 UTC FinishedAt: 2026-07-07 03:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 03:02:18 +0000 UTC FinishedAt: 2026-07-07 03:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 03:02:18 +0000 UTC FinishedAt: 2026-07-07 03:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 03:02:18 +0000 UTC FinishedAt: 2026-07-07 03:30:47 +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:*34a8bfc6-8617-4c4a-9f4a-f1d93e7afce6,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-workflow4thq7/series-workflow4thq7-convert-artifact-1091321188/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": "4f0ee89b-f980-4293-949b-eaada94e3470", "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-workflow4thq7/series-workflow4thq7-build-action-537544432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 03:02:18 +0000 UTC FinishedAt: 2026-07-07 03:30:37 +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:*34a8bfc6-8617-4c4a-9f4a-f1d93e7afce6,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-workflow4thq7/series-workflow4thq7-convert-artifact-1091321188/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": "4f0ee89b-f980-4293-949b-eaada94e3470", "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-workflow4thq7/series-workflow4thq7-build-action-537544432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 03:30:47 +0000 UTC FinishedAt: 2026-07-07 03:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 03:30:47 +0000 UTC FinishedAt: 2026-07-07 03:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 03:30:47 +0000 UTC FinishedAt: 2026-07-07 03:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 03:30:47 +0000 UTC FinishedAt: 2026-07-07 03:32:43 +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:*4f0ee89b-f980-4293-949b-eaada94e3470,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-workflow4thq7/series-workflow4thq7-build-action-537544432/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-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 03:32:53 +0000 UTC FinishedAt: 2026-07-07 06:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 03:32:53 +0000 UTC FinishedAt: 2026-07-07 06:38:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b85de3ab-6a45-4a4a-bcc2-0429066fdc6a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f0ee89b-f980-4293-949b-eaada94e3470,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-workflow4thq7/series-workflow4thq7-build-action-1328089919/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-workflow4thq7/series-workflow4thq7-build-action-537544432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 03:32:53 +0000 UTC FinishedAt: 2026-07-07 03:33:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 03:32:53 +0000 UTC FinishedAt: 2026-07-07 03:33:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4thq7/series-workflow4thq7-convert-artifact-2362007789/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 03:32:53 +0000 UTC FinishedAt: 2026-07-07 03:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 03:32:53 +0000 UTC FinishedAt: 2026-07-07 03:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 03:32:53 +0000 UTC FinishedAt: 2026-07-07 03:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 03:33:14 +0000 UTC FinishedAt: 2026-07-07 06:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4thq7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl","allocinfo_ioctl_get_content_id","allocinfo_ioctl_get_at","allocinfo_ioctl_get_next","matches_filter","codetag_get_content_id","codetag_get_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d009220c76e1af167492a8912b651e60316b2ca4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"4acae500-50b1-4cb5-9fd6-d09164017d89","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 03:33:14 +0000 UTC FinishedAt: 2026-07-07 06:38:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b85de3ab-6a45-4a4a-bcc2-0429066fdc6a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f0ee89b-f980-4293-949b-eaada94e3470,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-workflow4thq7/series-workflow4thq7-build-action-1328089919/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-workflow4thq7/series-workflow4thq7-build-action-537544432/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-workflow4thq7/series-workflow4thq7-convert-artifact-2362007789/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,}